// Hmm - default all consumers to yuv422 :-/
self->format = mlt_image_yuv422;
+ mlt_properties_set( properties, "mlt_image_format", mlt_image_format_name( self->format ) );
+ mlt_properties_set( properties, "mlt_audio_format", mlt_audio_format_name( mlt_audio_s16 ) );
mlt_events_register( properties, "consumer-frame-show", ( mlt_transmitter )mlt_consumer_frame_show );
mlt_events_register( properties, "consumer-frame-render", ( mlt_transmitter )mlt_consumer_frame_render );
if ( abs( self->real_time ) > 1 && mlt_properties_get_int( properties, "buffer" ) <= abs( self->real_time ) )
mlt_properties_set_int( properties, "_buffer", abs( self->real_time ) + 1 );
+ // Get the image format to use for rendering threads
+ const char* format = mlt_properties_get( properties, "mlt_image_format" );
+ if ( format )
+ {
+ if ( !strcmp( format, "rgb24" ) )
+ self->format = mlt_image_rgb24;
+ else if ( !strcmp( format, "rgb24a" ) )
+ self->format = mlt_image_rgb24a;
+ else if ( !strcmp( format, "yuv420p" ) )
+ self->format = mlt_image_yuv420p;
+ else if ( !strcmp( format, "none" ) )
+ self->format = mlt_image_none;
+ else
+ self->format = mlt_image_yuv422;
+ }
+
// Start the service
if ( self->start != NULL )
return self->start( self );
if ( test_card != NULL )
mlt_properties_set_data( frame_properties, "test_card_producer", test_card, 0, NULL, NULL );
- // Attach the rescale property
+ // Pass along the interpolation and deinterlace options
+ // TODO: get rid of consumer_deinterlace and use profile.progressive
mlt_properties_set( frame_properties, "rescale.interp", mlt_properties_get( properties, "rescale" ) );
-
- // Aspect ratio and other jiggery pokery
- mlt_properties_set_double( frame_properties, "consumer_aspect_ratio", mlt_properties_get_double( properties, "aspect_ratio" ) );
mlt_properties_set_int( frame_properties, "consumer_deinterlace", mlt_properties_get_int( properties, "progressive" ) | mlt_properties_get_int( properties, "deinterlace" ) );
mlt_properties_set( frame_properties, "deinterlace_method", mlt_properties_get( properties, "deinterlace_method" ) );
+ mlt_properties_set_int( frame_properties, "consumer_tff", mlt_properties_get_int( properties, "top_field_first" ) );
}
// Return the frame
// Get the audio settings
mlt_audio_format afmt = mlt_audio_s16;
+ const char *format = mlt_properties_get( properties, "mlt_audio_format" );
+ if ( format )
+ {
+ if ( !strcmp( format, "none" ) )
+ afmt = mlt_audio_none;
+ else if ( !strcmp( format, "s32" ) )
+ afmt = mlt_audio_s32;
+ else if ( !strcmp( format, "s32le" ) )
+ afmt = mlt_audio_s32le;
+ else if ( !strcmp( format, "float" ) )
+ afmt = mlt_audio_float;
+ else if ( !strcmp( format, "f32le" ) )
+ afmt = mlt_audio_f32le;
+ }
int counter = 0;
double fps = mlt_properties_get_double( properties, "fps" );
int channels = mlt_properties_get_int( properties, "channels" );