X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fframework%2Fmlt_transition.c;h=86a57d4ea4cf30ab5b4ce444986940e7cf0f07a9;hb=3181f81620bdd95bec5555f70fbb344a7cfaed5b;hp=9be9e765934296e03ee973ec56fc8d1211d9ad09;hpb=6c1530529b06c36dc74aac6c32067c71c7133105;p=mlt diff --git a/src/framework/mlt_transition.c b/src/framework/mlt_transition.c index 9be9e765..86a57d4e 100644 --- a/src/framework/mlt_transition.c +++ b/src/framework/mlt_transition.c @@ -285,7 +285,7 @@ double mlt_transition_get_progress_delta( mlt_transition self, mlt_frame frame ) double length = out - in + 1; double x = ( double ) ( position - in ) / length; double y = ( double ) ( position + 1 - in ) / length; - progress = length * ( y - x ) / 2.0; + progress = ( y - x ) / 2.0; } return progress; } @@ -311,6 +311,7 @@ mlt_frame mlt_transition_process( mlt_transition self, mlt_frame a_frame, mlt_fr static int get_image_a( mlt_frame a_frame, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable ) { + mlt_transition self = mlt_frame_pop_service( a_frame ); mlt_properties a_props = MLT_FRAME_PROPERTIES( a_frame ); // All transitions get scaling @@ -319,14 +320,15 @@ static int get_image_a( mlt_frame a_frame, uint8_t **image, mlt_image_format *fo mlt_properties_set( a_props, "rescale.interp", "nearest" ); // Ensure sane aspect ratio - if ( mlt_properties_get_double( a_props, "aspect_ratio" ) == 0.0 ) - mlt_properties_set_double( a_props, "aspect_ratio", mlt_properties_get_double( a_props, "consumer_aspect_ratio" ) ); + if ( mlt_frame_get_aspect_ratio( a_frame ) == 0.0 ) + mlt_frame_set_aspect_ratio( a_frame, mlt_profile_sar( mlt_service_profile( MLT_TRANSITION_SERVICE(self) ) ) ); return mlt_frame_get_image( a_frame, image, format, width, height, writable ); } static int get_image_b( mlt_frame b_frame, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable ) { + mlt_transition self = mlt_frame_pop_service( b_frame ); mlt_frame a_frame = mlt_frame_pop_frame( b_frame ); mlt_properties a_props = MLT_FRAME_PROPERTIES( a_frame ); mlt_properties b_props = MLT_FRAME_PROPERTIES( b_frame ); @@ -341,11 +343,11 @@ static int get_image_b( mlt_frame b_frame, uint8_t **image, mlt_image_format *fo } // Ensure sane aspect ratio - if ( mlt_properties_get_double( b_props, "aspect_ratio" ) == 0.0 ) - mlt_properties_set_double( b_props, "aspect_ratio", mlt_properties_get_double( a_props, "consumer_aspect_ratio" ) ); + if ( mlt_frame_get_aspect_ratio( b_frame ) == 0.0 ) + mlt_frame_set_aspect_ratio( b_frame, mlt_profile_sar( mlt_service_profile( MLT_TRANSITION_SERVICE(self) ) ) ); mlt_properties_pass_list( b_props, a_props, - "consumer_deinterlace, deinterlace_method, consumer_aspect_ratio" ); + "consumer_deinterlace, deinterlace_method, consumer_tff" ); return mlt_frame_get_image( b_frame, image, format, width, height, writable ); } @@ -469,7 +471,7 @@ static int transition_get_frame( mlt_service service, mlt_frame_ptr frame, int i } // Finally, process the a and b frames - if ( active ) + if ( active && !mlt_properties_get_int( MLT_TRANSITION_PROPERTIES( self ), "disable" ) ) { mlt_frame a_frame_ptr = self->frames[ !reverse_order ? a_frame : b_frame ]; mlt_frame b_frame_ptr = self->frames[ !reverse_order ? b_frame : a_frame ]; @@ -478,8 +480,10 @@ static int transition_get_frame( mlt_service service, mlt_frame_ptr frame, int i if ( !( a_hide & type ) && !( b_hide & type ) ) { // Add hooks for pre-processing frames + mlt_frame_push_service( a_frame_ptr, self ); mlt_frame_push_get_image( a_frame_ptr, get_image_a ); mlt_frame_push_frame( b_frame_ptr, a_frame_ptr ); + mlt_frame_push_service( b_frame_ptr, self ); mlt_frame_push_get_image( b_frame_ptr, get_image_b ); // Process the transition