summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/mjpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libffmpeg/libavcodec/mjpeg.c')
-rw-r--r--src/libffmpeg/libavcodec/mjpeg.c51
1 files changed, 13 insertions, 38 deletions
diff --git a/src/libffmpeg/libavcodec/mjpeg.c b/src/libffmpeg/libavcodec/mjpeg.c
index 5f1271abf..22530c9e4 100644
--- a/src/libffmpeg/libavcodec/mjpeg.c
+++ b/src/libffmpeg/libavcodec/mjpeg.c
@@ -478,7 +478,7 @@ static void escape_FF(MpegEncContext *s, int start)
int size= get_bit_count(&s->pb) - start*8;
int i, ff_count;
uint8_t *buf= s->pb.buf + start;
- int align= (-(int)(buf))&3;
+ int align= (-(size_t)(buf))&3;
assert((size&7) == 0);
size >>= 3;
@@ -557,12 +557,7 @@ static inline void mjpeg_encode_dc(MpegEncContext *s, int val,
mant--;
}
- /* compute the log (XXX: optimize) */
- nbits = 0;
- while (val != 0) {
- val = val >> 1;
- nbits++;
- }
+ nbits= av_log2(val) + 1;
put_bits(&s->pb, huff_size[nbits], huff_code[nbits]);
@@ -613,12 +608,7 @@ static void encode_block(MpegEncContext *s, DCTELEM *block, int n)
mant--;
}
- /* compute the log (XXX: optimize) */
- nbits = 0;
- while (val != 0) {
- val = val >> 1;
- nbits++;
- }
+ nbits= av_log2(val) + 1;
code = (run << 4) | nbits;
put_bits(&s->pb, huff_size_ac[code], huff_code_ac[code]);
@@ -902,34 +892,26 @@ static int mjpeg_decode_sof0(MJpegDecodeContext *s)
static inline int mjpeg_decode_dc(MJpegDecodeContext *s, int dc_index)
{
- int code, diff;
-#if 1
+ int code;
code = get_vlc2(&s->gb, s->vlcs[0][dc_index].table, 9, 2);
-#else
- code = get_vlc(&s->gb, &s->vlcs[0][dc_index]);
-#endif
if (code < 0)
{
dprintf("mjpeg_decode_dc: bad vlc: %d:%d (%p)\n", 0, dc_index,
&s->vlcs[0][dc_index]);
return 0xffff;
}
- if (code == 0) {
- diff = 0;
- } else {
- diff = get_bits(&s->gb, code);
- if ((diff & (1 << (code - 1))) == 0)
- diff = (-1 << code) | (diff + 1);
- }
- return diff;
+
+ if(code)
+ return get_xbits(&s->gb, code);
+ else
+ return 0;
}
/* decode block and dequantize */
static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
int component, int dc_index, int ac_index, int quant_index)
{
- int nbits, code, i, j, level;
- int run, val;
+ int code, i, j, level, val;
VLC *ac_vlc;
int16_t *quant_matrix;
@@ -947,11 +929,8 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
ac_vlc = &s->vlcs[1][ac_index];
i = 1;
for(;;) {
-#if 1
code = get_vlc2(&s->gb, s->vlcs[1][ac_index].table, 9, 2);
-#else
- code = get_vlc(&s->gb, ac_vlc);
-#endif
+
if (code < 0) {
dprintf("error ac\n");
return -1;
@@ -962,12 +941,8 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
if (code == 0xf0) {
i += 16;
} else {
- run = code >> 4;
- nbits = code & 0xf;
- level = get_bits(&s->gb, nbits);
- if ((level & (1 << (nbits - 1))) == 0)
- level = (-1 << nbits) | (level + 1);
- i += run;
+ level = get_xbits(&s->gb, code & 0xf);
+ i += code >> 4;
if (i >= 64) {
dprintf("error count: %d\n", i);
return -1;