FFmpeg
Loading...
Searching...
No Matches
hwcontext_vulkan.c File Reference
#include <dlfcn.h>
#include <unistd.h>
#include "thread.h"
#include "config.h"
#include "pixdesc.h"
#include "avstring.h"
#include "imgutils.h"
#include "hwcontext.h"
#include "hwcontext_internal.h"
#include "hwcontext_vulkan.h"
#include "mem.h"
#include "vulkan.h"
#include "vulkan_loader.h"

Go to the source code of this file.

Data Structures

struct  VulkanDeviceFeatures
 
struct  VulkanDevicePriv
 
struct  VulkanFramesPriv
 
struct  AVVkFrameInternal
 
struct  FFVkFormatEntry
 
struct  VulkanOptExtension
 
struct  VulkanDeviceSelection
 

Macros

#define VK_NO_PROTOTYPES
 
#define VK_ENABLE_BETA_EXTENSIONS
 
#define COPY_VAL(VAL)
 
#define ASPECT_2PLANE   (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT)
 
#define ASPECT_3PLANE   (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT)
 
#define ADD_VAL_TO_LIST(list, count, val)
 
#define RELEASE_PROPS(props, count)
 
#define PICK_QF(type, vid_op)
 

Enumerations

enum  FFVulkanDebugMode {
  FF_VULKAN_DEBUG_NONE = 0 , FF_VULKAN_DEBUG_VALIDATE = 1 , FF_VULKAN_DEBUG_PRINTF = 2 , FF_VULKAN_DEBUG_PRACTICES = 3 ,
  FF_VULKAN_DEBUG_NB
}
 
enum  PrepMode {
  PREP_MODE_GENERAL , PREP_MODE_WRITE , PREP_MODE_EXTERNAL_EXPORT , PREP_MODE_EXTERNAL_IMPORT ,
  PREP_MODE_DECODING_DST , PREP_MODE_DECODING_DPB , PREP_MODE_ENCODING_DPB
}
 

Functions

static void device_features_init (AVHWDeviceContext *ctx, VulkanDeviceFeatures *feats)
 
static void device_features_copy_needed (VulkanDeviceFeatures *dst, VulkanDeviceFeatures *src)
 
const VkFormatav_vkfmt_from_pixfmt (enum AVPixelFormat p)
 Returns the optimal per-plane Vulkan format for a given sw_format, one for each plane.
 
static const struct FFVkFormatEntryvk_find_format_entry (enum AVPixelFormat p)
 
static int vkfmt_from_pixfmt2 (AVHWDeviceContext *dev_ctx, enum AVPixelFormat p, VkImageTiling tiling, VkFormat fmts[AV_NUM_DATA_POINTERS], int *nb_images, VkImageAspectFlags *aspect, VkImageUsageFlags *supported_usage, int disable_multiplane, int need_storage)
 
static int load_libvulkan (AVHWDeviceContext *ctx)
 
const char ** av_vk_get_optional_instance_extensions (int *count)
 Returns an array of optional Vulkan instance extensions that FFmpeg may use if enabled.
 
const char ** av_vk_get_optional_device_extensions (int *count)
 Returns an array of optional Vulkan device extensions that FFmpeg may use if enabled.
 
static VKAPI_ATTR VkBool32 VKAPI_CALL vk_dbg_callback (VkDebugUtilsMessageSeverityFlagBitsEXT severity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT *data, void *priv)
 
static int vulkan_device_has_rebar (AVHWDeviceContext *ctx)
 
static int check_extensions (AVHWDeviceContext *ctx, int dev, AVDictionary *opts, const char *const **dst, uint32_t *num, enum FFVulkanDebugMode debug_mode)
 
static int check_layers (AVHWDeviceContext *ctx, AVDictionary *opts, const char *const **dst, uint32_t *num, enum FFVulkanDebugMode *debug_mode)
 
static int create_instance (AVHWDeviceContext *ctx, AVDictionary *opts, enum FFVulkanDebugMode *debug_mode)
 
