[FFmpeg-devel] [PATCH] rotate filter

Stefano Sabatini stefano.sabatini-lala at poste.it
Thu May 5 01:31:26 CEST 2011


On date Wednesday 2011-05-04 14:56:12 +0200, Michael Niedermayer encoded:
> On Wed, May 04, 2011 at 12:31:29PM +0200, Stefano Sabatini wrote:
[...]
> > > frac_x >>= 6;
> > > frac_y >>= 6;
> > > for (i = 0; i < src_linestep; i++) {
> > >     int s00 = src[src_linestep * int_x  + i + src_linesize * int_y ];
> > >     int s01 = src[src_linestep * int_x1 + i + src_linesize * int_y ];
> > >     int s10 = src[src_linestep * int_x  + i + src_linesize * int_y1];
> > >     int s11 = src[src_linestep * int_x1 + i + src_linesize * int_y1];
> > >     int s0 = (((1<<10) - frac_x)*s00 + frac_x*s01);
> > >     int s1 = (((1<<10) - frac_x)*s10 + frac_x*s11);
> > > 
> > >     dst_color[i] = (((1<<10) - frac_y)*s0 + frac_y*s1)>>20;
> > > }
> > > 
> > > you can also shift by just 4 instead of 6 and use unsigned values
> > 
> > Isn't this losing precision (and indeed producing a different output)?
> > Which are the pros/cons?
> 
> 64bit arithmetic is slow on hw that does not have native 64bit support
> and with infinite precisse coeffs you will have +-0.5 errors
> with 16bit ~0.502
> with 12bit ~0.531
> 
> these worst case errors happen on black white transitions. in flatly
> colored areas the difference is significantly smaller that is its all
> pretty much 0.5 there
> 
> also mmx/sse optimized code would not use 64bit arithmetic so it would
> produce different output when C is using 64bit arithmetic

Yes I see the point but the code changed like that as a rather visible
quality loss.
BTW I also see another problem with the current code:
rotate=0:fillcolor=yellow

(or any other color, but with yellow is more visible) will produce a
yellow line on the top and right sides of the image.

So it looks I need to develop a better understanding of the code
(which may also help with the hsub!=vsub problem).

Last WIP version attached.
-- 
FFmpeg = Faithful and Fostering Merciless Patchable Erroneous Gospel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-lavfi-add-rotate-filter.patch
Type: text/x-diff
Size: 24285 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110505/d9d296b5/attachment.bin>


More information about the ffmpeg-devel mailing list