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 <[email protected]> --- libavcodec/vp8.c | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-) diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index dab26a6..d827945 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) -- 1.7.7.3
_______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
