Example #1
0
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);
}
Example #3
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;
}