[FFmpeg-devel] [WIP] rotate filter(s)

Michael Niedermayer michaelni
Wed Oct 6 16:21:16 CEST 2010


On Tue, Oct 05, 2010 at 09:38:06PM +0200, Stefano Sabatini wrote:
> On date Tuesday 2010-10-05 14:36:19 +0200, Michael Niedermayer encoded:
> > On Mon, Oct 04, 2010 at 10:27:29PM +0200, Stefano Sabatini wrote:
> [...]
> > > +/**
> > > + * Interpolate the color in src at position x and y using bilinear
> > > + * interpolation.
> > > + *
> > > + * @param dst_color put here the destination color
> > > + */
> > > +static uint8_t *ipol(uint8_t *dst_color,
> > > +                     const uint8_t *src, const int src_linesize, int x, int y,
> > > +                     int max_x, int max_y)
> > > +{
> > > +    int int_x = x>>16;
> > > +    int int_y = y>>16;
> > > +    int frac_x = x&0xFFFF;
> > > +    int frac_y = y&0xFFFF;
> > > +    int i;
> > > +
> > > +    for (i = 0; i < 3; i++) {
> > > +        int s00 = src[3 * int_x                + i + src_linesize * int_y];
> > > +        int s01 = src[3 * FFMIN(int_x+1,max_x) + i + src_linesize * int_y];
> > > +        int s10 = src[3 * int_x                + i + src_linesize * FFMIN(int_y+1, max_y)];
> > > +        int s11 = src[3 * FFMIN(int_x+1,max_x) + i + src_linesize * FFMIN(int_y+1, max_y)];
> > > +        int s0 = (((1<<16) - frac_x)*s00 + frac_x*s01)>>8;
> > > +        int s1 = (((1<<16) - frac_x)*s10 + frac_x*s11)>>8;
> > > +
> > > +        dst_color[i] = (((1<<16) - frac_y)*s0 + frac_y*s1)>>24;
> > > +    }
> > 
> > the >>8 can be avoided by adjusting perecission sanely
> > the FFMIN doesnt belong in the loop
> 
> I can do:
>       int s0 = ((1<<16) - frac_x)*s00 + frac_x*s01;
>       int s1 = ((1<<16) - frac_x)*s10 + frac_x*s11;
> 
>       dst_color[i] = (((int64_t)(1<<16) - frac_y)*s0 + (int64_t)frac_y*s1)>>32;
> 
> Is this what you suggest?

frac_x >>=6
frac_y >>=6
outside the loop

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Awnsering whenever a program halts or runs forever is
On a turing machine, in general impossible (turings halting problem).
On any real computer, always possible as a real computer has a finite number
of states N, and will either halt in less than N cycles or never halt.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20101006/7db932f9/attachment.pgp>



More information about the ffmpeg-devel mailing list