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
* \properties \em display_aspect_num the numerator of the video frame aspect ratio, overrides \p mlt_profile_s
* \properties \em display_aspect_den the denominator of the video frame aspect ratio, overrides \p mlt_profile_s
* \properties \em priority the OS scheduling priority for the render threads when real_time is not 0.
+ * \properties \em top_field_first when not progressive, whether interlace field order is top-field-first, defaults to 0
*/
struct mlt_consumer_s
mlt_properties_set( frame_properties, "deinterlace_method", mlt_properties_get( properties, "deinterlace_method" ) );
mlt_properties_set_int( frame_properties, "normalised_width", mlt_properties_get_int( properties, "normalised_width" ) );
mlt_properties_set_int( frame_properties, "normalised_height", mlt_properties_get_int( properties, "normalised_height" ) );
+ mlt_properties_set_int( frame_properties, "consumer_tff", mlt_properties_get_int( properties, "consumer_tff" ) );
mlt_frame_get_image( frame, buffer, format, width, height, writable );
mlt_frame_set_image( self, *buffer, 0, NULL );
mlt_properties_set_int( properties, "width", *width );
mlt_properties_set_int( properties, "distort", mlt_properties_get_int( frame_properties, "distort" ) );
mlt_properties_set_int( properties, "colorspace", mlt_properties_get_int( frame_properties, "colorspace" ) );
mlt_properties_set_int( properties, "force_full_luma", mlt_properties_get_int( frame_properties, "force_full_luma" ) );
+ mlt_properties_set_int( properties, "top_field_first", mlt_properties_get_int( frame_properties, "top_field_first" ) );
data = mlt_frame_get_alpha_mask( frame );
mlt_properties_get_data( frame_properties, "alpha", &size );
mlt_frame_set_alpha( self, data, size, NULL );
mlt_properties_set_double( b_props, "aspect_ratio", mlt_properties_get_double( a_props, "consumer_aspect_ratio" ) );
mlt_properties_pass_list( b_props, a_props,
- "consumer_deinterlace, deinterlace_method, consumer_aspect_ratio" );
+ "consumer_deinterlace, deinterlace_method, consumer_aspect_ratio, consumer_tff" );
return mlt_frame_get_image( b_frame, image, format, width, height, writable );
}
char *op = mlt_properties_get( MLT_FILTER_PROPERTIES( filter ), "scale" );
int bpp;
int size = mlt_image_format_size( *format, owidth, oheight, &bpp );
+ int tff = mlt_properties_get_int( properties, "consumer_tff" );
// Provides a manual override for misreported field order
if ( mlt_properties_get( properties, "meta.top_field_first" ) )
mlt_properties_set_int( properties, "top_field_first", mlt_properties_get_int( properties, "meta.top_field_first" ) );
// Correct field order if needed
- if ( mlt_properties_get_int( properties, "top_field_first" ) == 1 &&
+ if ( mlt_properties_get_int( properties, "top_field_first" ) != tff &&
mlt_properties_get( properties, "progressive" ) &&
mlt_properties_get_int( properties, "progressive" ) == 0 )
{
*image = new_image;
// Set the normalised field order
- mlt_properties_set_int( properties, "top_field_first", 0 );
- mlt_properties_set_int( properties, "meta.top_field_first", 0 );
+ mlt_properties_set_int( properties, "top_field_first", tff );
+ mlt_properties_set_int( properties, "meta.top_field_first", tff );
}
if ( !strcmp( op, "affine" ) )