changeset 2705:2f9f51297218 libavcodec

optimizing rle decoding loops a little
author michael
date Wed, 18 May 2005 08:48:11 +0000
parents f858785d54ee
children a23c44f7ed60
files vp3.c
diffstat 1 files changed, 10 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/vp3.c	Wed May 18 07:59:07 2005 +0000
+++ b/vp3.c	Wed May 18 08:48:11 2005 +0000
@@ -1180,12 +1180,12 @@
          * fetched the bit will be toggled again */
         bit ^= 1;
         while (current_superblock < s->superblock_count) {
-            if (current_run == 0) {
+            if (current_run-- == 0) {
                 bit ^= 1;
 #if 1
                 current_run = get_vlc2(gb, 
-                    s->superblock_run_length_vlc.table, 6, 2) + 1;
-                if (current_run == 34)
+                    s->superblock_run_length_vlc.table, 6, 2);
+                if (current_run == 33)
                     current_run += get_bits(gb, 12);
 #else
                 current_run = get_superblock_run_length(gb);
@@ -1206,9 +1206,7 @@
                     decode_partial_blocks = 1;
                 }
             }
-            s->superblock_coding[current_superblock++] = 
-                (bit) ? SB_PARTIALLY_CODED : SB_NOT_CODED;
-            current_run--;
+            s->superblock_coding[current_superblock++] = bit;
         }
 
         /* unpack the list of fully coded superblocks if any of the blocks were
@@ -1226,12 +1224,12 @@
                 /* skip any superblocks already marked as partially coded */
                 if (s->superblock_coding[current_superblock] == SB_NOT_CODED) {
 
-                    if (current_run == 0) {
+                    if (current_run-- == 0) {
                         bit ^= 1;
 #if 1
                         current_run = get_vlc2(gb, 
-                            s->superblock_run_length_vlc.table, 6, 2) + 1;
-                        if (current_run == 34)
+                            s->superblock_run_length_vlc.table, 6, 2);
+                        if (current_run == 33)
                             current_run += get_bits(gb, 12);
 #else
                         current_run = get_superblock_run_length(gb);
@@ -1241,9 +1239,7 @@
                     debug_block_coding("      setting superblock %d to %s\n",
                         current_superblock,
                         (bit) ? "fully coded" : "not coded");
-                    s->superblock_coding[current_superblock] = 
-                        (bit) ? SB_FULLY_CODED : SB_NOT_CODED;
-                    current_run--;
+                    s->superblock_coding[current_superblock] = 2*bit;
                 }
                 current_superblock++;
             }
@@ -1291,11 +1287,11 @@
 
                     /* fragment may or may not be coded; this is the case
                      * that cares about the fragment coding runs */
-                    if (current_run == 0) {
+                    if (current_run-- == 0) {
                         bit ^= 1;
 #if 1
                         current_run = get_vlc2(gb, 
-                            s->fragment_run_length_vlc.table, 5, 2) + 1;
+                            s->fragment_run_length_vlc.table, 5, 2);
 #else
                         current_run = get_fragment_run_length(gb);
 #endif
@@ -1328,8 +1324,6 @@
                             i, current_fragment);
                     }
 
-                    current_run--;
-
                 } else {
 
                     /* fragments are fully coded in this superblock; actual