FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions
opencl.h File Reference

OpenCL wrapper. More...

#include "config.h"
#include <OpenCL/cl.h>
#include <stdint.h>
#include "dict.h"
#include "libavutil/version.h"

Go to the source code of this file.

Data Structures

struct  AVOpenCLDeviceNode
 
struct  AVOpenCLPlatformNode
 
struct  AVOpenCLDeviceList
 
struct  AVOpenCLExternalEnv
 

Macros

#define AV_OPENCL_KERNEL(...)   # __VA_ARGS__
 
#define AV_OPENCL_MAX_KERNEL_NAME_SIZE   150
 
#define AV_OPENCL_MAX_DEVICE_NAME_SIZE   100
 
#define AV_OPENCL_MAX_PLATFORM_NAME_SIZE   100
 

Functions

int av_opencl_get_device_list (AVOpenCLDeviceList **device_list)
 Get OpenCL device list.
 
void av_opencl_free_device_list (AVOpenCLDeviceList **device_list)
 Free OpenCL device list.
 
int av_opencl_set_option (const char *key, const char *val)
 Set option in the global OpenCL context.
 
int av_opencl_get_option (const char *key, uint8_t **out_val)
 Get option value from the global OpenCL context.
 
void av_opencl_free_option (void)
 Free option values of the global OpenCL context.
 
AVOpenCLExternalEnvav_opencl_alloc_external_env (void)
 Allocate OpenCL external environment.
 
void av_opencl_free_external_env (AVOpenCLExternalEnv **ext_opencl_env)
 Free OpenCL external environment.
 
const char * av_opencl_errstr (cl_int status)
 Get OpenCL error string.
 
int av_opencl_register_kernel_code (const char *kernel_code)
 Register kernel code.
 
int av_opencl_init (AVOpenCLExternalEnv *ext_opencl_env)
 Initialize the run time OpenCL environment.
 
cl_program av_opencl_compile (const char *program_name, const char *build_opts)
 compile specific OpenCL kernel source
 
cl_command_queue av_opencl_get_command_queue (void)
 get OpenCL command queue
 
int av_opencl_buffer_create (cl_mem *cl_buf, size_t cl_buf_size, int flags, void *host_ptr)
 Create OpenCL buffer.
 
int av_opencl_buffer_write (cl_mem dst_cl_buf, uint8_t *src_buf, size_t buf_size)
 Write OpenCL buffer with data from src_buf.
 
int av_opencl_buffer_read (uint8_t *dst_buf, cl_mem src_cl_buf, size_t buf_size)
 Read data from OpenCL buffer to memory buffer.
 
int av_opencl_buffer_write_image (cl_mem dst_cl_buf, size_t cl_buffer_size, int dst_cl_offset, uint8_t **src_data, int *plane_size, int plane_num)
 Write image data from memory to OpenCL buffer.
 
int av_opencl_buffer_read_image (uint8_t **dst_data, int *plane_size, int plane_num, cl_mem src_cl_buf, size_t cl_buffer_size)
 Read image data from OpenCL buffer.
 
void av_opencl_buffer_release (cl_mem *cl_buf)
 Release OpenCL buffer.
 
void av_opencl_uninit (void)
 Release OpenCL environment.
 
int64_t av_opencl_benchmark (AVOpenCLDeviceNode *device, cl_platform_id platform, int64_t(*benchmark)(AVOpenCLExternalEnv *ext_opencl_env))
 Benchmark an OpenCL device with a user defined callback function.
 

Detailed Description

OpenCL wrapper.

This interface is considered still experimental and its API and ABI may change without prior notice.

Definition in file opencl.h.

Macro Definition Documentation

#define AV_OPENCL_KERNEL (   ...)    # __VA_ARGS__

Definition at line 46 of file opencl.h.

#define AV_OPENCL_MAX_KERNEL_NAME_SIZE   150

Definition at line 48 of file opencl.h.

#define AV_OPENCL_MAX_DEVICE_NAME_SIZE   100

Definition at line 50 of file opencl.h.

#define AV_OPENCL_MAX_PLATFORM_NAME_SIZE   100

Definition at line 52 of file opencl.h.

Function Documentation

int av_opencl_get_device_list ( AVOpenCLDeviceList **  device_list)