static const char * vk_dev_type (enum VkPhysicalDeviceType type)
 
static int find_device (AVHWDeviceContext *ctx, VulkanDeviceSelection *select)
 
static int pick_queue_family (VkQueueFamilyProperties2 *qf, uint32_t num_qf, VkQueueFlagBits flags)
 
static int pick_video_queue_family (VkQueueFamilyProperties2 *qf, VkQueueFamilyVideoPropertiesKHR *qf_vid, uint32_t num_qf, VkVideoCodecOperationFlagsKHR flags)
 
static int setup_queue_families (AVHWDeviceContext *ctx, VkDeviceCreateInfo *cd)
 
static void vulkan_device_free (AVHWDeviceContext *ctx)
 
static void vulkan_device_uninit (AVHWDeviceContext *ctx)
 
static int vulkan_device_create_internal (AVHWDeviceContext *ctx, VulkanDeviceSelection *dev_select, int disable_multiplane, AVDictionary *opts, int flags)
 
static void lock_queue (AVHWDeviceContext *ctx, uint32_t queue_family, uint32_t index)
 
static void unlock_queue (AVHWDeviceContext *ctx, uint32_t queue_family, uint32_t index)
 
static int vulkan_device_init (AVHWDeviceContext *ctx)
 
static int vulkan_device_create (AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags)
 
static int vulkan_device_derive (AVHWDeviceContext *ctx, AVHWDeviceContext *src_ctx, AVDictionary *opts, int flags)
 
static int vulkan_frames_get_constraints (AVHWDeviceContext *ctx, const void *hwconfig, AVHWFramesConstraints *constraints)
 
static int alloc_mem (AVHWDeviceContext *ctx, VkMemoryRequirements *req, VkMemoryPropertyFlagBits req_flags, const void *alloc_extension, VkMemoryPropertyFlagBits *mem_flags, VkDeviceMemory *mem)
 
static void vulkan_free_internal (VulkanDevicePriv *p, AVVkFrame *f)
 
static void vulkan_frame_free (AVHWFramesContext *hwfc, AVVkFrame *f)
 
static void vulkan_frame_free_cb (void *opaque, uint8_t *data)
 
static int alloc_bind_mem (AVHWFramesContext *hwfc, AVVkFrame *f, void *alloc_pnext, size_t alloc_pnext_stride)
 
static void switch_new_props (enum PrepMode pmode, VkImageLayout *new_layout, VkAccessFlags2 *new_access)
 
static int switch_layout (AVHWFramesContext *hwfc, FFVkExecPool *ectx, AVVkFrame *frame, enum PrepMode pmode)
 
static int switch_layout_host (AVHWFramesContext *hwfc, FFVkExecPool *ectx, AVVkFrame *frame, enum PrepMode pmode)
 
static int prepare_frame (AVHWFramesContext *hwfc, FFVkExecPool *ectx, AVVkFrame *frame, enum PrepMode pmode)
 
static void get_plane_wh (uint32_t *w, uint32_t *h, enum AVPixelFormat format, int frame_w, int frame_h, int plane)
 
static int create_frame (AVHWFramesContext *hwfc, AVVkFrame **frame, VkImageTiling tiling, VkImageUsageFlagBits usage, VkImageCreateFlags flags, int nb_layers, void *create_pnext)
 
static void try_export_flags (AVHWFramesContext *hwfc, VkExternalMemoryHandleTypeFlags *comp_handle_types, VkExternalMemoryHandleTypeFlags *iexp, VkExternalMemoryHandleTypeFlagBits exp)
 
static AVBufferRefvulkan_pool_alloc (void *opaque, size_t size)
 
static void lock_frame (AVHWFramesContext *fc, AVVkFrame *vkf)
 
static void unlock_frame (AVHWFramesContext *fc, AVVkFrame *vkf)
 
static void vulkan_frames_uninit (AVHWFramesContext *hwfc)
 
