[FFmpeg-cvslog] r21927 - trunk/libavcodec/vp3.c
conrad
subversion
Sun Feb 21 01:10:47 CET 2010
Author: conrad
Date: Sun Feb 21 01:10:47 2010
New Revision: 21927
Log:
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.
Modified:
trunk/libavcodec/vp3.c
Modified: trunk/libavcodec/vp3.c
==============================================================================
--- trunk/libavcodec/vp3.c Sat Feb 20 23:57:23 2010 (r21926)
+++ trunk/libavcodec/vp3.c Sun Feb 21 01:10:47 2010 (r21927)
@@ -461,17 +461,21 @@ static int unpack_superblocks(Vp3DecodeC
/* 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(Vp3DecodeC
* 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
More information about the ffmpeg-cvslog
mailing list