FFmpeg  4.0
Data Structures | Macros | Typedefs | Functions | Variables
hwcontext_dxva2.c File Reference
#include <windows.h>
#include <d3d9.h>
#include <dxva2api.h>
#include <initguid.h>
#include "avassert.h"
#include "common.h"
#include "hwcontext.h"
#include "hwcontext_dxva2.h"
#include "hwcontext_internal.h"
#include "imgutils.h"
#include "pixdesc.h"
#include "pixfmt.h"
#include "compat/w32dlfcn.h"

Go to the source code of this file.

Data Structures

struct  DXVA2Mapping
 
struct  DXVA2FramesContext
 
struct  DXVA2DevicePriv
 

Macros

#define DXVA2API_USE_BITFIELDS
 
#define COBJMACROS
 
#define FF_D3DCREATE_FLAGS
 

Typedefs

typedef IDirect3D9 *WINAPI pDirect3DCreate9(UINT)
 
typedef HRESULT WINAPI pDirect3DCreate9Ex(UINT, IDirect3D9Ex **)
 
typedef HRESULT WINAPI pCreateDeviceManager9(UINT *, IDirect3DDeviceManager9 **)
 

Functions

 DEFINE_GUID (video_decoder_service, 0xfc51a551, 0xd5e7, 0x11d9, 0xaf, 0x55, 0x00, 0x05, 0x4e, 0x43, 0xff, 0x02)
 
 DEFINE_GUID (video_processor_service, 0xfc51a552, 0xd5e7, 0x11d9, 0xaf, 0x55, 0x00, 0x05, 0x4e, 0x43, 0xff, 0x02)
 
static void dxva2_frames_uninit (AVHWFramesContext *ctx)
 
static void dxva2_pool_release_dummy (void *opaque, uint8_t *data)
 
static AVBufferRefdxva2_pool_alloc (void *opaque, int size)
 
static int dxva2_init_pool (AVHWFramesContext *ctx)
 
static int dxva2_frames_init (AVHWFramesContext *ctx)
 
static int dxva2_get_buffer (AVHWFramesContext *ctx, AVFrame *frame)
 
static int dxva2_transfer_get_formats (AVHWFramesContext *ctx, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats)
 
static void dxva2_unmap_frame (AVHWFramesContext *ctx, HWMapDescriptor *hwmap)
 
static int dxva2_map_frame (AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src, int flags)
 
static int dxva2_transfer_data_to (AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src)
 
static int dxva2_transfer_data_from (AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src)
 
static int dxva2_map_from (AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src, int flags)
 
static void dxva2_device_free (AVHWDeviceContext *ctx)
 
static int dxva2_device_create9 (AVHWDeviceContext *ctx, UINT adapter)
 
static int dxva2_device_create9ex (AVHWDeviceContext *ctx, UINT adapter)
 
static int dxva2_device_create (AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags)
 

Variables

static const D3DPRESENT_PARAMETERS dxva2_present_params
 
struct {
   D3DFORMAT   d3d_format
 
