diff options
author | James Zern <jzern@google.com> | 2014-09-09 18:55:20 -0700 |
---|---|---|
committer | James Zern <jzern@google.com> | 2014-09-09 19:36:11 -0700 |
commit | 7ee073e61d17044d3952be3da9946220f52842c4 (patch) | |
tree | 9e4a9dde5af710af638e87c450af38a665e11151 /vp9/decoder/vp9_decodeframe.c | |
parent | 56b9c649a3e179580ea73b0a4b79e344ae574958 (diff) | |
download | libvpx-7ee073e61d17044d3952be3da9946220f52842c4.tar libvpx-7ee073e61d17044d3952be3da9946220f52842c4.tar.gz libvpx-7ee073e61d17044d3952be3da9946220f52842c4.tar.bz2 libvpx-7ee073e61d17044d3952be3da9946220f52842c4.zip |
vp9: wait for key/intra-only frame after corruption
don't bother decoding any further after receiving an earlier decode
error until a key/intra-only frame is encountered.
Change-Id: I381917b70d7a9e6f8d6de42e3d181bb113a4cec4
Diffstat (limited to 'vp9/decoder/vp9_decodeframe.c')
-rw-r--r-- | vp9/decoder/vp9_decodeframe.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/vp9/decoder/vp9_decodeframe.c b/vp9/decoder/vp9_decodeframe.c index 7b1ed5a96..38e35ca8c 100644 --- a/vp9/decoder/vp9_decodeframe.c +++ b/vp9/decoder/vp9_decodeframe.c @@ -1222,6 +1222,7 @@ static size_t read_uncompressed_header(VP9Decoder *pbi, } setup_frame_size(cm, rb); + pbi->need_resync = 0; } else { cm->intra_only = cm->show_frame ? 0 : vp9_rb_read_bit(rb); @@ -1245,6 +1246,7 @@ static size_t read_uncompressed_header(VP9Decoder *pbi, pbi->refresh_frame_flags = vp9_rb_read_literal(rb, REF_FRAMES); setup_frame_size(cm, rb); + pbi->need_resync = 0; } else { pbi->refresh_frame_flags = vp9_rb_read_literal(rb, REF_FRAMES); for (i = 0; i < REFS_PER_FRAME; ++i) { @@ -1273,6 +1275,12 @@ static size_t read_uncompressed_header(VP9Decoder *pbi, } } + if (pbi->need_resync) { + vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, + "Keyframe / intra-only frame required to reset decoder" + " state"); + } + if (!cm->error_resilient_mode) { cm->refresh_frame_context = vp9_rb_read_bit(rb); cm->frame_parallel_decoding_mode = vp9_rb_read_bit(rb); |