diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2015-09-03 16:08:29 -0400 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2015-09-03 21:19:45 -0400 |
commit | d88cee37124a598e78e7eb17686a89a5533b9520 (patch) | |
tree | ac241092a46898108daa5a4ca415b3e2f30aa025 /vp10/decoder/decodeframe.c | |
parent | ecd34e6494599fb44ccc1f68a7c4ee988bc0307c (diff) | |
download | libvpx-d88cee37124a598e78e7eb17686a89a5533b9520.tar libvpx-d88cee37124a598e78e7eb17686a89a5533b9520.tar.gz libvpx-d88cee37124a598e78e7eb17686a89a5533b9520.tar.bz2 libvpx-d88cee37124a598e78e7eb17686a89a5533b9520.zip |
Make update_map/temporal_update fields implicit for keyframes.
These frame types cannot make bitstream parsing depend on previous
frames, so the hypothetical combinations of e.g. keyframe=1 and
update_map=0 or keyframe=1 and temporal_update=1 are non-sensical.
Therefore, make it impossible to code such combinations in the vp10
bitstream header.
See issue 1044.
Change-Id: I3f0a83d5c7e3989541a469a909471424a285239d
Diffstat (limited to 'vp10/decoder/decodeframe.c')
-rw-r--r-- | vp10/decoder/decodeframe.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/vp10/decoder/decodeframe.c b/vp10/decoder/decodeframe.c index 518dec017..e3c97c68c 100644 --- a/vp10/decoder/decodeframe.c +++ b/vp10/decoder/decodeframe.c @@ -1012,8 +1012,9 @@ static void read_coef_probs(FRAME_CONTEXT *fc, TX_MODE tx_mode, read_coef_probs_common(fc->coef_probs[tx_size], r); } -static void setup_segmentation(struct segmentation *seg, +static void setup_segmentation(VP10_COMMON *const cm, struct vpx_read_bit_buffer *rb) { + struct segmentation *const seg = &cm->seg; int i, j; seg->update_map = 0; @@ -1024,13 +1025,21 @@ static void setup_segmentation(struct segmentation *seg, return; // Segmentation map update - seg->update_map = vpx_rb_read_bit(rb); + if (frame_is_intra_only(cm) || cm->error_resilient_mode) { + seg->update_map = 1; + } else { + seg->update_map = vpx_rb_read_bit(rb); + } if (seg->update_map) { for (i = 0; i < SEG_TREE_PROBS; i++) seg->tree_probs[i] = vpx_rb_read_bit(rb) ? vpx_rb_read_literal(rb, 8) : MAX_PROB; - seg->temporal_update = vpx_rb_read_bit(rb); + if (frame_is_intra_only(cm) || cm->error_resilient_mode) { + seg->temporal_update = 0; + } else { + seg->temporal_update = vpx_rb_read_bit(rb); + } if (seg->temporal_update) { for (i = 0; i < PREDICTION_PROBS; i++) seg->pred_probs[i] = vpx_rb_read_bit(rb) ? vpx_rb_read_literal(rb, 8) @@ -1953,7 +1962,7 @@ static size_t read_uncompressed_header(VP10Decoder *pbi, setup_loopfilter(&cm->lf, rb); setup_quantization(cm, &pbi->mb, rb); - setup_segmentation(&cm->seg, rb); + setup_segmentation(cm, rb); setup_segmentation_dequant(cm); setup_tile_info(cm, rb); |