static int vulkan_host_transfer_usable (AVHWFramesContext *hwfc)
 
static int vulkan_frames_init (AVHWFramesContext *hwfc)
 
static int vulkan_get_buffer (AVHWFramesContext *hwfc, AVFrame *frame)
 
static int vulkan_transfer_get_formats (AVHWFramesContext *hwfc, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats)
 
static int vulkan_map_to (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src, int flags)
 
static int vulkan_map_from (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src, int flags)
 
static int copy_buffer_data (AVHWFramesContext *hwfc, FFVkBuffer *vkbuf, AVFrame *swf, VkBufferImageCopy *region, int planes, int upload)
 
static int get_plane_buf (AVHWFramesContext *hwfc, FFVkBuffer **dst, AVFrame *swf, VkBufferImageCopy *region, int upload)
 
static int host_map_frame (AVHWFramesContext *hwfc, FFVkBuffer **dst, int *nb_bufs, AVFrame *swf, VkBufferImageCopy *region, int upload)
 
static int vulkan_transfer_host (AVHWFramesContext *hwfc, AVFrame *hwf, AVFrame *swf, int upload)
 
static int vulkan_transfer_frame (AVHWFramesContext *hwfc, AVFrame *swf, AVFrame *hwf, int upload)
 
static int vulkan_transfer_data_to (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src)
 
static int vulkan_transfer_data_from (AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src)
 
static int vulkan_frames_derive_to (AVHWFramesContext *dst_fc, AVHWFramesContext *src_fc, int flags)
 
AVVkFrameav_vk_frame_alloc (void)
 Allocates a single AVVkFrame and initializes everything as 0.
 

Variables

static const struct FFVkFormatEntry vk_formats_list []
 
static const int nb_vk_formats_list = FF_ARRAY_ELEMS(vk_formats_list)
 
static const VulkanOptExtension optional_instance_exts []
 
static const VulkanOptExtension optional_device_exts []
 
const HWContextType ff_hwcontext_type_vulkan
 

Macro Definition Documentation

◆ VK_NO_PROTOTYPES

#define VK_NO_PROTOTYPES

Definition at line 21 of file hwcontext_vulkan.c.

◆ VK_ENABLE_BETA_EXTENSIONS

#define VK_ENABLE_BETA_EXTENSIONS

Definition at line 22 of file hwcontext_vulkan.c.

◆ COPY_VAL

#define COPY_VAL ( VAL)
Value:
do { \
dst->VAL = src->VAL; \
} while (0) \
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
#define src
Definition vp8dsp.c:248

Referenced by device_features_copy_needed().

◆ ASPECT_2PLANE

#define ASPECT_2PLANE   (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT)

Definition at line 450 of file hwcontext_vulkan.c.

◆ ASPECT_3PLANE

#define ASPECT_3PLANE   (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT)

Definition at line 451 of file hwcontext_vulkan.c.

◆ ADD_VAL_TO_LIST

#define ADD_VAL_TO_LIST ( list,
count,
val )
Value:
do { \
list = av_realloc_array(list, ++count, sizeof(*list)); \
if (!list) { \
err = AVERROR(ENOMEM); \
goto fail; \
} \
list[count - 1] = av_strdup(val); \
if (!list[count - 1]) { \
err = AVERROR(ENOMEM); \
goto fail; \
} \
} while(0)
static double val(void *priv, double ch)
Definition aeval.c:77
#define fail
Definition test.h:479
#define AVERROR(e)
Definition error.h:45
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition mem.c:217
#define av_strdup(s)
Definition ops_static.c:55

Definition at line 869 of file hwcontext_vulkan.c.

Referenced by check_extensions(), and check_layers().

◆ RELEASE_PROPS

#define RELEASE_PROPS ( props,
count )
Value:
if (props) { \
for (int i = 0; i < count; i++) \
av_free((void *)((props)[i])); \
av_free((void *)props); \
}
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define av_free(p)

