extern "C" __declspec(dllexport) const char* __stdcall AvisynthPluginInit2( IScriptEnvironment* env) { static char avs_name_f[2048]; const char *avs_cmdname = (const char *)csri_query_ext(NULL, "csri.avisynth25.command_name"); const char *avs_name = (const char *)csri_query_ext(NULL, "csri.avisynth25.name"); if (!csri_renderer_default()) return NULL; if (!avs_cmdname) avs_cmdname = "CSRI"; if (!avs_name) avs_name = "Common Subtitle Renderer Interface"; env->AddFunction(avs_cmdname, "cs", CSRIAviSynth::Create, 0); env->AddFunction(avs_cmdname, "css", CSRIAviSynth::Create, 0); env->AddFunction(avs_cmdname, "csss", CSRIAviSynth::Create, 0); snprintf(avs_name_f, sizeof(avs_name_f), "%s [AviSynth 2.5 front-end]", avs_name); return avs_name_f; }
CSRISubtitlesProvider::CSRISubtitlesProvider(std::string type) : instance(nullptr, csri_close) { std::lock_guard<std::mutex> lock(csri_mutex); for (csri_rend *cur = csri_renderer_default(); cur; cur = csri_renderer_next(cur)) { if (type == csri_renderer_info(cur)->name) { renderer = cur; break; } } if (!renderer) throw agi::InternalError("CSRI renderer vanished between initial list and creation?", 0); }
int kCSRI::Open(std::wstring wstr) { // Close if(kInstance) csri_close(kInstance); kInstance = NULL; // CSRI variables csri_rend* renderer = NULL; // Matching renderer not found, fallback to default renderer = csri_renderer_default(); if(!renderer) return 1; // no CSRI // Open from memory std::vector<char> data; SaveMemory(data, wstr); if(data.size() == 0) return 2; // no data kInstance = csri_open_mem(renderer, &data[0], data.size(), NULL); return 0; }