X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ffaandct.c;h=7888633d7cc5139a37ba575bd20f6158a72f9703;hb=851960f6f8cf1f946fe42fa36cf6598fac68072c;hp=b16d46b48b1a62a38c855df0369db2d32657b303;hpb=bad5537e2c2caeb5deb1ff9d771ea01058b8010c;p=ffmpeg diff --git a/libavcodec/faandct.c b/libavcodec/faandct.c index b16d46b48b1..7888633d7cc 100644 --- a/libavcodec/faandct.c +++ b/libavcodec/faandct.c @@ -19,21 +19,17 @@ */ /** - * @file libavcodec/faandct.c + * @file * @brief * Floating point AAN DCT * @author Michael Niedermayer */ -#include "dsputil.h" #include "faandct.h" +#include "libavutil/internal.h" +#include "libavutil/libm.h" #define FLOAT float -#ifdef FAAN_POSTSCALE -# define SCALE(x) postscale[x] -#else -# define SCALE(x) 1 -#endif //numbers generated by simple c code (not as accurate as they could be) /* @@ -67,12 +63,11 @@ B6*B0, B6*B1, B6*B2, B6*B3, B6*B4, B6*B5, B6*B6, B6*B7, B7*B0, B7*B1, B7*B2, B7*B3, B7*B4, B7*B5, B7*B6, B7*B7, }; -static av_always_inline void row_fdct(FLOAT temp[64], DCTELEM * data) +static av_always_inline void row_fdct(FLOAT temp[64], int16_t *data) { FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; FLOAT tmp10, tmp11, tmp12, tmp13; FLOAT z2, z4, z11, z13; - FLOAT av_unused z5; int i; for (i=0; i<8*8; i+=8) { @@ -102,14 +97,9 @@ static av_always_inline void row_fdct(FLOAT temp[64], DCTELEM * data) 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; @@ -122,12 +112,11 @@ static av_always_inline void row_fdct(FLOAT temp[64], DCTELEM * data) } } -void ff_faandct(DCTELEM * data) +void ff_faandct(int16_t *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; @@ -150,39 +139,34 @@ void ff_faandct(DCTELEM * data) tmp11= tmp1 + tmp2; tmp12= tmp1 - tmp2; - data[8*0 + i]= lrintf(SCALE(8*0 + i) * (tmp10 + tmp11)); - data[8*4 + i]= lrintf(SCALE(8*4 + i) * (tmp10 - tmp11)); + data[8*0 + i]= lrintf(postscale[8*0 + i] * (tmp10 + tmp11)); + data[8*4 + i]= lrintf(postscale[8*4 + i] * (tmp10 - tmp11)); tmp12 += tmp13; tmp12 *= A1; - data[8*2 + i]= lrintf(SCALE(8*2 + i) * (tmp13 + tmp12)); - data[8*6 + i]= lrintf(SCALE(8*6 + i) * (tmp13 - tmp12)); + data[8*2 + i]= lrintf(postscale[8*2 + i] * (tmp13 + tmp12)); + data[8*6 + i]= lrintf(postscale[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(SCALE(8*5 + i) * (z13 + z2)); - data[8*3 + i]= lrintf(SCALE(8*3 + i) * (z13 - z2)); - data[8*1 + i]= lrintf(SCALE(8*1 + i) * (z11 + z4)); - data[8*7 + i]= lrintf(SCALE(8*7 + i) * (z11 - z4)); + data[8*5 + i]= lrintf(postscale[8*5 + i] * (z13 + z2)); + data[8*3 + i]= lrintf(postscale[8*3 + i] * (z13 - z2)); + data[8*1 + i]= lrintf(postscale[8*1 + i] * (z11 + z4)); + data[8*7 + i]= lrintf(postscale[8*7 + i] * (z11 - z4)); } } -void ff_faandct248(DCTELEM * data) +void ff_faandct248(int16_t *data) { FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; FLOAT tmp10, tmp11, tmp12, tmp13; @@ -208,25 +192,25 @@ void ff_faandct248(DCTELEM * data) tmp12 = tmp1 - tmp2; tmp13 = tmp0 - tmp3; - data[8*0 + i] = lrintf(SCALE(8*0 + i) * (tmp10 + tmp11)); - data[8*4 + i] = lrintf(SCALE(8*4 + i) * (tmp10 - tmp11)); + data[8*0 + i] = lrintf(postscale[8*0 + i] * (tmp10 + tmp11)); + data[8*4 + i] = lrintf(postscale[8*4 + i] * (tmp10 - tmp11)); tmp12 += tmp13; tmp12 *= A1; - data[8*2 + i] = lrintf(SCALE(8*2 + i) * (tmp13 + tmp12)); - data[8*6 + i] = lrintf(SCALE(8*6 + i) * (tmp13 - tmp12)); + data[8*2 + i] = lrintf(postscale[8*2 + i] * (tmp13 + tmp12)); + data[8*6 + i] = lrintf(postscale[8*6 + i] * (tmp13 - tmp12)); tmp10 = tmp4 + tmp7; tmp11 = tmp5 + tmp6; tmp12 = tmp5 - tmp6; tmp13 = tmp4 - tmp7; - data[8*1 + i] = lrintf(SCALE(8*0 + i) * (tmp10 + tmp11)); - data[8*5 + i] = lrintf(SCALE(8*4 + i) * (tmp10 - tmp11)); + data[8*1 + i] = lrintf(postscale[8*0 + i] * (tmp10 + tmp11)); + data[8*5 + i] = lrintf(postscale[8*4 + i] * (tmp10 - tmp11)); tmp12 += tmp13; tmp12 *= A1; - data[8*3 + i] = lrintf(SCALE(8*2 + i) * (tmp13 + tmp12)); - data[8*7 + i] = lrintf(SCALE(8*6 + i) * (tmp13 - tmp12)); + data[8*3 + i] = lrintf(postscale[8*2 + i] * (tmp13 + tmp12)); + data[8*7 + i] = lrintf(postscale[8*6 + i] * (tmp13 - tmp12)); } }