diff options
author | stuhlo <stuhlo@gmail.com> | 2021-06-11 12:27:30 +0200 |
---|---|---|
committer | Timo Rothenpieler <timo@rothenpieler.org> | 2021-06-11 16:50:53 +0200 |
commit | a501d559050f395f22153a7954b193feb18325e4 (patch) | |
tree | 05524b177f867112d67652bd0d18f31ee0551a33 | |
parent | 94af6414ab74b9785bee89bd0a167c4788d6b598 (diff) | |
download | ffmpeg-a501d559050f395f22153a7954b193feb18325e4.tar.gz |
avcodec/cuviddec: correctly set key_frame with interlaced content
Fixes #9283
This fixes setting of 'key_frame' flag in AVFrame when input h264 packets represents individual fields of interlaced video.
In this case, pairs of two consecutive fields represents a single decoded picture and have identical 'CurrPicIdx', however, only
the first field is entirely intra-coded and has the flag 'intra_pic_flag' set and the second field was resetting the flag before
it was even read in the function 'cuvid_output_frame'.
Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
-rw-r--r-- | libavcodec/cuviddec.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index a5f33e6fc1..c3496259dc 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -336,7 +336,8 @@ static int CUDAAPI cuvid_handle_picture_decode(void *opaque, CUVIDPICPARAMS* pic av_log(avctx, AV_LOG_TRACE, "pfnDecodePicture\n"); - ctx->key_frame[picparams->CurrPicIdx] = picparams->intra_pic_flag; + if(picparams->intra_pic_flag) + ctx->key_frame[picparams->CurrPicIdx] = picparams->intra_pic_flag; ctx->internal_error = CHECK_CU(ctx->cvdl->cuvidDecodePicture(ctx->cudecoder, picparams)); if (ctx->internal_error < 0) @@ -593,6 +594,8 @@ static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame) } frame->key_frame = ctx->key_frame[parsed_frame.dispinfo.picture_index]; + ctx->key_frame[parsed_frame.dispinfo.picture_index] = 0; + frame->width = avctx->width; frame->height = avctx->height; if (avctx->pkt_timebase.num && avctx->pkt_timebase.den) |