X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fcore%2Ffilter_watermark.c;h=aee35ed3ed43f690b76fc092a4fcdad9460fc39f;hb=90da79f8e465d43102645de7323d15c12801515f;hp=cfd9e82e857d9de8433484df81308344e4cebcca;hpb=091e9065c24ede24d42c2a473a9c6f1e6d837f47;p=melted diff --git a/src/modules/core/filter_watermark.c b/src/modules/core/filter_watermark.c index cfd9e82..aee35ed 100644 --- a/src/modules/core/filter_watermark.c +++ b/src/modules/core/filter_watermark.c @@ -74,6 +74,9 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format // Pass all the composite. properties on the filter down mlt_properties_pass( composite_properties, properties, "composite." ); + + // Force a refresh + mlt_properties_set_int( composite_properties, "refresh", 1 ); } // Create a producer if don't have one @@ -139,7 +142,17 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format // Set the b frame to be in the same position and have same consumer requirements mlt_frame_set_position( b_frame, position ); mlt_properties_set_double( b_props, "consumer_aspect_ratio", mlt_properties_get_double( a_props, "consumer_aspect_ratio" ) ); - mlt_properties_set_int( b_props, "consumer_progressive", mlt_properties_get_double( a_props, "consumer_progressive" ) ); + mlt_properties_set_int( b_props, "consumer_deinterlace", mlt_properties_get_double( a_props, "consumer_deinterlace" ) ); + + mlt_properties_set_int( b_props, "normalised_width", mlt_properties_get_int( a_props, "normalised_width" ) ); + mlt_properties_set_int( b_props, "normalised_height", mlt_properties_get_int( a_props, "normalised_height" ) ); + + if ( mlt_properties_get_int( properties, "distort" ) ) + { + mlt_properties_set( mlt_transition_properties( composite ), "distort", "true" ); + mlt_properties_set( a_props, "distort", "true" ); + mlt_properties_set( b_props, "distort", "true" ); + } if ( mlt_properties_get_int( properties, "reverse" ) == 0 ) { @@ -154,15 +167,28 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format } else { + char temp[ 132 ]; + int count = 0; + uint8_t *alpha = NULL; mlt_transition_process( composite, b_frame, frame ); + mlt_properties_set_double( b_props, "consumer_aspect_ratio", mlt_properties_get_int( a_props, "consumer_aspect_ratio" ) ); + mlt_properties_set_int( a_props, "consumer_deinterlace", 1 ); + mlt_properties_set_int( b_props, "consumer_deinterlace", 1 ); mlt_properties_set( a_props, "rescale.interp", "nearest" ); mlt_properties_set( b_props, "rescale.interp", "nearest" ); - mlt_service_apply_filters( mlt_filter_service( this ), frame, 0 ); + mlt_service_apply_filters( mlt_filter_service( this ), b_frame, 0 ); error = mlt_frame_get_image( b_frame, image, format, width, height, 1 ); - mlt_properties_set_data( b_props, "image", *image, 0, NULL, NULL ); - mlt_properties_set_data( a_props, "image", *image, *width * *height * 2, mlt_pool_release, NULL ); + alpha = mlt_frame_get_alpha_mask( b_frame ); + mlt_properties_set_data( a_props, "image", *image, *width * *height * 2, NULL, NULL ); + mlt_properties_set_data( a_props, "alpha", alpha, *width * *height, NULL, NULL ); mlt_properties_set_int( a_props, "width", *width ); mlt_properties_set_int( a_props, "height", *height ); + mlt_properties_set_int( a_props, "progressive", 1 ); + mlt_properties_inc_ref( b_props ); + strcpy( temp, "_b_frame" ); + while( mlt_properties_get_data( a_props, temp, NULL ) != NULL ) + sprintf( temp, "_b_frame%d", count ++ ); + mlt_properties_set_data( a_props, temp, b_frame, 0, ( mlt_destructor )mlt_frame_close, NULL ); } }