Definition at line 883 of file hwcontext_vulkan.c.

Referenced by check_extensions(), check_layers(), create_instance(), and vulkan_device_free().

◆ PICK_QF

#define PICK_QF ( type,
vid_op )

Referenced by setup_queue_families().

Enumeration Type Documentation

◆ FFVulkanDebugMode

Enumerator
FF_VULKAN_DEBUG_NONE 
FF_VULKAN_DEBUG_VALIDATE 
FF_VULKAN_DEBUG_PRINTF 
FF_VULKAN_DEBUG_PRACTICES 
FF_VULKAN_DEBUG_NB 

Definition at line 910 of file hwcontext_vulkan.c.

◆ PrepMode

enum PrepMode
Enumerator
PREP_MODE_GENERAL 
PREP_MODE_WRITE 
PREP_MODE_EXTERNAL_EXPORT 
PREP_MODE_EXTERNAL_IMPORT 
PREP_MODE_DECODING_DST 
PREP_MODE_DECODING_DPB 
PREP_MODE_ENCODING_DPB 

Definition at line 2516 of file hwcontext_vulkan.c.

Function Documentation

◆ device_features_init()

static void device_features_init ( AVHWDeviceContext * ctx,
VulkanDeviceFeatures * feats )
static

Definition at line 236 of file hwcontext_vulkan.c.

Referenced by vulkan_device_create_internal().

◆ device_features_copy_needed()

static void device_features_copy_needed ( VulkanDeviceFeatures * dst,
VulkanDeviceFeatures * src )
static

Definition at line 329 of file hwcontext_vulkan.c.

Referenced by vulkan_device_create_internal().

◆ av_vkfmt_from_pixfmt()

const VkFormat * av_vkfmt_from_pixfmt ( enum AVPixelFormat p)

Returns the optimal per-plane Vulkan format for a given sw_format, one for each plane.

Returns NULL on unsupported formats.

Definition at line 573 of file hwcontext_vulkan.c.

◆ vk_find_format_entry()

static const struct FFVkFormatEntry * vk_find_format_entry ( enum AVPixelFormat p)
static

Definition at line 581 of file hwcontext_vulkan.c.

Referenced by vulkan_frames_init().

◆ vkfmt_from_pixfmt2()

static int vkfmt_from_pixfmt2 ( AVHWDeviceContext * dev_ctx,
enum AVPixelFormat p,
VkImageTiling tiling,
VkFormat fmts[AV_NUM_DATA_POINTERS],
int * nb_images,
VkImageAspectFlags * aspect,
VkImageUsageFlags * supported_usage,
int disable_multiplane,
int need_storage )
static

Definition at line 589 of file hwcontext_vulkan.c.

Referenced by vulkan_frames_get_constraints(), and vulkan_frames_init().

◆ load_libvulkan()

static int load_libvulkan ( AVHWDeviceContext * ctx)
static

Definition at line 687 of file hwcontext_vulkan.c.

Referenced by create_instance().

◆ av_vk_get_optional_instance_extensions()

const char ** av_vk_get_optional_instance_extensions ( int * count)

Returns an array of optional Vulkan instance extensions that FFmpeg may use if enabled.

Note
Must be freed via av_free()

Definition at line 808 of file hwcontext_vulkan.c.

◆ av_vk_get_optional_device_extensions()

const char ** av_vk_get_optional_device_extensions ( int * count)

Returns an array of optional Vulkan device extensions that FFmpeg may use if enabled.

Note
Must be freed via av_free()

Definition at line 822 of file hwcontext_vulkan.c.

◆ vk_dbg_callback()

static VKAPI_ATTR VkBool32 VKAPI_CALL vk_dbg_callback ( VkDebugUtilsMessageSeverityFlagBitsEXT severity,
VkDebugUtilsMessageTypeFlagsEXT messageType,
const VkDebugUtilsMessengerCallbackDataEXT * data,
void * priv )
static

Definition at line 837 of file hwcontext_vulkan.c.

