diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2015-09-08 14:14:28 -0400 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2015-09-11 15:12:02 -0400 |
commit | 62da0bf162f369cd99f2ffe37e4cb21810422e37 (patch) | |
tree | 677c9c54612cf42a930cb89e03e954b179f69dfd /vp10/decoder | |
parent | f79f71fc2209e9e69a280c71dd421bd3287ff155 (diff) | |
download | libvpx-62da0bf162f369cd99f2ffe37e4cb21810422e37.tar libvpx-62da0bf162f369cd99f2ffe37e4cb21810422e37.tar.gz libvpx-62da0bf162f369cd99f2ffe37e4cb21810422e37.tar.bz2 libvpx-62da0bf162f369cd99f2ffe37e4cb21810422e37.zip |
Make reset_frame_context an enum.
In vp9, [0] and [1] had identical meaning, so merge them into a
single value. Make it impossible to code RESET_FRAME_CONTEXT_NONE
for intra_only frames, since that is a non-sensical combination.
See issue 1030.
Change-Id: If450c74162d35ca63a9d279beaa53ff9cdd6612b
Diffstat (limited to 'vp10/decoder')
-rw-r--r-- | vp10/decoder/decodeframe.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/vp10/decoder/decodeframe.c b/vp10/decoder/decodeframe.c index e3c97c68c..2c308d083 100644 --- a/vp10/decoder/decodeframe.c +++ b/vp10/decoder/decodeframe.c @@ -1849,8 +1849,33 @@ static size_t read_uncompressed_header(VP10Decoder *pbi, } else { cm->intra_only = cm->show_frame ? 0 : vpx_rb_read_bit(rb); - cm->reset_frame_context = cm->error_resilient_mode ? - 0 : vpx_rb_read_literal(rb, 2); + if (cm->error_resilient_mode) { + cm->reset_frame_context = RESET_FRAME_CONTEXT_ALL; + } else { +#if CONFIG_MISC_FIXES + if (cm->intra_only) { + cm->reset_frame_context = + vpx_rb_read_bit(rb) ? RESET_FRAME_CONTEXT_ALL + : RESET_FRAME_CONTEXT_CURRENT; + } else { + cm->reset_frame_context = + vpx_rb_read_bit(rb) ? RESET_FRAME_CONTEXT_CURRENT + : RESET_FRAME_CONTEXT_NONE; + if (cm->reset_frame_context == RESET_FRAME_CONTEXT_CURRENT) + cm->reset_frame_context = + vpx_rb_read_bit(rb) ? RESET_FRAME_CONTEXT_ALL + : RESET_FRAME_CONTEXT_CURRENT; + } +#else + static const RESET_FRAME_CONTEXT_MODE reset_frame_context_conv_tbl[4] = { + RESET_FRAME_CONTEXT_NONE, RESET_FRAME_CONTEXT_NONE, + RESET_FRAME_CONTEXT_CURRENT, RESET_FRAME_CONTEXT_ALL + }; + + cm->reset_frame_context = + reset_frame_context_conv_tbl[vpx_rb_read_literal(rb, 2)]; +#endif + } if (cm->intra_only) { if (!vp10_read_sync_code(rb)) |