summaryrefslogtreecommitdiff
path: root/vp9/decoder/vp9_decodeframe.c
diff options
context:
space:
mode:
authorJames Zern <jzern@google.com>2014-09-09 18:55:20 -0700
committerJames Zern <jzern@google.com>2014-09-09 19:36:11 -0700
commit7ee073e61d17044d3952be3da9946220f52842c4 (patch)
tree9e4a9dde5af710af638e87c450af38a665e11151 /vp9/decoder/vp9_decodeframe.c
parent56b9c649a3e179580ea73b0a4b79e344ae574958 (diff)
downloadlibvpx-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.c8
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);