[01/27] vp3: bfin: Transpose the IDCTs

Message ID 1365583975-73297-1-git-send-email-martin@martin.st
State Committed
Commit 5941978e71d2c3a8e2a7e87951e081e0b2e77da9
Headers show

Commit Message

Martin Storsjö April 10, 2013, 8:52 a.m.
While this change isn't bitexact, the IDCTs weren't bitexact to
start with either.

This simplifies decoupling vp3 from dsputil.
---
 libavcodec/bfin/vp3_bfin.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Kostya Shishkov April 10, 2013, 9:26 a.m. | #1
On Wed, Apr 10, 2013 at 11:52:29AM +0300, Martin Storsjö wrote:
> While this change isn't bitexact, the IDCTs weren't bitexact to
> start with either.
> 
> This simplifies decoupling vp3 from dsputil.
> ---
>  libavcodec/bfin/vp3_bfin.c |   10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)

probably OK (ENOCARE)

Patch

diff --git a/libavcodec/bfin/vp3_bfin.c b/libavcodec/bfin/vp3_bfin.c
index ce8b033..86c4b23 100644
--- a/libavcodec/bfin/vp3_bfin.c
+++ b/libavcodec/bfin/vp3_bfin.c
@@ -37,7 +37,7 @@  static void bfin_vp3_idct_put(uint8_t *dest, int line_size, int16_t *block)
 
     for (i=0;i<8;i++)
         for (j=0;j<8;j++)
-            dest[line_size*i+j]=cm[block[i*8+j]];
+            dest[line_size*i + j] = cm[block[j*8 + i]];
 
     memset(block, 0, 128);
 }
@@ -45,8 +45,13 @@  static void bfin_vp3_idct_put(uint8_t *dest, int line_size, int16_t *block)
 /* Inter iDCT */
 static void bfin_vp3_idct_add(uint8_t *dest, int line_size, int16_t *block)
 {
+    const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
+    int i, j;
+
     ff_bfin_vp3_idct (block);
-    ff_bfin_add_pixels_clamped (block, dest, line_size);
+    for (i = 0; i < 8; i++)
+        for (j = 0; j < 8; j++)
+            dest[line_size*i + j] = cm[dest[line_size*i + j] + block[j*8 + i]];
 
     memset(block, 0, 128);
 }
@@ -56,5 +61,6 @@  av_cold void ff_vp3dsp_init_bfin(VP3DSPContext *c, int flags)
     if (!(flags & CODEC_FLAG_BITEXACT)) {
         c->idct_add = bfin_vp3_idct_add;
         c->idct_put = bfin_vp3_idct_put;
+        c->idct_perm = FF_TRANSPOSE_IDCT_PERM;
     }
 }