FFmpeg
Data Structures | Macros | Typedefs | Functions | Variables
hwcontext_d3d11va.c File Reference
#include "config.h"
#include <windows.h>
#include <initguid.h>
#include <d3d11.h>
#include <dxgi1_2.h>
#include "avassert.h"
#include "common.h"
#include "hwcontext.h"
#include "hwcontext_d3d11va.h"
#include "hwcontext_internal.h"
#include "imgutils.h"
#include "pixdesc.h"
#include "pixfmt.h"
#include "thread.h"
#include "compat/w32dlfcn.h"

Go to the source code of this file.

Data Structures

struct  D3D11VAFramesContext
 

Macros

#define COBJMACROS
 

Typedefs

typedef HRESULT(WINAPI * PFN_CREATE_DXGI_FACTORY) (REFIID riid, void **ppFactory)
 

Functions

static av_cold void load_functions (void)
 
static void d3d11va_default_lock (void *ctx)
 
static void d3d11va_default_unlock (void *ctx)
 
static void d3d11va_frames_uninit (AVHWFramesContext *ctx)
 
static int d3d11va_frames_get_constraints (AVHWDeviceContext *ctx, const void *hwconfig, AVHWFramesConstraints *constraints)
 
static void free_texture (void *opaque, uint8_t *data)
 
static AVBufferRefwrap_texture_buf (AVHWFramesContext *ctx, ID3D11Texture2D *tex, int index)
 
static AVBufferRefd3d11va_alloc_single (AVHWFramesContext *ctx)
 
static AVBufferRefd3d11va_pool_alloc (void *opaque, size_t size)
 
static int d3d11va_frames_init (AVHWFramesContext *ctx)
 
static int d3d11va_get_buffer (AVHWFramesContext *ctx, AVFrame *frame)
 
static int d3d11va_transfer_get_formats (AVHWFramesContext *ctx, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats)
 
static int d3d11va_create_staging_texture (AVHWFramesContext *ctx, DXGI_FORMAT format)
 
static void fill_texture_ptrs (uint8_t *data[4], int linesize[4], AVHWFramesContext *ctx, D3D11_TEXTURE2D_DESC *desc, D3D11_MAPPED_SUBRESOURCE *map)
 
static int d3d11va_transfer_data (AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src)
 
static int d3d11va_device_init (AVHWDeviceContext *hwdev)
 
static void d3d11va_device_uninit (AVHWDeviceContext *hwdev)
 
static int d3d11va_device_find_adapter_by_vendor_id (AVHWDeviceContext *ctx, uint32_t flags, const char *vendor_id)
 
static int d3d11va_device_create (AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags)
 

Variables

static AVOnce functions_loaded = AV_ONCE_INIT
 
static PFN_CREATE_DXGI_FACTORY mCreateDXGIFactory
 
static PFN_D3D11_CREATE_DEVICE mD3D11CreateDevice
 
struct {
   DXGI_FORMAT   d3d_format
 
