Commit 9d740127 authored by Anton Khirnov's avatar Anton Khirnov

h264: improve behaviour with invalid reference lists

Before 741b494f, when the reference list
modification description was invalid, the code would substitute the
corresponding reference from the initial ("default") reference list.
After that commit, it will just return an error.

Since there are apparently invalid samples in the wild that used to play
fine with the old code, it is a good idea to re-add some sort of error
resilience here. So, when the reference list modification results in a
missing frame, substitute a previous reference frame for it. The
relevant sample again decodes fine with the same output as previously.
parent 40d94967
...@@ -325,7 +325,10 @@ int ff_h264_decode_ref_pic_list_reordering(H264Context *h, H264SliceContext *sl) ...@@ -325,7 +325,10 @@ int ff_h264_decode_ref_pic_list_reordering(H264Context *h, H264SliceContext *sl)
for (index = 0; index < sl->ref_count[list]; index++) { for (index = 0; index < sl->ref_count[list]; index++) {
if (!sl->ref_list[list][index].parent) { if (!sl->ref_list[list][index].parent) {
av_log(h->avctx, AV_LOG_ERROR, "Missing reference picture\n"); av_log(h->avctx, AV_LOG_ERROR, "Missing reference picture\n");
return -1; if (index == 0 || h->avctx->err_recognition & AV_EF_EXPLODE)
return AVERROR_INVALIDDATA;
else
sl->ref_list[list][index] = sl->ref_list[list][index - 1];
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment