summaryrefslogtreecommitdiff
path: root/vp10/decoder
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2015-09-25 20:32:14 -0400
committerRonald S. Bultje <rsbultje@gmail.com>2015-09-25 20:32:14 -0400
commit8979e9e387f0308c7cf23929e510f147db652a43 (patch)
tree1461d5b2e8ddeff34e22c79dcfdf2b6e2a83a430 /vp10/decoder
parent034c28b0a415e6289f66157766a022f056bca2f1 (diff)
downloadlibvpx-8979e9e387f0308c7cf23929e510f147db652a43.tar
libvpx-8979e9e387f0308c7cf23929e510f147db652a43.tar.gz
libvpx-8979e9e387f0308c7cf23929e510f147db652a43.tar.bz2
libvpx-8979e9e387f0308c7cf23929e510f147db652a43.zip
vp10: code reference_mode in uncompressed header.
See issue 1041 point 2. Change-Id: I6fc6427b1a0edff828e39d43428e3271491f8ac5
Diffstat (limited to 'vp10/decoder')
-rw-r--r--vp10/decoder/decodeframe.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/vp10/decoder/decodeframe.c b/vp10/decoder/decodeframe.c
index bbea6c789..e9b26fb74 100644
--- a/vp10/decoder/decodeframe.c
+++ b/vp10/decoder/decodeframe.c
@@ -124,6 +124,18 @@ static void read_inter_mode_probs(FRAME_CONTEXT *fc, vpx_reader *r) {
vp10_diff_update_prob(r, &fc->inter_mode_probs[i][j]);
}
+#if CONFIG_MISC_FIXES
+static REFERENCE_MODE read_frame_reference_mode(const VP10_COMMON *cm,
+ struct vpx_read_bit_buffer *rb) {
+ if (is_compound_reference_allowed(cm)) {
+ return vpx_rb_read_bit(rb) ? REFERENCE_MODE_SELECT
+ : (vpx_rb_read_bit(rb) ? COMPOUND_REFERENCE
+ : SINGLE_REFERENCE);
+ } else {
+ return SINGLE_REFERENCE;
+ }
+}
+#else
static REFERENCE_MODE read_frame_reference_mode(const VP10_COMMON *cm,
vpx_reader *r) {
if (is_compound_reference_allowed(cm)) {
@@ -134,6 +146,7 @@ static REFERENCE_MODE read_frame_reference_mode(const VP10_COMMON *cm,
return SINGLE_REFERENCE;
}
}
+#endif
static void read_frame_reference_mode_probs(VP10_COMMON *cm, vpx_reader *r) {
FRAME_CONTEXT *const fc = cm->fc;
@@ -2023,6 +2036,7 @@ static size_t read_uncompressed_header(VP10Decoder *pbi,
setup_segmentation_dequant(cm);
#if CONFIG_MISC_FIXES
cm->tx_mode = xd->lossless ? ONLY_4X4 : read_tx_mode(rb);
+ cm->reference_mode = read_frame_reference_mode(cm, rb);
#endif
setup_tile_info(cm, rb);
@@ -2072,7 +2086,9 @@ static int read_compressed_header(VP10Decoder *pbi, const uint8_t *data,
for (i = 0; i < INTRA_INTER_CONTEXTS; i++)
vp10_diff_update_prob(&r, &fc->intra_inter_prob[i]);
+#if !CONFIG_MISC_FIXES
cm->reference_mode = read_frame_reference_mode(cm, &r);
+#endif
if (cm->reference_mode != SINGLE_REFERENCE)
setup_compound_reference_mode(cm);
read_frame_reference_mode_probs(cm, &r);