Referenced by create_instance().

◆ vulkan_device_has_rebar()

static int vulkan_device_has_rebar ( AVHWDeviceContext * ctx)
static

Definition at line 890 of file hwcontext_vulkan.c.

Referenced by check_extensions().

◆ check_extensions()

static int check_extensions ( AVHWDeviceContext * ctx,
int dev,
AVDictionary * opts,
const char *const ** dst,
uint32_t * num,
enum FFVulkanDebugMode debug_mode )
static

Definition at line 922 of file hwcontext_vulkan.c.

Referenced by create_instance(), and vulkan_device_create_internal().

◆ check_layers()

static int check_layers ( AVHWDeviceContext * ctx,
AVDictionary * opts,
const char *const ** dst,
uint32_t * num,
enum FFVulkanDebugMode * debug_mode )
static

Definition at line 1087 of file hwcontext_vulkan.c.

Referenced by create_instance().

◆ create_instance()

static int create_instance ( AVHWDeviceContext * ctx,
AVDictionary * opts,
enum FFVulkanDebugMode * debug_mode )
static

Definition at line 1234 of file hwcontext_vulkan.c.

Referenced by vulkan_device_create_internal().

◆ vk_dev_type()

static const char * vk_dev_type ( enum VkPhysicalDeviceType type)
static

Definition at line 1383 of file hwcontext_vulkan.c.

Referenced by find_device().

◆ find_device()

static int find_device ( AVHWDeviceContext * ctx,
VulkanDeviceSelection * select )
static

Definition at line 1395 of file hwcontext_vulkan.c.

Referenced by vulkan_device_create_internal().

◆ pick_queue_family()

static int pick_queue_family ( VkQueueFamilyProperties2 * qf,
uint32_t num_qf,
VkQueueFlagBits flags )
inlinestatic

Definition at line 1566 of file hwcontext_vulkan.c.

◆ pick_video_queue_family()

static int pick_video_queue_family ( VkQueueFamilyProperties2 * qf,
VkQueueFamilyVideoPropertiesKHR * qf_vid,
uint32_t num_qf,
VkVideoCodecOperationFlagsKHR flags )
inlinestatic

Definition at line 1595 of file hwcontext_vulkan.c.

◆ setup_queue_families()

static int setup_queue_families ( AVHWDeviceContext * ctx,
VkDeviceCreateInfo * cd )
static

Definition at line 1624 of file hwcontext_vulkan.c.

Referenced by vulkan_device_create_internal().

◆ vulkan_device_free()

static void vulkan_device_free ( AVHWDeviceContext * ctx)
static

Definition at line 1798 of file hwcontext_vulkan.c.

Referenced by vulkan_device_create_internal().

◆ vulkan_device_uninit()

static void vulkan_device_uninit ( AVHWDeviceContext * ctx)
static

Definition at line 1821 of file hwcontext_vulkan.c.

◆ vulkan_device_create_internal()

static int vulkan_device_create_internal ( AVHWDeviceContext * ctx,
VulkanDeviceSelection * dev_select,
int disable_multiplane,
AVDictionary * opts,
int flags )
static

Definition at line 1836 of file hwcontext_vulkan.c.

Referenced by vulkan_device_create(), and vulkan_device_derive().

◆ lock_queue()

static void lock_queue ( AVHWDeviceContext * ctx,
uint32_t queue_family,
uint32_t index )
static

Definition at line 1943 of file hwcontext_vulkan.c.

◆ unlock_queue()

static void unlock_queue ( AVHWDeviceContext * ctx,
uint32_t queue_family,
uint32_t index )
static

Definition at line 1950 of file hwcontext_vulkan.c.

◆ vulkan_device_init()

static int vulkan_device_init ( AVHWDeviceContext * ctx)
static

Definition at line 1957 of file hwcontext_vulkan.c.

◆ vulkan_device_create()

static int vulkan_device_create ( AVHWDeviceContext * ctx,
const char * device,
AVDictionary * opts,
int flags )
static

Definition at line 2131 of file hwcontext_vulkan.c.

◆ vulkan_device_derive()

static int vulkan_device_derive ( AVHWDeviceContext * ctx,
AVHWDeviceContext * src_ctx,
AVDictionary * opts,
int flags )
static

Definition at line 2147 of file hwcontext_vulkan.c.

◆ vulkan_frames_get_constraints()

static int vulkan_frames_get_constraints ( AVHWDeviceContext * ctx,
const void * hwconfig,
AVHWFramesConstraints * constraints )
static

Definition at line 2250 of file hwcontext_vulkan.c.

◆ alloc_mem()

static int alloc_mem ( AVHWDeviceContext * ctx,
VkMemoryRequirements * req,
VkMemoryPropertyFlagBits req_flags,
const void * alloc_extension,
VkMemoryPropertyFlagBits * mem_flags,
VkDeviceMemory * mem )
static

Definition at line 2300 of file hwcontext_vulkan.c.

Referenced by alloc_bind_mem().

◆ vulkan_free_internal()

static void vulkan_free_internal ( VulkanDevicePriv * p,
AVVkFrame * f )
static

Definition at line 2358 of file hwcontext_vulkan.c.

Referenced by vulkan_frame_free().

◆ vulkan_frame_free()

static void vulkan_frame_free ( AVHWFramesContext * hwfc,
AVVkFrame * f )
static

◆ vulkan_frame_free_cb()

static void vulkan_frame_free_cb ( void * opaque,
uint8_t * data )
static

Definition at line 2436 of file hwcontext_vulkan.c.

Referenced by vulkan_pool_alloc().

◆ alloc_bind_mem()

static int alloc_bind_mem ( AVHWFramesContext * hwfc,
AVVkFrame * f,
void * alloc_pnext,
size_t alloc_pnext_stride )
static

Definition at line 2441 of file hwcontext_vulkan.c.

Referenced by vulkan_pool_alloc().

◆ switch_new_props()

static void switch_new_props ( enum PrepMode pmode,
VkImageLayout * new_layout,
VkAccessFlags2 * new_access )
static

Definition at line 2526 of file hwcontext_vulkan.c.

Referenced by switch_layout(), and switch_layout_host().

◆ switch_layout()

static int switch_layout ( AVHWFramesContext * hwfc,
FFVkExecPool * ectx,
AVVkFrame * frame,
enum PrepMode pmode )
static

Definition at line 2561 of file hwcontext_vulkan.c.

Referenced by prepare_frame().

◆ switch_layout_host()

static int switch_layout_host ( AVHWFramesContext * hwfc,
FFVkExecPool * ectx,
AVVkFrame * frame,
enum PrepMode pmode )
static

Definition at line 2626 of file hwcontext_vulkan.c.

Referenced by prepare_frame().

◆ prepare_frame()

static int prepare_frame ( AVHWFramesContext * hwfc,
FFVkExecPool * ectx,
AVVkFrame * frame,
enum PrepMode pmode )
static

Definition at line 2671 of file hwcontext_vulkan.c.

Referenced by vulkan_pool_alloc().

◆ get_plane_wh()

static void get_plane_wh ( uint32_t * w,
uint32_t * h,
enum AVPixelFormat format,
int frame_w,
int frame_h,
int plane )
inlinestatic

◆ create_frame()

static int create_frame ( AVHWFramesContext * hwfc,
AVVkFrame ** frame,
VkImageTiling tiling,
VkImageUsageFlagBits usage,
VkImageCreateFlags flags,
int nb_layers,
void * create_pnext )
static

Definition at line 2704 of file hwcontext_vulkan.c.

Referenced by vulkan_frames_init(), and vulkan_pool_alloc().

◆ try_export_flags()

static void try_export_flags ( AVHWFramesContext * hwfc,
VkExternalMemoryHandleTypeFlags * comp_handle_types,
VkExternalMemoryHandleTypeFlags * iexp,
VkExternalMemoryHandleTypeFlagBits exp )
static

