[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