You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avcodec/vt: Don't restart decoder when confronted with ReferenceMissingErr
Otherwise the decoder may enter an loop of repeated state resets. This can happen for streams with CRA but no IDR. Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
This commit is contained in:
@@ -728,8 +728,12 @@ static void videotoolbox_decoder_callback(void *opaque,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!image_buffer) {
|
if (!image_buffer) {
|
||||||
|
if (status != kVTVideoDecoderReferenceMissingErr)
|
||||||
|
vtctx->reconfig_needed = true;
|
||||||
|
|
||||||
av_log(vtctx->logctx, status ? AV_LOG_WARNING : AV_LOG_DEBUG,
|
av_log(vtctx->logctx, status ? AV_LOG_WARNING : AV_LOG_DEBUG,
|
||||||
"vt decoder cb: output image buffer is null: %i\n", status);
|
"vt decoder cb: output image buffer is null: %i, reconfig %d\n",
|
||||||
|
status, vtctx->reconfig_needed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1066,10 +1070,8 @@ int ff_videotoolbox_common_end_frame(AVCodecContext *avctx, AVFrame *frame)
|
|||||||
return AVERROR_UNKNOWN;
|
return AVERROR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vtctx->frame) {
|
if (!vtctx->frame)
|
||||||
vtctx->reconfig_needed = true;
|
|
||||||
return AVERROR_UNKNOWN;
|
return AVERROR_UNKNOWN;
|
||||||
}
|
|
||||||
|
|
||||||
return videotoolbox_buffer_create(avctx, frame);
|
return videotoolbox_buffer_create(avctx, frame);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user