[FFmpeg-devel] [PATCH 1/2] libavutil/libavfilter: opencl wrapper based on comments on 20130328
Wei Gao
highgod0401 at gmail.com
Fri Mar 29 09:51:30 CET 2013
Hi, Thanks for your reply. some questions and explanations
Thanks
Best regards
2013/3/29 Stefano Sabatini <stefasab at gmail.com>
> On date Thursday 2013-03-28 20:57:44 +0800, Wei Gao encoded:
> >
>
> > From 38aa9bb65c63d44cd1586383f37197bee93c61ab Mon Sep 17 00:00:00 2001
> > From: highgod0401 <highgod0401 at gmail.com>
> > Date: Thu, 28 Mar 2013 20:42:21 +0800
> > Subject: [PATCH 1/2] opencl wrapper based on comments on 20130328
> >
> > ---
>
>
> > + /*initialize devices, context, command_queue*/
> > + AVDictionaryEntry *opt_entry = av_dict_get(options,
> "build_option", NULL, 0);
>
> "build_options"?
>
> "build_flags" also seems fine, whatever is more consistent with the
> specification text.
>
I reference the document of OpenCL Specification Version: 1.2, it named
build options.
>
> > + ret = init_opencl_env(&gpu_env, ext_opencl_info);
> > + if (ret < 0)
> > + goto end;
> > + /*initialize program, kernel_name, kernel_count*/
>
> > + ret = compile_kernel_file(&gpu_env, opt_entry->value);
>
> crash if opt_entry is NULL?
>
will not crush, the OpenCL API "clBuildProgram" accept the NULL pointer,
the kernel can be compiled too.
>
> *
> * A kernel with name kernel_name must have been registered and
> * created with av_opencl_create_kernel(). This is requested for
> * executing the kernel code through av_opencl_run_kernel().
> *
> * @param kernel_name name used to find the kernel in OpenCL runtime
> environment
> * @param function user defined function, should not be NULL, used
> to set the input parameter in the kernel environment
> * @return >=0 on success, a negative error code on failure
> */
> int av_opencl_register_kernel_function(const char *kernel_name,
> av_opencl_kernel_function function);
>
> Also: why don't you register the function handle when you create the
> kernel?
> This would simplify usage and reduce API complexity.
>
I think you confuse the parameter of av_opencl_create_kernel, it is my
mistake. the kernel_name in this function should be renamed to
register_name, it is a index to find kernel code in
av_opencl_register_kernel_code and find function registered by
av_opencl_register_kernel_function when run av_opencl_run_kernel, the
function is not equal to kernel, it may call many kernels when runing. it
is a user defined function to run kernels, you can reference the deshake
code in tranform_opencl.c
> > +
> > +
> > +/**
> > + * Create kernel object on the specified OpenCL run in env.
> > + *
> > + * @param env the kernel environment which has been
> created by av_opencl_init
>
> why do you need to pass this (since there is a unique global context,
> why do you need to pass it)?
>
sorry about the comment of env it should be "it is used for user to get the
kernel env created by av_opencl_init, user will use it to run kernel".
>
> > + * @param kernel_entry_point kernel name
>
> wrong
>
> Also you may specify that this is the name of a function which must be
> specified in the kernel code (BTW what happens in case it is not?).
>
this is the real kernel function name which is in the kernel code. the
function wtich have the prefix "kernel" or "__kernel" is the kernel
function. this name is the function's name, you can reference
deshake_kernel.h OpenCL API clCreateKernel will use this name to find
whether the kernel is in the program which has been compiled. if yes, it
will return a handle cl_kernel, and user can use it to call the function in
GPU. So it is different from register_name
if the name is not found in program, the API will return error, and handle
should be NULL.
>
> > + * @return >=0 on success, a negative error code on failure
> > + */
> > +int av_opencl_create_kernel(AVOpenCLKernelEnv *env, const char
> *kernel_entry_point);
>
> See my comment about av_opencl_register_kernel_function().
>
> > +
> > +/**
> > + * Release kernel object.
> > + *
> > + *@param env the kernel environment which has been created by
> av_opencl_init.
> > + */
> > +void av_opencl_release_kernel(AVOpenCLKernelEnv *env);
> > +
>
> ...
>
> Sorry this is taking more time than expected, but as I explained
> public API is critical and code and API is pretty complex.
> --
> FFmpeg = Free Fierce Mean Portable Elastic God
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
More information about the ffmpeg-devel
mailing list