This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit d7fe91e9c38fa968034d33d15c3b6c79d0f9c405
Author:     Timo Rothenpieler <[email protected]>
AuthorDate: Wed Jul 15 00:52:50 2026 +0200
Commit:     Timo Rothenpieler <[email protected]>
CommitDate: Wed Jul 15 02:24:02 2026 +0200

    avutil/hwcontext_cuda: fix build with old cuda headers
---
 libavutil/hwcontext_cuda.c | 50 ++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 44 insertions(+), 6 deletions(-)

diff --git a/libavutil/hwcontext_cuda.c b/libavutil/hwcontext_cuda.c
index 61fbf52885..5f0ff73327 100644
--- a/libavutil/hwcontext_cuda.c
+++ b/libavutil/hwcontext_cuda.c
@@ -79,7 +79,6 @@ static const enum AVPixelFormat supported_formats[] = {
 #define CHECK_CU(x) FF_CUDA_CHECK_DL(device_ctx, cu, x)
 
 static CUarray_format cuda_array_format_for_pix_fmt(enum AVPixelFormat fmt);
-static unsigned int cuda_array_numchannels_for_pix_fmt(enum AVPixelFormat fmt);
 
 static int cuda_frames_get_constraints(AVHWDeviceContext *ctx,
                                        const void *hwconfig,
@@ -110,13 +109,17 @@ static int cuda_frames_get_constraints(AVHWDeviceContext 
*ctx,
         constraints->valid_hw_formats[0] = req_fmt;
         constraints->valid_hw_formats[1] = AV_PIX_FMT_NONE;
     } else {
-        constraints->valid_hw_formats = av_malloc_array(3, 
sizeof(*constraints->valid_hw_formats));
+        constraints->valid_hw_formats = av_malloc_array(2 + 
HAVE_FFNVCODEC_CUARRAY, sizeof(*constraints->valid_hw_formats));
         if (!constraints->valid_hw_formats)
             return AVERROR(ENOMEM);
 
         constraints->valid_hw_formats[0] = AV_PIX_FMT_CUDA;
+#if HAVE_FFNVCODEC_CUARRAY
         constraints->valid_hw_formats[1] = AV_PIX_FMT_CUARRAY;
         constraints->valid_hw_formats[2] = AV_PIX_FMT_NONE;
+#else
+        constraints->valid_hw_formats[1] = AV_PIX_FMT_NONE;
+#endif
     }
 
     return 0;
@@ -237,6 +240,7 @@ static void cuda_frames_uninit(AVHWFramesContext *ctx)
 static CUarray_format cuda_array_format_for_pix_fmt(enum AVPixelFormat fmt)
 {
     switch (fmt) {
+#if HAVE_FFNVCODEC_CUARRAY
     case AV_PIX_FMT_NV12:      return CU_AD_FORMAT_NV12;
     case AV_PIX_FMT_P010:
     case AV_PIX_FMT_P012:
@@ -262,10 +266,12 @@ static CUarray_format cuda_array_format_for_pix_fmt(enum 
AVPixelFormat fmt)
     case AV_PIX_FMT_0BGR32:
     case AV_PIX_FMT_RGB32:
     case AV_PIX_FMT_BGR32:     return CU_AD_FORMAT_UNSIGNED_INT8;
+#endif
     default:                   return 0;
     }
 }
 
+#if HAVE_FFNVCODEC_CUARRAY
 static unsigned int cuda_array_numchannels_for_pix_fmt(enum AVPixelFormat fmt)
 {
     switch (fmt) {
@@ -276,6 +282,7 @@ static unsigned int cuda_array_numchannels_for_pix_fmt(enum 
AVPixelFormat fmt)
     default:                   return 3;
     }
 }
+#endif
 
 static int cuda_frames_init(AVHWFramesContext *ctx)
 {
@@ -285,8 +292,6 @@ static int cuda_frames_init(AVHWFramesContext *ctx)
     CudaFunctions             *cu = hwctx->internal->cuda_dl;
     int err, i;
 
-    CUcontext dummy;
-
     for (i = 0; i < FF_ARRAY_ELEMS(supported_formats); i++) {
         if (ctx->sw_format == supported_formats[i])
             break;
@@ -297,10 +302,17 @@ static int cuda_frames_init(AVHWFramesContext *ctx)
         return AVERROR(ENOSYS);
     }
 
+#if HAVE_FFNVCODEC_CUARRAY
     if (ctx->format == AV_PIX_FMT_CUARRAY && !cu->cuArrayGetPlane) {
         av_log(ctx, AV_LOG_ERROR, "cuArrayGetPlane not available, update your 
driver\n");
         return AVERROR(ENOSYS);
     }
+#else
+    if (ctx->format == AV_PIX_FMT_CUARRAY) {
+        av_log(ctx, AV_LOG_ERROR, "Missing support for cuarray frames. Rebuild 
with newer ffnvcodec headers.\n");
+        return AVERROR(ENOSYS);
+    }
+#endif
 
     err = CHECK_CU(cu->cuDeviceGetAttribute(&priv->tex_alignment,
                                             14 /* 
CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT */,
@@ -318,6 +330,7 @@ static int cuda_frames_init(AVHWFramesContext *ctx)
 
     av_pix_fmt_get_chroma_sub_sample(ctx->sw_format, &priv->shift_width, 
&priv->shift_height);
 
+#if HAVE_FFNVCODEC_CUARRAY
     if (ctx->format == AV_PIX_FMT_CUARRAY) {
         if (!priv->p.cuarray_desc.Width)
             priv->p.cuarray_desc.Width = ctx->width;
@@ -342,6 +355,8 @@ static int cuda_frames_init(AVHWFramesContext *ctx)
     }
 
     if (ctx->format == AV_PIX_FMT_CUARRAY && priv->p.cuarray_num_surfaces > 0) 
{
+        CUcontext dummy;
+
         priv->p.cuarray_surfaces = av_calloc(priv->p.cuarray_num_surfaces, 
sizeof(*priv->p.cuarray_surfaces));
         if (!priv->p.cuarray_surfaces)
             return AVERROR(ENOMEM);
@@ -371,6 +386,7 @@ static int cuda_frames_init(AVHWFramesContext *ctx)
         av_log(ctx, AV_LOG_DEBUG, "allocated %d CUarray surfaces (%zux%zu)\n",
                priv->p.cuarray_num_surfaces, priv->p.cuarray_desc.Width, 
priv->p.cuarray_desc.Height);
     }
+#endif
 
     if (!ctx->pool) {
         int size = av_image_get_buffer_size(ctx->sw_format, ctx->width, 
ctx->height, priv->tex_alignment);
@@ -396,12 +412,14 @@ fail:
 
 static int cuda_get_buffer(AVHWFramesContext *ctx, AVFrame *frame)
 {
+    CUDAFramesContext       *priv = ctx->hwctx;
+#if HAVE_FFNVCODEC_CUARRAY
     AVHWDeviceContext *device_ctx = ctx->device_ctx;
     AVCUDADeviceContext    *hwctx = device_ctx->hwctx;
-    CUDAFramesContext       *priv = ctx->hwctx;
     CudaFunctions             *cu = hwctx->internal->cuda_dl;
 
     CUcontext dummy;
+#endif
     int res;
 
     frame->buf[0] = av_buffer_pool_get(ctx->pool);
@@ -409,6 +427,7 @@ static int cuda_get_buffer(AVHWFramesContext *ctx, AVFrame 
*frame)
         return AVERROR(ENOMEM);
 
     if (ctx->format == AV_PIX_FMT_CUARRAY) {
+#if HAVE_FFNVCODEC_CUARRAY
         AVCUDAArrayFrameDescriptor *desc = 
(AVCUDAArrayFrameDescriptor*)frame->buf[0]->data;
         if (!desc) {
             frame->format = ctx->format;
@@ -460,6 +479,9 @@ static int cuda_get_buffer(AVHWFramesContext *ctx, AVFrame 
*frame)
         res = CHECK_CU(cu->cuCtxPopCurrent(&dummy));
         if (res < 0)
             return res;
+#else
+        return AVERROR(ENOSYS);
+#endif
     } else {
         res = av_image_fill_arrays(frame->data, frame->linesize, 
frame->buf[0]->data,
                                    ctx->sw_format, ctx->width, ctx->height, 
priv->tex_alignment);
@@ -481,9 +503,11 @@ static int cuda_get_buffer(AVHWFramesContext *ctx, AVFrame 
*frame)
 
     return 0;
 
+#if HAVE_FFNVCODEC_CUARRAY
 fail:
     CHECK_CU(cu->cuCtxPopCurrent(&dummy));
     return res;
+#endif
 }
 
 static enum AVPixelFormat cuda_frame_hw_format(const AVFrame *frame)
@@ -569,6 +593,7 @@ static int cuda_transfer_data(AVHWFramesContext *ctx, 
AVFrame *dst,
             cpy.srcMemoryType = CU_MEMORYTYPE_DEVICE;
             cpy.srcDevice     = (CUdeviceptr)src->data[i];
         } else if (src->format == AV_PIX_FMT_CUARRAY) {
+#if HAVE_FFNVCODEC_CUARRAY
             CUarray array;
             CUresult cures = cu->cuArrayGetPlane(&array, 
(CUarray)src->data[0], i);
             if (cures == CUDA_ERROR_INVALID_VALUE && i == 0) {
@@ -583,6 +608,10 @@ static int cuda_transfer_data(AVHWFramesContext *ctx, 
AVFrame *dst,
 
             cpy.srcMemoryType = CU_MEMORYTYPE_ARRAY;
             cpy.srcArray      = array;
+#else
+            ret = AVERROR(ENOSYS);
+            goto exit;
+#endif
         } else {
             cpy.srcMemoryType = CU_MEMORYTYPE_HOST;
             cpy.srcHost       = src->data[i];
@@ -592,6 +621,7 @@ static int cuda_transfer_data(AVHWFramesContext *ctx, 
AVFrame *dst,
             cpy.dstMemoryType = CU_MEMORYTYPE_DEVICE;
             cpy.dstDevice     = (CUdeviceptr)dst->data[i];
         } else if (dst->format == AV_PIX_FMT_CUARRAY) {
+#if HAVE_FFNVCODEC_CUARRAY
             CUarray array;
             CUresult cures = cu->cuArrayGetPlane(&array, 
(CUarray)dst->data[0], i);
             if (cures == CUDA_ERROR_INVALID_VALUE && i == 0) {
@@ -606,6 +636,10 @@ static int cuda_transfer_data(AVHWFramesContext *ctx, 
AVFrame *dst,
 
             cpy.dstMemoryType = CU_MEMORYTYPE_ARRAY;
             cpy.dstArray      = array;
+#else
+            ret = AVERROR(ENOSYS);
+            goto exit;
+#endif
         } else {
             cpy.dstMemoryType = CU_MEMORYTYPE_HOST;
             cpy.dstHost       = dst->data[i];
@@ -925,5 +959,9 @@ const HWContextType ff_hwcontext_type_cuda = {
     .transfer_data_to     = cuda_transfer_data,
     .transfer_data_from   = cuda_transfer_data,
 
-    .pix_fmts             = (const enum AVPixelFormat[]){ AV_PIX_FMT_CUDA, 
AV_PIX_FMT_CUARRAY, AV_PIX_FMT_NONE },
+    .pix_fmts             = (const enum AVPixelFormat[]){ AV_PIX_FMT_CUDA,
+#if HAVE_FFNVCODEC_CUARRAY
+                                                          AV_PIX_FMT_CUARRAY,
+#endif
+                                                          AV_PIX_FMT_NONE },
 };

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to