X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fgtk2%2Fproducer_pixbuf.c;h=04a9e64a66e768b3b4440b3612c9963c5de530af;hb=7c518e80321a87a22d2e48835442c9f5b70dcd17;hp=06b32c652d76c132d1bb50a781d29c1eea4b62d9;hpb=35aa3217c6ad838d1612875e3efdb0c99e4fd639;p=melted diff --git a/src/modules/gtk2/producer_pixbuf.c b/src/modules/gtk2/producer_pixbuf.c index 06b32c6..04a9e64 100644 --- a/src/modules/gtk2/producer_pixbuf.c +++ b/src/modules/gtk2/producer_pixbuf.c @@ -49,10 +49,10 @@ static int filter_files( const struct dirent *de ) } -mlt_producer producer_pixbuf_init( const char *filename ) +mlt_producer producer_pixbuf_init( char *filename ) { producer_pixbuf this = calloc( sizeof( struct producer_pixbuf_s ), 1 ); - if ( this != NULL && mlt_producer_init( &this->parent, this ) == 0 ) + if ( filename != NULL && this != NULL && mlt_producer_init( &this->parent, this ) == 0 ) { mlt_producer producer = &this->parent; @@ -63,6 +63,7 @@ mlt_producer producer_pixbuf_init( const char *filename ) mlt_properties properties = mlt_producer_properties( &this->parent ); // Set the default properties + mlt_properties_set( properties, "resource", filename ); mlt_properties_set_int( properties, "video_standard", mlt_video_standard_pal ); mlt_properties_set_double( properties, "ttl", 5 ); @@ -89,8 +90,7 @@ mlt_producer producer_pixbuf_init( const char *filename ) gap ++; } } - mlt_properties_set_timecode( properties, "out", this->count ); - mlt_properties_set_timecode( properties, "playtime", this->count ); + mlt_properties_set_position( properties, "out", this->count * 25 ); } else if ( strstr( filename, "/.all." ) != NULL ) { @@ -117,8 +117,7 @@ mlt_producer producer_pixbuf_init( const char *filename ) free( de[ i ] ); } - mlt_properties_set_timecode( properties, "out", this->count ); - mlt_properties_set_timecode( properties, "playtime", this->count ); + mlt_properties_set_position( properties, "out", this->count * 25 ); free( de ); free( dir_name ); } @@ -126,8 +125,7 @@ mlt_producer producer_pixbuf_init( const 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_timecode( properties, "playtime", 1 ); + mlt_properties_set_position( properties, "out", 25 ); } // Initialise gobject types @@ -199,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 ) @@ -215,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, "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 ); @@ -294,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;