mirror of https://git.ffmpeg.org/ffmpeg.git
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>
This commit is contained in:
parent
94af6414ab
commit
a501d55905
|
@ -336,7 +336,8 @@ static int CUDAAPI cuvid_handle_picture_decode(void *opaque, CUVIDPICPARAMS* pic
|
||||||
|
|
||||||
av_log(avctx, AV_LOG_TRACE, "pfnDecodePicture\n");
|
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));
|
ctx->internal_error = CHECK_CU(ctx->cvdl->cuvidDecodePicture(ctx->cudecoder, picparams));
|
||||||
if (ctx->internal_error < 0)
|
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];
|
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->width = avctx->width;
|
||||||
frame->height = avctx->height;
|
frame->height = avctx->height;
|
||||||
if (avctx->pkt_timebase.num && avctx->pkt_timebase.den)
|
if (avctx->pkt_timebase.num && avctx->pkt_timebase.den)
|
||||||
|
|
Loading…
Reference in New Issue