[FFmpeg-cvslog] lavu/opencl:add opencl set param function

highgod0401 git at videolan.org
Fri Apr 26 03:19:09 CEST 2013


ffmpeg | branch: master | highgod0401 <highgod0401 at gmail.com> | Thu Apr 25 19:28:40 2013 +0800| [f31247cf47dcb7f3d986c67f1abbc0b50f1beefe] | committer: Michael Niedermayer

lavu/opencl:add opencl set param function

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f31247cf47dcb7f3d986c67f1abbc0b50f1beefe
---

 libavutil/Makefile          |    2 +-
 libavutil/opencl_internal.c |   59 +++++++++++++++++++++++++++++++++++++++++++
 libavutil/opencl_internal.h |   33 ++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 1 deletion(-)

diff --git a/libavutil/Makefile b/libavutil/Makefile
index 33f82ed..e14d5a4 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -108,7 +108,7 @@ OBJS = adler32.o                                                        \
        xtea.o                                                           \
 
 OBJS-$(CONFIG_LZO)                      += lzo.o
-OBJS-$(CONFIG_OPENCL)                   += opencl.o
+OBJS-$(CONFIG_OPENCL)                   += opencl.o opencl_internal.o
 
 OBJS += $(COMPAT_OBJS:%=../compat/%)
 
diff --git a/libavutil/opencl_internal.c b/libavutil/opencl_internal.c
new file mode 100644
index 0000000..f15c934
--- /dev/null
+++ b/libavutil/opencl_internal.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2012 Peng Gao <peng at multicorewareinc.com>
+ * Copyright (C) 2012 Li   Cao <li at multicorewareinc.com>
+ * Copyright (C) 2012 Wei  Gao <weigao at multicorewareinc.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "opencl_internal.h"
+#include "libavutil/log.h"
+
+int ff_opencl_set_parameter(FFOpenclParam *opencl_param, ...)
+{
+    int ret = 0;
+    va_list arg_ptr;
+    void *param;
+    size_t param_size;
+    cl_int status;
+    if (!opencl_param->kernel) {
+        av_log(opencl_param->ctx, AV_LOG_ERROR, "OpenCL kernel must be set\n");
+        return AVERROR(EINVAL);
+    }
+    va_start(arg_ptr, opencl_param);
+    do {
+        param = va_arg(arg_ptr, void *);
+        if (!param)
+            break;
+        param_size = va_arg(arg_ptr, size_t);
+        if (!param_size) {
+            av_log(opencl_param->ctx, AV_LOG_ERROR, "Parameter size must not be 0\n");
+            ret = AVERROR(EINVAL);
+            goto end;
+        }
+        status = clSetKernelArg(opencl_param->kernel, opencl_param->param_num, param_size, param);
+        if (status != CL_SUCCESS) {
+            av_log(opencl_param->ctx, AV_LOG_ERROR, "Cannot set kernel argument: %d\n", status);
+            ret = AVERROR_EXTERNAL;
+            goto end;
+        }
+        opencl_param->param_num++;
+    } while (param && param_size);
+end:
+    va_end(arg_ptr);
+    return ret;
+}
diff --git a/libavutil/opencl_internal.h b/libavutil/opencl_internal.h
new file mode 100644
index 0000000..34b39a0
--- /dev/null
+++ b/libavutil/opencl_internal.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2012 Peng Gao <peng at multicorewareinc.com>
+ * Copyright (C) 2012 Li   Cao <li at multicorewareinc.com>
+ * Copyright (C) 2012 Wei  Gao <weigao at multicorewareinc.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "opencl.h"
+
+#define FF_OPENCL_PARAM_INFO(a) ((void*)(&(a))), (sizeof(a))
+
+typedef struct {
+    cl_kernel kernel;
+    int param_num;
+    void *ctx;
+} FFOpenclParam;
+
+int ff_opencl_set_parameter(FFOpenclParam *opencl_param, ...);



More information about the ffmpeg-cvslog mailing list