Get OpenCL device list.

It must be freed with av_opencl_free_device_list().

Parameters
device_listpointer to OpenCL environment device list, should be released by av_opencl_free_device_list()
Returns
>=0 on success, a negative error code in case of failure

Definition at line 305 of file opencl.c.

Referenced by opt_opencl_bench().

void av_opencl_free_device_list ( AVOpenCLDeviceList **  device_list)

Free OpenCL device list.

Parameters
device_listpointer to OpenCL environment device list created by av_opencl_get_device_list()

Definition at line 323 of file opencl.c.

Referenced by opt_opencl_bench().

int av_opencl_set_option ( const char *  key,
const char *  val 
)

Set option in the global OpenCL context.

This options affect the operation performed by the next av_opencl_init() operation.

The currently accepted options are:

  • platform: set index of platform in device list
  • device: set index of device in device list

See reference "OpenCL Specification Version: 1.2 chapter 5.6.4".

Parameters
keyoption key
valoption value
Returns
>=0 on success, a negative error code in case of failure
See Also
av_opencl_get_option()

Definition at line 350 of file opencl.c.

Referenced by opt_opencl().

int av_opencl_get_option ( const char *  key,
uint8_t **  out_val 
)

Get option value from the global OpenCL context.

Parameters
keyoption key
out_valpointer to location where option value will be written, must be freed with av_freep()
Returns
>=0 on success, a negative error code in case of failure
See Also
av_opencl_set_option()

Definition at line 365 of file opencl.c.

void av_opencl_free_option ( void  )

Free option values of the global OpenCL context.

Definition at line 374 of file opencl.c.

AVOpenCLExternalEnv* av_opencl_alloc_external_env ( void  )

Allocate OpenCL external environment.

It must be freed with av_opencl_free_external_env().

Returns
pointer to allocated OpenCL external environment

Definition at line 382 of file opencl.c.

Referenced by av_opencl_benchmark().

void av_opencl_free_external_env ( AVOpenCLExternalEnv **  ext_opencl_env)

Free OpenCL external environment.

Parameters
ext_opencl_envpointer to OpenCL external environment created by av_opencl_alloc_external_env()

Definition at line 392 of file opencl.c.

Referenced by av_opencl_benchmark().

const char* av_opencl_errstr ( cl_int  status)
int av_opencl_register_kernel_code ( const char *  kernel_code)

Register kernel code.

The registered kernel code is stored in a global context, and compiled in the runtime environment when av_opencl_init() is called.

Parameters
kernel_codekernel code to be compiled in the OpenCL runtime environment
Returns
>=0 on success, a negative error code in case of failure

Definition at line 397 of file opencl.c.

int av_opencl_init ( AVOpenCLExternalEnv ext_opencl_env)

Initialize the run time OpenCL environment.

Parameters
ext_opencl_envexternal OpenCL environment, created by an application program, ignored if set to NULL
Returns
>=0 on success, a negative error code in case of failure

Definition at line 584 of file opencl.c.

Referenced by ff_opencl_deshake_init(), and ff_opencl_unsharp_init().

cl_program av_opencl_compile ( const char *  program_name,
const char *  build_opts 
)

compile specific OpenCL kernel source

Parameters
program_namepointer to a program name used for identification
build_optspointer to a string that describes the preprocessor build options to be used for building the program
Returns
a cl_program object

Definition at line 424 of file opencl.c.

Referenced by ff_opencl_deshake_init(), and ff_opencl_unsharp_init().

cl_command_queue av_opencl_get_command_queue ( void  )

get OpenCL command queue

Returns
a cl_command_queue object

Definition at line 473 of file opencl.c.

Referenced by ff_opencl_deshake_init(), and ff_opencl_unsharp_init().

int av_opencl_buffer_create ( cl_mem *  cl_buf,
size_t  cl_buf_size,
int  flags,
void host_ptr 
)

Create OpenCL buffer.

The buffer is used to save the data used or created by an OpenCL kernel. The created buffer must be released with av_opencl_buffer_release().

See clCreateBuffer() function reference for more information about the parameters.

Parameters
cl_bufpointer to OpenCL buffer
cl_buf_sizesize in bytes of the OpenCL buffer to create
flagsflags used to control buffer attributes
host_ptrhost pointer of the OpenCL buffer
Returns
>=0 on success, a negative error code in case of failure

