From: ddennedy Date: Mon, 12 Jan 2004 03:21:35 +0000 (+0000) Subject: better propogating of producer and transition properties to the frame in pango and... X-Git-Url: http://research.m1stereo.tv/gitweb?a=commitdiff_plain;h=bcc23ff73c82655a8cec6603112b9ff54c2ca3d6;hp=f5778b64f410f048403d510c1f950e3ac5132734;p=melted better propogating of producer and transition properties to the frame in pango and composite; add pango support to inigo git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@58 d19143bc-622f-0410-bfdd-b5b2a6649095 --- diff --git a/mlt/src/inigo/inigo.c b/mlt/src/inigo/inigo.c index 29465db..5fd647a 100644 --- a/mlt/src/inigo/inigo.c +++ b/mlt/src/inigo/inigo.c @@ -27,6 +27,8 @@ mlt_producer create_producer( char *file ) result = mlt_factory_producer( "pixbuf", file ); else if ( strstr( file, ".png" ) ) result = mlt_factory_producer( "pixbuf", file ); + else if ( strstr( file, ".txt" ) ) + result = mlt_factory_producer( "pango", file ); // 2nd Line fallbacks if ( result == NULL && strstr( file, ".dv" ) ) diff --git a/mlt/src/modules/core/transition_composite.c b/mlt/src/modules/core/transition_composite.c index f56c677..7bcdfa9 100644 --- a/mlt/src/modules/core/transition_composite.c +++ b/mlt/src/modules/core/transition_composite.c @@ -81,6 +81,17 @@ static mlt_frame composite_process( mlt_transition this, mlt_frame a_frame, mlt_ { mlt_frame_push_get_image( a_frame, transition_get_image ); mlt_frame_push_frame( a_frame, b_frame ); + + // Propogate the transition properties to the b frame + mlt_properties properties = mlt_transition_properties( this ); + mlt_properties b_props = mlt_frame_properties( b_frame ); + if ( mlt_properties_get( properties, "x" ) != NULL ) + mlt_properties_set_int( b_props, "x", mlt_properties_get_int( properties, "x" ) ); + if ( mlt_properties_get( properties, "y" ) != NULL ) + mlt_properties_set_int( b_props, "y", mlt_properties_get_int( properties, "y" ) ); + if ( mlt_properties_get( properties, "mix" ) != NULL ) + mlt_properties_set_double( b_props, "mix", mlt_properties_get_double( properties, "mix" ) ); + return a_frame; } diff --git a/mlt/src/modules/gtk2/producer_pango.c b/mlt/src/modules/gtk2/producer_pango.c index 6609ce9..752ed4a 100644 --- a/mlt/src/modules/gtk2/producer_pango.c +++ b/mlt/src/modules/gtk2/producer_pango.c @@ -55,7 +55,7 @@ static void pango_draw_background( GdkPixbuf *pixbuf, rgba_color bg ); static GdkPixbuf *pango_get_pixbuf( const char *markup, const char *text, const char *font, rgba_color fg, rgba_color bg, int pad, int align ); -mlt_producer producer_pango_init( const char *markup ) +mlt_producer producer_pango_init( const char *filename ) { producer_pango this = calloc( sizeof( struct producer_pango_s ), 1 ); if ( this != NULL && mlt_producer_init( &this->parent, this ) == 0 ) @@ -77,14 +77,52 @@ mlt_producer producer_pango_init( const char *markup ) mlt_properties_set_int( properties, "bgcolor", 0x00000000 ); mlt_properties_set_int( properties, "align", pango_align_left ); mlt_properties_set_int( properties, "pad", 0 ); - mlt_properties_set( properties, "markup", ( char * ) ( markup == NULL ? "" : markup ) ); mlt_properties_set( properties, "text", "" ); mlt_properties_set( properties, "font", "Sans 48" ); mlt_properties_set_int( properties, "x", 0 ); mlt_properties_set_int( properties, "y", 0 ); mlt_properties_set_double( properties, "mix", 1.0 ); - mlt_properties_set( properties, "resource", "pango" ); + if ( filename == NULL ) + { + mlt_properties_set( properties, "resource", "pango" ); + mlt_properties_set( properties, "markup", "" ); + } + else + { + 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 ) + { + realloc( markup, size ); + strcat( markup, line ); + } + else + { + markup = strdup( line ); + } + } + fclose( f ); + mlt_properties_set( properties, "resource", ( char * ) filename ); + mlt_properties_set( properties, "markup", ( char * ) ( markup == NULL ? "" : markup ) ); + if ( markup ) + free( markup ); + } + else + { + mlt_properties_set( properties, "resource", "pango" ); + mlt_properties_set( properties, "markup", "" ); + } + } return producer; } @@ -283,9 +321,12 @@ static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int i mlt_properties_set_int( properties, "height", this->height ); // Set the compositing properties - mlt_properties_set_int( properties, "x", mlt_properties_get_int( producer_props, "x" ) ); - mlt_properties_set_int( properties, "y", mlt_properties_get_int( producer_props, "y" ) ); - mlt_properties_set_double( properties, "mix", mlt_properties_get_double( producer_props, "mix" ) ); + if ( mlt_properties_get( producer_props, "x" ) != NULL ) + mlt_properties_set_int( properties, "x", mlt_properties_get_int( producer_props, "x" ) ); + if ( mlt_properties_get( producer_props, "y" ) != NULL ) + mlt_properties_set_int( properties, "y", mlt_properties_get_int( producer_props, "y" ) ); + if ( mlt_properties_get( producer_props, "mix" ) != NULL ) + mlt_properties_set_double( properties, "mix", mlt_properties_get_double( producer_props, "mix" ) ); // if picture sequence pass the image and alpha data without destructor mlt_properties_set_data( properties, "image", this->image, this->width * this->height * 2, NULL, NULL ); diff --git a/mlt/src/modules/gtk2/producer_pango.h b/mlt/src/modules/gtk2/producer_pango.h index ade1977..fbed05c 100644 --- a/mlt/src/modules/gtk2/producer_pango.h +++ b/mlt/src/modules/gtk2/producer_pango.h @@ -32,6 +32,6 @@ typedef enum pango_align_right } pango_align; -extern mlt_producer producer_pango_init( const char *markup ); +extern mlt_producer producer_pango_init( const char *filename ); #endif diff --git a/src/inigo/inigo.c b/src/inigo/inigo.c index 29465db..5fd647a 100644 --- a/src/inigo/inigo.c +++ b/src/inigo/inigo.c @@ -27,6 +27,8 @@ mlt_producer create_producer( char *file ) result = mlt_factory_producer( "pixbuf", file ); else if ( strstr( file, ".png" ) ) result = mlt_factory_producer( "pixbuf", file ); + else if ( strstr( file, ".txt" ) ) + result = mlt_factory_producer( "pango", file ); // 2nd Line fallbacks if ( result == NULL && strstr( file, ".dv" ) ) diff --git a/src/modules/core/transition_composite.c b/src/modules/core/transition_composite.c index f56c677..7bcdfa9 100644 --- a/src/modules/core/transition_composite.c +++ b/src/modules/core/transition_composite.c @@ -81,6 +81,17 @@ static mlt_frame composite_process( mlt_transition this, mlt_frame a_frame, mlt_ { mlt_frame_push_get_image( a_frame, transition_get_image ); mlt_frame_push_frame( a_frame, b_frame ); + + // Propogate the transition properties to the b frame + mlt_properties properties = mlt_transition_properties( this ); + mlt_properties b_props = mlt_frame_properties( b_frame ); + if ( mlt_properties_get( properties, "x" ) != NULL ) + mlt_properties_set_int( b_props, "x", mlt_properties_get_int( properties, "x" ) ); + if ( mlt_properties_get( properties, "y" ) != NULL ) + mlt_properties_set_int( b_props, "y", mlt_properties_get_int( properties, "y" ) ); + if ( mlt_properties_get( properties, "mix" ) != NULL ) + mlt_properties_set_double( b_props, "mix", mlt_properties_get_double( properties, "mix" ) ); + return a_frame; } diff --git a/src/modules/gtk2/producer_pango.c b/src/modules/gtk2/producer_pango.c index 6609ce9..752ed4a 100644 --- a/src/modules/gtk2/producer_pango.c +++ b/src/modules/gtk2/producer_pango.c @@ -55,7 +55,7 @@ static void pango_draw_background( GdkPixbuf *pixbuf, rgba_color bg ); static GdkPixbuf *pango_get_pixbuf( const char *markup, const char *text, const char *font, rgba_color fg, rgba_color bg, int pad, int align ); -mlt_producer producer_pango_init( const char *markup ) +mlt_producer producer_pango_init( const char *filename ) { producer_pango this = calloc( sizeof( struct producer_pango_s ), 1 ); if ( this != NULL && mlt_producer_init( &this->parent, this ) == 0 ) @@ -77,14 +77,52 @@ mlt_producer producer_pango_init( const char *markup ) mlt_properties_set_int( properties, "bgcolor", 0x00000000 ); mlt_properties_set_int( properties, "align", pango_align_left ); mlt_properties_set_int( properties, "pad", 0 ); - mlt_properties_set( properties, "markup", ( char * ) ( markup == NULL ? "" : markup ) ); mlt_properties_set( properties, "text", "" ); mlt_properties_set( properties, "font", "Sans 48" ); mlt_properties_set_int( properties, "x", 0 ); mlt_properties_set_int( properties, "y", 0 ); mlt_properties_set_double( properties, "mix", 1.0 ); - mlt_properties_set( properties, "resource", "pango" ); + if ( filename == NULL ) + { + mlt_properties_set( properties, "resource", "pango" ); + mlt_properties_set( properties, "markup", "" ); + } + else + { + 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 ) + { + realloc( markup, size ); + strcat( markup, line ); + } + else + { + markup = strdup( line ); + } + } + fclose( f ); + mlt_properties_set( properties, "resource", ( char * ) filename ); + mlt_properties_set( properties, "markup", ( char * ) ( markup == NULL ? "" : markup ) ); + if ( markup ) + free( markup ); + } + else + { + mlt_properties_set( properties, "resource", "pango" ); + mlt_properties_set( properties, "markup", "" ); + } + } return producer; } @@ -283,9 +321,12 @@ static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int i mlt_properties_set_int( properties, "height", this->height ); // Set the compositing properties - mlt_properties_set_int( properties, "x", mlt_properties_get_int( producer_props, "x" ) ); - mlt_properties_set_int( properties, "y", mlt_properties_get_int( producer_props, "y" ) ); - mlt_properties_set_double( properties, "mix", mlt_properties_get_double( producer_props, "mix" ) ); + if ( mlt_properties_get( producer_props, "x" ) != NULL ) + mlt_properties_set_int( properties, "x", mlt_properties_get_int( producer_props, "x" ) ); + if ( mlt_properties_get( producer_props, "y" ) != NULL ) + mlt_properties_set_int( properties, "y", mlt_properties_get_int( producer_props, "y" ) ); + if ( mlt_properties_get( producer_props, "mix" ) != NULL ) + mlt_properties_set_double( properties, "mix", mlt_properties_get_double( producer_props, "mix" ) ); // if picture sequence pass the image and alpha data without destructor mlt_properties_set_data( properties, "image", this->image, this->width * this->height * 2, NULL, NULL ); diff --git a/src/modules/gtk2/producer_pango.h b/src/modules/gtk2/producer_pango.h index ade1977..fbed05c 100644 --- a/src/modules/gtk2/producer_pango.h +++ b/src/modules/gtk2/producer_pango.h @@ -32,6 +32,6 @@ typedef enum pango_align_right } pango_align; -extern mlt_producer producer_pango_init( const char *markup ); +extern mlt_producer producer_pango_init( const char *filename ); #endif