[FFmpeg-devel] [PATCH] lavu/opencl: add opencl public error API

Stefano Sabatini stefasab at gmail.com
Fri May 3 20:02:39 CEST 2013


On date Sunday 2013-04-28 08:52:16 +0800, Wei Gao encoded:
> Hi,
> The attachment is the patch according to the comments
> 
> 
> 2013/4/28 Stefano Sabatini <stefasab at gmail.com>
> 
> > On date Saturday 2013-04-27 09:52:45 +0800, Wei Gao encoded:
> > >
> >
> >
> >
> > LGTM otherwise, maybe with a minor bump in libavutil, thanks.
> > --
> > FFmpeg = Fiendish Fundamental Mere Portable Energized Genius
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >

> From 35ef0c10168cf6c46db7aca61b7ac7361d4b02c3 Mon Sep 17 00:00:00 2001
> From: highgod0401 <highgod0401 at gmail.com>
> Date: Sun, 28 Apr 2013 08:47:20 +0800
> Subject: [PATCH] lavu/opencl: add opencl public error API
> 
> ---
>  libavutil/opencl.c  | 48 ++++++++++++++++++++++++------------------------
>  libavutil/opencl.h  |  8 ++++++++
>  libavutil/version.h |  2 +-
>  3 files changed, 33 insertions(+), 25 deletions(-)
> 
> diff --git a/libavutil/opencl.c b/libavutil/opencl.c
> index 1fdb096..e2d5581 100644
> --- a/libavutil/opencl.c
> +++ b/libavutil/opencl.c
> @@ -162,7 +162,7 @@ static const OpenclErrorMsg opencl_err_msg[] = {
>      {CL_INVALID_DEVICE_PARTITION_COUNT,                 "INVALID DEVICE PARTITION COUNT"},
>  };
>  
> -static const char *opencl_errstr(cl_int status)
> +const char *av_opencl_errstr(cl_int status)
>  {
>      int i;
>      for (i = 0; i < sizeof(opencl_err_msg); i++) {
> @@ -201,7 +201,7 @@ static int get_device_list(AVOpenCLDeviceList *device_list)
>      status = clGetPlatformIDs(0, NULL, &device_list->platform_num);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not get OpenCL platform ids: %s\n", opencl_errstr(status));
> +               "Could not get OpenCL platform ids: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      platform_ids = av_mallocz(device_list->platform_num * sizeof(cl_platform_id));
> @@ -210,7 +210,7 @@ static int get_device_list(AVOpenCLDeviceList *device_list)
>      status = clGetPlatformIDs(device_list->platform_num, platform_ids, NULL);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -                "Could not get OpenCL platform ids: %s\n", opencl_errstr(status));
> +                "Could not get OpenCL platform ids: %s\n", av_opencl_errstr(status));
>          ret = AVERROR_EXTERNAL;
>          goto end;
>      }
> @@ -256,7 +256,7 @@ static int get_device_list(AVOpenCLDeviceList *device_list)
>                                          devices_num[j], device_ids, NULL);
>                  if (status != CL_SUCCESS) {
>                      av_log(&opencl_ctx, AV_LOG_WARNING,
> -                            "Could not get device ID: %s:\n", opencl_errstr(status));
> +                            "Could not get device ID: %s:\n", av_opencl_errstr(status));
>                      av_freep(&device_ids);
>                      continue;
>                  }
> @@ -275,7 +275,7 @@ static int get_device_list(AVOpenCLDeviceList *device_list)
>                                               NULL);
>                      if (status != CL_SUCCESS) {
>                          av_log(&opencl_ctx, AV_LOG_WARNING,
> -                                "Could not get device name: %s\n", opencl_errstr(status));
> +                                "Could not get device name: %s\n", av_opencl_errstr(status));
>                          continue;
>                      }
>                      device_list->platform_node[i]->device_num++;
> @@ -416,7 +416,7 @@ int av_opencl_create_kernel(AVOpenCLKernelEnv *env, const char *kernel_name)
>                  break;
>          }
>          if (status != CL_SUCCESS) {
> -            av_log(&opencl_ctx, AV_LOG_ERROR, "Could not create OpenCL kernel: %s\n", opencl_errstr(status));
> +            av_log(&opencl_ctx, AV_LOG_ERROR, "Could not create OpenCL kernel: %s\n", av_opencl_errstr(status));
>              ret = AVERROR_EXTERNAL;
>              goto end;
>          }
> @@ -438,7 +438,7 @@ void av_opencl_release_kernel(AVOpenCLKernelEnv *env)
>      status = clReleaseKernel(env->kernel);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR, "Could not release kernel: %s\n",
> -              opencl_errstr(status));
> +              av_opencl_errstr(status));
>      }
>      env->kernel = NULL;
>      env->command_queue = NULL;
> @@ -526,14 +526,14 @@ static int init_opencl_env(OpenclContext *opencl_ctx, AVOpenCLExternalEnv *ext_o
>                                                         NULL, NULL, &status);
>              if (status != CL_SUCCESS) {
>                  av_log(opencl_ctx, AV_LOG_ERROR,
> -                       "Could not get OpenCL context from device type: %s\n", opencl_errstr(status));
> +                       "Could not get OpenCL context from device type: %s\n", av_opencl_errstr(status));
>                  return AVERROR_EXTERNAL;
>              }
>              opencl_ctx->command_queue = clCreateCommandQueue(opencl_ctx->context, opencl_ctx->device_id,
>                                                            0, &status);
>              if (status != CL_SUCCESS) {
>                  av_log(opencl_ctx, AV_LOG_ERROR,
> -                       "Could not create OpenCL command queue: %s\n", opencl_errstr(status));
> +                       "Could not create OpenCL command queue: %s\n", av_opencl_errstr(status));
>                  return AVERROR_EXTERNAL;
>              }
>          }
> @@ -566,7 +566,7 @@ static int compile_kernel_file(OpenclContext *opencl_ctx)
>                                                                                  &status);
>      if(status != CL_SUCCESS) {
>          av_log(opencl_ctx, AV_LOG_ERROR,
> -               "Could not create OpenCL program with source code: %s\n", opencl_errstr(status));
> +               "Could not create OpenCL program with source code: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      if (!opencl_ctx->programs[opencl_ctx->program_count]) {
> @@ -577,7 +577,7 @@ static int compile_kernel_file(OpenclContext *opencl_ctx)
>                              opencl_ctx->build_options, NULL, NULL);
>      if (status != CL_SUCCESS) {
>          av_log(opencl_ctx, AV_LOG_ERROR,
> -               "Could not compile OpenCL kernel: %s\n", opencl_errstr(status));
> +               "Could not compile OpenCL kernel: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      opencl_ctx->program_count++;
> @@ -628,7 +628,7 @@ void av_opencl_uninit(void)
>              status = clReleaseProgram(opencl_ctx.programs[i]);
>              if (status != CL_SUCCESS) {
>                  av_log(&opencl_ctx, AV_LOG_ERROR,
> -                       "Could not release OpenCL program: %s\n", opencl_errstr(status));
> +                       "Could not release OpenCL program: %s\n", av_opencl_errstr(status));
>              }
>              opencl_ctx.programs[i] = NULL;
>          }
> @@ -637,7 +637,7 @@ void av_opencl_uninit(void)
>          status = clReleaseCommandQueue(opencl_ctx.command_queue);
>          if (status != CL_SUCCESS) {
>              av_log(&opencl_ctx, AV_LOG_ERROR,
> -                   "Could not release OpenCL command queue: %s\n", opencl_errstr(status));
> +                   "Could not release OpenCL command queue: %s\n", av_opencl_errstr(status));
>          }
>          opencl_ctx.command_queue = NULL;
>      }
> @@ -645,7 +645,7 @@ void av_opencl_uninit(void)
>          status = clReleaseContext(opencl_ctx.context);
>          if (status != CL_SUCCESS) {
>              av_log(&opencl_ctx, AV_LOG_ERROR,
> -                   "Could not release OpenCL context: %s\n", opencl_errstr(status));
> +                   "Could not release OpenCL context: %s\n", av_opencl_errstr(status));
>          }
>          opencl_ctx.context = NULL;
>      }
> @@ -661,7 +661,7 @@ int av_opencl_buffer_create(cl_mem *cl_buf, size_t cl_buf_size, int flags, void
>      cl_int status;
>      *cl_buf = clCreateBuffer(opencl_ctx.context, flags, cl_buf_size, host_ptr, &status);
>      if (status != CL_SUCCESS) {
> -        av_log(&opencl_ctx, AV_LOG_ERROR, "Could not create OpenCL buffer: %s\n", opencl_errstr(status));
> +        av_log(&opencl_ctx, AV_LOG_ERROR, "Could not create OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      return 0;
> @@ -675,7 +675,7 @@ void av_opencl_buffer_release(cl_mem *cl_buf)
>      status = clReleaseMemObject(*cl_buf);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not release OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not release OpenCL buffer: %s\n", av_opencl_errstr(status));
>      }
>      memset(cl_buf, 0, sizeof(*cl_buf));
>  }
> @@ -689,7 +689,7 @@ int av_opencl_buffer_write(cl_mem dst_cl_buf, uint8_t *src_buf, size_t buf_size)
>  
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not map OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not map OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      memcpy(mapped, src_buf, buf_size);
> @@ -697,7 +697,7 @@ int av_opencl_buffer_write(cl_mem dst_cl_buf, uint8_t *src_buf, size_t buf_size)
>      status = clEnqueueUnmapMemObject(opencl_ctx.command_queue, dst_cl_buf, mapped, 0, NULL, NULL);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not unmap OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not unmap OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      return 0;
> @@ -712,7 +712,7 @@ int av_opencl_buffer_read(uint8_t *dst_buf, cl_mem src_cl_buf, size_t buf_size)
>  
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not map OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not map OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      memcpy(dst_buf, mapped, buf_size);
> @@ -720,7 +720,7 @@ int av_opencl_buffer_read(uint8_t *dst_buf, cl_mem src_cl_buf, size_t buf_size)
>      status = clEnqueueUnmapMemObject(opencl_ctx.command_queue, src_cl_buf, mapped, 0, NULL, NULL);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not unmap OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not unmap OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      return 0;
> @@ -749,7 +749,7 @@ int av_opencl_buffer_write_image(cl_mem dst_cl_buf, size_t cl_buffer_size, int d
>                                  0, NULL, NULL, &status);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not map OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not map OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      temp = mapped;
> @@ -761,7 +761,7 @@ int av_opencl_buffer_write_image(cl_mem dst_cl_buf, size_t cl_buffer_size, int d
>      status = clEnqueueUnmapMemObject(opencl_ctx.command_queue, dst_cl_buf, mapped, 0, NULL, NULL);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not unmap OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not unmap OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      return 0;
> @@ -791,7 +791,7 @@ int av_opencl_buffer_read_image(uint8_t **dst_data, int *plane_size, int plane_n
>  
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not map OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not map OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      temp = mapped;
> @@ -804,7 +804,7 @@ int av_opencl_buffer_read_image(uint8_t **dst_data, int *plane_size, int plane_n
>      status = clEnqueueUnmapMemObject(opencl_ctx.command_queue, src_cl_buf, mapped, 0, NULL, NULL);
>      if (status != CL_SUCCESS) {
>          av_log(&opencl_ctx, AV_LOG_ERROR,
> -               "Could not unmap OpenCL buffer: %s\n", opencl_errstr(status));
> +               "Could not unmap OpenCL buffer: %s\n", av_opencl_errstr(status));
>          return AVERROR_EXTERNAL;
>      }
>      return 0;
> diff --git a/libavutil/opencl.h b/libavutil/opencl.h
> index acafe36..4621e88 100644
> --- a/libavutil/opencl.h
> +++ b/libavutil/opencl.h
> @@ -151,6 +151,14 @@ AVOpenCLExternalEnv *av_opencl_alloc_external_env(void);
>  void av_opencl_free_external_env(AVOpenCLExternalEnv **ext_opencl_env);
>  
>  /**
> + * Get OpenCL error string.
> + *
> + * @param status    OpenCL error code
> + * @return OpenCL error string
> + */
> +const char *av_opencl_errstr(cl_int status);
> +
> +/**
>   * Register kernel code.
>   *
>   *  The registered kernel code is stored in a global context, and compiled
> diff --git a/libavutil/version.h b/libavutil/version.h
> index abcdba8..4cc6024 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -75,7 +75,7 @@
>   */
>  
>  #define LIBAVUTIL_VERSION_MAJOR  52
> -#define LIBAVUTIL_VERSION_MINOR  27
> +#define LIBAVUTIL_VERSION_MINOR  28
>  #define LIBAVUTIL_VERSION_MICRO 101

LGTM, thanks.
-- 
FFmpeg = Friendly and Faithful Murdering Political Erroneous Gospel


More information about the ffmpeg-devel mailing list