Definition at line 643 of file opencl.c.

Referenced by ff_opencl_deshake_process_inout_buf(), ff_opencl_unsharp_init(), and ff_opencl_unsharp_process_inout_buf().

int av_opencl_buffer_write ( cl_mem  dst_cl_buf,
uint8_t src_buf,
size_t  buf_size 
)

Write OpenCL buffer with data from src_buf.

Parameters
dst_cl_bufpointer to OpenCL destination buffer
src_bufpointer to source buffer
buf_sizesize in bytes of the source and destination buffers
Returns
>=0 on success, a negative error code in case of failure

Definition at line 667 of file opencl.c.

Referenced by compute_mask_matrix().

int av_opencl_buffer_read ( uint8_t dst_buf,
cl_mem  src_cl_buf,
size_t  buf_size 
)

Read data from OpenCL buffer to memory buffer.

Parameters
dst_bufpointer to destination buffer (CPU memory)
src_cl_bufpointer to source OpenCL buffer
buf_sizesize in bytes of the source and destination buffers
Returns
>=0 on success, a negative error code in case of failure

Definition at line 690 of file opencl.c.

int av_opencl_buffer_write_image ( cl_mem  dst_cl_buf,
size_t  cl_buffer_size,
int  dst_cl_offset,
uint8_t **  src_data,
int *  plane_size,
int  plane_num 
)

Write image data from memory to OpenCL buffer.

The source must be an array of pointers to image plane buffers.

Parameters
dst_cl_bufpointer to destination OpenCL buffer
dst_cl_buf_sizesize in bytes of OpenCL buffer
dst_cl_buf_offsetthe offset of the OpenCL buffer start position
src_dataarray of pointers to source plane buffers
src_plane_sizesarray of sizes in bytes of the source plane buffers
src_plane_numnumber of source image planes
Returns
>=0 on success, a negative error code in case of failure

Definition at line 713 of file opencl.c.

Referenced by ff_opencl_deshake_process_inout_buf(), and ff_opencl_unsharp_process_inout_buf().

int av_opencl_buffer_read_image ( uint8_t **  dst_data,
int *  plane_size,
int  plane_num,
cl_mem  src_cl_buf,
size_t  cl_buffer_size 
)

Read image data from OpenCL buffer.

Parameters
dst_dataarray of pointers to destination plane buffers
dst_plane_sizesarray of pointers to destination plane buffers
dst_plane_numnumber of destination image planes
src_cl_bufpointer to source OpenCL buffer
src_cl_buf_sizesize in bytes of OpenCL buffer
Returns
>=0 on success, a negative error code in case of failure

Definition at line 754 of file opencl.c.

Referenced by ff_opencl_apply_unsharp(), and ff_opencl_transform().

void av_opencl_buffer_release ( cl_mem *  cl_buf)

Release OpenCL buffer.

Parameters
cl_bufpointer to OpenCL buffer to release, which was previously filled with av_opencl_buffer_create()

Definition at line 654 of file opencl.c.

Referenced by ff_opencl_deshake_uninit(), and ff_opencl_unsharp_uninit().

void av_opencl_uninit ( void  )

Release OpenCL environment.

The OpenCL environment is effectively released only if all the created kernels had been released with av_opencl_release_kernel().

Definition at line 611 of file opencl.c.

Referenced by ff_opencl_deshake_uninit(), and ff_opencl_unsharp_uninit().

int64_t av_opencl_benchmark ( AVOpenCLDeviceNode device,
cl_platform_id  platform,
int64_t(*)(AVOpenCLExternalEnv *ext_opencl_env)  benchmark 
)

Benchmark an OpenCL device with a user defined callback function.

This function sets up an external OpenCL environment including context and command queue on the device then tears it down in the end. The callback function should perform the rest of the work.

Parameters
devicepointer to the OpenCL device to be used
platformcl_platform_id handle to which the device belongs to
benchmarkcallback function to perform the benchmark, return a negative value in case of failure
Returns
the score passed from the callback function, a negative error code in case of failure

Definition at line 797 of file opencl.c.

Referenced by opt_opencl_bench().