# HG changeset patch # User michael # Date 1116406091 0 # Node ID 2f9f51297218b2bde5a51bbe4b2e360ded6f3f37 # Parent f858785d54eeb431378da5ac91a0c8e76aed44c7 optimizing rle decoding loops a little diff -r f858785d54ee -r 2f9f51297218 vp3.c --- 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