summaryrefslogtreecommitdiff
path: root/vp10/decoder
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2015-09-08 14:14:28 -0400
committerRonald S. Bultje <rsbultje@gmail.com>2015-09-11 15:12:02 -0400
commit62da0bf162f369cd99f2ffe37e4cb21810422e37 (patch)
tree677c9c54612cf42a930cb89e03e954b179f69dfd /vp10/decoder
parentf79f71fc2209e9e69a280c71dd421bd3287ff155 (diff)
downloadlibvpx-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.c29
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))