From: lilo_booter Date: Wed, 22 Sep 2004 07:27:43 +0000 (+0000) Subject: In/out point handling on attached filters revisted X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=37149069e20cb4042ba1eb722a35b59cb946966e;p=mlt In/out point handling on attached filters revisted git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@433 d19143bc-622f-0410-bfdd-b5b2a6649095 --- diff --git a/src/framework/mlt_service.c b/src/framework/mlt_service.c index 9ea9b668..e91e4415 100644 --- a/src/framework/mlt_service.c +++ b/src/framework/mlt_service.c @@ -281,12 +281,12 @@ void mlt_service_apply_filters( mlt_service this, mlt_frame frame, int index ) mlt_properties properties = mlt_filter_properties( base->filters[ i ] ); mlt_position in = mlt_properties_get_position( properties, "in" ); mlt_position out = mlt_properties_get_position( properties, "out" ); - if ( ( in == 0 && out == 0 ) || ( position >= in && position <= out ) ) + if ( ( in == 0 && out == 0 ) || ( position >= in && ( position <= out || out == 0 ) ) ) { - mlt_properties_set_position( frame_properties, "_position", position - in ); mlt_filter_process( base->filters[ i ], frame ); + mlt_properties_set_position( frame_properties, "_position", position - in ); mlt_service_apply_filters( mlt_filter_service( base->filters[ i ] ), frame, index + 1 ); - mlt_properties_set_position( frame_properties, "_position", position + in ); + mlt_properties_set_position( frame_properties, "_position", position ); } } } diff --git a/src/modules/core/filter_watermark.c b/src/modules/core/filter_watermark.c index f4a87ea6..33df73a2 100644 --- a/src/modules/core/filter_watermark.c +++ b/src/modules/core/filter_watermark.c @@ -132,6 +132,9 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format // Get the b frame and process with composite if successful if ( mlt_service_get_frame( service, &b_frame, 0 ) == 0 ) { + // Set the b frame to be in the same position + mlt_frame_set_position( b_frame, position ); + if ( mlt_properties_get_int( properties, "reverse" ) == 0 ) { // Apply all filters that are attached to this filter to the b frame @@ -150,7 +153,7 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format mlt_transition_process( composite, b_frame, frame ); mlt_properties_set( a_props, "rescale.interp", "nearest" ); mlt_properties_set( b_props, "rescale.interp", "nearest" ); - mlt_properties_set_int( b_props, "consumer_aspect_ratio", 1 ); + mlt_properties_set_int( b_props, "consumer_aspect_ratio", mlt_properties_get_double( a_props, "consumer_aspect_ratio" ) ); mlt_service_apply_filters( mlt_filter_service( this ), 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 ); @@ -184,7 +187,7 @@ static mlt_frame filter_process( mlt_filter this, mlt_frame frame ) char *name = mlt_properties_get( mlt_filter_properties( this ), "_unique_id" ); // Assign the current position to the name - mlt_properties_set_position( properties, name, mlt_frame_get_position( frame ) ); + mlt_properties_set_position( properties, name, mlt_frame_get_position( frame ) - mlt_filter_get_in( this ) ); // Push the filter on to the stack mlt_frame_push_service( frame, this ); diff --git a/src/modules/core/transition_composite.c b/src/modules/core/transition_composite.c index 622ae8fe..4ffb3d5d 100644 --- a/src/modules/core/transition_composite.c +++ b/src/modules/core/transition_composite.c @@ -546,8 +546,8 @@ static int composite_yuv( uint8_t *p_dest, int width_dest, int height_dest, uint int y = geometry.y * height_dest / geometry.nh; // Align x to a full YUYV group - x &= 0xfffffffe; - width_src &= 0xfffffffe; + x = ( x | 1 ) ^ 1; + width_src = ( width_src | 1 ) ^ 1; // optimization points - no work to do if ( width_src <= 0 || height_src <= 0 ) @@ -845,7 +845,7 @@ static int get_b_frame_image( mlt_transition this, mlt_frame b_frame, uint8_t ** *width = geometry->sw * *width / geometry->nw; *height = geometry->sh * *height / geometry->nh; - x &= 0xfffffffe; + x = ( x | 1 ) ^ 1; // optimization points - no work to do if ( *width < 1 || *height < 1 ) @@ -960,8 +960,8 @@ mlt_frame composite_copy_region( mlt_transition this, mlt_frame a_frame, mlt_pos if ( y + h > height ) h = height - y; - x &= 0xfffffffe; - w &= 0xfffffffe; + x = ( x | 1 ) ^ 1; + w = ( w | 1 ) ^ 1; // Now we need to create a new destination image dest = mlt_pool_alloc( w * h * 2 );