FFmpeg  4.0
Data Structures | Macros | Functions | Variables
hwcontext_opencl.c File Reference
#include <string.h>
#include "config.h"
#include "avassert.h"
#include "avstring.h"
#include "common.h"
#include "hwcontext.h"
#include "hwcontext_internal.h"
#include "hwcontext_opencl.h"
#include "mem.h"
#include "pixdesc.h"

Go to the source code of this file.

Data Structures

struct  OpenCLDeviceContext
 
struct  OpenCLFramesContext
 
struct  OpenCLDeviceSelector
 
struct  OpenCLMapping
 

Macros

#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
 
#define CL_FUNC(name, desc)
 
#define CHANNEL_ORDER(order, type)   case order: image_format->image_channel_order = type; break;
 

Functions

static void opencl_error_callback (const char *errinfo, const void *private_info, size_t cb, void *user_data)
 
static void opencl_device_free (AVHWDeviceContext *hwdev)
 
static char * opencl_get_platform_string (cl_platform_id platform_id, cl_platform_info key)
 
static char * opencl_get_device_string (cl_device_id device_id, cl_device_info key)
 
static int opencl_check_platform_extension (cl_platform_id platform_id, const char *name)
 
static int opencl_check_device_extension (cl_device_id device_id, const char *name)
 
static av_unused int opencl_check_extension (AVHWDeviceContext *hwdev, const char *name)
 
static int opencl_enumerate_platforms (AVHWDeviceContext *hwdev, cl_uint *nb_platforms, cl_platform_id **platforms, void *context)
 
static int opencl_filter_platform (AVHWDeviceContext *hwdev, cl_platform_id platform_id, const char *platform_name, void *context)
 
static int opencl_enumerate_devices (AVHWDeviceContext *hwdev, cl_platform_id platform_id, const char *platform_name, cl_uint *nb_devices, cl_device_id **devices, void *context)
 
static int opencl_filter_device (AVHWDeviceContext *hwdev, cl_device_id device_id, const char *device_name, void *context)
 
static int opencl_device_create_internal (AVHWDeviceContext *hwdev, const OpenCLDeviceSelector *selector, cl_context_properties *props)
 
static int opencl_device_create (AVHWDeviceContext *hwdev, const char *device, AVDictionary *opts, int flags)
 
static int opencl_device_init (AVHWDeviceContext *hwdev)
 
static void opencl_device_uninit (AVHWDeviceContext *hwdev)
 
static int opencl_device_derive (AVHWDeviceContext *hwdev, AVHWDeviceContext *src_ctx, int flags)
 
static int opencl_get_plane_format (enum AVPixelFormat pixfmt, int plane, int width, int height, cl_image_format *image_format, cl_image_desc *image_desc)
 
static int opencl_frames_get_constraints (AVHWDeviceContext *hwdev, const void *hwconfig, AVHWFramesConstraints *constraints)
 
static void opencl_pool_free (void *opaque, uint8_t *data)
 
static AVBufferRefopencl_pool_alloc (void *opaque, int size)
 
static int opencl_frames_init_command_queue (AVHWFramesContext *hwfc)
 
static int opencl_frames_init (AVHWFramesContext *hwfc)
 
static void opencl_frames_uninit (AVHWFramesContext *hwfc)
 
static int opencl_get_buffer (AVHWFramesContext *hwfc, AVFrame *frame)
 
static int opencl_transfer_get_formats (AVHWFramesContext *hwfc, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats)
 
static int opencl_wait_events (AVHWFramesContext *hwfc, cl_event *events, int nb_events)
 
static int opencl_transfer_data_from (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src)
 
static int opencl_transfer_data_to (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src)
 
static void opencl_unmap_frame (AVHWFramesContext *hwfc, HWMapDescriptor *hwmap)
 
static int opencl_map_frame (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src, int flags)
 
static cl_mem_flags opencl_mem_flags_for_mapping (int map_flags)
 
