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_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 97 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 102 of file hwcontext_d3d11va.c.

Referenced by d3d11va_device_init().

◆ d3d11va_frames_uninit()

static void d3d11va_frames_uninit ( AVHWFramesContext ctx)
static

Definition at line 107 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 123 of file hwcontext_d3d11va.c.

◆ free_texture()

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

Definition at line 155 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 161 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 200 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 228 of file hwcontext_d3d11va.c.

Referenced by d3d11va_frames_init().

◆ d3d11va_frames_init()

static int d3d11va_frames_init ( AVHWFramesContext ctx)
static

Definition at line 249 of file hwcontext_d3d11va.c.

◆ d3d11va_get_buffer()

static int d3d11va_get_buffer ( AVHWFramesContext ctx,
AVFrame frame 
)
static

Definition at line 318 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 337 of file hwcontext_d3d11va.c.

◆ d3d11va_create_staging_texture()

static int d3d11va_create_staging_texture ( AVHWFramesContext ctx,
DXGI_FORMAT  format 
)
static

Definition at line 360 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 385 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 399 of file hwcontext_d3d11va.c.

◆ d3d11va_device_init()

static int d3d11va_device_init ( AVHWDeviceContext hwdev)
static

Definition at line 479 of file hwcontext_d3d11va.c.

◆ d3d11va_device_uninit()

static void d3d11va_device_uninit ( AVHWDeviceContext hwdev)
static

Definition at line 517 of file hwcontext_d3d11va.c.

◆ d3d11va_device_create()

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

Definition at line 548 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

Definition at line 48 of file hwcontext_d3d11va.c.

Referenced by d3d11va_device_create(), and load_functions().

◆ mD3D11CreateDevice

PFN_D3D11_CREATE_DEVICE mD3D11CreateDevice
static

Definition at line 49 of file hwcontext_d3d11va.c.

Referenced by d3d11va_device_create(), and load_functions().

◆ d3d_format

DXGI_FORMAT d3d_format

Definition at line 84 of file hwcontext_d3d11va.c.

Referenced by txd_decode_frame().

◆ pix_fmt

enum AVPixelFormat pix_fmt

Definition at line 85 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_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(AVD3D11VAFramesContext),
.frames_priv_size = sizeof(D3D11VAFramesContext),
.device_create = d3d11va_device_create,
.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,
}

Definition at line 630 of file hwcontext_d3d11va.c.

AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
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:337
d3d11va_transfer_data
static int d3d11va_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src)
Definition: hwcontext_d3d11va.c:399
AV_PIX_FMT_BGRA
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
Definition: pixfmt.h:95
d3d11va_get_buffer
static int d3d11va_get_buffer(AVHWFramesContext *ctx, AVFrame *frame)
Definition: hwcontext_d3d11va.c:318
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:107
d3d11va_frames_get_constraints
static int d3d11va_frames_get_constraints(AVHWDeviceContext *ctx, const void *hwconfig, AVHWFramesConstraints *constraints)
Definition: hwcontext_d3d11va.c:123
device_init
static int device_init(AVFormatContext *ctx, int *width, int *height, uint32_t pixelformat)
Definition: v4l2.c:204
d3d11va_device_create
static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags)
Definition: hwcontext_d3d11va.c:548
pix_fmts
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:296
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:66
AVD3D11VAFramesContext
This struct is allocated as AVHWFramesContext.hwctx.
Definition: hwcontext_d3d11va.h:131
AV_PIX_FMT_X2BGR10
#define AV_PIX_FMT_X2BGR10
Definition: pixfmt.h:517
d3d11va_frames_init
static int d3d11va_frames_init(AVHWFramesContext *ctx)
Definition: hwcontext_d3d11va.c:249
AV_PIX_FMT_D3D11
@ AV_PIX_FMT_D3D11
Hardware surfaces for Direct3D11.
Definition: pixfmt.h:333
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:89
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
D3D11VAFramesContext
Definition: hwcontext_d3d11va.c:74
d3d11va_device_uninit
static void d3d11va_device_uninit(AVHWDeviceContext *hwdev)
Definition: hwcontext_d3d11va.c:517
AV_PIX_FMT_P010
#define AV_PIX_FMT_P010
Definition: pixfmt.h:508
d3d11va_device_init
static int d3d11va_device_init(AVHWDeviceContext *hwdev)
Definition: hwcontext_d3d11va.c:479
AV_PIX_FMT_RGBAF16
#define AV_PIX_FMT_RGBAF16
Definition: pixfmt.h:524