diff options
author | Mans Rullgard <mans@mansr.com> | 2011-11-26 18:48:16 +0000 |
---|---|---|
committer | Mans Rullgard <mans@mansr.com> | 2011-11-26 20:52:09 +0000 |
commit | b6ae0866821df5f3b83f6b7f5c281d9a3e36b7ee (patch) | |
tree | 988f476974ce3f91c62f57dbe135d76e4dfe5a8d /libavcodec/dv.c | |
parent | b02aa3a8eaa5673f36cfd944fe23dc3ea02b38f6 (diff) | |
download | ffmpeg-b6ae0866821df5f3b83f6b7f5c281d9a3e36b7ee.tar.gz |
dv: simplify bitstream splicing in dv_decode_ac()
This is simpler and fixes some overflow checker warnings.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Diffstat (limited to 'libavcodec/dv.c')
-rw-r--r-- | libavcodec/dv.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/libavcodec/dv.c b/libavcodec/dv.c index f16ed624e7..6c50f77d3f 100644 --- a/libavcodec/dv.c +++ b/libavcodec/dv.c @@ -364,7 +364,7 @@ typedef struct BlockInfo { uint8_t pos; /* position in block */ void (*idct_put)(uint8_t *dest, int line_size, DCTELEM *block); uint8_t partial_bit_count; - uint16_t partial_bit_buffer; + uint32_t partial_bit_buffer; int shift_offset; } BlockInfo; @@ -392,8 +392,7 @@ static void dv_decode_ac(GetBitContext *gb, BlockInfo *mb, DCTELEM *block) /* if we must parse a partial VLC, we do it here */ if (partial_bit_count > 0) { - re_cache = ((unsigned)re_cache >> partial_bit_count) | - (mb->partial_bit_buffer << (sizeof(re_cache) * 8 - partial_bit_count)); + re_cache = re_cache >> partial_bit_count | mb->partial_bit_buffer; re_index -= partial_bit_count; mb->partial_bit_count = 0; } @@ -416,7 +415,7 @@ static void dv_decode_ac(GetBitContext *gb, BlockInfo *mb, DCTELEM *block) if (re_index + vlc_len > last_index) { /* should be < 16 bits otherwise a codeword could have been parsed */ mb->partial_bit_count = last_index - re_index; - mb->partial_bit_buffer = NEG_USR32(re_cache, mb->partial_bit_count); + mb->partial_bit_buffer = re_cache & ~(-1u >> mb->partial_bit_count); re_index = last_index; break; } |