Commit 3373f426 authored by conrad's avatar conrad

Use memset to set the runs partially coded superblocks

Much faster for long runs (e.g. nearly uncoded frames), slightly faster
for the general case.

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@21927 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 5cdde967
......@@ -461,17 +461,21 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
/* unpack the list of partially-coded superblocks */
bit = get_bits1(gb);
/* toggle the bit because as soon as the first run length is
* fetched the bit will be toggled again */
bit ^= 1;
while (current_superblock < s->superblock_count) {
if (current_run-- == 0) {
bit ^= 1;
current_run = get_vlc2(gb,
s->superblock_run_length_vlc.table, 6, 2);
if (current_run == 33)
s->superblock_run_length_vlc.table, 6, 2) + 1;
if (current_run == 34)
current_run += get_bits(gb, 12);
if (current_superblock + current_run > s->superblock_count) {
av_log(s->avctx, AV_LOG_ERROR, "Invalid partially coded superblock run length\n");
return -1;
}
memset(s->superblock_coding + current_superblock, bit, current_run);
current_superblock += current_run;
/* if any of the superblocks are not partially coded, flag
* a boolean to decode the list of fully-coded superblocks */
if (bit == 0) {
......@@ -482,8 +486,8 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
* superblocks */
decode_partial_blocks = 1;
}
}
s->superblock_coding[current_superblock++] = bit;
bit ^= 1;
}
/* unpack the list of fully coded superblocks if any of the blocks were
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment