Message ID | CAO1_vfQtxEKQAWjwrjqxavwM9w4fZyqeDpnWe01WzdRp=5_OqA@mail.gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avcodec/cuviddec: update parser ulMaxNumDecodeSurfaces | expand |
Context | Check | Description |
---|---|---|
andriy/configure_x86 | warning | Failed to apply patch |
yinshiyou/configure_loongarch64 | warning | Failed to apply patch |
diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index 814bc53f70..1b62832eca 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -360,7 +360,14 @@ static int CUDAAPI cuvid_handle_video_sequence(void *opaque, CUVIDEOFORMAT* form } } - return 1; + // make CUVIDDECODECREATEINFO::ulNumDecodeSurfaces = CUVIDPARSERPARAMS::ulMaxNumDecodeSurfaces + // returning a value > 1 , will notify the driver to set the parser ulMaxNumDecodeSurfaces + // to this return value . + + if(ctx->cuparseinfo.ulMaxNumDecodeSurfaces != cuinfo.ulNumDecodeSurfaces) + return cuinfo.ulNumDecodeSurfaces; + else
Fixes video output stutter caused by different number of buffers in decoder vs parser introduced in 402d98c. Signed-off-by: Random Joe <ff.random.joe@gmail.com> --- libavcodec/cuviddec.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) + return 1; } static int CUDAAPI cuvid_handle_picture_decode(void *opaque, CUVIDPICPARAMS* picparams) @@ -1022,7 +1029,9 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) goto error; } - ctx->cuparseinfo.ulMaxNumDecodeSurfaces = ctx->nb_surfaces; + // set ulMaxNumDecodeSurfaces to a dummy value of 1 as recommended in NVDEC Programming Guide + // set the optimal value in pfnSequenceCallback where CUVIDEOFORMAT::min_num_decode_surfaces is reported + ctx->cuparseinfo.ulMaxNumDecodeSurfaces = 1; ctx->cuparseinfo.ulMaxDisplayDelay = (avctx->flags & AV_CODEC_FLAG_LOW_DELAY) ? 0 : CUVID_MAX_DISPLAY_DELAY; ctx->cuparseinfo.pUserData = avctx; ctx->cuparseinfo.pfnSequenceCallback = cuvid_handle_video_sequence;