From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Subject: [FFmpeg-devel] [PATCH 24/24] avutil/hwcontext_cuda: Allocate public and internal device ctx jointly Date: Tue, 13 Feb 2024 13:23:01 +0100 Message-ID: <AS8P250MB0744D3296B51F1CB9587D9D08F4F2@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw) In-Reply-To: <DU0P250MB0747A90616DE3F93B906D8588F482@DU0P250MB0747.EURP250.PROD.OUTLOOK.COM> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavutil/hwcontext_cuda.c | 43 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/libavutil/hwcontext_cuda.c b/libavutil/hwcontext_cuda.c index b430b42f62..3de3847399 100644 --- a/libavutil/hwcontext_cuda.c +++ b/libavutil/hwcontext_cuda.c @@ -35,6 +35,11 @@ typedef struct CUDAFramesContext { int tex_alignment; } CUDAFramesContext; +typedef struct CUDADeviceContext { + AVCUDADeviceContext p; + AVCUDADeviceContextInternal internal; +} CUDADeviceContext; + static const enum AVPixelFormat supported_formats[] = { AV_PIX_FMT_NV12, AV_PIX_FMT_YUV420P, @@ -283,39 +288,35 @@ exit: static void cuda_device_uninit(AVHWDeviceContext *device_ctx) { - AVCUDADeviceContext *hwctx = device_ctx->hwctx; + CUDADeviceContext *hwctx = device_ctx->hwctx; - if (hwctx->internal) { - CudaFunctions *cu = hwctx->internal->cuda_dl; + if (hwctx->p.internal) { + CudaFunctions *cu = hwctx->internal.cuda_dl; - if (hwctx->internal->is_allocated && hwctx->cuda_ctx) { - if (hwctx->internal->flags & AV_CUDA_USE_PRIMARY_CONTEXT) - CHECK_CU(cu->cuDevicePrimaryCtxRelease(hwctx->internal->cuda_device)); - else if (!(hwctx->internal->flags & AV_CUDA_USE_CURRENT_CONTEXT)) - CHECK_CU(cu->cuCtxDestroy(hwctx->cuda_ctx)); + if (hwctx->internal.is_allocated && hwctx->p.cuda_ctx) { + if (hwctx->internal.flags & AV_CUDA_USE_PRIMARY_CONTEXT) + CHECK_CU(cu->cuDevicePrimaryCtxRelease(hwctx->internal.cuda_device)); + else if (!(hwctx->internal.flags & AV_CUDA_USE_CURRENT_CONTEXT)) + CHECK_CU(cu->cuCtxDestroy(hwctx->p.cuda_ctx)); - hwctx->cuda_ctx = NULL; + hwctx->p.cuda_ctx = NULL; } - cuda_free_functions(&hwctx->internal->cuda_dl); + cuda_free_functions(&hwctx->internal.cuda_dl); + memset(&hwctx->internal, 0, sizeof(hwctx->internal)); + hwctx->p.internal = NULL; } - - av_freep(&hwctx->internal); } static int cuda_device_init(AVHWDeviceContext *ctx) { - AVCUDADeviceContext *hwctx = ctx->hwctx; + CUDADeviceContext *hwctx = ctx->hwctx; int ret; - if (!hwctx->internal) { - hwctx->internal = av_mallocz(sizeof(*hwctx->internal)); - if (!hwctx->internal) - return AVERROR(ENOMEM); - } + hwctx->p.internal = &hwctx->internal; - if (!hwctx->internal->cuda_dl) { - ret = cuda_load_functions(&hwctx->internal->cuda_dl, ctx); + if (!hwctx->internal.cuda_dl) { + ret = cuda_load_functions(&hwctx->internal.cuda_dl, ctx); if (ret < 0) { av_log(ctx, AV_LOG_ERROR, "Could not dynamically load CUDA\n"); goto error; @@ -563,7 +564,7 @@ const HWContextType ff_hwcontext_type_cuda = { .type = AV_HWDEVICE_TYPE_CUDA, .name = "CUDA", - .device_hwctx_size = sizeof(AVCUDADeviceContext), + .device_hwctx_size = sizeof(CUDADeviceContext), .frames_hwctx_size = sizeof(CUDAFramesContext), .device_create = cuda_device_create, -- 2.34.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-request@ffmpeg.org with subject "unsubscribe".
prev parent reply other threads:[~2024-02-13 12:21 UTC|newest] Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-02-12 0:01 [FFmpeg-devel] [PATCH 01/23] avutil/hwcontext_opencl: Use proper OpenCLFramesContext Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 02/23] avutil/hwcontext: Don't check before av_buffer_unref() Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 03/23] avutil/hwcontext_vaapi: Allocate public and priv device hwctx together Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 04/23] avutil/hwcontext_vulkan: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 05/23] avutil/hwcontext_qsv: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 06/23] avutil/hwcontext_vdpau: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 07/23] avutil/hwcontext_opencl: Allocate pub " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 08/23] avutil/hwcontext_d3d12va: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 09/23] avutil/hwcontext: Remove unused AVHWDeviceInternal.priv Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 10/23] avutil/hwcontext: Allocate AVHWDevCtx jointly with its internals Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 11/23] avutil/hwcontext_vaapi: Allocate pub and priv frames hwctx together Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 12/23] avutil/hwcontext_vulkan: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 13/23] avutil/hwcontext_videotoolbox: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 14/23] avutil/hwcontext_opencl: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 15/23] avutil/hwcontext_qsv: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 16/23] avutil/hwcontext_dxva2: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 17/23] avutil/hwcontext_d3d11va: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 18/23] avutil/hwcontext_d3d12va: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 19/23] avutil/hwcontext: Clarify documentation of AVHWFramesContext.hwctx Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 20/23] avutil/hwcontext_vdpau: Don't use AVHWFramesInternal.priv Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 21/23] avutil/hwcontext_cuda: " Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 22/23] avutil/hwcontext_internal: Remove unused AVHWFramesInternal.priv Andreas Rheinhardt 2024-02-12 0:03 ` [FFmpeg-devel] [PATCH 23/23] avutil/hwcontext: Allocate AVHWFramesCtx jointly with its internals Andreas Rheinhardt 2024-02-12 22:04 ` [FFmpeg-devel] [PATCH 01/23] avutil/hwcontext_opencl: Use proper OpenCLFramesContext Mark Thompson 2024-02-13 12:23 ` Andreas Rheinhardt [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=AS8P250MB0744D3296B51F1CB9587D9D08F4F2@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM \ --to=andreas.rheinhardt@outlook.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git