From: stuhlo <stu...@gmail.com> 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`. --- libavcodec/cuviddec.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index a5f33e6..f1cc9aa 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -336,7 +336,9 @@ 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 +595,7 @@ 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) -- 1.8.3.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".