[FFmpeg-devel] [PATCH]opencl: compile kernels separately
Wei Gao
highgod0401 at gmail.com
Mon Nov 4 01:58:35 CET 2013
2013/11/2 Lenny Wang <lenny at multicorewareinc.com>
>
>
> Newly adjusted patch based on Michael's comments. Please review, thanks.
>
diff --git a/libavfilter/deshake.h b/libavfilter/deshake.h
index c24090e..5792973 100644
@@ -108,11 +108,21 @@ int ff_opencl_deshake_init(AVFilterContext *ctx)
deshake->opencl_ctx.matrix_size*sizeof(cl_float),
CL_MEM_READ_ONLY, NULL);
if (ret < 0)
return ret;
- if (!deshake->opencl_ctx.kernel_env.kernel) {
- ret = av_opencl_create_kernel(&deshake->opencl_ctx.kernel_env,
"avfilter_transform");
- if (ret < 0) {
- av_log(ctx, AV_LOG_ERROR, "OpenCL failed to create kernel for
name 'avfilter_transform'\n");
- return ret;
+ deshake->opencl_ctx.command_queue = av_opencl_get_command_queue();
+ if (!deshake->opencl_ctx.command_queue) {
+ av_log(ctx, AV_LOG_ERROR, "Unable to get OpenCL command queue in
filter 'deshake'\n");
+ return -1;
It should return a meaningful value, return AVERROR(EINVAL) should be OK.
+ }
+ deshake->opencl_ctx.program = av_opencl_compile("avfilter_transform",
NULL);
+ if (!deshake->opencl_ctx.program) {
+ av_log(ctx, AV_LOG_ERROR, "OpenCL failed to compile program
'avfilter_transform'\n");
+ return -1;
+ }
+ if (!deshake->opencl_ctx.kernel) {
+ deshake->opencl_ctx.kernel =
clCreateKernel(deshake->opencl_ctx.program, "avfilter_transform", &ret);
+ if (ret != CL_SUCCESS) {
+ av_log(ctx, AV_LOG_ERROR, "OpenCL failed to create kernel
'avfilter_transform'\n");
+ return -1;
It should return a meaningful value, return AVERROR(EINVAL) should be OK.
int ff_opencl_deshake_process_inout_buf(AVFilterContext *ctx, AVFrame *in,
AVFrame *out)
{
int ret = 0;
diff --git a/libavfilter/unsharp.h b/libavfilter/unsharp.h
index c225929..2738243 100644
--- a/libavfilter/unsharp.h
+++ b/libavfilter/unsharp.h
@@ -33,6 +33,9 @@
#if CONFIG_OPENCL
#endif
diff --git a/libavfilter/unsharp_opencl.c b/libavfilter/unsharp_opencl.c
index b373b66..3dd0527 100644
--- a/libavfilter/unsharp_opencl.c
+++ b/libavfilter/unsharp_opencl.c
@@ -159,7 +159,7 @@ int ff_opencl_apply_unsharp(AVFilterContext *ctx,
AVFrame *in, AVFrame *out)
FFOpenclParam opencl_param = {0};
opencl_param.ctx = ctx;
- opencl_param.kernel = unsharp->opencl_ctx.kernel_env.kernel;
+ opencl_param.kernel = unsharp->opencl_ctx.kernel;
ret = ff_opencl_set_parameter(&opencl_param,
FF_OPENCL_PARAM_INFO(unsharp->opencl_ctx.cl_inbuf),
FF_OPENCL_PARAM_INFO(unsharp->opencl_ctx.cl_outbuf),
@@ -186,14 +186,14 @@ int ff_opencl_apply_unsharp(AVFilterContext *ctx,
AVFrame *in, AVFrame *out)
NULL);
if (ret < 0)
@@ -220,11 +220,21 @@ int ff_opencl_unsharp_init(AVFilterContext *ctx)
if (ret < 0)
return ret;
unsharp->opencl_ctx.plane_num = PLANE_NUM;
- if (!unsharp->opencl_ctx.kernel_env.kernel) {
- ret = av_opencl_create_kernel(&unsharp->opencl_ctx.kernel_env,
"unsharp");
- if (ret < 0) {
- av_log(ctx, AV_LOG_ERROR, "OpenCL failed to create kernel with
name 'unsharp'\n");
- return ret;
+ unsharp->opencl_ctx.command_queue = av_opencl_get_command_queue();
+ if (!unsharp->opencl_ctx.command_queue) {
+ av_log(ctx, AV_LOG_ERROR, "Unable to get OpenCL command queue in
filter 'unsharp'\n");
+ return -1;
It should return a meaningful value, return AVERROR(EINVAL) should be OK.
+ }
+ unsharp->opencl_ctx.program = av_opencl_compile("unsharp", NULL);
+ if (!unsharp->opencl_ctx.program) {
+ av_log(ctx, AV_LOG_ERROR, "OpenCL failed to compile program
'unsharp'\n");
+ return -1;
It should return a meaningful value, return AVERROR(EINVAL) should be OK.
+ }
+ if (!unsharp->opencl_ctx.kernel) {
+ unsharp->opencl_ctx.kernel =
clCreateKernel(unsharp->opencl_ctx.program, "unsharp", &ret);
+ if (ret != CL_SUCCESS) {
+ av_log(ctx, AV_LOG_ERROR, "OpenCL failed to create kernel
'unsharp'\n");
+ return -1;
It should return a meaningful value, return AVERROR(EINVAL) should be OK.
Looks good to me thanks
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>
More information about the ffmpeg-devel
mailing list