added idct reference code
authorFabrice Bellard <fabrice@bellard.org>
Tue, 7 Aug 2001 22:43:37 +0000 (22:43 +0000)
committerFabrice Bellard <fabrice@bellard.org>
Tue, 7 Aug 2001 22:43:37 +0000 (22:43 +0000)
Originally committed as revision 46 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/fdctref.c

index b90a2e5..2454924 100644 (file)
@@ -116,3 +116,39 @@ short *block;
  */
       }
 }
+
+/* perform IDCT matrix multiply for 8x8 coefficient block */
+
+void idct(block)
+short *block;
+{
+  int i, j, k, v;
+  double partial_product;
+  double tmp[64];
+
+  for (i=0; i<8; i++)
+    for (j=0; j<8; j++)
+    {
+      partial_product = 0.0;
+
+      for (k=0; k<8; k++)
+        partial_product+= c[k][j]*block[8*i+k];
+
+      tmp[8*i+j] = partial_product;
+    }
+
+  /* Transpose operation is integrated into address mapping by switching 
+     loop order of i and j */
+
+  for (j=0; j<8; j++)
+    for (i=0; i<8; i++)
+    {
+      partial_product = 0.0;
+
+      for (k=0; k<8; k++)
+        partial_product+= c[k][i]*tmp[8*k+j];
+
+      v = (int) floor(partial_product+0.5);
+      block[8*i+j] = v;
+    }
+}