diff options
author | Janne Salonen <jsalonen@google.com> | 2012-03-19 09:35:09 +0200 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2012-03-24 08:22:05 -0700 |
commit | 14ba7472dca38323104d05a3eacd0eb2890b00c6 (patch) | |
tree | 93d2e7e56d966a7e4cfbcd73641f949ea179a39d /libavcodec/vp8.c | |
parent | 494bce6224c7da6a174fb16a49ed26e5aab32af1 (diff) | |
download | ffmpeg-14ba7472dca38323104d05a3eacd0eb2890b00c6.tar.gz |
vp8: fix update_lf_deltas in libavcodec/vp8.c
lf_delta.ref[i] and lf_delta.mode[i] were incorrectly reset to 0 if
specific delta value was not updated. Fixed to keep the previous value
if flag indicates that element in question is not updated.
Signed-off-by: Janne Salonen <jsalonen@google.com>
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Diffstat (limited to 'libavcodec/vp8.c')
-rw-r--r-- | libavcodec/vp8.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index 36518d5f7e..6da835b2d1 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -162,11 +162,23 @@ static void update_lf_deltas(VP8Context *s) VP56RangeCoder *c = &s->c; int i; - for (i = 0; i < 4; i++) - s->lf_delta.ref[i] = vp8_rac_get_sint(c, 6); + for (i = 0; i < 4; i++) { + if (vp8_rac_get(c)) { + s->lf_delta.ref[i] = vp8_rac_get_uint(c, 6); + + if (vp8_rac_get(c)) + s->lf_delta.ref[i] = -s->lf_delta.ref[i]; + } + } + + for (i = MODE_I4x4; i <= VP8_MVMODE_SPLIT; i++) { + if (vp8_rac_get(c)) { + s->lf_delta.mode[i] = vp8_rac_get_uint(c, 6); - for (i = MODE_I4x4; i <= VP8_MVMODE_SPLIT; i++) - s->lf_delta.mode[i] = vp8_rac_get_sint(c, 6); + if (vp8_rac_get(c)) + s->lf_delta.mode[i] = -s->lf_delta.mode[i]; + } + } } static int setup_partitions(VP8Context *s, const uint8_t *buf, int buf_size) |