Definition at line 2814 of file hwcontext_vulkan.c.

Referenced by vulkan_pool_alloc().

◆ vulkan_pool_alloc()

static AVBufferRef * vulkan_pool_alloc ( void * opaque,
size_t size )
static

Definition at line 2886 of file hwcontext_vulkan.c.

Referenced by vulkan_frames_init().

◆ lock_frame()

static void lock_frame ( AVHWFramesContext * fc,
AVVkFrame * vkf )
static

Definition at line 2965 of file hwcontext_vulkan.c.

Referenced by vulkan_frames_init().

◆ unlock_frame()

static void unlock_frame ( AVHWFramesContext * fc,
AVVkFrame * vkf )
static

Definition at line 2970 of file hwcontext_vulkan.c.

Referenced by vulkan_frames_init().

◆ vulkan_frames_uninit()

static void vulkan_frames_uninit ( AVHWFramesContext * hwfc)
static

Definition at line 2975 of file hwcontext_vulkan.c.

◆ vulkan_host_transfer_usable()

static int vulkan_host_transfer_usable ( AVHWFramesContext * hwfc)
static

Definition at line 2998 of file hwcontext_vulkan.c.

Referenced by vulkan_frames_init().

◆ vulkan_frames_init()

static int vulkan_frames_init ( AVHWFramesContext * hwfc)
static

Definition at line 3122 of file hwcontext_vulkan.c.

Referenced by vulkan_frames_derive_to().

◆ vulkan_get_buffer()

static int vulkan_get_buffer ( AVHWFramesContext * hwfc,
AVFrame * frame )
static

Definition at line 3362 of file hwcontext_vulkan.c.

◆ vulkan_transfer_get_formats()

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

Definition at line 3376 of file hwcontext_vulkan.c.

◆ vulkan_map_to()

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

Definition at line 4260 of file hwcontext_vulkan.c.

◆ vulkan_map_from()

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

Definition at line 4580 of file hwcontext_vulkan.c.

◆ copy_buffer_data()

static int copy_buffer_data ( AVHWFramesContext * hwfc,
FFVkBuffer * vkbuf,
AVFrame * swf,
VkBufferImageCopy * region,
int planes,
int upload )
static

Definition at line 4606 of file hwcontext_vulkan.c.

Referenced by vulkan_transfer_frame().

◆ get_plane_buf()

static int get_plane_buf ( AVHWFramesContext * hwfc,
FFVkBuffer ** dst,
AVFrame * swf,
VkBufferImageCopy * region,
int upload )
static

Definition at line 4648 of file hwcontext_vulkan.c.

Referenced by vulkan_transfer_frame().

◆ host_map_frame()

static int host_map_frame ( AVHWFramesContext * hwfc,
FFVkBuffer ** dst,
int * nb_bufs,
AVFrame * swf,
VkBufferImageCopy * region,
int upload )
static

Definition at line 4687 of file hwcontext_vulkan.c.

Referenced by vulkan_transfer_frame().

◆ vulkan_transfer_host()

static int vulkan_transfer_host ( AVHWFramesContext * hwfc,
AVFrame * hwf,
AVFrame * swf,
int upload )
static

Definition at line 4744 of file hwcontext_vulkan.c.

Referenced by vulkan_transfer_frame().

◆ vulkan_transfer_frame()

static int vulkan_transfer_frame ( AVHWFramesContext * hwfc,
AVFrame * swf,
AVFrame * hwf,
int upload )
static

Definition at line 4865 of file hwcontext_vulkan.c.

Referenced by vulkan_transfer_data_from(), and vulkan_transfer_data_to().

◆ vulkan_transfer_data_to()

static int vulkan_transfer_data_to ( AVHWFramesContext * hwfc,
AVFrame * dst,
const AVFrame * src )
static

Definition at line 5043 of file hwcontext_vulkan.c.

