69 "hardware frames context on the input.\n");
74 if (avctx->
inputs[0] != inlink)
119 if (!output_frames_ref) {
133 "frames: %d.\n", err);
162 cle = clReleaseProgram(ctx->
program);
163 if (cle != CL_SUCCESS)
165 "program: %d.\n", cle);
172 const char **program_source_array,
179 program_source_array,
188 if (cle != CL_SUCCESS) {
191 if (cle == CL_BUILD_PROGRAM_FAILURE) {
196 CL_PROGRAM_BUILD_LOG, 0,
NULL, &log_length);
200 cle = clGetProgramBuildInfo(ctx->
program,
202 CL_PROGRAM_BUILD_LOG,
203 log_length, log,
NULL);
204 if (cle == CL_SUCCESS)
211 clReleaseProgram(ctx->
program);
220 const char *filename)
225 const char *src_const;
231 "source file \"%s\".\n", filename);
242 err =
snprintf(src, len,
"#line 1 \"%s\"\n", filename);
254 rb = fread(src + pos, 1, len - pos - 1, file);
255 if (rb == 0 && ferror(file)) {
284 cl_mem_object_type
type;
294 image = (cl_mem)frame->
data[plane];
301 cle = clGetMemObjectInfo(image, CL_MEM_TYPE,
sizeof(type),
303 if (cle != CL_SUCCESS) {
305 "plane %d: %d.\n", plane, cle);
308 if (type != CL_MEM_OBJECT_IMAGE2D) {
314 cle = clGetImageInfo(image, CL_IMAGE_WIDTH,
sizeof(
size_t),
316 if (cle != CL_SUCCESS) {
322 cle = clGetImageInfo(image, CL_IMAGE_HEIGHT,
sizeof(
size_t),
324 if (cle != CL_SUCCESS) {
330 if (block_alignment) {
331 width =
FFALIGN(width, block_alignment);
332 height =
FFALIGN(height, block_alignment);
335 work_size[0] =
width;
345 av_bprintf(buf,
"__constant float %s[9] = {\n", name_str);
346 for (i = 0; i < 3; i++) {
347 for (j = 0; j < 3; j++)
358 clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START,
sizeof(time_start), &time_start,
NULL);
359 clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END,
sizeof(time_end), &time_end,
NULL);
361 return time_end - time_start;
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e.
void av_bprintf(AVBPrint *buf, const char *fmt,...)
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
This structure describes decoded (raw) audio or video data.
int ff_opencl_filter_work_size_from_image(AVFilterContext *avctx, size_t *work_size, AVFrame *frame, int plane, int block_alignment)
Find the work size needed needed for a given plane of an image.
int ff_opencl_filter_config_input(AVFilterLink *inlink)
Check that the input link contains a suitable hardware frames context and extract the device from it...
int ff_opencl_filter_query_formats(AVFilterContext *avctx)
Return that all inputs and outputs support only AV_PIX_FMT_OPENCL.
Memory handling functions.
int h
agreed upon image height
FILE * av_fopen_utf8(const char *path, const char *mode)
Open a file using a UTF-8 filename.
int width
The allocated dimensions of the frames in this pool.
AVBufferRef * hw_device_ctx
For filters which will create hardware frames, sets the device the filter should create them in...
enum AVPixelFormat format
The pixel format identifying the underlying HW surface type.
cl_ulong ff_opencl_get_event_time(cl_event event)
Gets the command start and end times for the given event and returns the difference (the time that th...
int ff_opencl_filter_init(AVFilterContext *avctx)
Initialise an OpenCL filter context.
AVOpenCLDeviceContext * hwctx
AVFilterLink ** inputs
array of pointers to input links
cl_device_id device_id
The primary device ID of the device.
AVHWDeviceContext * device
void * hwctx
The format-specific data, allocated and freed by libavutil along with this context.
int ff_opencl_filter_config_output(AVFilterLink *outlink)
Create a suitable hardware frames context for the output.
A link between two filters.
#define i(width, name, range_min, range_max)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void * priv
private data for use by the filter
int av_hwframe_ctx_init(AVBufferRef *ref)
Finalize the context before use.
enum AVPixelFormat output_format
int w
agreed upon image width
AVBufferRef * hw_frames_ctx
For hwaccel pixel formats, this should be a reference to the AVHWFramesContext describing the frames...
static int opencl_filter_set_device(AVFilterContext *avctx, AVBufferRef *device)
Hardware surfaces for OpenCL.
AVFilterContext * src
source filter
int ff_opencl_filter_load_program_from_file(AVFilterContext *avctx, const char *filename)
Load a new OpenCL program from a file.
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
uint8_t * data
The data buffer.
This struct describes a set or pool of "hardware" frames (i.e.
static enum AVPixelFormat pix_fmts[]
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
AVBufferRef * device_ref
A reference to the parent AVHWDeviceContext.
A reference to a data buffer.
AVBufferRef * av_hwframe_ctx_alloc(AVBufferRef *device_ref_in)
Allocate an AVHWFramesContext tied to a given device context.
void ff_opencl_filter_uninit(AVFilterContext *avctx)
Uninitialise an OpenCL filter context.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
AVFilterContext * dst
dest filter
cl_context context
The OpenCL context which will contain all operations and frames on this device.
void ff_opencl_print_const_matrix_3x3(AVBPrint *buf, const char *name_str, double mat[3][3])
Print a 3x3 matrix into a buffer as __constant array, which could be included in an OpenCL program...
int ff_opencl_filter_load_program(AVFilterContext *avctx, const char **program_source_array, int nb_strings)
Load a new OpenCL program from strings in memory.
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
enum AVPixelFormat sw_format
The pixel format identifying the actual data layout of the hardware frames.
AVPixelFormat
Pixel format.