diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index fde4e02..0ea14c6 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -112,7 +112,7 @@ static inline int mpeg1_decode_block_intra(MpegEncContext *s, DCTELEM *block, in break; } else if (level != 0) { i += run; - j = scantable[i]; + j = scantable[i & 63]; level = (level * qscale * quant_matrix[j]) >> 4; level = (level - 1) | 1; level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); @@ -128,7 +128,7 @@ static inline int mpeg1_decode_block_intra(MpegEncContext *s, DCTELEM *block, in level = SHOW_UBITS(re, &s->gb, 8) ; LAST_SKIP_BITS(re, &s->gb, 8); } i += run; - j = scantable[i]; + j = scantable[i & 63]; if (level < 0) { level = -level; level = (level * qscale * quant_matrix[j]) >> 4; @@ -187,7 +187,7 @@ static inline int mpeg1_decode_block_inter(MpegEncContext *s, DCTELEM *block, in if (level != 0) { i += run; - j = scantable[i]; + j = scantable[i & 63]; level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5; level = (level - 1) | 1; level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); @@ -203,7 +203,7 @@ static inline int mpeg1_decode_block_inter(MpegEncContext *s, DCTELEM *block, in level = SHOW_UBITS(re, &s->gb, 8) ; SKIP_BITS(re, &s->gb, 8); } i += run; - j = scantable[i]; + j = scantable[i & 63]; if (level < 0) { level = -level; level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5; @@ -262,7 +262,7 @@ static inline int mpeg1_fast_decode_block_inter(MpegEncContext *s, DCTELEM *bloc if (level != 0) { i += run; - j = scantable[i]; + j = scantable[i & 63]; level = ((level * 2 + 1) * qscale) >> 1; level = (level - 1) | 1; level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); @@ -278,7 +278,7 @@ static inline int mpeg1_fast_decode_block_inter(MpegEncContext *s, DCTELEM *bloc level = SHOW_UBITS(re, &s->gb, 8) ; SKIP_BITS(re, &s->gb, 8); } i += run; - j = scantable[i]; + j = scantable[i & 63]; if (level < 0) { level = -level; level = ((level * 2 + 1) * qscale) >> 1; @@ -343,7 +343,7 @@ static inline int mpeg2_decode_block_non_intra(MpegEncContext *s, DCTELEM *block if (level != 0) { i += run; - j = scantable[i]; + j = scantable[i & 63]; level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5; level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); SKIP_BITS(re, &s->gb, 1); @@ -354,7 +354,7 @@ static inline int mpeg2_decode_block_non_intra(MpegEncContext *s, DCTELEM *block level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12); i += run; - j = scantable[i]; + j = scantable[i & 63]; if (level < 0) { level = ((-level * 2 + 1) * qscale * quant_matrix[j]) >> 5; level = -level; @@ -412,7 +412,7 @@ static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext *s, if (level != 0) { i += run; - j = scantable[i]; + j = scantable[i & 63]; level = ((level * 2 + 1) * qscale) >> 1; level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); SKIP_BITS(re, &s->gb, 1); @@ -423,7 +423,7 @@ static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext *s, level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12); i += run; - j = scantable[i]; + j = scantable[i & 63]; if (level < 0) { level = ((-level * 2 + 1) * qscale) >> 1; level = -level; @@ -489,7 +489,7 @@ static inline int mpeg2_decode_block_intra(MpegEncContext *s, DCTELEM *block, in break; } else if (level != 0) { i += run; - j = scantable[i]; + j = scantable[i & 63]; level = (level * qscale * quant_matrix[j]) >> 4; level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_BITS(re, &s->gb, 1); @@ -499,7 +499,7 @@ static inline int mpeg2_decode_block_intra(MpegEncContext *s, DCTELEM *block, in UPDATE_CACHE(re, &s->gb); level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12); i += run; - j = scantable[i]; + j = scantable[i & 63]; if (level < 0) { level = (-level * qscale * quant_matrix[j]) >> 4; level = -level; @@ -526,6 +526,7 @@ static inline int mpeg2_decode_block_intra(MpegEncContext *s, DCTELEM *block, in static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s, DCTELEM *block, int n) { int level, dc, diff, j, run; + int i=0; int component; RLTable *rl; uint8_t * scantable = s->intra_scantable.permutated; @@ -562,8 +563,8 @@ static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s, DCTELEM *bloc if (level == 127) { break; } else if (level != 0) { - scantable += run; - j = *scantable; + i += run; + j = scantable[i & 63]; level = (level * qscale * quant_matrix[j]) >> 4; level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_BITS(re, &s->gb, 1); @@ -572,8 +573,8 @@ static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s, DCTELEM *bloc run = SHOW_UBITS(re, &s->gb, 6) + 1; LAST_SKIP_BITS(re, &s->gb, 6); UPDATE_CACHE(re, &s->gb); level = SHOW_SBITS(re, &s->gb, 12); SKIP_BITS(re, &s->gb, 12); - scantable += run; - j = *scantable; + i += run; + j = scantable[ i & 63]; if (level < 0) { level = (-level * qscale * quant_matrix[j]) >> 4; level = -level;