}
-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;
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 );
gap ++;
}
}
+ mlt_properties_set_position( properties, "out", this->count * 25 );
}
else if ( strstr( filename, "/.all." ) != NULL )
{
free( de[ i ] );
}
+ mlt_properties_set_position( properties, "out", this->count * 25 );
free( de );
free( dir_name );
}
{
this->filenames = realloc( this->filenames, sizeof( char * ) * ( this->count + 1 ) );
this->filenames[ this->count ++ ] = strdup( filename );
+ mlt_properties_set_position( properties, "out", 25 );
}
// Initialise gobject types
// 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 )
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 );
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;