mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/decode: do not treat discarded frames as eof when draining
Fix fate failures: make fate-mov THREADS=32 Reviewed-by: wm4 <nfxjfg@googlemail.com> Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
This commit is contained in:
parent
2da5bf4c2f
commit
9b4648a2cd
|
@ -369,7 +369,7 @@ static int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame)
|
|||
AVPacket *pkt = ds->in_pkt;
|
||||
// copy to ensure we do not change pkt
|
||||
AVPacket tmp;
|
||||
int got_frame, did_split;
|
||||
int got_frame, actual_got_frame, did_split;
|
||||
int ret;
|
||||
|
||||
if (!pkt->data && !avci->draining) {
|
||||
|
@ -431,6 +431,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
}
|
||||
}
|
||||
emms_c();
|
||||
actual_got_frame = got_frame;
|
||||
|
||||
if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) {
|
||||
if (frame->flags & AV_FRAME_FLAG_DISCARD)
|
||||
|
@ -568,8 +569,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));
|
||||
#endif
|
||||
|
||||
/* do not stop draining when got_frame != 0 or ret < 0 */
|
||||
if (avctx->internal->draining && !got_frame) {
|
||||
/* do not stop draining when actual_got_frame != 0 or ret < 0 */
|
||||
/* got_frame == 0 but actual_got_frame != 0 when frame is discarded */
|
||||
if (avctx->internal->draining && !actual_got_frame) {
|
||||
if (ret < 0) {
|
||||
/* prevent infinite loop if a decoder wrongly always return error on draining */
|
||||
/* reasonable nb_errors_max = maximum b frames + thread count */
|
||||
|
|
Loading…
Reference in New Issue