changeset 8201:c6e2ffef3797 libavcodec

Add shift argument to MULL() macro This replaces use of FRAC_BITS in the MULL() definition with a third argument specifying the shift amount. All uses of this macro are updated to pass FRAC_BITS as third argument.
author mru
date Mon, 24 Nov 2008 09:28:55 +0000
parents 843d82925adf
children 5af44bd71254
files armv4l/mathops.h i386/mathops.h lsp.c mathops.h mpegaudiodec.c
diffstat 5 files changed, 18 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/armv4l/mathops.h	Mon Nov 24 00:14:33 2008 +0000
+++ b/armv4l/mathops.h	Mon Nov 24 09:28:55 2008 +0000
@@ -25,19 +25,17 @@
 #include <stdint.h>
 #include "libavutil/common.h"
 
-#ifdef FRAC_BITS
 #   define MULL MULL
-static inline av_const int MULL(int a, int b)
+static inline av_const int MULL(int a, int b, unsigned shift)
 {
     int lo, hi;
     __asm__("smull %0, %1, %2, %3     \n\t"
             "mov   %0, %0,     lsr %4 \n\t"
             "add   %1, %0, %1, lsl %5 \n\t"
             : "=&r"(lo), "=&r"(hi)
-            : "r"(b), "r"(a), "i"(FRAC_BITS), "i"(32-FRAC_BITS));
+            : "r"(b), "r"(a), "i"(shift), "i"(32-shift));
     return hi;
 }
-#endif
 
 #define MULH MULH
 #ifdef HAVE_ARMV6
--- a/i386/mathops.h	Mon Nov 24 00:14:33 2008 +0000
+++ b/i386/mathops.h	Mon Nov 24 09:28:55 2008 +0000
@@ -22,15 +22,13 @@
 #ifndef AVCODEC_I386_MATHOPS_H
 #define AVCODEC_I386_MATHOPS_H
 
-#ifdef FRAC_BITS
-#   define MULL(ra, rb) \
+#define MULL(ra, rb, shift) \
         ({ int rt, dummy; __asm__ (\
             "imull %3               \n\t"\
             "shrdl %4, %%edx, %%eax \n\t"\
             : "=a"(rt), "=d"(dummy)\
-            : "a" ((int)ra), "rm" ((int)rb), "i"(FRAC_BITS));\
+            : "a" ((int)ra), "rm" ((int)rb), "i"(shift));\
          rt; })
-#endif
 
 #define MULH(ra, rb) \
     ({ int rt, dummy;\
--- a/lsp.c	Mon Nov 24 00:14:33 2008 +0000
+++ b/lsp.c	Mon Nov 24 09:28:55 2008 +0000
@@ -72,7 +72,7 @@
     {
         f[i] = f[i-2];
         for(j=i; j>1; j--)
-            f[j] -= MULL(f[j-1], lsp[2*i-2]) - f[j-2];
+            f[j] -= MULL(f[j-1], lsp[2*i-2], FRAC_BITS) - f[j-2];
 
         f[1] -= lsp[2*i-2] << 8;
     }
--- a/mathops.h	Mon Nov 24 00:14:33 2008 +0000
+++ b/mathops.h	Mon Nov 24 09:28:55 2008 +0000
@@ -45,7 +45,7 @@
 /* generic implementation */
 
 #ifndef MULL
-#   define MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS)
+#   define MULL(a,b,s) (((int64_t)(a) * (int64_t)(b)) >> (s))
 #endif
 
 #ifndef MULH
--- a/mpegaudiodec.c	Mon Nov 24 00:14:33 2008 +0000
+++ b/mpegaudiodec.c	Mon Nov 24 09:28:55 2008 +0000
@@ -351,9 +351,9 @@
             int n, norm;
             n = i + 2;
             norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
-            scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm);
-            scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm);
-            scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm);
+            scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm, FRAC_BITS);
+            scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm, FRAC_BITS);
+            scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm, FRAC_BITS);
             dprintf(avctx, "%d: norm=%x s=%x %x %x\n",
                     i, norm,
                     scale_factor_mult[i][0],
@@ -1097,7 +1097,7 @@
         t2 = tmp[i + 1];
         t3 = tmp[i + 3];
         s1 = MULH(2*(t3 + t2), icos36h[j]);
-        s3 = MULL(t3 - t2, icos36[8 - j]);
+        s3 = MULL(t3 - t2, icos36[8 - j], FRAC_BITS);
 
         t0 = s0 + s1;
         t1 = s0 - s1;
@@ -1705,8 +1705,8 @@
                     v2 = is_tab[1][sf];
                     for(j=0;j<len;j++) {
                         tmp0 = tab0[j];
-                        tab0[j] = MULL(tmp0, v1);
-                        tab1[j] = MULL(tmp0, v2);
+                        tab0[j] = MULL(tmp0, v1, FRAC_BITS);
+                        tab1[j] = MULL(tmp0, v2, FRAC_BITS);
                     }
                 } else {
                 found1:
@@ -1716,8 +1716,8 @@
                         for(j=0;j<len;j++) {
                             tmp0 = tab0[j];
                             tmp1 = tab1[j];
-                            tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
-                            tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
+                            tab0[j] = MULL(tmp0 + tmp1, ISQRT2, FRAC_BITS);
+                            tab1[j] = MULL(tmp0 - tmp1, ISQRT2, FRAC_BITS);
                         }
                     }
                 }
@@ -1749,8 +1749,8 @@
                 v2 = is_tab[1][sf];
                 for(j=0;j<len;j++) {
                     tmp0 = tab0[j];
-                    tab0[j] = MULL(tmp0, v1);
-                    tab1[j] = MULL(tmp0, v2);
+                    tab0[j] = MULL(tmp0, v1, FRAC_BITS);
+                    tab1[j] = MULL(tmp0, v2, FRAC_BITS);
                 }
             } else {
             found2:
@@ -1760,8 +1760,8 @@
                     for(j=0;j<len;j++) {
                         tmp0 = tab0[j];
                         tmp1 = tab1[j];
-                        tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
-                        tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
+                        tab0[j] = MULL(tmp0 + tmp1, ISQRT2, FRAC_BITS);
+                        tab1[j] = MULL(tmp0 - tmp1, ISQRT2, FRAC_BITS);
                     }
                 }
             }