   enum AVPixelFormat   pix_fmt
 
supported_formats []
 
const HWContextType ff_hwcontext_type_d3d11va
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 23 of file hwcontext_d3d11va.c.

Typedef Documentation

◆ PFN_CREATE_DXGI_FACTORY

typedef HRESULT(WINAPI * PFN_CREATE_DXGI_FACTORY) (REFIID riid, void **ppFactory)

Definition at line 44 of file hwcontext_d3d11va.c.

Function Documentation

◆ load_functions()

static av_cold void load_functions ( void  )
static

Definition at line 51 of file hwcontext_d3d11va.c.

Referenced by d3d11va_device_create().

◆ d3d11va_default_lock()

static void d3d11va_default_lock ( void *  ctx)
static

Definition at line 111 of file hwcontext_d3d11va.c.

Referenced by d3d11va_device_init(), and d3d11va_device_uninit().

◆ d3d11va_default_unlock()

static void d3d11va_default_unlock ( void *  ctx)
static

Definition at line 116 of file hwcontext_d3d11va.c.

Referenced by d3d11va_device_init().

◆ d3d11va_frames_uninit()

static void d3d11va_frames_uninit ( AVHWFramesContext ctx)
static

Definition at line 121 of file hwcontext_d3d11va.c.

◆ d3d11va_frames_get_constraints()

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

Definition at line 137 of file hwcontext_d3d11va.c.

◆ free_texture()

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

Definition at line 169 of file hwcontext_d3d11va.c.

Referenced by wrap_texture_buf().

◆ wrap_texture_buf()

static AVBufferRef* wrap_texture_buf ( AVHWFramesContext ctx,
ID3D11Texture2D *  tex,
int  index 
)
static

Definition at line 175 of file hwcontext_d3d11va.c.

Referenced by d3d11va_alloc_single(), and d3d11va_pool_alloc().

◆ d3d11va_alloc_single()

static AVBufferRef* d3d11va_alloc_single ( AVHWFramesContext ctx)
static

Definition at line 215 of file hwcontext_d3d11va.c.

Referenced by d3d11va_pool_alloc().

◆ d3d11va_pool_alloc()

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

Definition at line 243 of file hwcontext_d3d11va.c.

Referenced by d3d11va_frames_init().

◆ d3d11va_frames_init()

static int d3d11va_frames_init ( AVHWFramesContext ctx)
static

Definition at line 264 of file hwcontext_d3d11va.c.

◆ d3d11va_get_buffer()

static int d3d11va_get_buffer ( AVHWFramesContext ctx,
AVFrame frame 
)
static

Definition at line 334 of file hwcontext_d3d11va.c.

◆ d3d11va_transfer_get_formats()

static int d3d11va_transfer_get_formats ( AVHWFramesContext ctx,
enum AVHWFrameTransferDirection  dir,
enum AVPixelFormat **  formats 
)
static

Definition at line 353 of file hwcontext_d3d11va.c.

◆ d3d11va_create_staging_texture()

static int d3d11va_create_staging_texture ( AVHWFramesContext ctx,
DXGI_FORMAT  format 
)
static

Definition at line 376 of file hwcontext_d3d11va.c.

Referenced by d3d11va_transfer_data().

◆ fill_texture_ptrs()

static void fill_texture_ptrs ( uint8_t *  data[4],
int  linesize[4],
AVHWFramesContext ctx,
D3D11_TEXTURE2D_DESC *  desc,
D3D11_MAPPED_SUBRESOURCE *  map 
)
static

Definition at line 401 of file hwcontext_d3d11va.c.

Referenced by d3d11va_transfer_data().

◆ d3d11va_transfer_data()

static int d3d11va_transfer_data ( AVHWFramesContext ctx,
AVFrame dst,
const AVFrame src 
)
static

Definition at line 415 of file hwcontext_d3d11va.c.

◆ d3d11va_device_init()

static int d3d11va_device_init ( AVHWDeviceContext hwdev)
static

Definition at line 495 of file hwcontext_d3d11va.c.

◆ d3d11va_device_uninit()

static void d3d11va_device_uninit ( AVHWDeviceContext hwdev)
static

Definition at line 533 of file hwcontext_d3d11va.c.

◆ d3d11va_device_find_adapter_by_vendor_id()

static int d3d11va_device_find_adapter_by_vendor_id ( AVHWDeviceContext ctx,
uint32_t  flags,
const char *  vendor_id 
)
static

Definition at line 564 of file hwcontext_d3d11va.c.

Referenced by d3d11va_device_create().

◆ d3d11va_device_create()

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

Definition at line 605 of file hwcontext_d3d11va.c.

Variable Documentation

◆ functions_loaded

AVOnce functions_loaded = AV_ONCE_INIT
static

Definition at line 46 of file hwcontext_d3d11va.c.

Referenced by d3d11va_device_create().

◆ mCreateDXGIFactory

PFN_CREATE_DXGI_FACTORY mCreateDXGIFactory
static

◆ mD3D11CreateDevice

PFN_D3D11_CREATE_DEVICE mD3D11CreateDevice
static

◆ d3d_format

DXGI_FORMAT d3d_format

Definition at line 91 of file hwcontext_d3d11va.c.

Referenced by txd_decode_frame().

◆ pix_fmt

enum AVPixelFormat pix_fmt

Definition at line 92 of file hwcontext_d3d11va.c.

◆ supported_formats

const { ... } supported_formats[]
Initial value:
= {
{ DXGI_FORMAT_NV12, AV_PIX_FMT_NV12 },
{ DXGI_FORMAT_P010, AV_PIX_FMT_P010 },
{ DXGI_FORMAT_R10G10B10A2_UNORM, AV_PIX_FMT_X2BGR10 },
{ DXGI_FORMAT_AYUV, AV_PIX_FMT_VUYX },
{ DXGI_FORMAT_YUY2, AV_PIX_FMT_YUYV422 },
{ DXGI_FORMAT_Y210, AV_PIX_FMT_Y210 },
{ DXGI_FORMAT_Y410, AV_PIX_FMT_XV30 },
{ DXGI_FORMAT_P016, AV_PIX_FMT_P012 },
{ DXGI_FORMAT_Y216, AV_PIX_FMT_Y212 },
{ DXGI_FORMAT_Y416, AV_PIX_FMT_XV36 },
{ DXGI_FORMAT_420_OPAQUE, AV_PIX_FMT_YUV420P },
}

Referenced by d3d11va_frames_get_constraints(), and d3d11va_frames_init().

◆ ff_hwcontext_type_d3d11va

const HWContextType ff_hwcontext_type_d3d11va
Initial value:
= {
.name = "D3D11VA",
.device_hwctx_size = sizeof(AVD3D11VADeviceContext),
.frames_hwctx_size = sizeof(D3D11VAFramesContext),
.device_create = d3d11va_device_create,
.device_init = d3d11va_device_init,
.device_uninit = d3d11va_device_uninit,
.frames_get_constraints = d3d11va_frames_get_constraints,
.frames_init = d3d11va_frames_init,
.frames_uninit = d3d11va_frames_uninit,
.frames_get_buffer = d3d11va_get_buffer,
.transfer_get_formats = d3d11va_transfer_get_formats,
.transfer_data_to = d3d11va_transfer_data,
.transfer_data_from = d3d11va_transfer_data,
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_D3D11, AV_PIX_FMT_NONE },
}

