From 62da0bf162f369cd99f2ffe37e4cb21810422e37 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Tue, 8 Sep 2015 14:14:28 -0400 Subject: 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 --- vp10/decoder/decodeframe.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'vp10/decoder') 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)) -- cgit v1.2.3