static int opencl_map_from (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src, int flags)
 
static int opencl_map_to (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src, int flags)
 
static int opencl_frames_derive_to (AVHWFramesContext *dst_fc, AVHWFramesContext *src_fc, int flags)
 

Variables

struct {
   const char *   key
 
   cl_platform_info   name
 
opencl_platform_params []
 
struct {
   const char *   key
 
   cl_device_info   name
 
opencl_device_params []
 
struct {
   const char *   key
 
   cl_device_type   type
 
opencl_device_types []
 
const HWContextType ff_hwcontext_type_opencl
 

Macro Definition Documentation

◆ CL_USE_DEPRECATED_OPENCL_1_2_APIS

#define CL_USE_DEPRECATED_OPENCL_1_2_APIS

Definition at line 19 of file hwcontext_opencl.c.

◆ CL_FUNC

#define CL_FUNC (   name,
  desc 
)
Value:
do { \
if (fail) \
break; \
priv->name = clGetExtensionFunctionAddressForPlatform( \
priv->platform_id, #name); \
if (!priv->name) { \
av_log(hwdev, AV_LOG_VERBOSE, \
desc " function not found (%s).\n", #name); \
fail = 1; \
} else { \
av_log(hwdev, AV_LOG_VERBOSE, \
desc " function found (%s).\n", #name); \
} \
} while (0)
const char * desc
Definition: nvenc.c:65
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:192
#define fail()
Definition: checkasm.h:116
cl_platform_info name

Referenced by opencl_device_init().

◆ CHANNEL_ORDER

#define CHANNEL_ORDER (   order,
  type 
)    case order: image_format->image_channel_order = type; break;

Referenced by opencl_get_plane_format().

Function Documentation

◆ opencl_error_callback()

static void opencl_error_callback ( const char *  errinfo,
const void private_info,
size_t  cb,
void user_data 
)
static

Definition at line 144 of file hwcontext_opencl.c.

Referenced by opencl_device_create_internal().

◆ opencl_device_free()

static void opencl_device_free ( AVHWDeviceContext hwdev)
static

Definition at line 152 of file hwcontext_opencl.c.

Referenced by opencl_device_create_internal().

◆ opencl_get_platform_string()

static char* opencl_get_platform_string ( cl_platform_id  platform_id,
cl_platform_info  key 
)
static

◆ opencl_get_device_string()

static char* opencl_get_device_string ( cl_device_id  device_id,
cl_device_info  key 
)
static

◆ opencl_check_platform_extension()

static int opencl_check_platform_extension ( cl_platform_id  platform_id,
const char *  name 
)
static

Definition at line 241 of file hwcontext_opencl.c.

Referenced by opencl_check_extension(), and opencl_device_uninit().

◆ opencl_check_device_extension()

static int opencl_check_device_extension ( cl_device_id  device_id,
const char *  name 
)
static

Definition at line 254 of file hwcontext_opencl.c.

Referenced by opencl_check_extension(), and opencl_device_uninit().

◆ opencl_check_extension()

static av_unused int opencl_check_extension ( AVHWDeviceContext hwdev,
const char *  name 
)
static

Definition at line 267 of file hwcontext_opencl.c.

Referenced by opencl_device_init().

◆ opencl_enumerate_platforms()

static int opencl_enumerate_platforms ( AVHWDeviceContext hwdev,
cl_uint *  nb_platforms,
cl_platform_id **  platforms,
void context 
)
static

Definition at line 288 of file hwcontext_opencl.c.

Referenced by opencl_device_create(), and opencl_device_derive().

◆ opencl_filter_platform()

static int opencl_filter_platform ( AVHWDeviceContext hwdev,
cl_platform_id  platform_id,
const char *  platform_name,
void context 
)
static

Definition at line 319 of file hwcontext_opencl.c.

Referenced by opencl_device_create(), and opencl_device_derive().

◆ opencl_enumerate_devices()

static int opencl_enumerate_devices ( AVHWDeviceContext hwdev,
cl_platform_id  platform_id,
const char *  platform_name,
cl_uint *  nb_devices,
cl_device_id **  devices,
void context 
)
static

◆ opencl_filter_device()

static int opencl_filter_device ( AVHWDeviceContext hwdev,
cl_device_id  device_id,
const char *  device_name,
void context 
)
static

Definition at line 394 of file hwcontext_opencl.c.

Referenced by opencl_device_create().

◆ opencl_device_create_internal()

static int opencl_device_create_internal ( AVHWDeviceContext hwdev,
const OpenCLDeviceSelector selector,
cl_context_properties *  props 
)
static

Definition at line 484 of file hwcontext_opencl.c.

Referenced by opencl_device_create(), and opencl_device_derive().

◆ opencl_device_create()

static int opencl_device_create ( AVHWDeviceContext hwdev,
const char *  device,
AVDictionary opts,
int  flags 
)
static

Definition at line 614 of file hwcontext_opencl.c.

◆ opencl_device_init()

static int opencl_device_init ( AVHWDeviceContext hwdev)
static

Definition at line 647 of file hwcontext_opencl.c.

Referenced by opencl_device_derive().

◆ opencl_device_uninit()

static void opencl_device_uninit ( AVHWDeviceContext hwdev)
static

Definition at line 883 of file hwcontext_opencl.c.

◆ opencl_device_derive()

static int opencl_device_derive ( AVHWDeviceContext hwdev,
AVHWDeviceContext src_ctx,
int  flags 
)
static

Definition at line 1191 of file hwcontext_opencl.c.

◆ opencl_get_plane_format()

static int opencl_get_plane_format ( enum AVPixelFormat  pixfmt,
int  plane,
int  width,
int  height,
cl_image_format *  image_format,
cl_image_desc *  image_desc 
)
static

◆ opencl_frames_get_constraints()

static int opencl_frames_get_constraints ( AVHWDeviceContext hwdev,
const void hwconfig,
AVHWFramesConstraints constraints 
)
static

Definition at line 1476 of file hwcontext_opencl.c.

◆ opencl_pool_free()

static void opencl_pool_free ( void opaque,
uint8_t data 
)
static

Definition at line 1603 of file hwcontext_opencl.c.

Referenced by opencl_pool_alloc().

◆ opencl_pool_alloc()

static AVBufferRef* opencl_pool_alloc ( void opaque,
int  size 
)
static

Definition at line 1621 of file hwcontext_opencl.c.

Referenced by opencl_frames_init().

◆ opencl_frames_init_command_queue()

static int opencl_frames_init_command_queue ( AVHWFramesContext hwfc)
static

Definition at line 1677 of file hwcontext_opencl.c.

Referenced by opencl_frames_derive_to(), and opencl_frames_init().

◆ opencl_frames_init()

static int opencl_frames_init ( AVHWFramesContext hwfc)
static

Definition at line 1696 of file hwcontext_opencl.c.

◆ opencl_frames_uninit()

static void opencl_frames_uninit ( AVHWFramesContext hwfc)
static

Definition at line 1709 of file hwcontext_opencl.c.

◆ opencl_get_buffer()

static int opencl_get_buffer ( AVHWFramesContext hwfc,
AVFrame frame 
)
static

Definition at line 1737 of file hwcontext_opencl.c.

◆ opencl_transfer_get_formats()

static int opencl_transfer_get_formats ( AVHWFramesContext hwfc,
enum AVHWFrameTransferDirection  dir,
enum AVPixelFormat **  formats 
)
static

Definition at line 1758 of file hwcontext_opencl.c.

◆ opencl_wait_events()

static int opencl_wait_events ( AVHWFramesContext hwfc,
cl_event *  events,
int  nb_events 
)
static

◆ opencl_transfer_data_from()

static int opencl_transfer_data_from ( AVHWFramesContext hwfc,
AVFrame dst,
const AVFrame src 
)
static

Definition at line 1799 of file hwcontext_opencl.c.

◆ opencl_transfer_data_to()

static int opencl_transfer_data_to ( AVHWFramesContext hwfc,
AVFrame dst,
const AVFrame src 
)
static

Definition at line 1854 of file hwcontext_opencl.c.

◆ opencl_unmap_frame()

static void opencl_unmap_frame ( AVHWFramesContext hwfc,
HWMapDescriptor hwmap 
)
static

Definition at line 1916 of file hwcontext_opencl.c.

Referenced by opencl_map_frame().

◆ opencl_map_frame()

static int opencl_map_frame ( AVHWFramesContext hwfc,
AVFrame dst,
const AVFrame src,
int  flags 
)
static

Definition at line 1945 of file hwcontext_opencl.c.

Referenced by opencl_map_from().

◆ opencl_mem_flags_for_mapping()

static cl_mem_flags opencl_mem_flags_for_mapping ( int  map_flags)
inlinestatic

Definition at line 2187 of file hwcontext_opencl.c.

◆ opencl_map_from()

static int opencl_map_from ( AVHWFramesContext hwfc,
AVFrame dst,
const AVFrame src,
int  flags 
)
static

Definition at line 2800 of file hwcontext_opencl.c.

◆ opencl_map_to()

static int opencl_map_to ( AVHWFramesContext hwfc,
AVFrame dst,
const AVFrame src,
int  flags 
)
static

Definition at line 2809 of file hwcontext_opencl.c.

◆ opencl_frames_derive_to()

static int opencl_frames_derive_to ( AVHWFramesContext dst_fc,
AVHWFramesContext src_fc,
int  flags 
)
static

Definition at line 2850 of file hwcontext_opencl.c.

Variable Documentation

◆ key

const char* key

Definition at line 165 of file hwcontext_opencl.c.

Referenced by aa_read_header(), add_metadata(), add_opt(), ape_tag_read_field(), av_opt_get_key_value(), av_opt_query_ranges(), av_opt_set_from_string(), av_packet_unpack_dictionary(), av_tree_insert(), avformat_match_stream_specifier(), avi_read_packet(), avi_read_tag(), avpriv_mirror(), check_keyboard_interaction(), cmp_id_key(), decode_header(), do_encrypt(), ea_read_packet(), epic_hash_add(), extract_line(), ff_AMediaFormat_getBuffer(), ff_AMediaFormat_getFloat(), ff_AMediaFormat_getInt32(), ff_AMediaFormat_getInt64(), ff_AMediaFormat_getString(), ff_AMediaFormat_setBuffer(), ff_AMediaFormat_setFloat(), ff_AMediaFormat_setInt32(), ff_AMediaFormat_setInt64(), ff_AMediaFormat_setString(), ff_id3v2_parse_priv_dict(), ff_metadata_conv(), ff_parse_key_value(), ff_read_riff_info(), ff_rtsp_open_transport_ctx(), ff_tee_parse_slave_options(), filter_frame(), gain_entry_compare(), glyph_cmp(), hls_encryption_start(), hpel_motion_search(), id3v2_3_metadata_split_date(), init_report(), ivr_read_header(), matroska_convert_tag(), mkv_write_simpletag(), mov_metadata_loci(), mov_parse_vc1_frame(), mov_read_custom(), mov_read_udta_string(), mpegts_write_pes(), multiswap_dec(), multiswap_enc(), mxf_parse_package_comments(), mxf_read_indirect_value(), mxf_write_opatom_body_partition(), nist_read_header(), nuv_read_dts(), open_output_file(), opencl_filter_device(), opencl_filter_platform(), opt_preset(), parse_audio(), parse_key(), parse_key_value_pair(), parse_legacy_attrib(), parse_metadata(), process_options(), read_comment(), read_info_chunk(), read_odml_index(), read_tag(), read_uslt(), redspark_probe(), redspark_read_header(), sab_diamond_search(), set_spdif(), small_diamond_search(), subviewer_read_header(), update_metadata(), url_alloc_for_protocol(), vivo_read_header(), and write_sm_data().

◆ name

cl_device_info name

Definition at line 166 of file hwcontext_opencl.c.

Referenced by opencl_filter_device(), and opencl_filter_platform().

◆ opencl_platform_params

struct { ... } opencl_platform_params[]
Initial value:
= {
{ "platform_profile", CL_PLATFORM_PROFILE },
{ "platform_version", CL_PLATFORM_VERSION },
{ "platform_name", CL_PLATFORM_NAME },
{ "platform_vendor", CL_PLATFORM_VENDOR },
{ "platform_extensions", CL_PLATFORM_EXTENSIONS },
}

Referenced by opencl_filter_platform().

◆ opencl_device_params

struct { ... } opencl_device_params[]
Initial value:
= {
{ "device_name", CL_DEVICE_NAME },
{ "device_vendor", CL_DEVICE_VENDOR },
{ "driver_version", CL_DRIVER_VERSION },
{ "device_version", CL_DEVICE_VERSION },
{ "device_profile", CL_DEVICE_PROFILE },
{ "device_extensions", CL_DEVICE_EXTENSIONS },
}

Referenced by opencl_filter_device().

◆ type

cl_device_type type
Examples:
demuxing_decoding.c, hw_decode.c, and transcoding.c.

Definition at line 189 of file hwcontext_opencl.c.

Referenced by aac_decode_close(), add_adaptation_set(), add_input_streams(), add_interval(), amf_tag_contents(), amf_tag_skip(), asf_read_ext_content(), asf_read_metadata_obj(), asf_read_picture(), asf_read_stream_properties(), ass_split_section(), ast_read_packet(), av_hwdevice_ctx_alloc(), av_hwdevice_find_type_by_name(), av_hwdevice_get_type_name(), av_hwdevice_iterate_types(), av_log_default_callback(), av_packet_add_side_data(), av_packet_copy_props(), av_stereo3d_type_name(), av_stream_add_side_data(), av_vdpau_get_surface_parameters(), avformat_match_stream_specifier(), avio_write_marker(), avs_copy_frame(), avs_decode_frame(), avs_read_packet(), avs_read_video_packet(), bmv_read_packet(), che_configure(), check_mc(), choose_encoder(), commit_bitstream_and_slice_buffer(), config_input(), create(), create_sink(), DECLARE_QUERYINTERFACE(), decode_13(), decode_cabac_b_mb_sub_type(), decode_channel_map(), decode_delta_j(), decode_extension_payload(), decode_frame(), decode_info_header(), decode_q_branch(), decode_subframe(), default_query_formats_common(), dshow_add_device(), dshow_cycle_formats(), dshow_cycle_pins(), dshow_set_audio_buffer_size(), dvbsub_probe(), encode_picture(), exif_decode_tag(), ff_AMediaCodecList_getCodecNameByType(), ff_amf_match_string(), ff_ass_split_dialog2(), ff_cbs_init(), ff_cbs_insert_unit_content(), ff_cbs_insert_unit_data(), ff_dxva2_commit_buffer(), ff_dxva2_common_end_frame(), ff_estimate_b_frame_motion(), ff_flac_parse_picture(), ff_h263_round_chroma(), ff_h264_sei_decode(), ff_hevc_annexb2mp4(), ff_hevc_decode_extradata(), ff_id3v2_write_apic(), ff_isom_write_hvcc(), ff_jni_init_jfields(), ff_jni_reset_jfields(), ff_jpeg2000_dwt_init(), ff_opencl_filter_work_size_from_image(), ff_qsv_map_pictype(), ff_rtmp_packet_create(), ff_rtp_send_jpeg(), ff_spatial_idwt_init(), ff_v4l2_context_set_status(), ff_vdpau_common_frame_params(), ff_vdpau_common_init(), ff_videotoolbox_uninit(), ff_voc_get_packet(), filter(), filter_frame(), filter_query_formats(), find_and_decode_index(), find_stream(), flac_probe(), flac_write_picture(), flush(), flv_data_packet(), flv_read_metabody(), flv_read_packet(), frame_configure_elements(), generate_fake_vps(), generate_transition(), get_che(), get_content_type(), get_duration_insec(), get_geokey_type(), GET_TOK(), gxf_resync_media(), h264_handle_packet(), h264_probe(), handle_metadata(), hevc_extradata_to_annexb(), hevc_probe(), hw_device_init_from_string(), hw_device_init_from_type(), hw_device_setup_for_decode(), hwmap_config_output(), id3v2_parse(), iff_read_header(), import_pem(), init(), init_input_filter(), init_sec_buffer(), insert_trim(), iterative_me(), ivr_read_header(), jpeg_parse_packet(), lavfi_read_header(), libAVEnumMediaTypes_Clone(), libAVEnumMediaTypes_Setup(), libAVFilter_Cleanup(), libAVFilter_Setup(), libssh_authentication(), libx265_encode_frame(), main(), make_eval_expr(), mjpeg_decode_app(), mkv_query_codec(), mm_decode_frame(), mmap_close(), mmap_start(), mms_safe_send_recv(), mov_text_decode_frame(), mov_text_encode_frame(), mov_write_covr(), mov_write_isml_manifest(), mpegps_psm_parse(), mpegps_read_packet(), mpegts_open_filter(), musx_read_header(), mxf_write_content_storage(), nal_send(), needs_termination(), new_output_stream(), new_rendition(), open_output_file(), opt_init_hw_device(), output_configure(), output_server_manifest(), parse_adaptation_sets(), parse_device_name(), parse_fmtp(), parse_header(), parse_legacy_attrib(), parse_manifest_representation(), parse_timestamp(), print_final_stats(), print_report(), probe(), qdm2_parse_subpacket(), query_formats(), read_header(), read_packet(), read_thread(), rm_assemble_video_frame(), rtmp_handshake(), rtmp_packet_read_one_chunk(), rtmp_write_amf_data(), rtp_resolve_host(), rv34_parse(), rv34_pred_mv_b(), scan_file(), select_input_picture(), select_reference_stream(), set_codec_from_probe_data(), show_hwaccels(), silk_decode_frame(), sol_read_header(), spectral_to_sample(), ssim_end1(), sunrast_decode_frame(), svq3_decode_block(), svq3_decode_mb(), tak_get_nb_samples(), tak_read_header(), targa_decode_rle(), tiff_decode_tag(), tm2_decode_blocks(), tnput(), udp_resolve_host(), vaapi_decode_find_best_format(), vaapi_encode_config_attributes(), vaapi_encode_issue(), vaapi_encode_make_packed_header(), vaapi_frames_get_constraints(), vc1_probe(), vmd_read_header(), vp3_decode_frame(), vp56_decode_4mv(), vp56_parse_mb_type_models(), w_c(), wmv2_pred_motion(), write_fragments(), and write_frame().

◆ opencl_device_types

struct { ... } opencl_device_types[]
Initial value:
= {
{ "cpu", CL_DEVICE_TYPE_CPU },
{ "gpu", CL_DEVICE_TYPE_GPU },
{ "accelerator", CL_DEVICE_TYPE_ACCELERATOR },
{ "custom", CL_DEVICE_TYPE_CUSTOM },
{ "default", CL_DEVICE_TYPE_DEFAULT },
{ "all", CL_DEVICE_TYPE_ALL },
}

Referenced by opencl_filter_device().

◆ ff_hwcontext_type_opencl

const HWContextType ff_hwcontext_type_opencl

Definition at line 2910 of file hwcontext_opencl.c.