]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/jfdctint.c
initial commit for Id RoQ and Interplay MVE multimedia subsystems
[ffmpeg] / libavcodec / jfdctint.c
index b10419627a1674335a5fb2982c1fb893e1dd2449..702d0a9476e19967edbdfd49d9ad65a833efe05f 100644 (file)
  * scaled fixed-point arithmetic, with a minimal number of shifts.
  */
 
+/**
+ * @file jfdctint.c
+ * Independent JPEG Group's slow & accurate dct.
+ */
 #include <stdlib.h>
 #include <stdio.h>
 #include "common.h"
 
 #define SHIFT_TEMPS
 #define DCTSIZE 8
+#define BITS_IN_JSAMPLE 8
 #define GLOBAL(x) x
 #define RIGHT_SHIFT(x, n) ((x) >> (n))
+#define MULTIPLY16C16(var,const) ((var)*(const))
 
 #if 1 //def USE_ACCURATE_ROUNDING
 #define DESCALE(x,n)  RIGHT_SHIFT((x) + (1 << ((n) - 1)), n)
@@ -76,7 +83,7 @@
  * they are represented to better-than-integral precision.  These outputs
  * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
  * with the recommended scaling.  (For 12-bit sample data, the intermediate
- * array is INT32 anyway.)
+ * array is int32_t anyway.)
  *
  * To avoid overflow of the 32-bit intermediate results in pass 2, we must
  * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26.  Error analysis
@@ -85,7 +92,7 @@
 
 #if BITS_IN_JSAMPLE == 8
 #define CONST_BITS  13
-#define PASS1_BITS  2
+#define PASS1_BITS  4          /* set this to 2 if 16x16 multiplies are faster */
 #else
 #define CONST_BITS  13
 #define PASS1_BITS  1          /* lose a little precision to avoid overflow */
  */
 
 #if CONST_BITS == 13
-#define FIX_0_298631336  ((INT32)  2446)       /* FIX(0.298631336) */
-#define FIX_0_390180644  ((INT32)  3196)       /* FIX(0.390180644) */
-#define FIX_0_541196100  ((INT32)  4433)       /* FIX(0.541196100) */
-#define FIX_0_765366865  ((INT32)  6270)       /* FIX(0.765366865) */
-#define FIX_0_899976223  ((INT32)  7373)       /* FIX(0.899976223) */
-#define FIX_1_175875602  ((INT32)  9633)       /* FIX(1.175875602) */
-#define FIX_1_501321110  ((INT32)  12299)      /* FIX(1.501321110) */
-#define FIX_1_847759065  ((INT32)  15137)      /* FIX(1.847759065) */
-#define FIX_1_961570560  ((INT32)  16069)      /* FIX(1.961570560) */
-#define FIX_2_053119869  ((INT32)  16819)      /* FIX(2.053119869) */
-#define FIX_2_562915447  ((INT32)  20995)      /* FIX(2.562915447) */
-#define FIX_3_072711026  ((INT32)  25172)      /* FIX(3.072711026) */
+#define FIX_0_298631336  ((int32_t)  2446)     /* FIX(0.298631336) */
+#define FIX_0_390180644  ((int32_t)  3196)     /* FIX(0.390180644) */
+#define FIX_0_541196100  ((int32_t)  4433)     /* FIX(0.541196100) */
+#define FIX_0_765366865  ((int32_t)  6270)     /* FIX(0.765366865) */
+#define FIX_0_899976223  ((int32_t)  7373)     /* FIX(0.899976223) */
+#define FIX_1_175875602  ((int32_t)  9633)     /* FIX(1.175875602) */
+#define FIX_1_501321110  ((int32_t)  12299)    /* FIX(1.501321110) */
+#define FIX_1_847759065  ((int32_t)  15137)    /* FIX(1.847759065) */
+#define FIX_1_961570560  ((int32_t)  16069)    /* FIX(1.961570560) */
+#define FIX_2_053119869  ((int32_t)  16819)    /* FIX(2.053119869) */
+#define FIX_2_562915447  ((int32_t)  20995)    /* FIX(2.562915447) */
+#define FIX_3_072711026  ((int32_t)  25172)    /* FIX(3.072711026) */
 #else
 #define FIX_0_298631336  FIX(0.298631336)
 #define FIX_0_390180644  FIX(0.390180644)
 #endif
 
 
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
+/* Multiply an int32_t variable by an int32_t constant to yield an int32_t result.
  * For 8-bit samples with the recommended scaling, all the variable
  * and constant values involved are no more than 16 bits wide, so a
  * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
  * For 12-bit samples, a full 32-bit multiplication will be needed.
  */
 
-#if BITS_IN_JSAMPLE == 8
+#if BITS_IN_JSAMPLE == 8 && CONST_BITS<=13 && PASS1_BITS<=2
 #define MULTIPLY(var,const)  MULTIPLY16C16(var,const)
 #else
 #define MULTIPLY(var,const)  ((var) * (const))
 GLOBAL(void)
 ff_jpeg_fdct_islow (DCTELEM * data)
 {
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1, z2, z3, z4, z5;
+  int32_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
+  int32_t tmp10, tmp11, tmp12, tmp13;
+  int32_t z1, z2, z3, z4, z5;
   DCTELEM *dataptr;
   int ctr;
   SHIFT_TEMPS