   enum AVPixelFormat   pix_fmt
 
supported_formats []
 
const HWContextType ff_hwcontext_type_dxva2
 

Macro Definition Documentation

◆ DXVA2API_USE_BITFIELDS

#define DXVA2API_USE_BITFIELDS

Definition at line 21 of file hwcontext_dxva2.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file hwcontext_dxva2.c.

◆ FF_D3DCREATE_FLAGS

#define FF_D3DCREATE_FLAGS
Value:
(D3DCREATE_SOFTWARE_VERTEXPROCESSING | \
D3DCREATE_MULTITHREADED | \
D3DCREATE_FPU_PRESERVE)

Definition at line 42 of file hwcontext_dxva2.c.

Referenced by dxva2_device_create9(), and dxva2_device_create9ex().

Typedef Documentation

◆ pDirect3DCreate9

typedef IDirect3D9* WINAPI pDirect3DCreate9(UINT)

Definition at line 38 of file hwcontext_dxva2.c.

◆ pDirect3DCreate9Ex

typedef HRESULT WINAPI pDirect3DCreate9Ex(UINT, IDirect3D9Ex **)

Definition at line 39 of file hwcontext_dxva2.c.

◆ pCreateDeviceManager9

typedef HRESULT WINAPI pCreateDeviceManager9(UINT *, IDirect3DDeviceManager9 **)

Definition at line 40 of file hwcontext_dxva2.c.

Function Documentation

◆ DEFINE_GUID() [1/2]

DEFINE_GUID ( video_decoder_service  ,
0xfc51a551  ,
0xd5e7  ,
0x11d9  ,
0xaf  ,
0x55  ,
0x00  ,
0x05  ,
0x4e  ,
0x43  ,
0xff  ,
0x02   
)

◆ DEFINE_GUID() [2/2]

DEFINE_GUID ( video_processor_service  ,
0xfc51a552  ,
0xd5e7  ,
0x11d9  ,
0xaf  ,
0x55  ,
0x00  ,
0x05  ,
0x4e  ,
0x43  ,
0xff  ,
0x02   
)

◆ dxva2_frames_uninit()

static void dxva2_frames_uninit ( AVHWFramesContext ctx)
static

Definition at line 91 of file hwcontext_dxva2.c.

◆ dxva2_pool_release_dummy()

static void dxva2_pool_release_dummy ( void opaque,
uint8_t data 
)
static

Definition at line 120 of file hwcontext_dxva2.c.

Referenced by dxva2_pool_alloc().

◆ dxva2_pool_alloc()

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

Definition at line 127 of file hwcontext_dxva2.c.

Referenced by dxva2_init_pool().

◆ dxva2_init_pool()

static int dxva2_init_pool ( AVHWFramesContext ctx)
static

Definition at line 142 of file hwcontext_dxva2.c.

Referenced by dxva2_frames_init().

◆ dxva2_frames_init()

static int dxva2_frames_init ( AVHWFramesContext ctx)
static

Definition at line 209 of file hwcontext_dxva2.c.

◆ dxva2_get_buffer()

static int dxva2_get_buffer ( AVHWFramesContext ctx,
AVFrame frame 
)
static

Definition at line 236 of file hwcontext_dxva2.c.

◆ dxva2_transfer_get_formats()

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

Definition at line 250 of file hwcontext_dxva2.c.

◆ dxva2_unmap_frame()

static void dxva2_unmap_frame ( AVHWFramesContext ctx,
HWMapDescriptor hwmap 
)
static

Definition at line 268 of file hwcontext_dxva2.c.

Referenced by dxva2_map_frame().

◆ dxva2_map_frame()

static int dxva2_map_frame ( AVHWFramesContext ctx,
AVFrame dst,
const AVFrame src,
int  flags 
)
static

◆ dxva2_transfer_data_to()

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

Definition at line 333 of file hwcontext_dxva2.c.

◆ dxva2_transfer_data_from()

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

Definition at line 359 of file hwcontext_dxva2.c.

◆ dxva2_map_from()

static int dxva2_map_from ( AVHWFramesContext ctx,
AVFrame dst,
const AVFrame src,
int  flags 
)
static

Definition at line 389 of file hwcontext_dxva2.c.

◆ dxva2_device_free()

static void dxva2_device_free ( AVHWDeviceContext ctx)
static

Definition at line 409 of file hwcontext_dxva2.c.

Referenced by dxva2_device_create().

◆ dxva2_device_create9()

static int dxva2_device_create9 ( AVHWDeviceContext ctx,
UINT  adapter 
)
static

Definition at line 435 of file hwcontext_dxva2.c.

Referenced by dxva2_device_create().

◆ dxva2_device_create9ex()

static int dxva2_device_create9ex ( AVHWDeviceContext ctx,
UINT  adapter 
)
static

Definition at line 468 of file hwcontext_dxva2.c.

Referenced by dxva2_device_create().

◆ dxva2_device_create()

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

Definition at line 507 of file hwcontext_dxva2.c.

Variable Documentation

◆ dxva2_present_params

const D3DPRESENT_PARAMETERS dxva2_present_params
static
Initial value:
= {
.Windowed = TRUE,
.BackBufferWidth = 640,
.BackBufferHeight = 480,
.BackBufferCount = 0,
.SwapEffect = D3DSWAPEFFECT_DISCARD,
.Flags = D3DPRESENTFLAG_VIDEO,
}
#define TRUE
Definition: windows2linux.h:33

Definition at line 46 of file hwcontext_dxva2.c.

Referenced by dxva2_device_create9(), and dxva2_device_create9ex().

◆ d3d_format

D3DFORMAT d3d_format

Definition at line 80 of file hwcontext_dxva2.c.

◆ pix_fmt

enum AVPixelFormat pix_fmt

Definition at line 81 of file hwcontext_dxva2.c.

◆ supported_formats

const { ... } supported_formats[]
Initial value:
= {
{ MKTAG('N', 'V', '1', '2'), AV_PIX_FMT_NV12 },
{ MKTAG('P', '0', '1', '0'), AV_PIX_FMT_P010 },
{ D3DFMT_P8, AV_PIX_FMT_PAL8 },
}
#define AV_PIX_FMT_P010
Definition: pixfmt.h:413
8 bits with AV_PIX_FMT_RGB32 palette
Definition: pixfmt.h:73
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
Definition: pixfmt.h:85
#define MKTAG(a, b, c, d)
Definition: common.h:366

Referenced by dxva2_init_pool().

◆ ff_hwcontext_type_dxva2

const HWContextType ff_hwcontext_type_dxva2
Initial value:
= {
.name = "DXVA2",
.device_hwctx_size = sizeof(AVDXVA2DeviceContext),
.frames_hwctx_size = sizeof(AVDXVA2FramesContext),
.frames_priv_size = sizeof(DXVA2FramesContext),
.device_create = dxva2_device_create,
.frames_init = dxva2_frames_init,
.frames_uninit = dxva2_frames_uninit,
.frames_get_buffer = dxva2_get_buffer,
.transfer_get_formats = dxva2_transfer_get_formats,
.transfer_data_to = dxva2_transfer_data_to,
.transfer_data_from = dxva2_transfer_data_from,
.map_from = dxva2_map_from,
}
This struct is allocated as AVHWFramesContext.hwctx.
static int dxva2_map_from(AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src, int flags)
static int dxva2_transfer_data_to(AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src)
static int dxva2_get_buffer(AVHWFramesContext *ctx, AVFrame *frame)
static int dxva2_transfer_data_from(AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src)
static int dxva2_device_create(AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags)
static int dxva2_frames_init(AVHWFramesContext *ctx)
static void dxva2_frames_uninit(AVHWFramesContext *ctx)
static int dxva2_transfer_get_formats(AVHWFramesContext *ctx, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats)
HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer. ...
Definition: pixfmt.h:133
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:266
This struct is allocated as AVHWDeviceContext.hwctx.
AVPixelFormat
Pixel format.
Definition: pixfmt.h:60

Definition at line 576 of file hwcontext_dxva2.c.