[FFmpeg-cvslog] dv: simplify bitstream splicing in dv_decode_ac()
Mans Rullgard
git at videolan.org
Sun Nov 27 00:39:13 CET 2011
ffmpeg | branch: master | Mans Rullgard <mans at mansr.com> | Sat Nov 26 18:48:16 2011 +0000| [b6ae0866821df5f3b83f6b7f5c281d9a3e36b7ee] | committer: Mans Rullgard
dv: simplify bitstream splicing in dv_decode_ac()
This is simpler and fixes some overflow checker warnings.
Signed-off-by: Mans Rullgard <mans at mansr.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b6ae0866821df5f3b83f6b7f5c281d9a3e36b7ee
---
libavcodec/dv.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/libavcodec/dv.c b/libavcodec/dv.c
index f16ed62..6c50f77 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;
}
More information about the ffmpeg-cvslog
mailing list