mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
avcodec/rv34: Delay failure return for B frames with a missing reference
Failing earlier causes the context to be insufficiently initialized which can break decoding future frames with threads Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
80d23d9d32
commit
fa5358f07d
@ -1645,6 +1645,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
|
||||
int slice_count;
|
||||
const uint8_t *slices_hdr = NULL;
|
||||
int last = 0;
|
||||
int faulty_b = 0;
|
||||
|
||||
/* no supplementary picture */
|
||||
if (buf_size == 0) {
|
||||
@ -1682,7 +1683,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
|
||||
si.type == AV_PICTURE_TYPE_B) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid decoder state: B-frame without "
|
||||
"reference data.\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
faulty_b = 1;
|
||||
}
|
||||
if( (avctx->skip_frame >= AVDISCARD_NONREF && si.type==AV_PICTURE_TYPE_B)
|
||||
|| (avctx->skip_frame >= AVDISCARD_NONKEY && si.type!=AV_PICTURE_TYPE_I)
|
||||
@ -1772,6 +1773,8 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
|
||||
"multithreading mode (start MB is %d).\n", si.start);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
if (faulty_b)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
for(i = 0; i < slice_count; i++){
|
||||
int offset = get_slice_offset(avctx, slices_hdr, i);
|
||||
|
Loading…
x
Reference in New Issue
Block a user