OSDN Git Service

vp3: 10l Fix DC-only IDCT for C and ARM too
authorDavid Conrad <lessen42@gmail.com>
Fri, 28 May 2010 07:22:04 +0000 (07:22 +0000)
committerDavid Conrad <lessen42@gmail.com>
Fri, 28 May 2010 07:22:04 +0000 (07:22 +0000)
Originally committed as revision 23359 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/arm/vp3dsp_neon.S
libavcodec/vp3dsp.c

index ade1998..d97ed3d 100644 (file)
@@ -377,12 +377,10 @@ endfunc
 
 function ff_vp3_idct_dc_add_neon, export=1
     ldrsh           r2,  [r2]
-    movw            r3,  #46341
-    mul             r2,  r3,  r2
-    smulwt          r2,  r3,  r2
     mov             r3,  r0
+    add             r2,  r2,  #15
     vdup.16         q15, r2
-    vrshr.s16       q15, q15, #4
+    vshr.s16        q15, q15, #5
 
     vld1.8          {d0}, [r0,:64], r1
     vld1.8          {d1}, [r0,:64], r1
index 058eb56..b7cff78 100644 (file)
@@ -225,9 +225,7 @@ void ff_vp3_idct_add_c(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/*
 
 void ff_vp3_idct_dc_add_c(uint8_t *dest/*align 8*/, int line_size, const DCTELEM *block/*align 16*/){
     const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
-    int i, dc = block[0];
-    dc = (46341*dc)>>16;
-    dc = (46341*dc + (8<<16))>>20;
+    int i, dc = (block[0] + 15) >> 5;
 
     for(i = 0; i < 8; i++){
         dest[0] = cm[dest[0]+dc];