◆ vulkan_transfer_data_from()

static int vulkan_transfer_data_from ( AVHWFramesContext * hwfc,
AVFrame * dst,
const AVFrame * src )
static

Definition at line 5164 of file hwcontext_vulkan.c.

◆ vulkan_frames_derive_to()

static int vulkan_frames_derive_to ( AVHWFramesContext * dst_fc,
AVHWFramesContext * src_fc,
int flags )
static

Definition at line 5190 of file hwcontext_vulkan.c.

◆ av_vk_frame_alloc()

AVVkFrame * av_vk_frame_alloc ( void )

Allocates a single AVVkFrame and initializes everything as 0.

Note
Must be freed via av_free()

Definition at line 5196 of file hwcontext_vulkan.c.

Referenced by create_frame().

Variable Documentation

◆ vk_formats_list

◆ nb_vk_formats_list

const int nb_vk_formats_list = FF_ARRAY_ELEMS(vk_formats_list)
static

◆ optional_instance_exts

const VulkanOptExtension optional_instance_exts[]
static
Initial value:
= {
{ 0 },
}

Definition at line 730 of file hwcontext_vulkan.c.

Referenced by av_vk_get_optional_instance_extensions(), and check_extensions().

◆ optional_device_exts

const VulkanOptExtension optional_device_exts[]
static

◆ ff_hwcontext_type_vulkan

const HWContextType ff_hwcontext_type_vulkan
Initial value:
= {
.name = "Vulkan",
.device_hwctx_size = sizeof(VulkanDevicePriv),
.frames_hwctx_size = sizeof(VulkanFramesPriv),
.device_init = &vulkan_device_init,
.device_uninit = &vulkan_device_uninit,
.device_create = &vulkan_device_create,
.device_derive = &vulkan_device_derive,
.frames_get_constraints = &vulkan_frames_get_constraints,
.frames_init = vulkan_frames_init,
.frames_get_buffer = vulkan_get_buffer,
.frames_uninit = vulkan_frames_uninit,
.transfer_get_formats = vulkan_transfer_get_formats,
.transfer_data_to = vulkan_transfer_data_to,
.transfer_data_from = vulkan_transfer_data_from,
.map_to = vulkan_map_to,
.map_from = vulkan_map_from,
.frames_derive_to = &vulkan_frames_derive_to,
.pix_fmts = (const enum AVPixelFormat []) {
},
}
@ AV_HWDEVICE_TYPE_VULKAN
Definition hwcontext.h:39
static int vulkan_frames_init(AVHWFramesContext *hwfc)
static int vulkan_transfer_data_to(AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src)
static int vulkan_frames_get_constraints(AVHWDeviceContext *ctx, const void *hwconfig, AVHWFramesConstraints *constraints)
static int vulkan_transfer_get_formats(AVHWFramesContext *hwfc, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats)
static int vulkan_device_derive(AVHWDeviceContext *ctx, AVHWDeviceContext *src_ctx, AVDictionary *opts, int flags)
static int vulkan_device_init(AVHWDeviceContext *ctx)
static int vulkan_frames_derive_to(AVHWFramesContext *dst_fc, AVHWFramesContext *src_fc, int flags)
static int vulkan_device_create(AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags)
static int vulkan_transfer_data_from(AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src)
static int vulkan_map_from(AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src, int flags)
static void vulkan_device_uninit(AVHWDeviceContext *ctx)
static void vulkan_frames_uninit(AVHWFramesContext *hwfc)
static int vulkan_get_buffer(AVHWFramesContext *hwfc, AVFrame *frame)
static int vulkan_map_to(AVHWFramesContext *hwfc, AVFrame *dst, const AVFrame *src, int flags)
AVPixelFormat
Pixel format.
Definition pixfmt.h:71
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
@ AV_PIX_FMT_VULKAN
Vulkan hardware images.
Definition pixfmt.h:379

Definition at line 5219 of file hwcontext_vulkan.c.