[FFmpeg-devel] FW: [PATCH] 10-bit DNxHD decoding and encoding

Michael Niedermayer michaelni at gmx.at
Thu Mar 31 13:05:01 CEST 2011


On Thu, Mar 31, 2011 at 08:09:50AM +0000, Joseph Artsimovich wrote:
> Michael Niedermayer wrote:
> > > +
> > > +void ff_faandct_10bit_safe(DCTELEM * data) {
> > > +    FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
> > > +    FLOAT tmp10, tmp11, tmp12, tmp13;
> > > +    FLOAT z2, z4, z11, z13;
> > > +    FLOAT av_unused z5;
> > > +    FLOAT temp[64];
> > > +    int i;
> > > +
> > > +    row_fdct(temp, data);
> > > +
> > > +    for (i=0; i<8; i++) {
> > > +        tmp0= temp[8*0 + i] + temp[8*7 + i];
> > > +        tmp7= temp[8*0 + i] - temp[8*7 + i];
> > > +        tmp1= temp[8*1 + i] + temp[8*6 + i];
> > > +        tmp6= temp[8*1 + i] - temp[8*6 + i];
> > > +        tmp2= temp[8*2 + i] + temp[8*5 + i];
> > > +        tmp5= temp[8*2 + i] - temp[8*5 + i];
> > > +        tmp3= temp[8*3 + i] + temp[8*4 + i];
> > > +        tmp4= temp[8*3 + i] - temp[8*4 + i];
> > > +
> > > +        tmp10= tmp0 + tmp3;
> > > +        tmp13= tmp0 - tmp3;
> > > +        tmp11= tmp1 + tmp2;
> > > +        tmp12= tmp1 - tmp2;
> > > +
> > > +        data[8*0 + i]= lrintf(postscale4[8*0 + i] * (tmp10 + tmp11));
> > > +        data[8*4 + i]= lrintf(postscale4[8*4 + i] * (tmp10 - tmp11));
> > > +
> > > +        tmp12 += tmp13;
> > > +        tmp12 *= A1;
> > > +        data[8*2 + i]= lrintf(postscale4[8*2 + i] * (tmp13 + tmp12));
> > > +        data[8*6 + i]= lrintf(postscale4[8*6 + i] * (tmp13 - tmp12));
> > > +
> > > +        tmp4 += tmp5;
> > > +        tmp5 += tmp6;
> > > +        tmp6 += tmp7;
> > > +
> > > +#if 0
> > > +        z5= (tmp4 - tmp6) * A5;
> > > +        z2= tmp4*A2 + z5;
> > > +        z4= tmp6*A4 + z5;
> > > +#else
> > > +        z2= tmp4*(A2+A5) - tmp6*A5;
> > > +        z4= tmp6*(A4-A5) + tmp4*A5;
> > > +#endif
> > > +        tmp5*=A1;
> > > +
> > > +        z11= tmp7 + tmp5;
> > > +        z13= tmp7 - tmp5;
> > > +
> > > +        data[8*5 + i]= lrintf(postscale4[8*5 + i] * (z13 + z2));
> > > +        data[8*3 + i]= lrintf(postscale4[8*3 + i] * (z13 - z2));
> > > +        data[8*1 + i]= lrintf(postscale4[8*1 + i] * (z11 + z4));
> > > +        data[8*7 + i]= lrintf(postscale4[8*7 + i] * (z11 - z4));
> > > +    }
> > > +}
> > 
> > this can be factored with the existing 8bit code, the only difference is which
> > table is used
> It's a bit more complex than that.  A postscaling table is always used in 10bit code, but is only used in 8bit code if FAAN_POSTSCALE is defined.  So, I see several options:

> 1. Factor this code into a macro.
> 2. Factor this code into a function and pass it a special table containing 1's if FAAN_POSTSCALE is not defined.

ive thought about using a av_always_inline function, i would not pass
any special tables

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

It is dangerous to be right in matters on which the established authorities
are wrong. -- Voltaire
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110331/6da4cdab/attachment.asc>


More information about the ffmpeg-devel mailing list