void read_xml(mlt_properties properties) { // Convert file name string encoding. const char *resource = mlt_properties_get( properties, "resource" ); mlt_properties_set( properties, "_resource_utf8", resource ); mlt_properties_from_utf8( properties, "_resource_utf8", "_resource_local8" ); resource = mlt_properties_get( properties, "_resource_local8" ); FILE *f = fopen( resource, "r" ); if ( f != NULL ) { int size = 0; long lSize; if ( fseek (f , 0 , SEEK_END) < 0 ) goto error; lSize = ftell (f); if ( lSize <= 0 ) goto error; rewind (f); char *infile = (char*) mlt_pool_alloc(lSize); if ( infile ) { size = fread(infile,1,lSize,f); if ( size ) { infile[size] = '\0'; mlt_properties_set(properties, "_xmldata", infile); } mlt_pool_release( infile ); } error: fclose(f); } }
mlt_producer producer_pango_init( const char *filename ) { producer_pango this = calloc( 1, sizeof( struct producer_pango_s ) ); if ( this != NULL && mlt_producer_init( &this->parent, this ) == 0 ) { mlt_producer producer = &this->parent; pthread_mutex_lock( &pango_mutex ); if ( fontmap == NULL ) fontmap = (PangoFT2FontMap*) pango_ft2_font_map_new(); g_type_init(); pthread_mutex_unlock( &pango_mutex ); producer->get_frame = producer_get_frame; producer->close = ( mlt_destructor )producer_close; // Get the properties interface mlt_properties properties = MLT_PRODUCER_PROPERTIES( &this->parent ); // Set the default properties mlt_properties_set( properties, "fgcolour", "0xffffffff" ); mlt_properties_set( properties, "bgcolour", "0x00000000" ); mlt_properties_set( properties, "olcolour", "0x00000000" ); mlt_properties_set_int( properties, "align", pango_align_left ); mlt_properties_set_int( properties, "pad", 0 ); mlt_properties_set_int( properties, "outline", 0 ); mlt_properties_set( properties, "text", "" ); mlt_properties_set( properties, "font", NULL ); mlt_properties_set( properties, "family", "Sans" ); mlt_properties_set_int( properties, "size", 48 ); mlt_properties_set( properties, "style", "normal" ); mlt_properties_set( properties, "encoding", "UTF-8" ); mlt_properties_set_int( properties, "weight", PANGO_WEIGHT_NORMAL ); mlt_properties_set_int( properties, "seekable", 1 ); if ( filename == NULL || ( filename && ( !strcmp( filename, "" ) || strstr( filename, "<producer>" ) // workaround for old kdenlive countdown generator || strstr( filename, "<producer>" ) ) ) ) { mlt_properties_set( properties, "markup", "" ); } else if ( filename[ 0 ] == '+' || strstr( filename, "/+" ) ) { char *copy = strdup( filename + 1 ); char *markup = copy; if ( strstr( markup, "/+" ) ) markup = strstr( markup, "/+" ) + 2; if ( strrchr( markup, '.' ) ) ( *strrchr( markup, '.' ) ) = '\0'; while ( strchr( markup, '~' ) ) ( *strchr( markup, '~' ) ) = '\n'; mlt_properties_set( properties, "resource", filename ); mlt_properties_set( properties, "markup", markup ); free( copy ); } else if ( strstr( filename, ".mpl" ) ) { int i = 0; mlt_properties contents = mlt_properties_load( filename ); mlt_geometry key_frames = mlt_geometry_init( ); struct mlt_geometry_item_s item; mlt_properties_set( properties, "resource", filename ); mlt_properties_set_data( properties, "contents", contents, 0, ( mlt_destructor )mlt_properties_close, NULL ); mlt_properties_set_data( properties, "key_frames", key_frames, 0, ( mlt_destructor )mlt_geometry_close, NULL ); // Make sure we have at least one entry if ( mlt_properties_get( contents, "0" ) == NULL ) mlt_properties_set( contents, "0", "" ); for ( i = 0; i < mlt_properties_count( contents ); i ++ ) { char *name = mlt_properties_get_name( contents, i ); char *value = mlt_properties_get_value( contents, i ); while ( value != NULL && strchr( value, '~' ) ) ( *strchr( value, '~' ) ) = '\n'; item.frame = atoi( name ); mlt_geometry_insert( key_frames, &item ); } mlt_geometry_interpolate( key_frames ); } else { // Convert file name string encoding. mlt_properties_set( properties, "resource", filename ); mlt_properties_from_utf8( properties, "resource", "_resource" ); filename = mlt_properties_get( properties, "_resource" ); FILE *f = fopen( filename, "r" ); if ( f != NULL ) { char line[81]; char *markup = NULL; size_t size = 0; line[80] = '\0'; while ( fgets( line, 80, f ) ) { size += strlen( line ) + 1; if ( markup ) { markup = realloc( markup, size ); if ( markup ) strcat( markup, line ); } else { markup = strdup( line ); } } fclose( f ); if ( markup && markup[ strlen( markup ) - 1 ] == '\n' ) markup[ strlen( markup ) - 1 ] = '\0'; if ( markup ) mlt_properties_set( properties, "markup", markup ); else mlt_properties_set( properties, "markup", "" ); free( markup ); } else { producer->close = NULL; mlt_producer_close( producer ); producer = NULL; free( this ); } } return producer; } free( this ); return NULL; }
static void init_apply_data( mlt_filter filter, mlt_frame frame, VSPixelFormat vs_format, int width, int height ) { mlt_properties properties = MLT_FILTER_PROPERTIES( filter ); vs_data* data = (vs_data*)filter->child; vs_apply* apply_data = (vs_apply*)calloc( 1, sizeof(vs_apply) ); char* filename = mlt_properties_get( properties, "results" ); memset( apply_data, 0, sizeof( vs_apply ) ); mlt_log_info( MLT_FILTER_SERVICE(filter), "Load results from %s\n", filename ); // Initialize the VSTransformConfig get_transform_config( &apply_data->conf, filter, frame ); // Initialize VSTransformData VSFrameInfo fi_src, fi_dst; vsFrameInfoInit( &fi_src, width, height, vs_format ); vsFrameInfoInit( &fi_dst, width, height, vs_format ); vsTransformDataInit( &apply_data->td, &apply_data->conf, &fi_src, &fi_dst ); // Initialize VSTransformations vsTransformationsInit( &apply_data->trans ); // Convert file name string encoding. mlt_properties_from_utf8( properties, "results", "_results" ); filename = mlt_properties_get( properties, "_results" ); // Load the motions from the analyze step and convert them to VSTransformations FILE* f = fopen( filename, "r" ); VSManyLocalMotions mlms; if( vsReadLocalMotionsFile( f, &mlms ) == VS_OK ) { int i = 0; mlt_log_info( MLT_FILTER_SERVICE(filter), "Successfully loaded %d motions\n", vs_vector_size( &mlms ) ); vsLocalmotions2Transforms( &apply_data->td, &mlms, &apply_data->trans ); vsPreprocessTransforms( &apply_data->td, &apply_data->trans ); // Free the MultipleLocalMotions for( i = 0; i < vs_vector_size( &mlms ); i++ ) { LocalMotions* lms = (LocalMotions*)vs_vector_get( &mlms, i ); if( lms ) { vs_vector_del( lms ); } } vs_vector_del( &mlms ); data->apply_data = apply_data; } else { mlt_log_error( MLT_FILTER_SERVICE(filter), "Can not read results file: %s\n", filename ); destory_apply_data( apply_data ); data->apply_data = NULL; } if( f ) { fclose( f ); } }
mlt_producer producer_qtext_init( mlt_profile profile, mlt_service_type type, const char *id, char *filename ) { // Create a new producer object mlt_producer producer = mlt_producer_new( profile ); mlt_properties producer_properties = MLT_PRODUCER_PROPERTIES( producer ); // Initialize the producer if ( producer ) { if ( !createQApplicationIfNeeded( MLT_PRODUCER_SERVICE(producer) ) ) { mlt_producer_close( producer ); return NULL; } mlt_properties_set( producer_properties, "text", "" ); mlt_properties_set( producer_properties, "fgcolour", "0xffffffff" ); mlt_properties_set( producer_properties, "bgcolour", "0x00000000" ); mlt_properties_set( producer_properties, "olcolour", "0x00000000" ); mlt_properties_set( producer_properties, "outline", "0" ); mlt_properties_set( producer_properties, "align", "left" ); mlt_properties_set( producer_properties, "pad", "0" ); mlt_properties_set( producer_properties, "family", "Sans" ); mlt_properties_set( producer_properties, "size", "48" ); mlt_properties_set( producer_properties, "style", "normal" ); mlt_properties_set( producer_properties, "weight", "400" ); mlt_properties_set( producer_properties, "encoding", "UTF-8" ); // Parse the filename argument if ( filename == NULL || !strcmp( filename, "" ) || strstr( filename, "<producer>" ) ) { } else if( filename[ 0 ] == '+' || strstr( filename, "/+" ) ) { char *copy = strdup( filename + 1 ); char *tmp = copy; if ( strstr( tmp, "/+" ) ) tmp = strstr( tmp, "/+" ) + 2; if ( strrchr( tmp, '.' ) ) ( *strrchr( tmp, '.' ) ) = '\0'; while ( strchr( tmp, '~' ) ) ( *strchr( tmp, '~' ) ) = '\n'; mlt_properties_set( producer_properties, "text", tmp ); mlt_properties_set( producer_properties, "resource", filename ); free( copy ); } else { // Convert file name string encoding. mlt_properties_set( producer_properties, "resource", filename ); mlt_properties_from_utf8( producer_properties, "resource", "_resource" ); filename = mlt_properties_get( producer_properties, "_resource" ); FILE *f = fopen( filename, "r" ); if ( f != NULL ) { char line[81]; char *tmp = NULL; size_t size = 0; line[80] = '\0'; while ( fgets( line, 80, f ) ) { size += strlen( line ) + 1; if ( tmp ) { tmp = (char*)realloc( tmp, size ); if ( tmp ) strcat( tmp, line ); } else { tmp = strdup( line ); } } fclose( f ); if ( tmp && tmp[ strlen( tmp ) - 1 ] == '\n' ) tmp[ strlen( tmp ) - 1 ] = '\0'; if ( tmp ) mlt_properties_set( producer_properties, "text", tmp ); free( tmp ); } } // Create QT objects to be reused. mlt_properties_set_data( producer_properties, "_qimg", static_cast<void*>( new QImage() ), 0, close_qimg, NULL ); mlt_properties_set_data( producer_properties, "_qpath", static_cast<void*>( new QPainterPath() ), 0, close_qpath, NULL ); // Callback registration producer->get_frame = producer_get_frame; producer->close = ( mlt_destructor )producer_close; } return producer; }