diff mbox

[FFmpeg-devel] libavfilter/opencl.h: Add macro for setting opencl kernel arguments

Message ID 1527958702-17377-1-git-send-email-danyaschenko@gmail.com
State New
Headers show

Commit Message

Danil Iashchenko June 2, 2018, 4:58 p.m. UTC
---
 libavfilter/opencl.h                | 13 +++++++++++
 libavfilter/vf_convolution_opencl.c | 43 ++++++-------------------------------
 2 files changed, 19 insertions(+), 37 deletions(-)

Comments

Mark Thompson June 3, 2018, 6:25 p.m. UTC | #1
On 02/06/18 17:58, Danil Iashchenko wrote:
> ---
>  libavfilter/opencl.h                | 13 +++++++++++
>  libavfilter/vf_convolution_opencl.c | 43 ++++++-------------------------------
>  2 files changed, 19 insertions(+), 37 deletions(-)

Yeah, this is nicer.

> diff --git a/libavfilter/opencl.h b/libavfilter/opencl.h
> index c0a4519..16cdfbe 100644
> --- a/libavfilter/opencl.h
> +++ b/libavfilter/opencl.h
> @@ -46,6 +46,19 @@ typedef struct OpenCLFilterContext {
>      int                output_height;
>  } OpenCLFilterContext;
>  
> +
> +/**
> + * set argument to specific Kernel.
> + * This macro relies on usage of local label "fail" and variable avctx.
> + */
> +#define CL_SET_KERNEL_ARG(kernel, arg_num, type, arg)          \
> +    cle = clSetKernelArg(kernel, arg_num, sizeof(type), arg);  \
> +    if (cle != CL_SUCCESS) {                                   \
> +        av_log(avctx, AV_LOG_ERROR, "Failed to set kernel' "   \
> +               "%d argument. Error code:%d.\n", arg_num, cle); \

I don't think the extra "'" is intended.  "Failed to set kernel argument %d: error %d.\n", maybe?

> +        goto fail;                                             \
> +    }                                                          \

Don't put a \ on the last line.  (It works while the next line is blank, but might be confusing later if someone puts something on it.)

> +
>  /**
>   * Return that all inputs and outputs support only AV_PIX_FMT_OPENCL.
>   */
> diff --git a/libavfilter/vf_convolution_opencl.c b/libavfilter/vf_convolution_opencl.c
> index 2df51e0..4d0ecf8 100644
> --- a/libavfilter/vf_convolution_opencl.c
> +++ b/libavfilter/vf_convolution_opencl.c
> @@ -204,43 +204,12 @@ static int convolution_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
>          if (!dst)
>              break;
>  
> -        cle = clSetKernelArg(ctx->kernel, 0, sizeof(cl_mem), &dst);
> -        if (cle != CL_SUCCESS) {
> -            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
> -                   "destination image argument: %d.\n", cle);
> -            goto fail;
> -        }
> -        cle = clSetKernelArg(ctx->kernel, 1, sizeof(cl_mem), &src);
> -        if (cle != CL_SUCCESS) {
> -            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
> -                   "source image argument: %d.\n", cle);
> -            goto fail;
> -        }
> -        cle = clSetKernelArg(ctx->kernel, 2, sizeof(cl_int), &ctx->dims[p]);
> -        if (cle != CL_SUCCESS) {
> -            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
> -                   "matrix size argument: %d.\n", cle);
> -            goto fail;
> -        }
> -        cle = clSetKernelArg(ctx->kernel, 3, sizeof(cl_mem), &ctx->matrix[p]);
> -        if (cle != CL_SUCCESS) {
> -            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
> -                   "matrix argument: %d.\n", cle);
> -            goto fail;
> -        }
> -        cle = clSetKernelArg(ctx->kernel, 4, sizeof(cl_float), &ctx->rdivs[p]);
> -        if (cle != CL_SUCCESS) {
> -            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
> -                   "rdiv argument: %d.\n", cle);
> -            goto fail;
> -        }
> -        cle = clSetKernelArg(ctx->kernel, 5, sizeof(cl_float), &ctx->biases[p]);
> -        if (cle != CL_SUCCESS) {
> -            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
> -                   "bias argument: %d.\n", cle);
> -            goto fail;
> -        }
> -
> +        CL_SET_KERNEL_ARG(ctx->kernel, 0, cl_mem,   &dst);
> +        CL_SET_KERNEL_ARG(ctx->kernel, 1, cl_mem,   &src);
> +        CL_SET_KERNEL_ARG(ctx->kernel, 2, cl_int,   &ctx->dims[p]);
> +        CL_SET_KERNEL_ARG(ctx->kernel, 3, cl_mem,   &ctx->matrix[p]);
> +        CL_SET_KERNEL_ARG(ctx->kernel, 4, cl_float, &ctx->rdivs[p]);
> +        CL_SET_KERNEL_ARG(ctx->kernel, 5, cl_float, &ctx->biases[p]);
>  
>          err = ff_opencl_filter_work_size_from_image(avctx, global_work, output, p, 0);
>          if (err < 0)
> 

