aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-01-26 02:53:17 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-01-26 02:57:40 +0100
commit7667afffb8dd54595ef2a959c385babd4c9c94cf (patch)
tree9e8e1aac81980d15eff6670f92863533d6ed32a5
parent6a92598e149bcc2b5ec0a6c0cd940ef19b9ae86f (diff)
downloadffmpeg-7667afffb8dd54595ef2a959c385babd4c9c94cf.tar.gz
avcodec/mpeg12dec: Revert Change to mpeg2_fast_decode_block_non_intra
This fixes the speed regression from 20626f53e9f41cb3db82329ed3db7d773cfa3a8f and still checks sufficiently to prevent out of allocated memory accesses due to the index Before: 1823 decicycles in mpeg2_fast_decode_block_non_intra, 8388493 runs, 115 skips After: 1808 decicycles in mpeg2_fast_decode_block_non_intra, 8388494 runs, 114 skips Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/mpeg12dec.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index f1899e0f9f..79fc65c03f 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -474,7 +474,6 @@ static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext *s,
if (level != 0) {
i += run;
- check_scantable_index(s, i);
j = scantable[i];
level = ((level * 2 + 1) * qscale) >> 1;
level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
@@ -486,7 +485,6 @@ 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;
- check_scantable_index(s, i);
j = scantable[i];
if (level < 0) {
level = ((-level * 2 + 1) * qscale) >> 1;
@@ -497,7 +495,7 @@ static inline int mpeg2_fast_decode_block_non_intra(MpegEncContext *s,
}
block[j] = level;
- if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF)
+ if (((int32_t)GET_CACHE(re, &s->gb)) <= (int32_t)0xBFFFFFFF || i > 63)
break;
UPDATE_CACHE(re, &s->gb);