return pic_data_size;
}
-#define DECODE_CODEWORD(val, codebook) \
+#define DECODE_CODEWORD(val, codebook, SKIP) \
do { \
unsigned int rice_order, exp_order, switch_bits; \
unsigned int q, buf, bits; \
\
if (q > switch_bits) { /* exp golomb */ \
bits = exp_order - switch_bits + (q<<1); \
- if (bits > MIN_CACHE_BITS) \
+ if (bits > FFMIN(MIN_CACHE_BITS, 31)) \
return AVERROR_INVALIDDATA; \
val = SHOW_UBITS(re, gb, bits) - (1 << exp_order) + \
((switch_bits + 1) << rice_order); \
- SKIP_BITS(re, gb, bits); \
+ SKIP(re, gb, bits); \
} else if (rice_order) { \
SKIP_BITS(re, gb, q+1); \
val = (q << rice_order) + SHOW_UBITS(re, gb, rice_order); \
- SKIP_BITS(re, gb, rice_order); \
+ SKIP(re, gb, rice_order); \
} else { \
val = q; \
- SKIP_BITS(re, gb, q+1); \
+ SKIP(re, gb, q+1); \
} \
} while (0)
OPEN_READER(re, gb);
- DECODE_CODEWORD(code, FIRST_DC_CB);
+ DECODE_CODEWORD(code, FIRST_DC_CB, LAST_SKIP_BITS);
prev_dc = TOSIGNED(code);
out[0] = prev_dc;
code = 5;
sign = 0;
for (i = 1; i < blocks_per_slice; i++, out += 64) {
- DECODE_CODEWORD(code, dc_codebook[FFMIN(code, 6U)]);
+ DECODE_CODEWORD(code, dc_codebook[FFMIN(code, 6U)], LAST_SKIP_BITS);
if(code) sign ^= -(code & 1);
else sign = 0;
prev_dc += (((code + 1) >> 1) ^ sign) - sign;
if (!bits_left || (bits_left < 32 && !SHOW_UBITS(re, gb, bits_left)))
break;
- DECODE_CODEWORD(run, run_to_cb[FFMIN(run, 15)]);
+ DECODE_CODEWORD(run, run_to_cb[FFMIN(run, 15)], LAST_SKIP_BITS);
pos += run + 1;
if (pos >= max_coeffs) {
av_log(avctx, AV_LOG_ERROR, "ac tex damaged %d, %d\n", pos, max_coeffs);
return AVERROR_INVALIDDATA;
}
- DECODE_CODEWORD(level, lev_to_cb[FFMIN(level, 9)]);
+ DECODE_CODEWORD(level, lev_to_cb[FFMIN(level, 9)], SKIP_BITS);
level += 1;
i = pos >> log2_block_count;
const int16_t *qmat)
{
ProresContext *ctx = avctx->priv_data;
- LOCAL_ALIGNED_16(int16_t, blocks, [8*4*64]);
+ LOCAL_ALIGNED_32(int16_t, blocks, [8*4*64]);
int16_t *block;
GetBitContext gb;
int i, blocks_per_slice = slice->mb_count<<2;
const int16_t *qmat, int log2_blocks_per_mb)
{
ProresContext *ctx = avctx->priv_data;
- LOCAL_ALIGNED_16(int16_t, blocks, [8*4*64]);
+ LOCAL_ALIGNED_32(int16_t, blocks, [8*4*64]);
int16_t *block;
GetBitContext gb;
int i, j, blocks_per_slice = slice->mb_count << log2_blocks_per_mb;
{
GetBitContext gb;
int i;
- LOCAL_ALIGNED_16(int16_t, blocks, [8*4*64]);
+ LOCAL_ALIGNED_32(int16_t, blocks, [8*4*64]);
int16_t *block;
for (i = 0; i < blocks_per_slice<<2; i++)