[FFmpeg-cvslog] r11525 - in trunk/libavcodec: vc1.c vc1.h

kostya subversion
Mon Jan 14 07:10:02 CET 2008


Author: kostya
Date: Mon Jan 14 07:10:02 2008
New Revision: 11525

Log:
Select scan tables for 8x4 and 4x8 blocks only once.

Patch by Christophe GISQUET ([christophe][gisquet] <whirlpool sign> free <spot> fr)
Thread [PATCH] Determine once and for all zz scan tables to use in VC-1 VLD


Modified:
   trunk/libavcodec/vc1.c
   trunk/libavcodec/vc1.h

Modified: trunk/libavcodec/vc1.c
==============================================================================
--- trunk/libavcodec/vc1.c	(original)
+++ trunk/libavcodec/vc1.c	Mon Jan 14 07:10:02 2008
@@ -777,10 +777,14 @@ static int decode_sequence_header(AVCode
 
     if (v->profile == PROFILE_ADVANCED)
     {
+        v->zz_8x4 = ff_vc1_adv_progressive_8x4_zz;
+        v->zz_4x8 = ff_vc1_adv_progressive_4x8_zz;
         return decode_sequence_header_adv(v, gb);
     }
     else
     {
+        v->zz_8x4 = ff_vc1_simple_progressive_8x4_zz;
+        v->zz_4x8 = ff_vc1_simple_progressive_4x8_zz;
         v->res_sm = get_bits(gb, 2); //reserved
         if (v->res_sm)
         {
@@ -2961,13 +2965,10 @@ static int vc1_decode_p_block(VC1Context
                 i += skip;
                 if(i > 31)
                     break;
-                if(v->profile < PROFILE_ADVANCED)
-                    idx = ff_vc1_simple_progressive_8x4_zz[i++];
-                else
-                    idx = ff_vc1_adv_progressive_8x4_zz[i++];
-                block[idx + off] = value * scale;
+                idx = v->zz_8x4[i++]+off;
+                block[idx] = value * scale;
                 if(!v->pquantizer)
-                    block[idx + off] += (block[idx + off] < 0) ? -mquant : mquant;
+                    block[idx] += (block[idx] < 0) ? -mquant : mquant;
             }
             if(!(subblkpat & (1 << (1 - j))) && !skip_block)
                 s->dsp.vc1_inv_trans_8x4(dst + j*4*linesize, linesize, block + off);
@@ -2983,13 +2984,10 @@ static int vc1_decode_p_block(VC1Context
                 i += skip;
                 if(i > 31)
                     break;
-                if(v->profile < PROFILE_ADVANCED)
-                    idx = ff_vc1_simple_progressive_4x8_zz[i++];
-                else
-                    idx = ff_vc1_adv_progressive_4x8_zz[i++];
-                block[idx + off] = value * scale;
+                idx = v->zz_4x8[i++]+off;
+                block[idx] = value * scale;
                 if(!v->pquantizer)
-                    block[idx + off] += (block[idx + off] < 0) ? -mquant : mquant;
+                    block[idx] += (block[idx] < 0) ? -mquant : mquant;
             }
             if(!(subblkpat & (1 << (1 - j))) && !skip_block)
                 s->dsp.vc1_inv_trans_4x8(dst + j*4, linesize, block + off);

Modified: trunk/libavcodec/vc1.h
==============================================================================
--- trunk/libavcodec/vc1.h	(original)
+++ trunk/libavcodec/vc1.h	Mon Jan 14 07:10:02 2008
@@ -216,6 +216,8 @@ typedef struct VC1Context{
     int k_y;              ///< Number of bits for MVs (depends on MV range)
     int range_x, range_y; ///< MV range
     uint8_t pq, altpq;    ///< Current/alternate frame quantizer scale
+    const uint8_t* zz_8x4;///< Zigzag scan table for TT_8x4 coding mode
+    const uint8_t* zz_4x8;///< Zigzag scan table for TT_4x8 coding mode
     /** pquant parameters */
     //@{
     uint8_t dquantfrm;




More information about the ffmpeg-cvslog mailing list