X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fgtk2%2Fproducer_pixbuf.c;h=8a1d3a3060756ddce4f6b30754e993d35ca97e96;hb=16c5c516008b9debec7765e34f4756f8063dee7e;hp=f1f1f45fe10d38cfce0342d7fe6e6a249e535acf;hpb=9390e8b584f3f717f0a326893c0e37cf187a0a51;p=melted diff --git a/src/modules/gtk2/producer_pixbuf.c b/src/modules/gtk2/producer_pixbuf.c index f1f1f45..8a1d3a3 100644 --- a/src/modules/gtk2/producer_pixbuf.c +++ b/src/modules/gtk2/producer_pixbuf.c @@ -90,7 +90,7 @@ mlt_producer producer_pixbuf_init( char *filename ) gap ++; } } - mlt_properties_set_timecode( properties, "out", this->count ); + mlt_properties_set_position( properties, "out", this->count * 25 ); } else if ( strstr( filename, "/.all." ) != NULL ) { @@ -117,7 +117,7 @@ mlt_producer producer_pixbuf_init( char *filename ) free( de[ i ] ); } - mlt_properties_set_timecode( properties, "out", this->count ); + mlt_properties_set_position( properties, "out", this->count * 25 ); free( de ); free( dir_name ); } @@ -125,7 +125,7 @@ mlt_producer producer_pixbuf_init( char *filename ) { this->filenames = realloc( this->filenames, sizeof( char * ) * ( this->count + 1 ) ); this->filenames[ this->count ++ ] = strdup( filename ); - mlt_properties_set_timecode( properties, "out", 1 ); + mlt_properties_set_position( properties, "out", 25 ); } // Initialise gobject types @@ -197,14 +197,17 @@ static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int i // Obtain properties of frame mlt_properties properties = mlt_frame_properties( *frame ); + // Obtain properties of producer + mlt_properties producer_props = mlt_producer_properties( producer ); + // Get the time to live for each frame - double ttl = mlt_properties_get_double( mlt_producer_properties( producer ), "ttl" ); + double ttl = mlt_properties_get_double( producer_props, "ttl" ); // Image index int image_idx = ( int )floor( mlt_producer_position( producer ) / ttl ) % this->count; // Update timecode on the frame we're creating - mlt_frame_set_timecode( *frame, mlt_producer_position( producer ) ); + mlt_frame_set_position( *frame, mlt_producer_position( producer ) ); // optimization for subsequent iterations on single picture if ( this->image != NULL && image_idx == this->image_idx ) @@ -213,6 +216,14 @@ static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int i mlt_properties_set_int( properties, "width", this->width ); mlt_properties_set_int( properties, "height", this->height ); + // Set the compositing properties + 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, "image.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, 0, NULL, NULL ); mlt_properties_set_data( properties, "alpha", this->alpha, 0, NULL, NULL ); @@ -292,13 +303,21 @@ static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int i mlt_properties_set_int( properties, "width", this->width ); mlt_properties_set_int( properties, "height", this->height ); + // Set the compositing properties + 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" ) ); + // Pass alpha and image on properties with or without destructor this->image = image; this->alpha = alpha; // pass the image and alpha data without destructor - mlt_properties_set_data( properties, "image", image, 0, NULL, NULL ); - mlt_properties_set_data( properties, "alpha", alpha, 0, NULL, NULL ); + mlt_properties_set_data( properties, "image", image, this->width * this->height * 2, NULL, NULL ); + mlt_properties_set_data( properties, "alpha", alpha, this->width * this->height, NULL, NULL ); // Set alpha call back ( *frame )->get_alpha_mask = producer_get_alpha_mask;