From b4c3816cfaee19638f0d8b71a31fced84c34236c Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Thu, 23 Oct 2003 09:11:56 +0000
Subject: [PATCH] optionally merge postscale into quantization table for the
 float aan dct

Originally committed as revision 2420 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavcodec/dct-test.c  |  6 +++++-
 libavcodec/faandct.c   | 21 +++++++++++++--------
 libavcodec/faandct.h   |  2 ++
 libavcodec/mpegvideo.c | 12 ++++++++++--
 4 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/libavcodec/dct-test.c b/libavcodec/dct-test.c
index 958ce52bcec..f5813b7bf9f 100644
--- a/libavcodec/dct-test.c
+++ b/libavcodec/dct-test.c
@@ -161,7 +161,11 @@ void dct_error(const char *name, int is_idct,
         fdct_func(block);
         emms(); /* for ff_mmx_idct */
 
-        if (fdct_func == fdct_ifast) {
+        if (fdct_func == fdct_ifast 
+#ifndef FAAN_POSTSCALE        
+            || fdct_func == ff_faandct
+#endif
+            ) {
             for(i=0; i<64; i++) {
                 scale = 8*(1 << (AANSCALE_BITS + 11)) / aanscales[i];
                 block[i] = (block[i] * scale /*+ (1<<(AANSCALE_BITS-1))*/) >> AANSCALE_BITS;
diff --git a/libavcodec/faandct.c b/libavcodec/faandct.c
index 4dcb9dafa7c..a0de1806074 100644
--- a/libavcodec/faandct.c
+++ b/libavcodec/faandct.c
@@ -32,6 +32,11 @@
 #include "faandct.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)
 /*
@@ -130,12 +135,12 @@ void ff_faandct(DCTELEM * data)
         tmp11= tmp1 + tmp2;
         tmp12= tmp1 - tmp2;
         
-        data[8*0 + i]= lrint(postscale[8*0 + i] * (tmp10 + tmp11));
-        data[8*4 + i]= lrint(postscale[8*4 + i] * (tmp10 - tmp11));
+        data[8*0 + i]= lrint(SCALE(8*0 + i) * (tmp10 + tmp11));
+        data[8*4 + i]= lrint(SCALE(8*4 + i) * (tmp10 - tmp11));
         
         z1= (tmp12 + tmp13)* A1;
-        data[8*2 + i]= lrint(postscale[8*2 + i] * (tmp13 + z1));
-        data[8*6 + i]= lrint(postscale[8*6 + i] * (tmp13 - z1));
+        data[8*2 + i]= lrint(SCALE(8*2 + i) * (tmp13 + z1));
+        data[8*6 + i]= lrint(SCALE(8*6 + i) * (tmp13 - z1));
         
         tmp10= tmp4 + tmp5;
         tmp11= tmp5 + tmp6;
@@ -149,9 +154,9 @@ void ff_faandct(DCTELEM * data)
         z11= tmp7 + z3;
         z13= tmp7 - z3;
 
-        data[8*5 + i]= lrint(postscale[8*5 + i] * (z13 + z2));
-        data[8*3 + i]= lrint(postscale[8*3 + i] * (z13 - z2));
-        data[8*1 + i]= lrint(postscale[8*1 + i] * (z11 + z4));
-        data[8*7 + i]= lrint(postscale[8*7 + i] * (z11 - z4));
+        data[8*5 + i]= lrint(SCALE(8*5 + i) * (z13 + z2));
+        data[8*3 + i]= lrint(SCALE(8*3 + i) * (z13 - z2));
+        data[8*1 + i]= lrint(SCALE(8*1 + i) * (z11 + z4));
+        data[8*7 + i]= lrint(SCALE(8*7 + i) * (z11 - z4));
     }
 }
diff --git a/libavcodec/faandct.h b/libavcodec/faandct.h
index cf6f128f15f..41615857d37 100644
--- a/libavcodec/faandct.h
+++ b/libavcodec/faandct.h
@@ -25,4 +25,6 @@
  * @author Michael Niedermayer <michaelni@gmx.at>
  */
  
+#define FAAN_POSTSCALE
+ 
 void ff_faandct(DCTELEM * data);
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 4e86d719126..35ee649573b 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -101,7 +101,11 @@ static void convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16
 
     for(qscale=qmin; qscale<=qmax; qscale++){
         int i;
-        if (s->dsp.fdct == ff_jpeg_fdct_islow || s->dsp.fdct == ff_faandct) {
+        if (s->dsp.fdct == ff_jpeg_fdct_islow 
+#ifdef FAAN_POSTSCALE
+            || s->dsp.fdct == ff_faandct
+#endif
+            ) {
             for(i=0;i<64;i++) {
                 const int j= s->dsp.idct_permutation[i];
                 /* 16 <= qscale * quant_matrix[i] <= 7905 */
@@ -112,7 +116,11 @@ static void convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16
                 qmat[qscale][i] = (int)((uint64_t_C(1) << QMAT_SHIFT) / 
                                 (qscale * quant_matrix[j]));
             }
-        } else if (s->dsp.fdct == fdct_ifast) {
+        } else if (s->dsp.fdct == fdct_ifast
+#ifndef FAAN_POSTSCALE
+                   || s->dsp.fdct == ff_faandct
+#endif
+                   ) {
             for(i=0;i<64;i++) {
                 const int j= s->dsp.idct_permutation[i];
                 /* 16 <= qscale * quant_matrix[i] <= 7905 */
-- 
GitLab