void mlt_service_cache_purge( mlt_service self ) { mlt_properties caches = mlt_properties_get_data( mlt_global_properties(), "caches", NULL ); if ( caches ) { int i = mlt_properties_count( caches ); while ( i-- ) { mlt_cache_purge( mlt_properties_get_data_at( caches, i, NULL ), self ); mlt_properties_set_data( mlt_global_properties(), mlt_properties_get_name( caches, i ), NULL, 0, NULL, NULL ); } } }
static mlt_cache get_cache( mlt_service self, const char *name ) { mlt_cache result = NULL; mlt_properties caches = mlt_properties_get_data( mlt_global_properties(), "caches", NULL ); if ( !caches ) { caches = mlt_properties_new(); mlt_properties_set_data( mlt_global_properties(), "caches", caches, 0, ( mlt_destructor )mlt_properties_close, NULL ); } if ( caches ) { result = mlt_properties_get_data( caches, name, NULL ); if ( !result ) { result = mlt_cache_init(); mlt_properties_set_data( caches, name, result, 0, ( mlt_destructor )mlt_cache_close, NULL ); } } return result; }
bool createQApplicationIfNeeded(mlt_service service) { if (!qApp) { #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) XInitThreads(); if (getenv("DISPLAY") == 0) { mlt_log_error(service, "The MLT Qt module requires a X11 environment.\n" "Please either run melt from an X session or use a fake X server like xvfb:\n" "xvfb-run -a melt (...)\n" ); return false; } #endif if (!mlt_properties_get(mlt_global_properties(), "qt_argv")) mlt_properties_set(mlt_global_properties(), "qt_argv", "MLT"); static int argc = 1; static char* argv[] = { mlt_properties_get(mlt_global_properties(), "Qt argv") }; new QApplication(argc, argv); const char *localename = mlt_properties_get_lcnumeric(MLT_SERVICE_PROPERTIES(service)); QLocale::setDefault(QLocale(localename)); } return true; }
GlslManager::GlslManager() : Mlt::Filter( mlt_filter_new() ) , pbo(0) , initEvent(0) , closeEvent(0) { mlt_filter filter = get_filter(); if ( filter ) { // Set the mlt_filter child in case we choose to override virtual functions. filter->child = this; mlt_properties_set_data(mlt_global_properties(), "glslManager", this, 0, (mlt_destructor) deleteManager, NULL); mlt_events_register( get_properties(), "init glsl", NULL ); mlt_events_register( get_properties(), "close glsl", NULL ); initEvent = listen("init glsl", this, (mlt_listener) GlslManager::onInit); closeEvent = listen("close glsl", this, (mlt_listener) GlslManager::onClose); } }
GlslManager* GlslManager::get_instance() { return (GlslManager*) mlt_properties_get_data(mlt_global_properties(), "glslManager", 0); }
static void * load_lib( mlt_profile profile, mlt_service_type type , void* handle, const char *name ){ int i=0; void (*f0r_get_plugin_info)(f0r_plugin_info_t*), *f0r_construct , *f0r_update , *f0r_destruct, (*f0r_get_param_info)(f0r_param_info_t* info, int param_index), (*f0r_init)(void) , *f0r_deinit , (*f0r_set_param_value)(f0r_instance_t instance, f0r_param_t param, int param_index), (*f0r_get_param_value)(f0r_instance_t instance, f0r_param_t param, int param_index), (*f0r_update2) (f0r_instance_t instance, double time, const uint32_t* inframe1, const uint32_t* inframe2,const uint32_t* inframe3, uint32_t* outframe); if ( ( f0r_construct = dlsym(handle, "f0r_construct") ) && (f0r_destruct = dlsym(handle,"f0r_destruct") ) && (f0r_get_plugin_info = dlsym(handle,"f0r_get_plugin_info") ) && (f0r_get_param_info = dlsym(handle,"f0r_get_param_info") ) && (f0r_set_param_value= dlsym(handle,"f0r_set_param_value" ) ) && (f0r_get_param_value= dlsym(handle,"f0r_get_param_value" ) ) && (f0r_init= dlsym(handle,"f0r_init" ) ) && (f0r_deinit= dlsym(handle,"f0r_deinit" ) ) ){ f0r_update=dlsym(handle,"f0r_update"); f0r_update2=dlsym(handle,"f0r_update2"); f0r_plugin_info_t info; f0r_get_plugin_info(&info); void* ret=NULL; mlt_properties properties=NULL; char minor[12]; if (type == producer_type && info.plugin_type == F0R_PLUGIN_TYPE_SOURCE ){ mlt_producer this = mlt_producer_new( profile ); if ( this != NULL ) { this->get_frame = producer_get_frame; this->close = ( mlt_destructor )producer_close; f0r_init(); properties=MLT_PRODUCER_PROPERTIES ( this ); for (i=0;i<info.num_params;i++){ f0r_param_info_t pinfo; f0r_get_param_info(&pinfo,i); } ret=this; } } else if (type == filter_type && info.plugin_type == F0R_PLUGIN_TYPE_FILTER ){ mlt_filter this = mlt_filter_new( ); if ( this != NULL ) { this->process = filter_process; this->close = filter_close; f0r_init(); properties=MLT_FILTER_PROPERTIES ( this ); for (i=0;i<info.num_params;i++){ f0r_param_info_t pinfo; f0r_get_param_info(&pinfo,i); } ret=this; } }else if (type == transition_type && info.plugin_type == F0R_PLUGIN_TYPE_MIXER2){ mlt_transition transition = mlt_transition_new( ); if ( transition != NULL ) { transition->process = transition_process; transition->close = transition_close; properties=MLT_TRANSITION_PROPERTIES( transition ); mlt_properties_set_int(properties, "_transition_type", 1 ); ret=transition; } } check_thread_safe( properties, name ); mlt_properties_set_data(properties, "_dlclose_handle", handle , sizeof ( handle ) , NULL , NULL ); mlt_properties_set_data(properties, "_dlclose", dlclose , sizeof (void*) , NULL , NULL ); mlt_properties_set_data(properties, "f0r_construct", f0r_construct , sizeof( f0r_construct ),NULL,NULL); mlt_properties_set_data(properties, "f0r_update", f0r_update , sizeof( f0r_update ),NULL,NULL); if (f0r_update2) mlt_properties_set_data(properties, "f0r_update2", f0r_update2 , sizeof( f0r_update2 ),NULL,NULL); mlt_properties_set_data(properties, "f0r_destruct", f0r_destruct , sizeof( f0r_destruct ),NULL,NULL); mlt_properties_set_data(properties, "f0r_get_plugin_info", f0r_get_plugin_info , sizeof(void*),NULL,NULL); mlt_properties_set_data(properties, "f0r_get_param_info", f0r_get_param_info , sizeof(void*),NULL,NULL); mlt_properties_set_data(properties, "f0r_set_param_value", f0r_set_param_value , sizeof(void*),NULL,NULL); mlt_properties_set_data(properties, "f0r_get_param_value", f0r_get_param_value , sizeof(void*),NULL,NULL); // Let frei0r plugin version be serialized using same format as metadata snprintf( minor, sizeof( minor ), "%d", info.minor_version ); mlt_properties_set_double( properties, "version", info.major_version + info.minor_version / pow( 10, strlen( minor ) ) ); // Use the global param name map for backwards compatibility when // param names change and setting frei0r params by name instead of index. mlt_properties param_name_map = mlt_properties_get_data( mlt_global_properties(), "frei0r.param_name_map", NULL ); if ( param_name_map ) { // Lookup my plugin in the map param_name_map = mlt_properties_get_data( param_name_map, name, NULL ); mlt_properties_set_data( properties, "_param_name_map", param_name_map, 0, NULL, NULL ); } return ret; }else{ mlt_log_error( NULL, "frei0r plugin \"%s\" is missing a function\n", name ); dlerror(); } return NULL; }