Thanks,

- Mark
diff mbox

Patch

diff --git a/libavfilter/opencl.h b/libavfilter/opencl.h
index c0a4519..16cdfbe 100644
--- a/libavfilter/opencl.h
+++ b/libavfilter/opencl.h
@@ -46,6 +46,19 @@  typedef struct OpenCLFilterContext {
     int                output_height;
 } OpenCLFilterContext;
 
+
+/**
+ * set argument to specific Kernel.
+ * This macro relies on usage of local label "fail" and variable avctx.
+ */
+#define CL_SET_KERNEL_ARG(kernel, arg_num, type, arg)          \
+    cle = clSetKernelArg(kernel, arg_num, sizeof(type), arg);  \
+    if (cle != CL_SUCCESS) {                                   \
+        av_log(avctx, AV_LOG_ERROR, "Failed to set kernel' "   \
+               "%d argument. Error code:%d.\n", arg_num, cle); \
+        goto fail;                                             \
+    }                                                          \
+
 /**
  * Return that all inputs and outputs support only AV_PIX_FMT_OPENCL.
  */
diff --git a/libavfilter/vf_convolution_opencl.c b/libavfilter/vf_convolution_opencl.c
index 2df51e0..4d0ecf8 100644
--- a/libavfilter/vf_convolution_opencl.c
+++ b/libavfilter/vf_convolution_opencl.c
@@ -204,43 +204,12 @@  static int convolution_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
         if (!dst)
             break;
 
-        cle = clSetKernelArg(ctx->kernel, 0, sizeof(cl_mem), &dst);
-        if (cle != CL_SUCCESS) {
-            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
-                   "destination image argument: %d.\n", cle);
-            goto fail;
-        }
-        cle = clSetKernelArg(ctx->kernel, 1, sizeof(cl_mem), &src);
-        if (cle != CL_SUCCESS) {
-            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
-                   "source image argument: %d.\n", cle);
-            goto fail;
-        }
-        cle = clSetKernelArg(ctx->kernel, 2, sizeof(cl_int), &ctx->dims[p]);
-        if (cle != CL_SUCCESS) {
-            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
-                   "matrix size argument: %d.\n", cle);
-            goto fail;
-        }
-        cle = clSetKernelArg(ctx->kernel, 3, sizeof(cl_mem), &ctx->matrix[p]);
-        if (cle != CL_SUCCESS) {
-            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
-                   "matrix argument: %d.\n", cle);
-            goto fail;
-        }
-        cle = clSetKernelArg(ctx->kernel, 4, sizeof(cl_float), &ctx->rdivs[p]);
-        if (cle != CL_SUCCESS) {
-            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
-                   "rdiv argument: %d.\n", cle);
-            goto fail;
-        }
-        cle = clSetKernelArg(ctx->kernel, 5, sizeof(cl_float), &ctx->biases[p]);
-        if (cle != CL_SUCCESS) {
-            av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
-                   "bias argument: %d.\n", cle);
-            goto fail;
-        }
-
+        CL_SET_KERNEL_ARG(ctx->kernel, 0, cl_mem,   &dst);
+        CL_SET_KERNEL_ARG(ctx->kernel, 1, cl_mem,   &src);
+        CL_SET_KERNEL_ARG(ctx->kernel, 2, cl_int,   &ctx->dims[p]);
+        CL_SET_KERNEL_ARG(ctx->kernel, 3, cl_mem,   &ctx->matrix[p]);
+        CL_SET_KERNEL_ARG(ctx->kernel, 4, cl_float, &ctx->rdivs[p]);
+        CL_SET_KERNEL_ARG(ctx->kernel, 5, cl_float, &ctx->biases[p]);
 
         err = ff_opencl_filter_work_size_from_image(avctx, global_work, output, p, 0);
         if (err < 0)