Definition at line 707 of file hwcontext_d3d11va.c.

AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
DXGI_FORMAT_B8G8R8A8_UNORM
@ DXGI_FORMAT_B8G8R8A8_UNORM
Definition: dds.c:91
d3d11va_transfer_get_formats
static int d3d11va_transfer_get_formats(AVHWFramesContext *ctx, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats)
Definition: hwcontext_d3d11va.c:353
d3d11va_transfer_data
static int d3d11va_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src)
Definition: hwcontext_d3d11va.c:415
AV_PIX_FMT_XV30
#define AV_PIX_FMT_XV30
Definition: pixfmt.h:534
AV_PIX_FMT_BGRA
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
Definition: pixfmt.h:102
d3d11va_get_buffer
static int d3d11va_get_buffer(AVHWFramesContext *ctx, AVFrame *frame)
Definition: hwcontext_d3d11va.c:334
AV_HWDEVICE_TYPE_D3D11VA
@ AV_HWDEVICE_TYPE_D3D11VA
Definition: hwcontext.h:35
d3d11va_frames_uninit
static void d3d11va_frames_uninit(AVHWFramesContext *ctx)
Definition: hwcontext_d3d11va.c:121
d3d11va_frames_get_constraints
static int d3d11va_frames_get_constraints(AVHWDeviceContext *ctx, const void *hwconfig, AVHWFramesConstraints *constraints)
Definition: hwcontext_d3d11va.c:137
AV_PIX_FMT_Y210
#define AV_PIX_FMT_Y210
Definition: pixfmt.h:532
d3d11va_device_create
static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags)
Definition: hwcontext_d3d11va.c:605
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
AV_PIX_FMT_YUYV422
@ AV_PIX_FMT_YUYV422
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
Definition: pixfmt.h:74
AV_PIX_FMT_X2BGR10
#define AV_PIX_FMT_X2BGR10
Definition: pixfmt.h:537
AV_PIX_FMT_P012
#define AV_PIX_FMT_P012
Definition: pixfmt.h:529
d3d11va_frames_init
static int d3d11va_frames_init(AVHWFramesContext *ctx)
Definition: hwcontext_d3d11va.c:264
AV_PIX_FMT_Y212
#define AV_PIX_FMT_Y212
Definition: pixfmt.h:533
AV_PIX_FMT_D3D11
@ AV_PIX_FMT_D3D11
Hardware surfaces for Direct3D11.
Definition: pixfmt.h:336
DXGI_FORMAT_R16G16B16A16_FLOAT
@ DXGI_FORMAT_R16G16B16A16_FLOAT
Definition: dds.c:62
AVD3D11VADeviceContext
This struct is allocated as AVHWDeviceContext.hwctx.
Definition: hwcontext_d3d11va.h:45
AV_PIX_FMT_NV12
@ AV_PIX_FMT_NV12
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
Definition: pixfmt.h:96
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
D3D11VAFramesContext
Definition: hwcontext_d3d11va.c:76
d3d11va_device_uninit
static void d3d11va_device_uninit(AVHWDeviceContext *hwdev)
Definition: hwcontext_d3d11va.c:533
AV_PIX_FMT_P010
#define AV_PIX_FMT_P010
Definition: pixfmt.h:528
d3d11va_device_init
static int d3d11va_device_init(AVHWDeviceContext *hwdev)
Definition: hwcontext_d3d11va.c:495
AV_PIX_FMT_RGBAF16
#define AV_PIX_FMT_RGBAF16
Definition: pixfmt.h:546
AV_PIX_FMT_XV36
#define AV_PIX_FMT_XV36
Definition: pixfmt.h:535
AV_PIX_FMT_VUYX
@ AV_PIX_FMT_VUYX
packed VUYX 4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined
Definition: pixfmt.h:406