return mlt_multitrack_track( mlt_tractor_multitrack( this ), index );
}
-static uint8_t *mlt_tractor_alpha_mask( mlt_frame frame )
-{
- return mlt_properties_get_data( mlt_frame_properties( frame ), "alpha", NULL );
-}
-
static int producer_get_image( mlt_frame this, uint8_t **buffer, mlt_image_format *format, int *width, int *height, int writable )
{
uint8_t *data = NULL;
mlt_properties_set_int( frame_properties, "width", mlt_properties_get_int( properties, "width" ) );
mlt_properties_set_int( frame_properties, "height", mlt_properties_get_int( properties, "height" ) );
mlt_properties_set( frame_properties, "rescale.interp", mlt_properties_get( properties, "rescale.interp" ) );
+ if ( mlt_properties_get( properties, "distort" ) )
+ mlt_properties_set( frame_properties, "distort", mlt_properties_get( properties, "distort" ) );
mlt_properties_set_double( frame_properties, "aspect_ratio", mlt_properties_get_double( properties, "aspect_ratio" ) );
mlt_properties_set_double( frame_properties, "consumer_aspect_ratio", mlt_properties_get_double( properties, "consumer_aspect_ratio" ) );
- mlt_properties_set_int( frame_properties, "consumer_progressive", mlt_properties_get_double( properties, "consumer_progressive" ) );
mlt_properties_set_int( frame_properties, "consumer_deinterlace", mlt_properties_get_double( properties, "consumer_deinterlace" ) );
mlt_frame_get_image( frame, buffer, format, width, height, writable );
mlt_properties_set_data( properties, "image", *buffer, *width * *height * 2, NULL, NULL );
mlt_properties_set_int( properties, "width", *width );
mlt_properties_set_int( properties, "height", *height );
mlt_properties_set_double( properties, "aspect_ratio", mlt_frame_get_aspect_ratio( frame ) );
+ mlt_properties_set_int( properties, "progressive", mlt_properties_get_int( frame_properties, "progressive" ) );
+ if ( mlt_properties_get( frame_properties, "distort" ) )
+ mlt_properties_set( properties, "distort", mlt_properties_get( frame_properties, "distort" ) );
data = mlt_frame_get_alpha_mask( frame );
mlt_properties_set_data( properties, "alpha", data, 0, NULL, NULL );
- this->get_alpha_mask = mlt_tractor_alpha_mask;
return 0;
}
// Determine which data_queue to pass on...
void *data_queue = NULL;
+ // Temporary properties
+ mlt_properties temp_properties = NULL;
+
// Get the multitrack's producer
mlt_producer target = mlt_multitrack_producer( multitrack );
mlt_producer_seek( target, mlt_producer_frame( parent ) );
// Get a frame from the producer
mlt_service_get_frame( this->producer, &temp, i );
+ // Get the temporary properties
+ temp_properties = mlt_frame_properties( temp );
+
// Check for last track
- done = mlt_properties_get_int( mlt_frame_properties( temp ), "last_track" );
+ done = mlt_properties_get_int( temp_properties, "last_track" );
// We store all frames with a destructor on the output frame
sprintf( label, "_%s_%d", id, count ++ );
mlt_properties_set_data( frame_properties, label, temp, 0, ( mlt_destructor )mlt_frame_close, NULL );
// We want the last data_queue
- if ( mlt_properties_get_data( mlt_frame_properties( temp ), "data_queue", NULL ) != NULL )
+ if ( !done && mlt_properties_get_data( temp_properties, "data_queue", NULL ) != NULL )
data_queue = mlt_properties_get_data( mlt_frame_properties( temp ), "data_queue", NULL );
// Pick up first video and audio frames
- if ( !done && !mlt_frame_is_test_audio( temp ) && !( mlt_properties_get_int( mlt_frame_properties( temp ), "hide" ) & 2 ) )
+ if ( !done && !mlt_frame_is_test_audio( temp ) && !( mlt_properties_get_int( temp_properties, "hide" ) & 2 ) )
audio = temp;
- if ( !done && !mlt_frame_is_test_card( temp ) && !( mlt_properties_get_int( mlt_frame_properties( temp ), "hide" ) & 1 ) )
+ if ( !done && !mlt_frame_is_test_card( temp ) && !( mlt_properties_get_int( temp_properties, "hide" ) & 1 ) )
video = temp;
}
mlt_properties_set_data( frame_properties, "data_queue", data_queue, 0, NULL, NULL );
mlt_properties_set_int( frame_properties, "width", mlt_properties_get_int( video_properties, "width" ) );
mlt_properties_set_int( frame_properties, "height", mlt_properties_get_int( video_properties, "height" ) );
+ mlt_properties_set_int( frame_properties, "real_width", mlt_properties_get_int( video_properties, "real_width" ) );
+ mlt_properties_set_int( frame_properties, "real_height", mlt_properties_get_int( video_properties, "real_height" ) );
+ mlt_properties_set_int( frame_properties, "progressive", mlt_properties_get_int( video_properties, "progressive" ) );
mlt_properties_set_double( frame_properties, "aspect_ratio", mlt_properties_get_double( video_properties, "aspect_ratio" ) );
}
+ mlt_frame_set_position( *frame, mlt_producer_frame( parent ) );
mlt_properties_set_int( mlt_frame_properties( *frame ), "test_audio", audio == NULL );
mlt_properties_set_int( mlt_frame_properties( *frame ), "test_image", video == NULL );
}