Test command like below: cuda-memcheck ./ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input_file -c:v h264_nvenc -f null -
Signed-off-by: leozhang <nowe...@gmail.com> --- libavcodec/cuviddec.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index 5e698d4cd0..816a9c1b3c 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -673,15 +673,27 @@ static int cuvid_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, static av_cold int cuvid_decode_end(AVCodecContext *avctx) { CuvidContext *ctx = avctx->priv_data; + AVHWDeviceContext *device_ctx = (AVHWDeviceContext *)ctx->hwdevice->data; + AVCUDADeviceContext *device_hwctx = device_ctx->hwctx; + CUcontext dummy, cuda_ctx = device_hwctx->cuda_ctx; + int ret; av_fifo_freep(&ctx->frame_queue); + ret = CHECK_CU(ctx->cudl->cuCtxPushCurrent(cuda_ctx)); + if (ret < 0) + goto error; + if (ctx->cuparser) ctx->cvdl->cuvidDestroyVideoParser(ctx->cuparser); if (ctx->cudecoder) ctx->cvdl->cuvidDestroyDecoder(ctx->cudecoder); + ret = CHECK_CU(ctx->cudl->cuCtxPopCurrent(&dummy)); + if (ret < 0) + goto error; + ctx->cudl = NULL; av_buffer_unref(&ctx->hwframe); @@ -693,6 +705,9 @@ static av_cold int cuvid_decode_end(AVCodecContext *avctx) cuvid_free_functions(&ctx->cvdl); return 0; + +error: + return ret; } static int cuvid_test_capabilities(AVCodecContext *avctx, -- 2.11.0 _______________________________________________ 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".