diff options
author | Mason Carter <void.main.argc.argv@gmail.com> | 2013-12-21 17:27:18 -0800 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2013-12-22 16:07:03 +0100 |
commit | 7eec11463fca6bad344f194acdcebf9e6743cf6d (patch) | |
tree | ed87792dab29c43dc8fe6c99064134ca0f0b36c8 | |
parent | 0d32483a11b08448f4fcb9eae765a87ddb228854 (diff) | |
download | ffmpeg-7eec11463fca6bad344f194acdcebf9e6743cf6d.tar.gz |
VC1: Fix intensity compensation performance regression
Fix https://trac.ffmpeg.org/ticket/3204
The problem was that intensity compensation was always used once it was
encountered. This is because v->next_use_ic was never set back to zero.
To fix this, when resetting v->next_luty/uv, also reset v->next_use_ic.
This improved (restored) performance by 85% when decoding
http://bit.ly/bbbwmv
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit ed5bed4152203aed8cce01a679bed67bbda8903f)
-rw-r--r-- | libavcodec/vc1.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index f7558116d1..2b872476df 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -621,6 +621,10 @@ static void rotate_luts(VC1Context *v) INIT_LUT(32, 0, v->curr_luty[0], v->curr_lutuv[0], 0); INIT_LUT(32, 0, v->curr_luty[1], v->curr_lutuv[1], 0); v->curr_use_ic = 0; + if (v->curr_luty == v->next_luty) { + // If we just initialized next_lut, clear next_use_ic to match. + v->next_use_ic = 0; + } } int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb) |