---
libavcodec/eamad.c | 82 +++++----
libavcodec/mdec.c | 74 ++++----
libavcodec/mjpegdec.c | 56 +++---
libavcodec/mpeg12.c | 78 +++++----
libavcodec/mpeg12dec.c | 417 ++++++++++++++++++++++-----------------------
libavcodec/mpeg4videodec.c | 202 +++++++++++-----------
libavcodec/msmpeg4dec.c | 2 -
libavcodec/mxpegdec.c | 184 ++++++++++----------
8 files changed, 534 insertions(+), 561 deletions(-)
diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c
index c174ffd..3e43326 100644
--- a/libavcodec/eamad.c
+++ b/libavcodec/eamad.c
@@ -135,51 +135,49 @@ static inline void decode_block_intra(MadContext *s,
int16_t * block)
/* The RL decoder is derived from mpeg1_decode_block_intra;
Escaped level and run values a decoded differently */
i = 0;
- {
- /* now quantify & encode AC coefficients */
- for (;;) {
- BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS,
2);
-
- if (level == 127) {
- break;
- } else if (level != 0) {
- i += run;
- if (i > 63) {
- av_log(s->avctx, AV_LOG_ERROR,
- "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
- return;
- }
- j = scantable[i];
- level = (level*quant_matrix[j]) >> 4;
- level = (level-1)|1;
- level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
- } else {
- /* escape */
- level = bitstream_read_signed(&s->bc, 10);
-
- run = bitstream_read(&s->bc, 6) + 1;
-
- i += run;
- if (i > 63) {
- av_log(s->avctx, AV_LOG_ERROR,
- "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
- return;
- }
- j = scantable[i];
- if (level < 0) {
- level = -level;
- level = (level*quant_matrix[j]) >> 4;
- level = (level-1)|1;
- level = -level;
- } else {
- level = (level*quant_matrix[j]) >> 4;
- level = (level-1)|1;
- }
+ /* now quantify & encode AC coefficients */
+ for (;;) {
+ BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
+
+ if (level == 127) {
+ break;
+ } else if (level != 0) {
+ i += run;
+ if (i > 63) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
+ return;
}
+ j = scantable[i];
+ level = (level * quant_matrix[j]) >> 4;
+ level = (level - 1) | 1;
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
+ } else {
+ /* escape */
+ level = bitstream_read_signed(&s->bc, 10);
- block[j] = level;
+ run = bitstream_read(&s->bc, 6) + 1;
+
+ i += run;
+ if (i > 63) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
+ return;
+ }
+ j = scantable[i];
+ if (level < 0) {
+ level = -level;
+ level = (level * quant_matrix[j]) >> 4;
+ level = (level - 1) | 1;
+ level = -level;
+ } else {
+ level = (level * quant_matrix[j]) >> 4;
+ level = (level - 1) | 1;
+ }
}
+
+ block[j] = level;
}
}
diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c
index 51c0e57..81f5879 100644
--- a/libavcodec/mdec.c
+++ b/libavcodec/mdec.c
@@ -77,48 +77,46 @@ static inline int mdec_decode_block_intra(MDECContext *a,
int16_t *block, int n)
}
i = 0;
- {
- /* now quantify & encode AC coefficients */
- for (;;) {
- BITSTREAM_RL_VLC(level, run, &a->bc, rl->rl_vlc[0], TEX_VLC_BITS,
2);
-
- if (level == 127) {
- break;
- } else if (level != 0) {
- i += run;
- if (i > 63) {
- av_log(a->avctx, AV_LOG_ERROR,
- "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
- return AVERROR_INVALIDDATA;
- }
- j = scantable[i];
+ /* now quantify & encode AC coefficients */
+ for (;;) {
+ BITSTREAM_RL_VLC(level, run, &a->bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
+
+ if (level == 127) {
+ break;
+ } else if (level != 0) {
+ i += run;
+ if (i > 63) {
+ av_log(a->avctx, AV_LOG_ERROR,
+ "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
+ return AVERROR_INVALIDDATA;
+ }
+ j = scantable[i];
+ level = (level * qscale * quant_matrix[j]) >> 3;
+ level = (level ^ bitstream_peek_signed(&a->bc, 1)) -
bitstream_peek_signed(&a->bc, 1);
+ bitstream_skip(&a->bc, 1);
+ } else {
+ /* escape */
+ run = bitstream_read(&a->bc, 6) + 1;
+ level = bitstream_read_signed(&a->bc, 10);
+ i += run;
+ if (i > 63) {
+ av_log(a->avctx, AV_LOG_ERROR,
+ "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
+ return AVERROR_INVALIDDATA;
+ }
+ j = scantable[i];
+ if (level < 0) {
+ level = -level;
level = (level * qscale * quant_matrix[j]) >> 3;
- level = (level ^ bitstream_peek_signed(&a->bc, 1)) -
bitstream_peek_signed(&a->bc, 1);
- bitstream_skip(&a->bc, 1);
+ level = (level - 1) | 1;
+ level = -level;
} else {
- /* escape */
- run = bitstream_read(&a->bc, 6) + 1;
- level = bitstream_read_signed(&a->bc, 10);
- i += run;
- if (i > 63) {
- av_log(a->avctx, AV_LOG_ERROR,
- "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
- return AVERROR_INVALIDDATA;
- }
- j = scantable[i];
- if (level < 0) {
- level = -level;
- level = (level * qscale * quant_matrix[j]) >> 3;
- level = (level - 1) | 1;
- level = -level;
- } else {
- level = (level * qscale * quant_matrix[j]) >> 3;
- level = (level - 1) | 1;
- }
+ level = (level * qscale * quant_matrix[j]) >> 3;
+ level = (level - 1) | 1;
}
-
- block[j] = level;
}
+
+ block[j] = level;
}
a->block_last_index[n] = i;
return 0;
diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
index 98d4734..c29da70 100644
--- a/libavcodec/mjpegdec.c
+++ b/libavcodec/mjpegdec.c
@@ -515,43 +515,43 @@ static int decode_block_progressive(MJpegDecodeContext
*s, int16_t *block,
return 0;
}
- for (i = ss; ; i++) {
- code = bitstream_read_vlc(&s->bc, s->vlcs[2][ac_index].table, 9,
2);
+ for (i = ss; ; i++) {
+ code = bitstream_read_vlc(&s->bc, s->vlcs[2][ac_index].table, 9, 2);
- run = ((unsigned) code) >> 4;
- code &= 0xF;
- if (code) {
- i += run;
- level = bitstream_read_xbits(&s->bc, code);
+ run = ((unsigned) code) >> 4;
+ code &= 0xF;
+ if (code) {
+ i += run;
+ level = bitstream_read_xbits(&s->bc, code);
+ if (i >= se) {
+ if (i == se) {
+ j = s->scantable.permutated[se];
+ block[j] = level * quant_matrix[j] << Al;
+ break;
+ }
+ av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
+ return AVERROR_INVALIDDATA;
+ }
+ j = s->scantable.permutated[i];
+ block[j] = level * quant_matrix[j] << Al;
+ } else {
+ if (run == 0xF) { // ZRL - skip 15 coefficients
+ i += 15;
if (i >= se) {
- if (i == se) {
- j = s->scantable.permutated[se];
- block[j] = level * quant_matrix[j] << Al;
- break;
- }
- av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
+ av_log(s->avctx, AV_LOG_ERROR, "ZRL overflow: %d\n", i);
return AVERROR_INVALIDDATA;
}
- j = s->scantable.permutated[i];
- block[j] = level * quant_matrix[j] << Al;
} else {
- if (run == 0xF) {// ZRL - skip 15 coefficients
- i += 15;
- if (i >= se) {
- av_log(s->avctx, AV_LOG_ERROR, "ZRL overflow: %d\n",
i);
- return AVERROR_INVALIDDATA;
- }
- } else {
- val = (1 << run);
- if (run) {
- val += NEG_USR32(bitstream_read(&s->bc, 32), run);
- }
- *EOBRUN = val - 1;
- break;
+ val = (1 << run);
+ if (run) {
+ val += NEG_USR32(bitstream_read(&s->bc, 32), run);
}
+ *EOBRUN = val - 1;
+ break;
}
}
+ }
if (i > *last_nnz)
*last_nnz = i;
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index c3f5f32..74c975e 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -263,55 +263,53 @@ int ff_mpeg1_decode_block_intra(BitstreamContext *bc,
block[0] = dc * quant_matrix[0];
- {
- /* now quantify & encode AC coefficients */
- while (1) {
- int level, run, j;
+ /* now quantify & encode AC coefficients */
+ while (1) {
+ int level, run, j;
- BITSTREAM_RL_VLC(level, run, bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
+ BITSTREAM_RL_VLC(level, run, bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
- if (level == 127) {
+ if (level == 127) {
+ break;
+ } else if (level != 0) {
+ i += run;
+ if (i > MAX_INDEX)
break;
- } else if (level != 0) {
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
+ j = scantable[i];
+ level = (level * qscale * quant_matrix[j]) >> 4;
+ level = (level - 1) | 1;
+ level = (level ^ bitstream_peek_signed(bc, 1)) -
+ bitstream_peek_signed(bc, 1);
+ bitstream_skip(bc, 1);
+ } else {
+ /* escape */
+ run = bitstream_read(bc, 6) + 1;
+ level = bitstream_read_signed(bc, 8);
+
+ if (level == -128) {
+ level = bitstream_read(bc, 8) - 256;
+ } else if (level == 0) {
+ level = bitstream_read(bc, 8);
+ }
+
+ i += run;
+ if (i > MAX_INDEX)
+ break;
+
+ j = scantable[i];
+ if (level < 0) {
+ level = -level;
level = (level * qscale * quant_matrix[j]) >> 4;
level = (level - 1) | 1;
- level = (level ^ bitstream_peek_signed(bc, 1)) -
- bitstream_peek_signed(bc, 1);
- bitstream_skip(bc, 1);
+ level = -level;
} else {
- /* escape */
- run = bitstream_read(bc, 6) + 1;
- level = bitstream_read_signed(bc, 8);
-
- if (level == -128) {
- level = bitstream_read(bc, 8) - 256;
- } else if (level == 0) {
- level = bitstream_read(bc, 8);
- }
-
- i += run;
- if (i > MAX_INDEX)
- break;
-
- j = scantable[i];
- if (level < 0) {
- level = -level;
- level = (level * qscale * quant_matrix[j]) >> 4;
- level = (level - 1) | 1;
- level = -level;
- } else {
- level = (level * qscale * quant_matrix[j]) >> 4;
- level = (level - 1) | 1;
- }
+ level = (level * qscale * quant_matrix[j]) >> 4;
+ level = (level - 1) | 1;
}
-
- block[j] = level;
}
+
+ block[j] = level;
}
if (i > MAX_INDEX)
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index c8a3dda..bf9acf3 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -149,65 +149,63 @@ static inline int mpeg1_decode_block_inter(MpegEncContext
*s,
const uint16_t *quant_matrix = s->inter_matrix;
const int qscale = s->qscale;
- {
- i = -1;
- // special case for first coefficient, no need to add second VLC table
- if (((int32_t) bitstream_peek(&s->bc, 32)) < 0) {
- level = (3 * qscale * quant_matrix[0]) >> 5;
+ i = -1;
+ // special case for first coefficient, no need to add second VLC table
+ if (((int32_t) bitstream_peek(&s->bc, 32)) < 0) {
+ level = (3 * qscale * quant_matrix[0]) >> 5;
+ level = (level - 1) | 1;
+ if (bitstream_peek(&s->bc, 32) & 0x40000000)
+ level = -level;
+ block[0] = level;
+ i++;
+ bitstream_skip(&s->bc, 2);
+ if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
+ goto end;
+ }
+ /* now quantify & encode AC coefficients */
+ for (;;) {
+ BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
+
+ if (level != 0) {
+ i += run;
+ if (i > MAX_INDEX)
+ break;
+ j = scantable[i];
+ level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
level = (level - 1) | 1;
- if (bitstream_peek(&s->bc, 32) & 0x40000000)
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
+ bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
+ } else {
+ /* escape */
+ run = bitstream_read(&s->bc, 6) + 1;
+ level = bitstream_read_signed(&s->bc, 8);
+ if (level == -128) {
+ level = bitstream_read(&s->bc, 8) - 256;
+ } else if (level == 0) {
+ level = bitstream_read(&s->bc, 8);
+ }
+ i += run;
+ if (i > MAX_INDEX)
+ break;
+ j = scantable[i];
+ if (level < 0) {
level = -level;
- block[0] = level;
- i++;
- bitstream_skip(&s->bc, 2);
- if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
- goto end;
- }
- /* now quantify & encode AC coefficients */
- for (;;) {
- BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS,
2);
-
- if (level != 0) {
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
level = (level - 1) | 1;
- level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
- bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
+ level = -level;
} else {
- /* escape */
- run = bitstream_read(&s->bc, 6) + 1;
- level = bitstream_read_signed(&s->bc, 8);
- if (level == -128) {
- level = bitstream_read(&s->bc, 8) - 256;
- } else if (level == 0) {
- level = bitstream_read(&s->bc, 8);
- }
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
- if (level < 0) {
- level = -level;
- level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
- level = (level - 1) | 1;
- level = -level;
- } else {
- level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
- level = (level - 1) | 1;
- }
+ level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
+ level = (level - 1) | 1;
}
-
- block[j] = level;
- if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
- break;
}
-end:
- bitstream_skip(&s->bc, 2);
+
+ block[j] = level;
+ if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
+ break;
}
+end:
+ bitstream_skip(&s->bc, 2);
check_scantable_index(s, i);
@@ -223,66 +221,64 @@ static inline int
mpeg1_fast_decode_block_inter(MpegEncContext *s,
uint8_t *const scantable = s->intra_scantable.permutated;
const int qscale = s->qscale;
- {
- i = -1;
- // Special case for first coefficient, no need to add second VLC table.
- if (((int32_t) bitstream_peek(&s->bc, 32)) < 0) {
- level = (3 * qscale) >> 1;
- level = (level - 1) | 1;
- if (bitstream_peek(&s->bc, 32) & 0x40000000)
- level = -level;
- block[0] = level;
- i++;
- bitstream_skip(&s->bc, 2);
- if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
- goto end;
- }
+ i = -1;
+ // Special case for first coefficient, no need to add second VLC table.
+ if (((int32_t) bitstream_peek(&s->bc, 32)) < 0) {
+ level = (3 * qscale) >> 1;
+ level = (level - 1) | 1;
+ if (bitstream_peek(&s->bc, 32) & 0x40000000)
+ level = -level;
+ block[0] = level;
+ i++;
+ bitstream_skip(&s->bc, 2);
+ if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
+ goto end;
+ }
- /* now quantify & encode AC coefficients */
- for (;;) {
- BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS,
2);
+ /* now quantify & encode AC coefficients */
+ for (;;) {
+ BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
- if (level != 0) {
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
+ if (level != 0) {
+ i += run;
+ if (i > MAX_INDEX)
+ break;
+ j = scantable[i];
+ level = ((level * 2 + 1) * qscale) >> 1;
+ level = (level - 1) | 1;
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
+ bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
+ } else {
+ /* escape */
+ run = bitstream_read(&s->bc, 6) + 1;
+ level = bitstream_read_signed(&s->bc, 8);
+ if (level == -128) {
+ level = bitstream_read(&s->bc, 8) - 256;
+ } else if (level == 0) {
+ level = bitstream_read(&s->bc, 8);
+ }
+ i += run;
+ if (i > MAX_INDEX)
+ break;
+ j = scantable[i];
+ if (level < 0) {
+ level = -level;
level = ((level * 2 + 1) * qscale) >> 1;
level = (level - 1) | 1;
- level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
- bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
+ level = -level;
} else {
- /* escape */
- run = bitstream_read(&s->bc, 6) + 1;
- level = bitstream_read_signed(&s->bc, 8);
- if (level == -128) {
- level = bitstream_read(&s->bc, 8) - 256;
- } else if (level == 0) {
- level = bitstream_read(&s->bc, 8);
- }
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
- if (level < 0) {
- level = -level;
- level = ((level * 2 + 1) * qscale) >> 1;
- level = (level - 1) | 1;
- level = -level;
- } else {
- level = ((level * 2 + 1) * qscale) >> 1;
- level = (level - 1) | 1;
- }
+ level = ((level * 2 + 1) * qscale) >> 1;
+ level = (level - 1) | 1;
}
-
- block[j] = level;
- if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
- break;
}
-end:
- bitstream_skip(&s->bc, 2);
+
+ block[j] = level;
+ if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
+ break;
}
+end:
+ bitstream_skip(&s->bc, 2);
check_scantable_index(s, i);
@@ -301,65 +297,62 @@ static inline int
mpeg2_decode_block_non_intra(MpegEncContext *s,
int mismatch;
mismatch = 1;
+ i = -1;
+ if (n < 4)
+ quant_matrix = s->inter_matrix;
+ else
+ quant_matrix = s->chroma_inter_matrix;
- {
- i = -1;
- if (n < 4)
- quant_matrix = s->inter_matrix;
- else
- quant_matrix = s->chroma_inter_matrix;
-
- // Special case for first coefficient, no need to add second VLC table.
- if (((int32_t) bitstream_peek(&s->bc, 32)) < 0) {
- level = (3 * qscale * quant_matrix[0]) >> 5;
- if (bitstream_peek(&s->bc, 32) & 0x40000000)
- level = -level;
- block[0] = level;
- mismatch ^= level;
- i++;
- bitstream_skip(&s->bc, 2);
- if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
- goto end;
- }
-
- /* now quantify & encode AC coefficients */
- for (;;) {
- BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS,
2);
+ // Special case for first coefficient, no need to add second VLC table.
+ if (((int32_t) bitstream_peek(&s->bc, 32)) < 0) {
+ level = (3 * qscale * quant_matrix[0]) >> 5;
+ if (bitstream_peek(&s->bc, 32) & 0x40000000)
+ level = -level;
+ block[0] = level;
+ mismatch ^= level;
+ i++;
+ bitstream_skip(&s->bc, 2);
+ if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
+ goto end;
+ }
- if (level != 0) {
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
- level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
- level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
- bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
- } else {
- /* escape */
- run = bitstream_read(&s->bc, 6) + 1;
- level = bitstream_read_signed(&s->bc, 12);
+ /* now quantify & encode AC coefficients */
+ for (;;) {
+ BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
- if (level < 0) {
- level = ((-level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
- level = -level;
- } else {
- level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
- }
- }
+ if (level != 0) {
+ i += run;
+ if (i > MAX_INDEX)
+ break;
+ j = scantable[i];
+ level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
+ bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
+ } else {
+ /* escape */
+ run = bitstream_read(&s->bc, 6) + 1;
+ level = bitstream_read_signed(&s->bc, 12);
- mismatch ^= level;
- block[j] = level;
- if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
+ i += run;
+ if (i > MAX_INDEX)
break;
+ j = scantable[i];
+ if (level < 0) {
+ level = ((-level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
+ level = -level;
+ } else {
+ level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
+ }
}
-end:
- bitstream_skip(&s->bc, 2);
+
+ mismatch ^= level;
+ block[j] = level;
+ if (((int32_t) bitstream_peek(&s->bc, 32)) <= (int32_t) 0xBFFFFFFF)
+ break;
}
+end:
+ bitstream_skip(&s->bc, 2);
block[63] ^= (mismatch & 1);
check_scantable_index(s, i);
@@ -466,41 +459,39 @@ static inline int mpeg2_decode_block_intra(MpegEncContext
*s,
else
rl = &ff_rl_mpeg1;
- {
- /* now quantify & encode AC coefficients */
- for (;;) {
- BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS,
2);
+ /* now quantify & encode AC coefficients */
+ for (;;) {
+ BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
- if (level == 127) {
+ if (level == 127) {
+ break;
+ } else if (level != 0) {
+ i += run;
+ if (i > MAX_INDEX)
break;
- } else if (level != 0) {
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
- level = (level * qscale * quant_matrix[j]) >> 4;
- level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
- bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
+ j = scantable[i];
+ level = (level * qscale * quant_matrix[j]) >> 4;
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
+ bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
+ } else {
+ /* escape */
+ run = bitstream_read(&s->bc, 6) + 1;
+ level = bitstream_read_signed(&s->bc, 12);
+ i += run;
+ if (i > MAX_INDEX)
+ break;
+ j = scantable[i];
+ if (level < 0) {
+ level = (-level * qscale * quant_matrix[j]) >> 4;
+ level = -level;
} else {
- /* escape */
- run = bitstream_read(&s->bc, 6) + 1;
- level = bitstream_read_signed(&s->bc, 12);
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
- if (level < 0) {
- level = (-level * qscale * quant_matrix[j]) >> 4;
- level = -level;
- } else {
- level = (level * qscale * quant_matrix[j]) >> 4;
- }
+ level = (level * qscale * quant_matrix[j]) >> 4;
}
-
- mismatch ^= level;
- block[j] = level;
}
+
+ mismatch ^= level;
+ block[j] = level;
}
block[63] ^= mismatch & 1;
@@ -541,40 +532,38 @@ static inline int
mpeg2_fast_decode_block_intra(MpegEncContext *s,
else
rl = &ff_rl_mpeg1;
- {
- /* now quantify & encode AC coefficients */
- for (;;) {
- BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS,
2);
+ /* now quantify & encode AC coefficients */
+ for (;;) {
+ BITSTREAM_RL_VLC(level, run, &s->bc, rl->rl_vlc[0], TEX_VLC_BITS, 2);
- if (level == 127) {
+ if (level == 127) {
+ break;
+ } else if (level != 0) {
+ i += run;
+ if (i > MAX_INDEX)
break;
- } else if (level != 0) {
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
- level = (level * qscale * quant_matrix[j]) >> 4;
- level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
- bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
+ j = scantable[i];
+ level = (level * qscale * quant_matrix[j]) >> 4;
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
+ bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
+ } else {
+ /* escape */
+ run = bitstream_read(&s->bc, 6) + 1;
+ level = bitstream_read_signed(&s->bc, 12);
+ i += run;
+ if (i > MAX_INDEX)
+ break;
+ j = scantable[i];
+ if (level < 0) {
+ level = (-level * qscale * quant_matrix[j]) >> 4;
+ level = -level;
} else {
- /* escape */
- run = bitstream_read(&s->bc, 6) + 1;
- level = bitstream_read_signed(&s->bc, 12);
- i += run;
- if (i > MAX_INDEX)
- break;
- j = scantable[i];
- if (level < 0) {
- level = (-level * qscale * quant_matrix[j]) >> 4;
- level = -level;
- } else {
- level = (level * qscale * quant_matrix[j]) >> 4;
- }
+ level = (level * qscale * quant_matrix[j]) >> 4;
}
-
- block[j] = level;
}
+
+ block[j] = level;
}
check_scantable_index(s, i);
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index ab0a178..5ac8989 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -1026,133 +1026,131 @@ static inline int mpeg4_decode_block(Mpeg4DecContext
*ctx, int16_t *block,
rl_vlc = ff_h263_rl_inter.rl_vlc[s->qscale];
}
}
- {
- for (;;) {
- BITSTREAM_RL_VLC(level, run, &s->bc, rl_vlc, TEX_VLC_BITS, 2);
- if (level == 0) {
- /* escape */
- if (rvlc) {
- if (bitstream_read_bit(&s->bc) == 0) {
- av_log(s->avctx, AV_LOG_ERROR,
- "1. marker bit missing in rvlc esc\n");
- return -1;
- }
+ for (;;) {
+ BITSTREAM_RL_VLC(level, run, &s->bc, rl_vlc, TEX_VLC_BITS, 2);
+ if (level == 0) {
+ /* escape */
+ if (rvlc) {
+ if (bitstream_read_bit(&s->bc) == 0) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "1. marker bit missing in rvlc esc\n");
+ return -1;
+ }
- last = bitstream_read_bit(&s->bc);
- run = bitstream_read(&s->bc, 6);
+ last = bitstream_read_bit(&s->bc);
+ run = bitstream_read(&s->bc, 6);
- if (bitstream_read_bit(&s->bc) == 0) {
- av_log(s->avctx, AV_LOG_ERROR,
- "2. marker bit missing in rvlc esc\n");
- return -1;
- }
+ if (bitstream_read_bit(&s->bc) == 0) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "2. marker bit missing in rvlc esc\n");
+ return -1;
+ }
- level = bitstream_read(&s->bc, 11);
+ level = bitstream_read(&s->bc, 11);
- if (bitstream_read(&s->bc, 5) != 0x10) {
- av_log(s->avctx, AV_LOG_ERROR, "reverse esc
missing\n");
- return -1;
- }
+ if (bitstream_read(&s->bc, 5) != 0x10) {
+ av_log(s->avctx, AV_LOG_ERROR, "reverse esc missing\n");
+ return -1;
+ }
- level = level * qmul + qadd;
- level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
- bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
+ level = level * qmul + qadd;
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
+ bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
- i += run + 1;
- if (last)
- i += 192;
- } else {
- int cache = bitstream_peek(&s->bc, 32);
-
- if (IS_3IV1)
- cache ^= 0xC0000000;
-
- if (cache & 0x80000000) {
- if (cache & 0x40000000) {
- /* third escape */
- bitstream_skip(&s->bc, 2);
- last = bitstream_read_bit(&s->bc);
- run = bitstream_read(&s->bc, 6);
-
- if (IS_3IV1) {
- level = bitstream_read_signed(&s->bc, 12);
- } else {
- if (bitstream_read(&s->bc, 1) == 0) {
- av_log(s->avctx, AV_LOG_ERROR,
- "1. marker bit missing in 3.
esc\n");
- return -1;
- }
+ i += run + 1;
+ if (last)
+ i += 192;
+ } else {
+ int cache = bitstream_peek(&s->bc, 32);
- level = bitstream_read_signed(&s->bc, 12);
+ if (IS_3IV1)
+ cache ^= 0xC0000000;
- if (bitstream_read(&s->bc, 1) == 0) {
- av_log(s->avctx, AV_LOG_ERROR,
- "2. marker bit missing in 3.
esc\n");
- return -1;
- }
+ if (cache & 0x80000000) {
+ if (cache & 0x40000000) {
+ /* third escape */
+ bitstream_skip(&s->bc, 2);
+ last = bitstream_read_bit(&s->bc);
+ run = bitstream_read(&s->bc, 6);
+
+ if (IS_3IV1) {
+ level = bitstream_read_signed(&s->bc, 12);
+ } else {
+ if (bitstream_read(&s->bc, 1) == 0) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "1. marker bit missing in 3. esc\n");
+ return -1;
}
- if (level > 0)
- level = level * qmul + qadd;
- else
- level = level * qmul - qadd;
-
- if ((unsigned)(level + 2048) > 4095) {
- if (s->avctx->err_recognition &
AV_EF_BITSTREAM) {
- if (level > 2560 || level < -2560) {
- av_log(s->avctx, AV_LOG_ERROR,
- "|level| overflow in 3. esc,
qp=%d\n",
- s->qscale);
- return -1;
- }
- }
- level = level < 0 ? -2048 : 2047;
+ level = bitstream_read_signed(&s->bc, 12);
+
+ if (bitstream_read(&s->bc, 1) == 0) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "2. marker bit missing in 3. esc\n");
+ return -1;
}
+ }
- i += run + 1;
- if (last)
- i += 192;
- } else {
- /* second escape */
- bitstream_skip(&s->bc, 2);
- BITSTREAM_RL_VLC(level, run, &s->bc, rl_vlc,
TEX_VLC_BITS, 2);
- i += run + rl->max_run[run >> 7][level / qmul]
+ 1; // FIXME opt indexing
- level = (level ^ bitstream_peek_signed(&s->bc, 1))
-
- bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
+ if (level > 0)
+ level = level * qmul + qadd;
+ else
+ level = level * qmul - qadd;
+
+ if ((unsigned)(level + 2048) > 4095) {
+ if (s->avctx->err_recognition & AV_EF_BITSTREAM) {
+ if (level > 2560 || level < -2560) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "|level| overflow in 3. esc,
qp=%d\n",
+ s->qscale);
+ return -1;
+ }
+ }
+ level = level < 0 ? -2048 : 2047;
}
+
+ i += run + 1;
+ if (last)
+ i += 192;
} else {
- /* first escape */
- bitstream_skip(&s->bc, 1);
+ /* second escape */
+ bitstream_skip(&s->bc, 2);
BITSTREAM_RL_VLC(level, run, &s->bc, rl_vlc,
TEX_VLC_BITS, 2);
- i += run;
- level = level + rl->max_level[run >> 7][(run - 1) &
63] * qmul; // FIXME opt indexing
+ i += run + rl->max_run[run >> 7][level / qmul] + 1;
// FIXME opt indexing
level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
bitstream_peek_signed(&s->bc, 1);
bitstream_skip(&s->bc, 1);
}
+ } else {
+ /* first escape */
+ bitstream_skip(&s->bc, 1);
+ BITSTREAM_RL_VLC(level, run, &s->bc, rl_vlc, TEX_VLC_BITS,
2);
+ i += run;
+ level = level + rl->max_level[run >> 7][(run - 1) & 63] *
qmul; // FIXME opt indexing
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
+ bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
}
- } else {
- i += run;
- level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
- bitstream_peek_signed(&s->bc, 1);
- bitstream_skip(&s->bc, 1);
}
- if (i > 62) {
- i -= 192;
- if (i & (~63)) {
- av_log(s->avctx, AV_LOG_ERROR,
- "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
- return -1;
- }
-
- block[scan_table[i]] = level;
- break;
+ } else {
+ i += run;
+ level = (level ^ bitstream_peek_signed(&s->bc, 1)) -
+ bitstream_peek_signed(&s->bc, 1);
+ bitstream_skip(&s->bc, 1);
+ }
+ if (i > 62) {
+ i -= 192;
+ if (i & (~63)) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
+ return -1;
}
block[scan_table[i]] = level;
+ break;
}
+
+ block[scan_table[i]] = level;
}
not_coded:
diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c
index 500f06b..fd7e8e2 100644
--- a/libavcodec/msmpeg4dec.c
+++ b/libavcodec/msmpeg4dec.c
@@ -710,7 +710,6 @@ int ff_msmpeg4_decode_block(MpegEncContext * s, int16_t *
block,
scan_table = s->inter_scantable.permutated;
rl_vlc= rl->rl_vlc[s->qscale];
}
- {
for(;;) {
BITSTREAM_RL_VLC(level, run, &s->bc, rl_vlc, TEX_VLC_BITS, 2);
if (level==0) {
@@ -860,7 +859,6 @@ int ff_msmpeg4_decode_block(MpegEncContext * s, int16_t *
block,
block[scan_table[i]] = level;
}
- }
not_coded:
if (s->mb_intra) {
ff_mpeg4_pred_ac(s, block, n, dc_pred_dir);
diff --git a/libavcodec/mxpegdec.c b/libavcodec/mxpegdec.c
index a300c6a..5de2224 100644
--- a/libavcodec/mxpegdec.c
+++ b/libavcodec/mxpegdec.c
@@ -203,117 +203,111 @@ static int mxpeg_decode_frame(AVCodecContext *avctx,
&unescaped_buf_ptr,
&unescaped_buf_size);
if (start_code < 0)
goto the_end;
- {
- bitstream_init8(&jpg->bc, unescaped_buf_ptr, unescaped_buf_size);
+ bitstream_init8(&jpg->bc, unescaped_buf_ptr, unescaped_buf_size);
- if (start_code >= APP0 && start_code <= APP15) {
- mxpeg_decode_app(s, unescaped_buf_ptr, unescaped_buf_size);
- }
+ if (start_code >= APP0 && start_code <= APP15) {
+ mxpeg_decode_app(s, unescaped_buf_ptr, unescaped_buf_size);
+ }
- switch (start_code) {
- case SOI:
- if (jpg->got_picture) //emulating EOI
- goto the_end;
- break;
- case EOI:
+ switch (start_code) {
+ case SOI:
+ if (jpg->got_picture) // emulating EOI
goto the_end;
- case DQT:
- ret = ff_mjpeg_decode_dqt(jpg);
- if (ret < 0) {
- av_log(avctx, AV_LOG_ERROR,
- "quantization table decode error\n");
- return ret;
- }
- break;
- case DHT:
- ret = ff_mjpeg_decode_dht(jpg);
- if (ret < 0) {
- av_log(avctx, AV_LOG_ERROR,
- "huffman table decode error\n");
- return ret;
- }
- break;
- case COM:
- ret = mxpeg_decode_com(s, unescaped_buf_ptr,
- unescaped_buf_size);
- if (ret < 0)
- return ret;
+ break;
+ case EOI:
+ goto the_end;
+ case DQT:
+ ret = ff_mjpeg_decode_dqt(jpg);
+ if (ret < 0) {
+ av_log(avctx, AV_LOG_ERROR,
+ "quantization table decode error\n");
+ return ret;
+ }
+ break;
+ case DHT:
+ ret = ff_mjpeg_decode_dht(jpg);
+ if (ret < 0) {
+ av_log(avctx, AV_LOG_ERROR, "huffman table decode error\n");
+ return ret;
+ }
+ break;
+ case COM:
+ ret = mxpeg_decode_com(s, unescaped_buf_ptr, unescaped_buf_size);
+ if (ret < 0)
+ return ret;
+ break;
+ case SOF0:
+ s->got_sof_data = 0;
+ ret = ff_mjpeg_decode_sof(jpg);
+ if (ret < 0) {
+ av_log(avctx, AV_LOG_ERROR, "SOF data decode error\n");
+ return ret;
+ }
+ if (jpg->interlaced) {
+ av_log(avctx, AV_LOG_ERROR,
+ "Interlaced mode not supported in MxPEG\n");
+ return AVERROR(EINVAL);
+ }
+ s->got_sof_data = 1;
+ break;
+ case SOS:
+ if (!s->got_sof_data) {
+ av_log(avctx, AV_LOG_WARNING,
+ "Can not process SOS without SOF data, skipping\n");
break;
- case SOF0:
- s->got_sof_data = 0;
- ret = ff_mjpeg_decode_sof(jpg);
- if (ret < 0) {
- av_log(avctx, AV_LOG_ERROR,
- "SOF data decode error\n");
- return ret;
- }
- if (jpg->interlaced) {
- av_log(avctx, AV_LOG_ERROR,
- "Interlaced mode not supported in MxPEG\n");
- return AVERROR(EINVAL);
+ }
+ if (!jpg->got_picture) {
+ if (jpg->first_picture) {
+ av_log(avctx, AV_LOG_WARNING,
+ "First picture has no SOF, skipping\n");
+ break;
}
- s->got_sof_data = 1;
- break;
- case SOS:
- if (!s->got_sof_data) {
+ if (!s->got_mxm_bitmask){
av_log(avctx, AV_LOG_WARNING,
- "Can not process SOS without SOF data, skipping\n");
+ "Non-key frame has no MXM, skipping\n");
break;
}
- if (!jpg->got_picture) {
- if (jpg->first_picture) {
- av_log(avctx, AV_LOG_WARNING,
- "First picture has no SOF, skipping\n");
- break;
- }
- if (!s->got_mxm_bitmask){
- av_log(avctx, AV_LOG_WARNING,
- "Non-key frame has no MXM, skipping\n");
- break;
- }
- /* use stored SOF data to allocate current picture */
- av_frame_unref(jpg->picture_ptr);
- if (ff_get_buffer(avctx, jpg->picture_ptr,
- AV_GET_BUFFER_FLAG_REF) < 0) {
- av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
- return AVERROR(ENOMEM);
- }
- jpg->picture_ptr->pict_type = AV_PICTURE_TYPE_P;
- jpg->picture_ptr->key_frame = 0;
- jpg->got_picture = 1;
- } else {
- jpg->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
- jpg->picture_ptr->key_frame = 1;
+ /* use stored SOF data to allocate current picture */
+ av_frame_unref(jpg->picture_ptr);
+ if (ff_get_buffer(avctx, jpg->picture_ptr,
+ AV_GET_BUFFER_FLAG_REF) < 0) {
+ av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
+ return AVERROR(ENOMEM);
}
+ jpg->picture_ptr->pict_type = AV_PICTURE_TYPE_P;
+ jpg->picture_ptr->key_frame = 0;
+ jpg->got_picture = 1;
+ } else {
+ jpg->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
+ jpg->picture_ptr->key_frame = 1;
+ }
+
+ if (s->got_mxm_bitmask) {
+ AVFrame *reference_ptr = s->picture[s->picture_index ^ 1];
+ if (mxpeg_check_dimensions(s, jpg, reference_ptr) < 0)
+ break;
- if (s->got_mxm_bitmask) {
- AVFrame *reference_ptr = s->picture[s->picture_index ^ 1];
- if (mxpeg_check_dimensions(s, jpg, reference_ptr) < 0)
- break;
-
- /* allocate dummy reference picture if needed */
- if (!reference_ptr->data[0] &&
- ff_get_buffer(avctx, reference_ptr,
- AV_GET_BUFFER_FLAG_REF) < 0) {
- av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
- return AVERROR(ENOMEM);
- }
-
- ret = ff_mjpeg_decode_sos(jpg, s->mxm_bitmask,
reference_ptr);
- if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
- return ret;
- } else {
- ret = ff_mjpeg_decode_sos(jpg, NULL, NULL);
- if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
- return ret;
+ /* allocate dummy reference picture if needed */
+ if (!reference_ptr->data[0] &&
+ ff_get_buffer(avctx, reference_ptr,
+ AV_GET_BUFFER_FLAG_REF) < 0) {
+ av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
+ return AVERROR(ENOMEM);
}
- break;
+ ret = ff_mjpeg_decode_sos(jpg, s->mxm_bitmask, reference_ptr);
+ if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
+ return ret;
+ } else {
+ ret = ff_mjpeg_decode_sos(jpg, NULL, NULL);
+ if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
+ return ret;
}
- buf_ptr += (bitstream_tell(&jpg->bc) + 7) >> 3;
+ break;
}
+ buf_ptr += (bitstream_tell(&jpg->bc) + 7) >> 3;
}
the_end:
--
2.7.3
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel