diff options
Diffstat (limited to 'contrib/ffmpeg/libavcodec/faandct.c')
-rw-r--r-- | contrib/ffmpeg/libavcodec/faandct.c | 84 |
1 files changed, 50 insertions, 34 deletions
diff --git a/contrib/ffmpeg/libavcodec/faandct.c b/contrib/ffmpeg/libavcodec/faandct.c index 6f73ee5e9..014c2d751 100644 --- a/contrib/ffmpeg/libavcodec/faandct.c +++ b/contrib/ffmpeg/libavcodec/faandct.c @@ -2,6 +2,8 @@ * Floating point AAN DCT * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> * + * this implementation is based upon the IJG integer AAN DCT (see jfdctfst.c) + * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or @@ -18,7 +20,8 @@ * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * this implementation is based upon the IJG integer AAN DCT (see jfdctfst.c) + * The AAN DCT in this file except ff_faandct248() can also be used under the + * new (3 clause) BSD license. */ /** @@ -74,7 +77,7 @@ static av_always_inline void row_fdct(FLOAT temp[64], DCTELEM * data) { FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; FLOAT tmp10, tmp11, tmp12, tmp13; - FLOAT z1, z2, z3, z4, z5, z11, z13; + FLOAT z2, z4, z5, z11, z13; int i; for (i=0; i<8*8; i+=8) { @@ -95,21 +98,27 @@ static av_always_inline void row_fdct(FLOAT temp[64], DCTELEM * data) temp[0 + i]= tmp10 + tmp11; temp[4 + i]= tmp10 - tmp11; - z1= (tmp12 + tmp13)*A1; - temp[2 + i]= tmp13 + z1; - temp[6 + i]= tmp13 - z1; + tmp12 += tmp13; + tmp12 *= A1; + temp[2 + i]= tmp13 + tmp12; + temp[6 + i]= tmp13 - tmp12; - tmp10= tmp4 + tmp5; - tmp11= tmp5 + tmp6; - tmp12= tmp6 + tmp7; + tmp4 += tmp5; + tmp5 += tmp6; + tmp6 += tmp7; - z5= (tmp10 - tmp12) * A5; - z2= tmp10*A2 + z5; - z4= tmp12*A4 + z5; - z3= tmp11*A1; +#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 + z3; - z13= tmp7 - z3; + z11= tmp7 + tmp5; + z13= tmp7 - tmp5; temp[5 + i]= z13 + z2; temp[3 + i]= z13 - z2; @@ -122,7 +131,7 @@ void ff_faandct(DCTELEM * data) { FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; FLOAT tmp10, tmp11, tmp12, tmp13; - FLOAT z1, z2, z3, z4, z5, z11, z13; + FLOAT z2, z4, z5, z11, z13; FLOAT temp[64]; int i; @@ -148,21 +157,27 @@ void ff_faandct(DCTELEM * data) data[8*0 + i]= lrintf(SCALE(8*0 + i) * (tmp10 + tmp11)); data[8*4 + i]= lrintf(SCALE(8*4 + i) * (tmp10 - tmp11)); - z1= (tmp12 + tmp13)* A1; - data[8*2 + i]= lrintf(SCALE(8*2 + i) * (tmp13 + z1)); - data[8*6 + i]= lrintf(SCALE(8*6 + i) * (tmp13 - z1)); + 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)); - tmp10= tmp4 + tmp5; - tmp11= tmp5 + tmp6; - tmp12= tmp6 + tmp7; + tmp4 += tmp5; + tmp5 += tmp6; + tmp6 += tmp7; - z5= (tmp10 - tmp12) * A5; - z2= tmp10*A2 + z5; - z4= tmp12*A4 + z5; - z3= tmp11*A1; +#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 + z3; - z13= tmp7 - z3; + 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)); @@ -175,7 +190,6 @@ void ff_faandct248(DCTELEM * data) { FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; FLOAT tmp10, tmp11, tmp12, tmp13; - FLOAT z1; FLOAT temp[64]; int i; @@ -201,9 +215,10 @@ void ff_faandct248(DCTELEM * data) data[8*0 + i] = lrintf(SCALE(8*0 + i) * (tmp10 + tmp11)); data[8*4 + i] = lrintf(SCALE(8*4 + i) * (tmp10 - tmp11)); - z1 = (tmp12 + tmp13)* A1; - data[8*2 + i] = lrintf(SCALE(8*2 + i) * (tmp13 + z1)); - data[8*6 + i] = lrintf(SCALE(8*6 + i) * (tmp13 - z1)); + 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)); tmp10 = tmp4 + tmp7; tmp11 = tmp5 + tmp6; @@ -213,8 +228,9 @@ void ff_faandct248(DCTELEM * data) data[8*1 + i] = lrintf(SCALE(8*0 + i) * (tmp10 + tmp11)); data[8*5 + i] = lrintf(SCALE(8*4 + i) * (tmp10 - tmp11)); - z1 = (tmp12 + tmp13)* A1; - data[8*3 + i] = lrintf(SCALE(8*2 + i) * (tmp13 + z1)); - data[8*7 + i] = lrintf(SCALE(8*6 + i) * (tmp13 - z1)); + 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)); } } |