On Mon, Sep 24, 2012 at 9:02 AM, j-b-m <j-...@users.sourceforge.net> wrote:
> Hi again.
>
> The affine transition is also having problems with aspect ratio.
> When using an "Affine" transition to display a full HD 1920x1080 video in a
> HDV (1440x1080) project, the result is a small picture, not using full screen.
> Using a Composite transition it works fine.
>
> Problem can be seen using melt:
>
> melt -profile hdv_1080_50i color:white out=200 -track fullhdclip.mov -
> transition affine geometry="0/0:100%x100%"

I am not surprised to hear of it, but I did not reproduce it with that
or on kdenlive timeline transitioning with the hidden black track,
checking in monitor only. I would like to confirm the problem and fix.

> I tried several other combinations of profiles and video formats, and
> discovered many problems with images incorrectly scaled by the affine
> transition.
>
> My patch below fixes the issues and seems to work for all the cases I tested.
>
> regards
> jb
>
> ------------------------------------------------------------------------------
>
> --- a/src/modules/plus/transition_affine.c
> +++ b/src/modules/plus/transition_affine.c
> @@ -487,18 +487,22 @@ static int transition_get_image( mlt_frame a_frame,
> uint8_t **image, mlt_image_f
>                         double consumer_dar = consumer_ar * normalised_width /
> normalised_height;
>                         double b_ar = mlt_properties_get_double( b_props,
> "aspect_ratio" );
>                         double b_dar = b_ar * b_width / b_height;
> -
> +                       if ( abs( ( consumer_dar - b_dar ) * 1000 ) < 1 )
> +                       {
> +                           // We consider aspect ratio is equal, no scaling
> +                       }

That code does not actually do anything, because there is no else in
front of this "if?" If you change this to make it do something, then
also check if you meant to use fabs() instead of abs().

>                         if ( b_dar > consumer_dar )
>                         {
>                                 scale_x = geom_scale_x * ( scale_x == 0 ? 1 :
> scale_x );
>                                 scale_y = geom_scale_x * ( scale_y == 0 ? 1 :
> scale_y );
> +                               scale_y /= consumer_ar / b_ar;
>                         }
>                         else
>                         {
>                                 scale_x = geom_scale_y * ( scale_x == 0 ? 1 :
> scale_x );
>                                 scale_y = geom_scale_y * ( scale_y == 0 ? 1 :
> scale_y );
> +                               scale_x *= consumer_ar / b_ar;
>                         }
> -                       scale_x *= consumer_ar / b_ar;
>                 }
>                 if ( scale )
>                 {
>


-- 
+-DRD-+

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Mlt-devel mailing list
Mlt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mlt-devel

Reply via email to