📄 dxva.h
字号:
#define writeDXVA_TCoefSingleIndexWithEOB(ptr, idx, eob) ((ptr)->wIndexWithEOB = ((idx) << 1) | (eob))
#define setDXVA_TCoefSingleIDX(ptr, idx) ((ptr)->wIndexWithEOB |= ((idx) << 1))
#define setDXVA_TCoefSingleEOB(ptr) ((ptr)->wIndexWithEOB |= 1)
/* Spatial-Domain Residual Difference Blocks */
#define DXVA_USUAL_BLOCK_WIDTH 8
#define DXVA_USUAL_BLOCK_HEIGHT 8
#define DXVA_USUAL_BLOCK_SIZE (DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT)
typedef SHORT DXVA_Sample16[DXVA_USUAL_BLOCK_SIZE];
typedef signed char DXVA_Sample8 [DXVA_USUAL_BLOCK_SIZE];
/* Deblocking Filter Control Structure */
typedef BYTE DXVA_DeblockingEdgeControl;
typedef DXVA_DeblockingEdgeControl * LPDXVA_DeblockingEdgeControl;
/* Macros for Reading STRENGTH and FilterOn */
#define readDXVA_EdgeFilterStrength(ptr) ((*(ptr)) >> 1)
#define readDXVA_EdgeFilterOn(ptr) ((*(ptr)) & 1)
/* Macro for Writing STRENGTH and FilterOn */
#define writeDXVA_DeblockingEdgeControl(ptr, str, fon) ((*(ptr)) = ((str) << 1) | (fon))
#define setDXVA_EdgeFilterStrength(ptr, str) ((*(ptr)) |= ((str) << 1))
#define setDXVA_EdgeFilterOn(ptr) ((*(ptr)) |= 1)
/* Macroblock Control Command Data Structures */
typedef struct _DXVA_MVvalue {
SHORT horz, vert;
} DXVA_MVvalue, *LPDXVA_MVvalue;
/* Inverse Quantization Matrices */
typedef struct _DXVA_QmatrixData {
BYTE bNewQmatrix[4]; /* intra Y, inter Y, intra chroma, inter chroma */
WORD Qmatrix[4][DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT];
} DXVA_QmatrixData, *LPDXVA_QmatrixData;
/* Slice Control Buffer Data */
typedef struct _DXVA_SliceInfo {
WORD wHorizontalPosition;
WORD wVerticalPosition;
DWORD dwSliceBitsInBuffer;
DWORD dwSliceDataLocation;
BYTE bStartCodeBitOffset;
BYTE bReservedBits;
WORD wMBbitOffset;
WORD wNumberMBsInSlice;
WORD wQuantizerScaleCode;
WORD wBadSliceChopping;
} DXVA_SliceInfo, *LPDXVA_SliceInfo;
#define DXVA_NumMV_OBMC_off_BinPBwith4MV_off 4
#define DXVA_NumMV_OBMC_off_BinPBwith4MV_on (4+1)
#define DXVA_NumMV_OBMC_on__BinPB_off (10)
#define DXVA_NumMV_OBMC_on__BinPB_on (11) /* not current standards */
#define DXVA_NumBlocksPerMB_420 (4+2+0)
#define DXVA_NumBlocksPerMB_422 (4+2+2)
#define DXVA_NumBlocksPerMB_444 (4+4+4)
/* Basic form for I pictures */
/* Host Residual Differences */
typedef struct _DXVA_MBctrl_I_HostResidDiff_1 {
WORD wMBaddress;
WORD wMBtype;
DWORD dwMB_SNL;
WORD wPatternCode;
WORD wPC_Overflow; /* zero if not overflow format */
DWORD dwReservedBits2;
} DXVA_MBctrl_I_HostResidDiff_1;
/* Basic form for I pictures */
/* Off-Host IDCT, 4:2:0 sampling */
typedef struct _DXVA_MBctrl_I_OffHostIDCT_1 {
WORD wMBaddress;
WORD wMBtype;
DWORD dwMB_SNL;
WORD wPatternCode;
BYTE bNumCoef[DXVA_NumBlocksPerMB_420];
} DXVA_MBctrl_I_OffHostIDCT_1;
/* Basic form for P and B pictures */
/* Should also be used for concealment MVs in MPEG-2 I pictures */
/* Without OBMC, without BinPB and 4MV together, without MV RPS */
/* Host Residual Differences */
typedef struct _DXVA_MBctrl_P_HostResidDiff_1 {
WORD wMBaddress;
WORD wMBtype;
DWORD dwMB_SNL;
WORD wPatternCode;
WORD wPC_Overflow; /* zero if not overflow format */
DWORD dwReservedBits2;
DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_HostResidDiff_1;
/* Basic form for P and B pictures */
/* Without OBMC, without BinPB and 4MV together, without MV RPS */
/* Off-Host IDCT, 4:2:0 sampling */
typedef struct _DXVA_MBctrl_P_OffHostIDCT_1 {
WORD wMBaddress;
WORD wMBtype;
DWORD dwMB_SNL;
WORD wPatternCode;
BYTE bNumCoef[DXVA_NumBlocksPerMB_420];
DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_OffHostIDCT_1;
/* How to load alpha blending graphic data */
typedef struct _DXVA_ConfigAlphaLoad {
// Operation Indicated
DXVA_ConfigQueryOrReplyFunc dwFunction;
// Alignment
DWORD dwReservedBits[3];
BYTE bConfigDataType;
} DXVA_ConfigAlphaLoad, *LPDXVA_ConfigAlphaLoad;
#define DXVA_CONFIG_DATA_TYPE_IA44 0
#define DXVA_CONFIG_DATA_TYPE_AI44 1
#define DXVA_CONFIG_DATA_TYPE_DPXD 2
#define DXVA_CONFIG_DATA_TYPE_AYUV 3
/* How to combine alpha blending graphic data */
typedef struct _DXVA_ConfigAlphaCombine {
// Operation Indicated
DXVA_ConfigQueryOrReplyFunc dwFunction;
// Alignment
DWORD dwReservedBits[3];
BYTE bConfigBlendType;
BYTE bConfigPictureResizing;
BYTE bConfigOnlyUsePicDestRectArea;
BYTE bConfigGraphicResizing;
BYTE bConfigWholePlaneAlpha;
} DXVA_ConfigAlphaCombine, *LPDXVA_ConfigAlphaCombine;
#define DXVA_CONFIG_BLEND_TYPE_FRONT_BUFFER 0
#define DXVA_CONFIG_BLEND_TYPE_BACK_HARDWARE 1
/* AYUV sample for 16-entry YUV palette or graphic surface */
typedef struct _DXVA_AYUVsample2 {
BYTE bCrValue;
BYTE bCbValue;
BYTE bY_Value;
BYTE bSampleAlpha8;
} DXVA_AYUVsample2, *LPDXVA_AYUVsample2;
/* Macros for IA44 alpha blending surface samples */
typedef BYTE DXVA_IA44sample, *LPDXVA_IA44sample;
#define readDXVA_IA44index(ptr) (((*(ptr)) & 0xF0) >> 4)
#define readDXVA_IA44alpha(ptr) ((*(ptr)) & 0x0F)
#define writeDXVA_IA44(ptr, idx, alpha) ((*(ptr)) = (((idx) << 4) | (alpha)))
#define setDXVA_IA44index(ptr, idx) ((*(ptr)) |= ((idx) << 4))
#define setDXVA_IA44alpha(ptr, alpha) ((*(ptr)) |= (alpha))
/* Macros for AI44 alpha blending surface samples */
typedef BYTE DXVA_AI44sample, *LPDXVA_AI44sample;
#define readDXVA_AI44index(ptr) ((*(ptr)) & 0x0F)
#define readDXVA_AI44alpha(ptr) (((*(ptr)) & 0xF0) >> 4)
#define writeDXVA_AI44(ptr, idx, alpha) ((*(ptr)) = (((alpha) << 4) | (idx)))
#define setDXVA_AI44index(ptr, idx) ((*(ptr)) |= (idx))
#define setDXVA_AI44alpha(ptr, alpha) ((*(ptr)) |= ((alpha) << 4))
/* Highlight data structure */
typedef struct _DXVA_Highlight {
WORD wHighlightActive;
WORD wHighlightIndices;
WORD wHighlightAlphas;
RECT HighlightRect;
} DXVA_Highlight, *LPDXVA_Highlight;
typedef BYTE DXVA_DPXD, *LPDXVA_DPXD;
typedef WORD DXVA_DCCMD, *LPDXVA_DCCMD;
/* Alpha blend combination */
typedef struct _DXVA_BlendCombination {
WORD wPictureSourceIndex;
WORD wBlendedDestinationIndex;
RECT PictureSourceRect16thPel;
RECT PictureDestinationRect;
RECT GraphicSourceRect;
RECT GraphicDestinationRect;
WORD wBlendDelay;
BYTE bBlendOn;
BYTE bWholePlaneAlpha;
DXVA_AYUVsample2 OutsideYUVcolor;
} DXVA_BlendCombination, *LPDXVA_BlendCombination;
#pragma pack(push, 16)
typedef DXVA_MBctrl_I_HostResidDiff_1 *
LPDXVA_MBctrl_I_HostResidDiff_1;
typedef DXVA_MBctrl_I_OffHostIDCT_1 *
LPDXVA_MBctrl_I_OffHostIDCT_1;
typedef DXVA_MBctrl_P_HostResidDiff_1 *
LPDXVA_MBctrl_P_HostResidDiff_1;
typedef DXVA_MBctrl_P_OffHostIDCT_1 *
LPDXVA_MBctrl_P_OffHostIDCT_1;
#pragma pack(pop)
/*
* Other forms of pictures are constructed in the obvious way
* from the above by adjusting the number of residual difference
* blocks, the number of motion vectors per macroblock, etc.
*/
#define readDXVA_MBskipsFollowing(ptr) (((ptr)->dwMB_SNL & 0xFF000000) >> 24)
#define readDXVA_MBdataLocation(ptr) (((ptr)->dwMB_SNL & 0x00FFFFFF))
#define writeDXVA_MB_SNL(ptr, skips, dloc) ((ptr)->dwMB_SNL = (((skips) << 24) | (dloc)))
#define setDXVA_MBskipsFollowing(ptr, skips) ((ptr)->dwMB_SNL |= ((skips) << 24))
#define setDXVA_MBdataLocation(ptr, dloc) ((ptr)->dwMB_SNL |= (dloc))
#define readDXVA_MvertFieldSel_3(ptr) (((ptr)->wMBtype & 0x8000) >> 15)
#define readDXVA_MvertFieldSel_2(ptr) (((ptr)->wMBtype & 0x4000) >> 14)
#define readDXVA_MvertFieldSel_1(ptr) (((ptr)->wMBtype & 0x2000) >> 13)
#define readDXVA_MvertFieldSel_0(ptr) (((ptr)->wMBtype & 0x1000) >> 12)
#define readDXVA_ReservedBits(ptr) (((ptr)->wMBtype & 0x0800) >> 11)
#define readDXVA_HostResidDiff(ptr) (((ptr)->wMBtype & 0x0400) >> 10)
#define readDXVA_MotionType(ptr) (((ptr)->wMBtype & 0x0300) >> 8)
#define readDXVA_MBscanMethod(ptr) (((ptr)->wMBtype & 0x00C0) >> 6)
#define readDXVA_FieldResidual(ptr) (((ptr)->wMBtype & 0x0020) >> 5)
#define readDXVA_H261LoopFilter(ptr) (((ptr)->wMBtype & 0x0010) >> 4)
#define readDXVA_Motion4MV(ptr) (((ptr)->wMBtype & 0x0008) >> 3)
#define readDXVA_MotionBackward(ptr) (((ptr)->wMBtype & 0x0004) >> 2)
#define readDXVA_MotionForward(ptr) (((ptr)->wMBtype & 0x0002) >> 1)
#define readDXVA_IntraMacroblock(ptr) (((ptr)->wMBtype & 0x0001))
#define setDXVA_MvertFieldSel_3(ptr) ((ptr)->wMBtype |= 0x8000)
#define setDXVA_MvertFieldSel_2(ptr) ((ptr)->wMBtype |= 0x4000)
#define setDXVA_MvertFieldSel_1(ptr) ((ptr)->wMBtype |= 0x2000)
#define setDXVA_MvertFieldSel_0(ptr) ((ptr)->wMBtype |= 0x1000)
#define setDXVA_ReservedBits(ptr) ((ptr)->wMBtype |= 0x0800)
#define setDXVA_HostResidDiff(ptr) ((ptr)->wMBtype |= 0x0400)
#define setDXVA_MotionType(ptr, value) ((ptr)->wMBtype |= ((value) << 8))
#define setDXVA_MBscanMethod(ptr, value) ((ptr)->wMBtype |= ((value) << 6))
#define setDXVA_FieldResidual(ptr) ((ptr)->wMBtype |= 0x0020)
#define setDXVA_H261LoopFilter(ptr) ((ptr)->wMBtype |= 0x0010)
#define setDXVA_Motion4MV(ptr) ((ptr)->wMBtype |= 0x0008)
#define setDXVA_MotionBackward(ptr) ((ptr)->wMBtype |= 0x0004)
#define setDXVA_MotionForward(ptr) ((ptr)->wMBtype |= 0x0002)
#define setDXVA_IntraMacroblock(ptr) ((ptr)->wMBtype |= 0x0001)
#define readDXVA_Y___0coded(ptr) (((ptr)->wPatternCode & 0x0800) >> 11)
#define readDXVA_Y___1coded(ptr) (((ptr)->wPatternCode & 0x0400) >> 10)
#define readDXVA_Y___2coded(ptr) (((ptr)->wPatternCode & 0x0200) >> 9)
#define readDXVA_Y___3coded(ptr) (((ptr)->wPatternCode & 0x0100) >> 8)
#define readDXVA_Cb__4coded(ptr) (((ptr)->wPatternCode & 0x0080) >> 7)
#define readDXVA_Cr__5coded(ptr) (((ptr)->wPatternCode & 0x0040) >> 6)
#define readDXVA_Cb__6coded(ptr) (((ptr)->wPatternCode & 0x0020) >> 5)
#define readDXVA_Cr__7coded(ptr) (((ptr)->wPatternCode & 0x0010) >> 4)
#define readDXVA_Cb__8coded(ptr) (((ptr)->wPatternCode & 0x0008) >> 3)
#define readDXVA_Cb__9coded(ptr) (((ptr)->wPatternCode & 0x0004) >> 2)
#define readDXVA_Cr_10coded(ptr) (((ptr)->wPatternCode & 0x0002) >> 1)
#define readDXVA_Cr_11coded(ptr) (((ptr)->wPatternCode & 0x0001))
#define readDXVA_Y___0oflow(ptr) (((ptr)->wPC_Overflow & 0x0800) >> 11)
#define readDXVA_Y___1oflow(ptr) (((ptr)->wPC_Overflow & 0x0400) >> 10)
#define readDXVA_Y___2oflow(ptr) (((ptr)->wPC_Overflow & 0x0200) >> 9)
#define readDXVA_Y___3oflow(ptr) (((ptr)->wPC_Overflow & 0x0100) >> 8)
#define readDXVA_Cb__4oflow(ptr) (((ptr)->wPC_Overflow & 0x0080) >> 7)
#define readDXVA_Cr__5oflow(ptr) (((ptr)->wPC_Overflow & 0x0040) >> 6)
#define readDXVA_Cb__6oflow(ptr) (((ptr)->wPC_Overflow & 0x0020) >> 5)
#define readDXVA_Cr__7oflow(ptr) (((ptr)->wPC_Overflow & 0x0010) >> 4)
#define readDXVA_Cb__8oflow(ptr) (((ptr)->wPC_Overflow & 0x0008) >> 3)
#define readDXVA_Cb__9oflow(ptr) (((ptr)->wPC_Overflow & 0x0004) >> 2)
#define readDXVA_Cr_10oflow(ptr) (((ptr)->wPC_Overflow & 0x0002) >> 1)
#define readDXVA_Cr_11oflow(ptr) (((ptr)->wPC_Overflow & 0x0001))
#pragma pack(pop, BeforeDXVApacking)
#ifdef __cplusplus
}
#endif
#endif /* __DIRECTX_VA__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -