From 58c6dcb4b7e77ca87d6b4bd869b098603b5b11f1 Mon Sep 17 00:00:00 2001 From: Andrey Turkin Date: Sun, 29 May 2016 15:51:36 +0300 Subject: [PATCH] avcodec/nvenc: don't enqueue timestamps until a frame was accepted Otherwise timestamps/pending FIFOs would go out of sync if nvEncodePicture ever fails. Signed-off-by: Timo Rothenpieler --- libavcodec/nvenc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index a31c6e8b22..e8b57e43be 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -1602,8 +1602,6 @@ int ff_nvenc_encode_frame(AVCodecContext *avctx, AVPacket *pkt, pic_params.inputDuration = 0; nvenc_codec_specific_pic_params(avctx, &pic_params); - - timestamp_queue_enqueue(ctx->timestamp_list, frame->pts); } else { pic_params.encodePicFlags = NV_ENC_PIC_FLAG_EOS; } @@ -1613,8 +1611,10 @@ int ff_nvenc_encode_frame(AVCodecContext *avctx, AVPacket *pkt, nv_status != NV_ENC_ERR_NEED_MORE_INPUT) return nvenc_print_error(avctx, nv_status, "EncodePicture failed!"); - if (frame) + if (frame) { av_fifo_generic_write(ctx->output_surface_queue, &inSurf, sizeof(inSurf), NULL); + timestamp_queue_enqueue(ctx->timestamp_list, frame->pts); + } /* all the pending buffers are now ready for output */ if (nv_status == NV_ENC_SUCCESS) {