const int t7 = t3 - t1;
const int t8 = 17734 * blk[2 * step] - 42813 * blk[6 * step];
const int t9 = 17734 * blk[6 * step] + 42814 * blk[2 * step];
- const int tA = (blk[0 * step] - blk[4 * step] << 15) + rnd;
- const int tB = (blk[0 * step] + blk[4 * step] << 15) + rnd;
+ const int tA = (blk[0 * step] - blk[4 * step]) * 32768 + rnd;
+ const int tB = (blk[0 * step] + blk[4 * step]) * 32768 + rnd;
blk[0 * step] = ( t4 + t9 + tB) >> shift;
blk[1 * step] = ( t6 + t7 + t8 + tA) >> shift;
blk[2 * step] = ( t6 - t7 - t8 + tA) >> shift;
if (num_coeff > 64)
return AVERROR_INVALIDDATA;
- for (i = 0; i < num_coeff; i++)
- block[ff_zigzag_direct[i]] = get_se_golomb(gb) *
+ for (i = 0; i < num_coeff; i++) {
+ int v = get_se_golomb(gb);
+ if (v < -2048 || v > 2048)
+ return AVERROR_INVALIDDATA;
+ block[ff_zigzag_direct[i]] = v *
ctx->qmat[ff_zigzag_direct[i]];
+ }
fic_idct_put(dst, stride, block);