Advertisement
Guest User

kevin

a guest
Feb 5th, 2010
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 71.63 KB | None | 0 0
  1. //------------------------------------------------------------------------------
  2. // File: DXVA.h
  3. //
  4. // Desc: DirectX Video Acceleration header file.
  5. //
  6. // Copyright (c) 1999 - 2002, Microsoft Corporation. All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9.  
  10. #ifndef __DIRECTX_VA__
  11. #define __DIRECTX_VA__
  12.  
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16.  
  17. #ifdef __DIRECTX_VA_COPP_ONLY
  18. #define __DIRECTX_VA_DECODER__
  19. #define __DIRECTX_VA_PROCAMPCONTROL__
  20. #define __DIRECTX_VA_DEINTERLACE__
  21. #endif
  22.  
  23. #ifndef DXVABit
  24. #define DXVABit(__x) (1 << __x)
  25. #endif
  26.  
  27. // -------------------------------------------------------------------------
  28. //
  29. // The definitions that follow describe the DirectX Video Acceleration
  30. // decoding interface.
  31. // This interface is accessable via the IAMVideoAccelerator interface.
  32. //
  33. // -------------------------------------------------------------------------
  34. //
  35. #ifndef __DIRECTX_VA_DECODER__
  36. #define __DIRECTX_VA_DECODER__
  37.  
  38. DEFINE_GUID(DXVA_ModeNone, 0x1b81be00, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  39. DEFINE_GUID(DXVA_ModeH261_A, 0x1b81be01, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  40. DEFINE_GUID(DXVA_ModeH261_B, 0x1b81be02, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  41.  
  42. DEFINE_GUID(DXVA_ModeH263_A, 0x1b81be03, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  43. DEFINE_GUID(DXVA_ModeH263_B, 0x1b81be04, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  44. DEFINE_GUID(DXVA_ModeH263_C, 0x1b81be05, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  45. DEFINE_GUID(DXVA_ModeH263_D, 0x1b81be06, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  46. DEFINE_GUID(DXVA_ModeH263_E, 0x1b81be07, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  47. DEFINE_GUID(DXVA_ModeH263_F, 0x1b81be08, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  48.  
  49. DEFINE_GUID(DXVA_ModeMPEG1_A, 0x1b81be09, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  50.  
  51. DEFINE_GUID(DXVA_ModeMPEG2_A, 0x1b81be0A, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  52. DEFINE_GUID(DXVA_ModeMPEG2_B, 0x1b81be0B, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  53. DEFINE_GUID(DXVA_ModeMPEG2_C, 0x1b81be0C, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  54. DEFINE_GUID(DXVA_ModeMPEG2_D, 0x1b81be0D, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  55.  
  56. DEFINE_GUID(DXVA_ModeH264_A, 0x1b81be64, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  57. DEFINE_GUID(DXVA_ModeH264_B, 0x1b81be65, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  58. DEFINE_GUID(DXVA_ModeH264_C, 0x1b81be66, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  59. DEFINE_GUID(DXVA_ModeH264_D, 0x1b81be67, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  60. DEFINE_GUID(DXVA_ModeH264_E, 0x1b81be68, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  61. DEFINE_GUID(DXVA_ModeH264_F, 0x1b81be69, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  62.  
  63. DEFINE_GUID(DXVA_ModeWMV8_A, 0x1b81be80, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  64. DEFINE_GUID(DXVA_ModeWMV8_B, 0x1b81be81, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  65.  
  66. DEFINE_GUID(DXVA_ModeWMV9_A, 0x1b81be90, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  67. DEFINE_GUID(DXVA_ModeWMV9_B, 0x1b81be91, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  68. DEFINE_GUID(DXVA_ModeWMV9_C, 0x1b81be94, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  69.  
  70. DEFINE_GUID(DXVA_ModeVC1_A, 0x1b81beA0, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  71. DEFINE_GUID(DXVA_ModeVC1_B, 0x1b81beA1, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  72. DEFINE_GUID(DXVA_ModeVC1_C, 0x1b81beA2, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  73. DEFINE_GUID(DXVA_ModeVC1_D, 0x1b81beA3, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  74.  
  75. DEFINE_GUID(DXVA_NoEncrypt, 0x1b81beD0, 0xa0c7,0x11d3,0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);
  76.  
  77. #define DXVA_ModeWMV8_PostProc DXVA_ModeWMV8_A
  78. #define DXVA_ModeWMV8_MoComp DXVA_ModeWMV8_B
  79.  
  80. #define DXVA_ModeWMV9_PostProc DXVA_ModeWMV9_A
  81. #define DXVA_ModeWMV9_MoComp DXVA_ModeWMV9_B
  82. #define DXVA_ModeWMV9_IDCT DXVA_ModeWMV9_C
  83.  
  84. #define DXVA_ModeVC1_PostProc DXVA_ModeVC1_A
  85. #define DXVA_ModeVC1_MoComp DXVA_ModeVC1_B
  86. #define DXVA_ModeVC1_IDCT DXVA_ModeVC1_C
  87. #define DXVA_ModeVC1_VLD DXVA_ModeVC1_D
  88.  
  89. #define DXVA_ModeH264_MoComp_NoFGT DXVA_ModeH264_A
  90. #define DXVA_ModeH264_MoComp_FGT DXVA_ModeH264_B
  91. #define DXVA_ModeH264_IDCT_NoFGT DXVA_ModeH264_C
  92. #define DXVA_ModeH264_IDCT_FGT DXVA_ModeH264_D
  93. #define DXVA_ModeH264_VLD_NoFGT DXVA_ModeH264_E
  94. #define DXVA_ModeH264_VLD_FGT DXVA_ModeH264_F
  95.  
  96. #define DXVA_RESTRICTED_MODE_UNRESTRICTED 0xFFFF
  97. #define DXVA_RESTRICTED_MODE_H261_A 1
  98. #define DXVA_RESTRICTED_MODE_H261_B 2
  99.  
  100. #define DXVA_RESTRICTED_MODE_H263_A 3
  101. #define DXVA_RESTRICTED_MODE_H263_B 4
  102. #define DXVA_RESTRICTED_MODE_H263_C 5
  103. #define DXVA_RESTRICTED_MODE_H263_D 6
  104. #define DXVA_RESTRICTED_MODE_H263_E 7
  105. #define DXVA_RESTRICTED_MODE_H263_F 8
  106.  
  107. #define DXVA_RESTRICTED_MODE_MPEG1_A 9
  108.  
  109. #define DXVA_RESTRICTED_MODE_MPEG2_A 0xA
  110. #define DXVA_RESTRICTED_MODE_MPEG2_B 0xB
  111. #define DXVA_RESTRICTED_MODE_MPEG2_C 0xC
  112. #define DXVA_RESTRICTED_MODE_MPEG2_D 0xD
  113.  
  114. #define DXVA_RESTRICTED_MODE_H264_A 0x64
  115. #define DXVA_RESTRICTED_MODE_H264_B 0x65
  116. #define DXVA_RESTRICTED_MODE_H264_C 0x66
  117. #define DXVA_RESTRICTED_MODE_H264_D 0x67
  118. #define DXVA_RESTRICTED_MODE_H264_E 0x68
  119. #define DXVA_RESTRICTED_MODE_H264_F 0x69
  120.  
  121. #define DXVA_RESTRICTED_MODE_WMV8_A 0x80
  122. #define DXVA_RESTRICTED_MODE_WMV8_B 0x81
  123.  
  124. #define DXVA_RESTRICTED_MODE_WMV9_A 0x90
  125. #define DXVA_RESTRICTED_MODE_WMV9_B 0x91
  126. #define DXVA_RESTRICTED_MODE_WMV9_C 0x94
  127.  
  128. #define DXVA_RESTRICTED_MODE_VC1_A 0xA0
  129. #define DXVA_RESTRICTED_MODE_VC1_B 0xA1
  130. #define DXVA_RESTRICTED_MODE_VC1_C 0xA2
  131. #define DXVA_RESTRICTED_MODE_VC1_D 0xA3
  132.  
  133. #define DXVA_RESTRICTED_MODE_WMV8_POSTPROC DXVA_RESTRICTED_MODE_WMV8_A
  134. #define DXVA_RESTRICTED_MODE_WMV8_MOCOMP DXVA_RESTRICTED_MODE_WMV8_B
  135.  
  136. #define DXVA_RESTRICTED_MODE_WMV9_POSTPROC DXVA_RESTRICTED_MODE_WMV9_A
  137. #define DXVA_RESTRICTED_MODE_WMV9_MOCOMP DXVA_RESTRICTED_MODE_WMV9_B
  138. #define DXVA_RESTRICTED_MODE_WMV9_IDCT DXVA_RESTRICTED_MODE_WMV9_C
  139.  
  140. #define DXVA_RESTRICTED_MODE_VC1_POSTPROC DXVA_RESTRICTED_MODE_VC1_A
  141. #define DXVA_RESTRICTED_MODE_VC1_MOCOMP DXVA_RESTRICTED_MODE_VC1_B
  142. #define DXVA_RESTRICTED_MODE_VC1_IDCT DXVA_RESTRICTED_MODE_VC1_C
  143. #define DXVA_RESTRICTED_MODE_VC1_VLD DXVA_RESTRICTED_MODE_VC1_D
  144.  
  145. #define DXVA_RESTRICTED_MODE_H264_MOCOMP_NOFGT DXVA_RESTRICTED_MODE_H264_A
  146. #define DXVA_RESTRICTED_MODE_H264_MOCOMP_FGT DXVA_RESTRICTED_MODE_H264_B
  147. #define DXVA_RESTRICTED_MODE_H264_IDCT_NOFGT DXVA_RESTRICTED_MODE_H264_C
  148. #define DXVA_RESTRICTED_MODE_H264_IDCT_FGT DXVA_RESTRICTED_MODE_H264_D
  149. #define DXVA_RESTRICTED_MODE_H264_VLD_NOFGT DXVA_RESTRICTED_MODE_H264_E
  150. #define DXVA_RESTRICTED_MODE_H264_VLD_FGT DXVA_RESTRICTED_MODE_H264_F
  151.  
  152. #define DXVA_COMPBUFFER_TYPE_THAT_IS_NOT_USED 0
  153. #define DXVA_PICTURE_DECODE_BUFFER 1
  154. #define DXVA_MACROBLOCK_CONTROL_BUFFER 2
  155. #define DXVA_RESIDUAL_DIFFERENCE_BUFFER 3
  156. #define DXVA_DEBLOCKING_CONTROL_BUFFER 4
  157. #define DXVA_INVERSE_QUANTIZATION_MATRIX_BUFFER 5
  158. #define DXVA_SLICE_CONTROL_BUFFER 6
  159. #define DXVA_BITSTREAM_DATA_BUFFER 7
  160. #define DXVA_AYUV_BUFFER 8
  161. #define DXVA_IA44_SURFACE_BUFFER 9
  162. #define DXVA_DPXD_SURFACE_BUFFER 10
  163. #define DXVA_HIGHLIGHT_BUFFER 11
  164. #define DXVA_DCCMD_SURFACE_BUFFER 12
  165. #define DXVA_ALPHA_BLEND_COMBINATION_BUFFER 13
  166. #define DXVA_PICTURE_RESAMPLE_BUFFER 14
  167. #define DXVA_READ_BACK_BUFFER 15
  168.  
  169. /* H.264/AVC Additional buffer types */
  170. #define DXVA_MOTION_VECTOR_BUFFER 16
  171. #define DXVA_FILM_GRAIN_BUFFER 17
  172.  
  173. #define DXVA_NUM_TYPES_COMP_BUFFERS 18
  174.  
  175. /* values for bDXVA_Func */
  176. #define DXVA_PICTURE_DECODING_FUNCTION 1
  177. #define DXVA_ALPHA_BLEND_DATA_LOAD_FUNCTION 2
  178. #define DXVA_ALPHA_BLEND_COMBINATION_FUNCTION 3
  179. #define DXVA_PICTURE_RESAMPLE_FUNCTION 4
  180. #define DXVA_DEBLOCKING_FILTER_FUNCTION 5
  181. #define DXVA_FILM_GRAIN_SYNTHESIS_FUNCTION 6
  182. #define DXVA_STATUS_REPORTING_FUNCTION 7
  183.  
  184. /* values returned from Execute command in absence of read-back */
  185. #define DXVA_EXECUTE_RETURN_OK 0
  186. #define DXVA_EXECUTE_RETURN_DATA_ERROR_MINOR 1
  187. #define DXVA_EXECUTE_RETURN_DATA_ERROR_SIGNIF 2
  188. #define DXVA_EXECUTE_RETURN_DATA_ERROR_SEVERE 3
  189. #define DXVA_EXECUTE_RETURN_OTHER_ERROR_SEVERE 4
  190.  
  191.  
  192. #pragma pack(push, BeforeDXVApacking, 1)
  193.  
  194.  
  195. typedef struct _DXVA_ConnectMode {
  196. GUID guidMode;
  197. WORD wRestrictedMode;
  198. } DXVA_ConnectMode, *LPDXVA_ConnectMode;
  199.  
  200.  
  201. typedef DWORD DXVA_ConfigQueryOrReplyFunc, *LPDXVA_ConfigQueryOrReplyFunc;
  202.  
  203. #define DXVA_QUERYORREPLYFUNCFLAG_DECODER_PROBE_QUERY 0xFFFFF1
  204. #define DXVA_QUERYORREPLYFUNCFLAG_DECODER_LOCK_QUERY 0xFFFFF5
  205. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_OK_COPY 0xFFFFF8
  206. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_OK_PLUS 0xFFFFF9
  207. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_LOCK_OK_COPY 0xFFFFFC
  208. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_PROBE_FALSE_PLUS 0xFFFFFB
  209. #define DXVA_QUERYORREPLYFUNCFLAG_ACCEL_LOCK_FALSE_PLUS 0xFFFFFF
  210.  
  211. #define readDXVA_QueryOrReplyFuncFlag(ptr) ((*(ptr)) >> 8)
  212.  
  213. #define readDXVA_QueryOrReplyFuncFlag_ACCEL(ptr) (((*(ptr)) >> 11) & 1)
  214. #define readDXVA_QueryOrReplyFuncFlag_LOCK(ptr) (((*(ptr)) >> 10) & 1)
  215. #define readDXVA_QueryOrReplyFuncFlag_BAD(ptr) (((*(ptr)) >> 9) & 1)
  216. #define readDXVA_QueryOrReplyFuncFlag_PLUS(ptr) (((*(ptr)) >> 8) & 1)
  217.  
  218. #define readDXVA_QueryOrReplyFuncFunc(ptr) ((*(ptr)) & 0xFF)
  219.  
  220. #define writeDXVA_QueryOrReplyFunc(ptr, flg, fnc) ((*(ptr)) = ((flg) << 8) | (fnc))
  221.  
  222. #define setDXVA_QueryOrReplyFuncFlag(ptr, flg) ((*(ptr)) |= ((flg) << 8))
  223. #define setDXVA_QueryOrReplyFuncFunc(ptr, fnc) ((*(ptr)) |= (fnc));
  224.  
  225. typedef DWORD DXVA_EncryptProtocolFunc, *LPDXVA_EncryptProtocolFunc;
  226.  
  227. #define DXVA_ENCRYPTPROTOCOLFUNCFLAG_HOST 0xFFFF00
  228. #define DXVA_ENCRYPTPROTOCOLFUNCFLAG_ACCEL 0xFFFF08
  229.  
  230. #define readDXVA_EncryptProtocolFuncFlag(ptr) ((*(ptr)) >> 8)
  231. #define readDXVA_EncryptProtocolFuncFlag_ACCEL(ptr) (((*(ptr)) >> 11) & 1)
  232.  
  233. #define readDXVA_EncryptProtocolFuncFunc(ptr) ((*(ptr)) & 0xFF)
  234.  
  235. #define writeDXVA_EncryptProtocolFunc(ptr, flg, fnc) ((*(ptr)) = ((flg) << 8) | (fnc))
  236.  
  237. #define setDXVA_EncryptProtocolFuncFlag(ptr, flg) ((*(ptr)) |= ((flg) << 8))
  238. #define setDXVA_EncryptProtocolFuncFunc(ptr, fnc) ((*(ptr)) |= (fnc));
  239.  
  240. typedef struct _DXVA_EncryptProtocolHeader {
  241. DXVA_EncryptProtocolFunc dwFunction;
  242. DWORD ReservedBits[3];
  243. GUID guidEncryptProtocol;
  244. } DXVA_EncryptProtocolHeader, *LPDXVA_EncryptProtocolHeader;
  245.  
  246. typedef struct _DXVA_ConfigPictureDecode {
  247.  
  248. // Operation Indicated
  249. DXVA_ConfigQueryOrReplyFunc dwFunction;
  250.  
  251. // Alignment
  252. DWORD dwReservedBits[3];
  253.  
  254. // Encryption GUIDs
  255. GUID guidConfigBitstreamEncryption;
  256. GUID guidConfigMBcontrolEncryption;
  257. GUID guidConfigResidDiffEncryption;
  258.  
  259. // Bitstream Processing Indicator
  260. BYTE bConfigBitstreamRaw;
  261.  
  262. // Macroblock Control Config
  263. BYTE bConfigMBcontrolRasterOrder;
  264.  
  265. // Host Resid Diff Config
  266. BYTE bConfigResidDiffHost;
  267. BYTE bConfigSpatialResid8;
  268. BYTE bConfigResid8Subtraction;
  269. BYTE bConfigSpatialHost8or9Clipping;
  270. BYTE bConfigSpatialResidInterleaved;
  271. BYTE bConfigIntraResidUnsigned;
  272.  
  273. // Accelerator Resid Diff Config
  274. BYTE bConfigResidDiffAccelerator;
  275. BYTE bConfigHostInverseScan;
  276. BYTE bConfigSpecificIDCT;
  277. BYTE bConfig4GroupedCoefs;
  278. } DXVA_ConfigPictureDecode, *LPDXVA_ConfigPictureDecode;
  279.  
  280.  
  281. /* Picture Decoding Parameters */
  282.  
  283. typedef struct _DXVA_PictureParameters {
  284.  
  285. WORD wDecodedPictureIndex;
  286. WORD wDeblockedPictureIndex;
  287.  
  288. WORD wForwardRefPictureIndex;
  289. WORD wBackwardRefPictureIndex;
  290.  
  291. WORD wPicWidthInMBminus1;
  292. WORD wPicHeightInMBminus1;
  293.  
  294. BYTE bMacroblockWidthMinus1;
  295. BYTE bMacroblockHeightMinus1;
  296.  
  297. BYTE bBlockWidthMinus1;
  298. BYTE bBlockHeightMinus1;
  299.  
  300. BYTE bBPPminus1;
  301.  
  302. BYTE bPicStructure;
  303. BYTE bSecondField;
  304. BYTE bPicIntra;
  305. BYTE bPicBackwardPrediction;
  306.  
  307. BYTE bBidirectionalAveragingMode;
  308. BYTE bMVprecisionAndChromaRelation;
  309. BYTE bChromaFormat;
  310.  
  311. BYTE bPicScanFixed;
  312. BYTE bPicScanMethod;
  313. BYTE bPicReadbackRequests;
  314.  
  315. BYTE bRcontrol;
  316. BYTE bPicSpatialResid8;
  317. BYTE bPicOverflowBlocks;
  318. BYTE bPicExtrapolation;
  319.  
  320. BYTE bPicDeblocked;
  321. BYTE bPicDeblockConfined;
  322. BYTE bPic4MVallowed;
  323. BYTE bPicOBMC;
  324. BYTE bPicBinPB;
  325. BYTE bMV_RPS;
  326.  
  327. BYTE bReservedBits;
  328.  
  329. WORD wBitstreamFcodes;
  330. WORD wBitstreamPCEelements;
  331. BYTE bBitstreamConcealmentNeed;
  332. BYTE bBitstreamConcealmentMethod;
  333.  
  334. } DXVA_PictureParameters, *LPDXVA_PictureParameters;
  335.  
  336.  
  337.  
  338. /* Picture Resampling */
  339.  
  340. typedef struct _DXVA_PicResample {
  341.  
  342. WORD wPicResampleSourcePicIndex;
  343. WORD wPicResampleDestPicIndex;
  344.  
  345. WORD wPicResampleRcontrol;
  346. BYTE bPicResampleExtrapWidth;
  347. BYTE bPicResampleExtrapHeight;
  348.  
  349. DWORD dwPicResampleSourceWidth;
  350. DWORD dwPicResampleSourceHeight;
  351.  
  352. DWORD dwPicResampleDestWidth;
  353. DWORD dwPicResampleDestHeight;
  354.  
  355. DWORD dwPicResampleFullDestWidth;
  356. DWORD dwPicResampleFullDestHeight;
  357.  
  358. } DXVA_PicResample, *LPDXVA_PicResample;
  359.  
  360.  
  361. #define DXVA_CHROMA_FORMAT_420 1
  362. #define DXVA_CHROMA_FORMAT_422 2
  363. #define DXVA_CHROMA_FORMAT_444 3
  364.  
  365. #define DXVA_PICTURE_STRUCTURE_TOP_FIELD 1
  366. #define DXVA_PICTURE_STRUCTURE_BOTTOM_FIELD 2
  367. #define DXVA_PICTURE_STRUCTURE_FRAME 3
  368.  
  369. #define DXVA_BIDIRECTIONAL_AVERAGING_MPEG2_ROUND 0
  370. #define DXVA_BIDIRECTIONAL_AVERAGING_H263_TRUNC 1
  371.  
  372. #define DXVA_MV_PRECISION_AND_CHROMA_RELATION_MPEG2 0
  373. #define DXVA_MV_PRECISION_AND_CHROMA_RELATION_H263 1
  374. #define DXVA_MV_PRECISION_AND_CHROMA_RELATION_H261 2
  375.  
  376. #define DXVA_SCAN_METHOD_ZIG_ZAG 0
  377. #define DXVA_SCAN_METHOD_ALTERNATE_VERTICAL 1
  378. #define DXVA_SCAN_METHOD_ALTERNATE_HORIZONTAL 2
  379. #define DXVA_SCAN_METHOD_ARBITRARY 3
  380.  
  381. #define DXVA_BITSTREAM_CONCEALMENT_NEED_UNLIKELY 0
  382. #define DXVA_BITSTREAM_CONCEALMENT_NEED_MILD 1
  383. #define DXVA_BITSTREAM_CONCEALMENT_NEED_LIKELY 2
  384. #define DXVA_BITSTREAM_CONCEALMENT_NEED_SEVERE 3
  385.  
  386. #define DXVA_BITSTREAM_CONCEALMENT_METHOD_UNSPECIFIED 0
  387. #define DXVA_BITSTREAM_CONCEALMENT_METHOD_INTRA 1
  388. #define DXVA_BITSTREAM_CONCEALMENT_METHOD_FORWARD 2
  389. #define DXVA_BITSTREAM_CONCEALMENT_METHOD_BACKWARD 3
  390.  
  391.  
  392. /* Buffer Description Data */
  393.  
  394. typedef struct _DXVA_BufferDescription {
  395. DWORD dwTypeIndex;
  396. DWORD dwBufferIndex;
  397. DWORD dwDataOffset;
  398. DWORD dwDataSize;
  399. DWORD dwFirstMBaddress;
  400. DWORD dwNumMBsInBuffer;
  401. DWORD dwWidth;
  402. DWORD dwHeight;
  403. DWORD dwStride;
  404. DWORD dwReservedBits;
  405. } DXVA_BufferDescription, *LPDXVA_BufferDescription;
  406.  
  407.  
  408. /* Off-Host IDCT Coefficient Data Structures */
  409.  
  410. typedef struct _DXVA_TCoef4Group {
  411. BYTE TCoefIDX[4];
  412. SHORT TCoefValue[4];
  413. } DXVA_TCoef4Group, *LPDXVA_TCoef4Group;
  414.  
  415. typedef struct _DXVA_TCoefSingle {
  416. WORD wIndexWithEOB;
  417. SHORT TCoefValue;
  418. } DXVA_TCoefSingle, *LPDXVA_TCoefSingle;
  419.  
  420. /* Macros for Reading EOB and Index Values */
  421.  
  422. #define readDXVA_TCoefSingleIDX(ptr) ((ptr)->wIndexWithEOB >> 1)
  423. #define readDXVA_TCoefSingleEOB(ptr) ((ptr)->wIndexWithEOB & 1)
  424.  
  425. /* Macro for Writing EOB and Index Values */
  426.  
  427. #define writeDXVA_TCoefSingleIndexWithEOB(ptr, idx, eob) ((ptr)->wIndexWithEOB = ((idx) << 1) | (eob))
  428. #define setDXVA_TCoefSingleIDX(ptr, idx) ((ptr)->wIndexWithEOB |= ((idx) << 1))
  429. #define setDXVA_TCoefSingleEOB(ptr) ((ptr)->wIndexWithEOB |= 1)
  430.  
  431. /* Spatial-Domain Residual Difference Blocks */
  432.  
  433. #define DXVA_USUAL_BLOCK_WIDTH 8
  434. #define DXVA_USUAL_BLOCK_HEIGHT 8
  435. #define DXVA_USUAL_BLOCK_SIZE (DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT)
  436.  
  437. typedef SHORT DXVA_Sample16[DXVA_USUAL_BLOCK_SIZE];
  438. typedef signed char DXVA_Sample8 [DXVA_USUAL_BLOCK_SIZE];
  439.  
  440. /* Deblocking Filter Control Structure */
  441.  
  442. typedef BYTE DXVA_DeblockingEdgeControl;
  443.  
  444. typedef DXVA_DeblockingEdgeControl * LPDXVA_DeblockingEdgeControl;
  445.  
  446. /* Macros for Reading STRENGTH and FilterOn */
  447.  
  448. #define readDXVA_EdgeFilterStrength(ptr) ((*(ptr)) >> 1)
  449. #define readDXVA_EdgeFilterOn(ptr) ((*(ptr)) & 1)
  450.  
  451. /* Macro for Writing STRENGTH and FilterOn */
  452.  
  453. #define writeDXVA_DeblockingEdgeControl(ptr, str, fon) ((*(ptr)) = ((str) << 1) | (fon))
  454. #define setDXVA_EdgeFilterStrength(ptr, str) ((*(ptr)) |= ((str) << 1))
  455. #define setDXVA_EdgeFilterOn(ptr) ((*(ptr)) |= 1)
  456.  
  457.  
  458. /* Macroblock Control Command Data Structures */
  459.  
  460. typedef struct _DXVA_MVvalue {
  461. SHORT horz, vert;
  462. } DXVA_MVvalue, *LPDXVA_MVvalue;
  463.  
  464.  
  465. /* Inverse Quantization Matrices */
  466.  
  467. typedef struct _DXVA_QmatrixData {
  468. BYTE bNewQmatrix[4]; /* intra Y, inter Y, intra chroma, inter chroma */
  469. WORD Qmatrix[4][DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT];
  470. } DXVA_QmatrixData, *LPDXVA_QmatrixData;
  471.  
  472.  
  473. /* Slice Control Buffer Data */
  474.  
  475. typedef struct _DXVA_SliceInfo {
  476. WORD wHorizontalPosition;
  477. WORD wVerticalPosition;
  478. DWORD dwSliceBitsInBuffer;
  479. DWORD dwSliceDataLocation;
  480. BYTE bStartCodeBitOffset;
  481. BYTE bReservedBits;
  482. WORD wMBbitOffset;
  483. WORD wNumberMBsInSlice;
  484. WORD wQuantizerScaleCode;
  485. WORD wBadSliceChopping;
  486. } DXVA_SliceInfo, *LPDXVA_SliceInfo;
  487.  
  488.  
  489. #define DXVA_NumMV_OBMC_off_BinPBwith4MV_off 4
  490. #define DXVA_NumMV_OBMC_off_BinPBwith4MV_on (4+1)
  491. #define DXVA_NumMV_OBMC_on__BinPB_off (10)
  492. #define DXVA_NumMV_OBMC_on__BinPB_on (11) /* not current standards */
  493.  
  494. #define DXVA_NumBlocksPerMB_420 (4+2+0)
  495. #define DXVA_NumBlocksPerMB_422 (4+2+2)
  496. #define DXVA_NumBlocksPerMB_444 (4+4+4)
  497.  
  498. /* Basic form for I pictures */
  499. /* Host Residual Differences */
  500. typedef struct _DXVA_MBctrl_I_HostResidDiff_1 {
  501. WORD wMBaddress;
  502. WORD wMBtype;
  503. DWORD dwMB_SNL;
  504. WORD wPatternCode;
  505. WORD wPC_Overflow; /* zero if not overflow format */
  506. DWORD dwReservedBits2;
  507. } DXVA_MBctrl_I_HostResidDiff_1;
  508.  
  509. /* Basic form for I pictures */
  510. /* Off-Host IDCT, 4:2:0 sampling */
  511. typedef struct _DXVA_MBctrl_I_OffHostIDCT_1 {
  512. WORD wMBaddress;
  513. WORD wMBtype;
  514. DWORD dwMB_SNL;
  515. WORD wPatternCode;
  516. BYTE bNumCoef[DXVA_NumBlocksPerMB_420];
  517. } DXVA_MBctrl_I_OffHostIDCT_1;
  518.  
  519. /* Basic form for P and B pictures */
  520. /* Should also be used for concealment MVs in MPEG-2 I pictures */
  521. /* Without OBMC, without BinPB and 4MV together, without MV RPS */
  522. /* Host Residual Differences */
  523. typedef struct _DXVA_MBctrl_P_HostResidDiff_1 {
  524. WORD wMBaddress;
  525. WORD wMBtype;
  526. DWORD dwMB_SNL;
  527. WORD wPatternCode;
  528. WORD wPC_Overflow; /* zero if not overflow format */
  529. DWORD dwReservedBits2;
  530. DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
  531. } DXVA_MBctrl_P_HostResidDiff_1;
  532.  
  533. /* Basic form for P and B pictures */
  534. /* Without OBMC, without BinPB and 4MV together, without MV RPS */
  535. /* Off-Host IDCT, 4:2:0 sampling */
  536. typedef struct _DXVA_MBctrl_P_OffHostIDCT_1 {
  537. WORD wMBaddress;
  538. WORD wMBtype;
  539. DWORD dwMB_SNL;
  540. WORD wPatternCode;
  541. BYTE bNumCoef[DXVA_NumBlocksPerMB_420];
  542. DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
  543. } DXVA_MBctrl_P_OffHostIDCT_1;
  544.  
  545. /* How to load alpha blending graphic data */
  546. typedef struct _DXVA_ConfigAlphaLoad {
  547.  
  548. // Operation Indicated
  549. DXVA_ConfigQueryOrReplyFunc dwFunction;
  550.  
  551. // Alignment
  552. DWORD dwReservedBits[3];
  553.  
  554. BYTE bConfigDataType;
  555. } DXVA_ConfigAlphaLoad, *LPDXVA_ConfigAlphaLoad;
  556.  
  557. #define DXVA_CONFIG_DATA_TYPE_IA44 0
  558. #define DXVA_CONFIG_DATA_TYPE_AI44 1
  559. #define DXVA_CONFIG_DATA_TYPE_DPXD 2
  560. #define DXVA_CONFIG_DATA_TYPE_AYUV 3
  561.  
  562.  
  563. /* How to combine alpha blending graphic data */
  564. typedef struct _DXVA_ConfigAlphaCombine {
  565.  
  566. // Operation Indicated
  567. DXVA_ConfigQueryOrReplyFunc dwFunction;
  568.  
  569. // Alignment
  570. DWORD dwReservedBits[3];
  571.  
  572. BYTE bConfigBlendType;
  573. BYTE bConfigPictureResizing;
  574. BYTE bConfigOnlyUsePicDestRectArea;
  575. BYTE bConfigGraphicResizing;
  576. BYTE bConfigWholePlaneAlpha;
  577.  
  578. } DXVA_ConfigAlphaCombine, *LPDXVA_ConfigAlphaCombine;
  579.  
  580. #define DXVA_CONFIG_BLEND_TYPE_FRONT_BUFFER 0
  581. #define DXVA_CONFIG_BLEND_TYPE_BACK_HARDWARE 1
  582.  
  583.  
  584. /* AYUV sample for 16-entry YUV palette or graphic surface */
  585.  
  586. typedef struct _DXVA_AYUVsample2 {
  587. BYTE bCrValue;
  588. BYTE bCbValue;
  589. BYTE bY_Value;
  590. BYTE bSampleAlpha8;
  591. } DXVA_AYUVsample2, *LPDXVA_AYUVsample2;
  592.  
  593. /* Macros for IA44 alpha blending surface samples */
  594.  
  595. typedef BYTE DXVA_IA44sample, *LPDXVA_IA44sample;
  596.  
  597. #define readDXVA_IA44index(ptr) (((*(ptr)) & 0xF0) >> 4)
  598. #define readDXVA_IA44alpha(ptr) ((*(ptr)) & 0x0F)
  599.  
  600. #define writeDXVA_IA44(ptr, idx, alpha) ((*(ptr)) = (((idx) << 4) | (alpha)))
  601.  
  602. #define setDXVA_IA44index(ptr, idx) ((*(ptr)) |= ((idx) << 4))
  603. #define setDXVA_IA44alpha(ptr, alpha) ((*(ptr)) |= (alpha))
  604.  
  605. /* Macros for AI44 alpha blending surface samples */
  606.  
  607. typedef BYTE DXVA_AI44sample, *LPDXVA_AI44sample;
  608.  
  609. #define readDXVA_AI44index(ptr) ((*(ptr)) & 0x0F)
  610. #define readDXVA_AI44alpha(ptr) (((*(ptr)) & 0xF0) >> 4)
  611.  
  612. #define writeDXVA_AI44(ptr, idx, alpha) ((*(ptr)) = (((alpha) << 4) | (idx)))
  613.  
  614. #define setDXVA_AI44index(ptr, idx) ((*(ptr)) |= (idx))
  615. #define setDXVA_AI44alpha(ptr, alpha) ((*(ptr)) |= ((alpha) << 4))
  616.  
  617.  
  618. /* Highlight data structure */
  619.  
  620. typedef struct _DXVA_Highlight {
  621. WORD wHighlightActive;
  622. WORD wHighlightIndices;
  623. WORD wHighlightAlphas;
  624. RECT HighlightRect;
  625. } DXVA_Highlight, *LPDXVA_Highlight;
  626.  
  627. typedef BYTE DXVA_DPXD, *LPDXVA_DPXD;
  628. typedef WORD DXVA_DCCMD, *LPDXVA_DCCMD;
  629.  
  630. /* Alpha blend combination */
  631.  
  632. typedef struct _DXVA_BlendCombination {
  633. WORD wPictureSourceIndex;
  634. WORD wBlendedDestinationIndex;
  635. RECT PictureSourceRect16thPel;
  636. RECT PictureDestinationRect;
  637. RECT GraphicSourceRect;
  638. RECT GraphicDestinationRect;
  639. WORD wBlendDelay;
  640. BYTE bBlendOn;
  641. BYTE bWholePlaneAlpha;
  642. DXVA_AYUVsample2 OutsideYUVcolor;
  643. } DXVA_BlendCombination, *LPDXVA_BlendCombination;
  644.  
  645. /* H.264/AVC-specific structures */
  646.  
  647. /* H.264/AVC picture entry data structure */
  648. typedef struct _DXVA_PicEntry_H264 {
  649. union {
  650. struct {
  651. UCHAR Index7Bits : 7;
  652. UCHAR AssociatedFlag : 1;
  653. };
  654. UCHAR bPicEntry;
  655. };
  656. } DXVA_PicEntry_H264, *LPDXVA_PicEntry_H264; /* 1 byte */
  657.  
  658. /* H.264/AVC picture parameters structure */
  659. typedef struct _DXVA_PicParams_H264 {
  660. USHORT wFrameWidthInMbsMinus1;
  661. USHORT wFrameHeightInMbsMinus1;
  662. DXVA_PicEntry_H264 CurrPic; /* flag is bot field flag */
  663. UCHAR num_ref_frames;
  664.  
  665. union {
  666. struct {
  667. USHORT field_pic_flag : 1;
  668. USHORT MbaffFrameFlag : 1;
  669. USHORT residual_colour_transform_flag : 1;
  670. USHORT sp_for_switch_flag : 1;
  671. USHORT chroma_format_idc : 2;
  672. USHORT RefPicFlag : 1;
  673. USHORT constrained_intra_pred_flag : 1;
  674.  
  675. USHORT weighted_pred_flag : 1;
  676. USHORT weighted_bipred_idc : 2;
  677. USHORT MbsConsecutiveFlag : 1;
  678. USHORT frame_mbs_only_flag : 1;
  679. USHORT transform_8x8_mode_flag : 1;
  680. USHORT MinLumaBipredSize8x8Flag : 1;
  681. USHORT IntraPicFlag : 1;
  682. };
  683. USHORT wBitFields;
  684. };
  685. UCHAR bit_depth_luma_minus8;
  686. UCHAR bit_depth_chroma_minus8;
  687.  
  688. USHORT Reserved16Bits;
  689. UINT StatusReportFeedbackNumber;
  690.  
  691. DXVA_PicEntry_H264 RefFrameList[16]; /* flag LT */
  692. INT CurrFieldOrderCnt[2];
  693. INT FieldOrderCntList[16][2];
  694.  
  695. CHAR pic_init_qs_minus26;
  696. CHAR chroma_qp_index_offset; /* also used for QScb */
  697. CHAR second_chroma_qp_index_offset; /* also for QScr */
  698. UCHAR ContinuationFlag;
  699.  
  700. /* remainder for parsing */
  701. CHAR pic_init_qp_minus26;
  702. UCHAR num_ref_idx_l0_active_minus1;
  703. UCHAR num_ref_idx_l1_active_minus1;
  704. UCHAR Reserved8BitsA;
  705.  
  706. USHORT FrameNumList[16];
  707. UINT UsedForReferenceFlags;
  708. USHORT NonExistingFrameFlags;
  709. USHORT frame_num;
  710.  
  711. UCHAR log2_max_frame_num_minus4;
  712. UCHAR pic_order_cnt_type;
  713. UCHAR log2_max_pic_order_cnt_lsb_minus4;
  714. UCHAR delta_pic_order_always_zero_flag;
  715.  
  716. UCHAR direct_8x8_inference_flag;
  717. UCHAR entropy_coding_mode_flag;
  718. UCHAR pic_order_present_flag;
  719. UCHAR num_slice_groups_minus1;
  720.  
  721. UCHAR slice_group_map_type;
  722. UCHAR deblocking_filter_control_present_flag;
  723. UCHAR redundant_pic_cnt_present_flag;
  724. UCHAR Reserved8BitsB;
  725.  
  726. USHORT slice_group_change_rate_minus1;
  727.  
  728. UCHAR SliceGroupMap[810]; /* 4b/sgmu, Size BT.601 */
  729.  
  730. } DXVA_PicParams_H264, *LPDXVA_PicParams_H264;
  731.  
  732. /* H.264/AVC quantization weighting matrix data structure */
  733. typedef struct _DXVA_Qmatrix_H264 {
  734. UCHAR bScalingLists4x4[6][16];
  735. UCHAR bScalingLists8x8[2][64];
  736.  
  737. } DXVA_Qmatrix_H264, *LPDXVA_Qmatrix_H264;
  738.  
  739. /* H.264/AVC slice control data structure - short form */
  740. typedef struct _DXVA_Slice_H264_Short {
  741. UINT BSNALunitDataLocation; /* type 1..5 */
  742. UINT SliceBytesInBuffer; /* for off-host parse */
  743. USHORT wBadSliceChopping; /* for off-host parse */
  744. } DXVA_Slice_H264_Short, *LPDXVA_Slice_H264_Short;
  745.  
  746. /* H.264/AVC picture entry data structure - long form */
  747. typedef struct _DXVA_Slice_H264_Long {
  748. UINT BSNALunitDataLocation; /* type 1..5 */
  749. UINT SliceBytesInBuffer; /* for off-host parse */
  750. USHORT wBadSliceChopping; /* for off-host parse */
  751.  
  752. USHORT first_mb_in_slice;
  753. USHORT NumMbsForSlice;
  754.  
  755. USHORT BitOffsetToSliceData; /* after CABAC alignment */
  756.  
  757. UCHAR slice_type;
  758. UCHAR luma_log2_weight_denom;
  759. UCHAR chroma_log2_weight_denom;
  760. UCHAR num_ref_idx_l0_active_minus1;
  761. UCHAR num_ref_idx_l1_active_minus1;
  762. CHAR slice_alpha_c0_offset_div2;
  763. CHAR slice_beta_offset_div2;
  764. UCHAR Reserved8Bits;
  765. DXVA_PicEntry_H264 RefPicList[2][32]; /* L0 & L1 */
  766. SHORT Weights[2][32][3][2]; /* L0 & L1; Y, Cb, Cr */
  767. CHAR slice_qs_delta;
  768. /* rest off-host parse */
  769. CHAR slice_qp_delta;
  770. UCHAR redundant_pic_cnt;
  771. UCHAR direct_spatial_mv_pred_flag;
  772. UCHAR cabac_init_idc;
  773. UCHAR disable_deblocking_filter_idc;
  774. USHORT slice_id;
  775. } DXVA_Slice_H264_Long, *LPDXVA_Slice_H264_Long;
  776.  
  777. /* H.264/AVC macroblock control command data structure */
  778. typedef struct _DXVA_MBctrl_H264 {
  779. union {
  780. struct {
  781. UINT bSliceID : 8; /* 1 byte */
  782. UINT MbType5Bits : 5;
  783. UINT IntraMbFlag : 1;
  784. UINT mb_field_decoding_flag : 1;
  785. UINT transform_size_8x8_flag : 1; /* 2 bytes */
  786. UINT HostResidDiff : 1;
  787. UINT DcBlockCodedCrFlag : 1;
  788. UINT DcBlockCodedCbFlag : 1;
  789. UINT DcBlockCodedYFlag : 1;
  790. UINT FilterInternalEdgesFlag : 1;
  791. UINT FilterLeftMbEdgeFlag : 1;
  792. UINT FilterTopMbEdgeFlag : 1;
  793. UINT ReservedBit : 1;
  794. UINT bMvQuantity : 8; /* 4 bytes */
  795. };
  796. UINT dwMBtype; /* 4 bytes so far */
  797. };
  798. USHORT CurrMbAddr; /* 6 bytes so far */
  799. USHORT wPatternCode[3];/* YCbCr, 16 4x4 blks, 1b each */
  800. /* 12 bytes so far */
  801. UCHAR bQpPrime[3]; /* Y, Cb, Cr, need just 7b QpY */
  802. UCHAR bMBresidDataQuantity;
  803. ULONG dwMBdataLocation; /* offset into resid buffer */
  804. /* 20 bytes so far */
  805. union {
  806. struct {
  807. /* start here for Intra MB's (9 useful bytes in branch) */
  808. USHORT LumaIntraPredModes[4];/* 16 blocks, 4b each */
  809. /* 28 bytes so far */
  810. union {
  811. struct {
  812. UCHAR intra_chroma_pred_mode : 2;
  813. UCHAR IntraPredAvailFlags : 5;
  814. UCHAR ReservedIntraBit : 1;
  815. };
  816. UCHAR bMbIntraStruct; /* 29 bytes so far */
  817. };
  818. UCHAR ReservedIntra24Bits[3]; /* 32 bytes total */
  819. };
  820. struct {
  821. /* start here for non-Intra MB's (12 bytes in branch) */
  822. UCHAR bSubMbShapes; /* 4 subMbs, 2b each */
  823. UCHAR bSubMbPredModes; /* 4 subMBs, 2b each */
  824. /* 22 bytes so far */
  825. USHORT wMvBuffOffset; /* offset into MV buffer */
  826. UCHAR bRefPicSelect[2][4]; /* 32 bytes total */
  827. };
  828. };
  829. } DXVA_MBctrl_H264, *LPDXVA_MBctrl_H264;
  830.  
  831. /* H.264/AVC IndexA and IndexB data structure */
  832. typedef struct _DXVA_DeblockIndexAB_H264 {
  833. UCHAR bIndexAinternal; /* 6b - could get from MB CC */
  834. UCHAR bIndexBinternal; /* 6b - could get from MB CC */
  835.  
  836. UCHAR bIndexAleft0;
  837. UCHAR bIndexBleft0;
  838.  
  839. UCHAR bIndexAleft1;
  840. UCHAR bIndexBleft1;
  841.  
  842. UCHAR bIndexAtop0;
  843. UCHAR bIndexBtop0;
  844.  
  845. UCHAR bIndexAtop1;
  846. UCHAR bIndexBtop1;
  847. } DXVA_DeblockIndexAB_H264, *LPDXVA_DeblockIndexAB_H264;
  848. /* 10 bytes in struct */
  849.  
  850. /* H.264/AVC deblocking filter control data structure */
  851. typedef struct _DXVA_Deblock_H264 {
  852. USHORT CurrMbAddr; /* dup info */ /* 2 bytes so far */
  853. union {
  854. struct {
  855. UCHAR ReservedBit : 1;
  856. UCHAR FieldModeCurrentMbFlag : 1; /* dup info */
  857. UCHAR FieldModeLeftMbFlag : 1;
  858. UCHAR FieldModeAboveMbFlag : 1;
  859. UCHAR FilterInternal8x8EdgesFlag : 1;
  860. UCHAR FilterInternal4x4EdgesFlag : 1;
  861. UCHAR FilterLeftMbEdgeFlag : 1;
  862. UCHAR FilterTopMbEdgeFlag : 1;
  863. };
  864. UCHAR FirstByte;
  865. };
  866. UCHAR Reserved8Bits; /* 4 bytes so far */
  867.  
  868. UCHAR bbSinternalLeftVert; /* 2 bits per bS */
  869. UCHAR bbSinternalMidVert;
  870.  
  871. UCHAR bbSinternalRightVert;
  872. UCHAR bbSinternalTopHorz; /* 8 bytes so far */
  873.  
  874. UCHAR bbSinternalMidHorz;
  875. UCHAR bbSinternalBotHorz; /* 10 bytes so far */
  876.  
  877. USHORT wbSLeft0; /* 4 bits per bS (1 wasted) */
  878. USHORT wbSLeft1; /* 4 bits per bS (1 wasted) */
  879.  
  880. USHORT wbSTop0; /* 4 bits per bS (1 wasted) */
  881. USHORT wbSTop1; /* 4b (2 wasted) 18 bytes so far*/
  882.  
  883. DXVA_DeblockIndexAB_H264 IndexAB[3]; /* Y, Cb, Cr */
  884.  
  885. } DXVA_Deblock_H264, *LPDXVA_Deblock_H264;/* 48 bytes */
  886.  
  887. /* H.264/AVC film grain characteristics data structure */
  888. typedef struct _DXVA_FilmGrainCharacteristics {
  889.  
  890. USHORT wFrameWidthInMbsMinus1;
  891. USHORT wFrameHeightInMbsMinus1;
  892.  
  893. DXVA_PicEntry_H264 InPic; /* flag is bot field flag */
  894. DXVA_PicEntry_H264 OutPic; /* flag is field pic flag */
  895.  
  896. USHORT PicOrderCnt_offset;
  897. INT CurrPicOrderCnt;
  898. UINT StatusReportFeedbackNumber;
  899.  
  900. UCHAR model_id;
  901. UCHAR separate_colour_description_present_flag;
  902. UCHAR film_grain_bit_depth_luma_minus8;
  903. UCHAR film_grain_bit_depth_chroma_minus8;
  904.  
  905. UCHAR film_grain_full_range_flag;
  906. UCHAR film_grain_colour_primaries;
  907. UCHAR film_grain_transfer_characteristics;
  908. UCHAR film_grain_matrix_coefficients;
  909.  
  910. UCHAR blending_mode_id;
  911. UCHAR log2_scale_factor;
  912.  
  913. UCHAR comp_model_present_flag[4];
  914. UCHAR num_intensity_intervals_minus1[4];
  915. UCHAR num_model_values_minus1[4];
  916.  
  917. UCHAR intensity_interval_lower_bound[3][16];
  918. UCHAR intensity_interval_upper_bound[3][16];
  919. SHORT comp_model_value[3][16][8];
  920. } DXVA_FilmGrainChar_H264, *LPDXVA_FilmGrainChar_H264;
  921.  
  922. /* H.264/AVC status reporting data structure */
  923. typedef struct _DXVA_Status_H264 {
  924. UINT StatusReportFeedbackNumber;
  925. DXVA_PicEntry_H264 CurrPic; /* flag is bot field flag */
  926. UCHAR field_pic_flag;
  927. UCHAR bDXVA_Func;
  928. UCHAR bBufType;
  929. UCHAR bStatus;
  930. UCHAR bReserved8Bits;
  931. USHORT wNumMbsAffected;
  932. } DXVA_Status_H264, *LPDXVA_Status_H264;
  933.  
  934. /* VC-1 status reporting data structure */
  935. typedef struct _DXVA_Status_VC1 {
  936. USHORT StatusReportFeedbackNumber;
  937. WORD wDecodedPictureIndex;
  938. WORD wDeblockedPictureIndex;
  939. UCHAR bPicStructure;
  940. UCHAR bBufType;
  941. UCHAR bStatus;
  942. UCHAR bReserved8Bits;
  943. USHORT wNumMbsAffected;
  944. } DXVA_Status_VC1, *LPDXVA_Status_VC1;
  945.  
  946.  
  947. #pragma pack(push, 16)
  948.  
  949.  
  950. typedef DXVA_MBctrl_I_HostResidDiff_1 *
  951. LPDXVA_MBctrl_I_HostResidDiff_1;
  952.  
  953. typedef DXVA_MBctrl_I_OffHostIDCT_1 *
  954. LPDXVA_MBctrl_I_OffHostIDCT_1;
  955.  
  956. typedef DXVA_MBctrl_P_HostResidDiff_1 *
  957. LPDXVA_MBctrl_P_HostResidDiff_1;
  958.  
  959. typedef DXVA_MBctrl_P_OffHostIDCT_1 *
  960. LPDXVA_MBctrl_P_OffHostIDCT_1;
  961.  
  962.  
  963. #pragma pack(pop)
  964.  
  965. /*
  966. * Other forms of pictures are constructed in the obvious way
  967. * from the above by adjusting the number of residual difference
  968. * blocks, the number of motion vectors per macroblock, etc.
  969. */
  970.  
  971. #define readDXVA_MBskipsFollowing(ptr) (((ptr)->dwMB_SNL & 0xFF000000) >> 24)
  972. #define readDXVA_MBdataLocation(ptr) (((ptr)->dwMB_SNL & 0x00FFFFFF))
  973.  
  974. #define writeDXVA_MB_SNL(ptr, skips, dloc) ((ptr)->dwMB_SNL = (((skips) << 24) | (dloc)))
  975. #define setDXVA_MBskipsFollowing(ptr, skips) ((ptr)->dwMB_SNL |= ((skips) << 24))
  976. #define setDXVA_MBdataLocation(ptr, dloc) ((ptr)->dwMB_SNL |= (dloc))
  977.  
  978. #define readDXVA_MvertFieldSel_3(ptr) (((ptr)->wMBtype & 0x8000) >> 15)
  979. #define readDXVA_MvertFieldSel_2(ptr) (((ptr)->wMBtype & 0x4000) >> 14)
  980. #define readDXVA_MvertFieldSel_1(ptr) (((ptr)->wMBtype & 0x2000) >> 13)
  981. #define readDXVA_MvertFieldSel_0(ptr) (((ptr)->wMBtype & 0x1000) >> 12)
  982. #define readDXVA_ReservedBits(ptr) (((ptr)->wMBtype & 0x0800) >> 11)
  983. #define readDXVA_HostResidDiff(ptr) (((ptr)->wMBtype & 0x0400) >> 10)
  984. #define readDXVA_MotionType(ptr) (((ptr)->wMBtype & 0x0300) >> 8)
  985. #define readDXVA_MBscanMethod(ptr) (((ptr)->wMBtype & 0x00C0) >> 6)
  986. #define readDXVA_FieldResidual(ptr) (((ptr)->wMBtype & 0x0020) >> 5)
  987. #define readDXVA_H261LoopFilter(ptr) (((ptr)->wMBtype & 0x0010) >> 4)
  988. #define readDXVA_Motion4MV(ptr) (((ptr)->wMBtype & 0x0008) >> 3)
  989. #define readDXVA_MotionBackward(ptr) (((ptr)->wMBtype & 0x0004) >> 2)
  990. #define readDXVA_MotionForward(ptr) (((ptr)->wMBtype & 0x0002) >> 1)
  991. #define readDXVA_IntraMacroblock(ptr) (((ptr)->wMBtype & 0x0001))
  992.  
  993. #define setDXVA_MvertFieldSel_3(ptr) ((ptr)->wMBtype |= 0x8000)
  994. #define setDXVA_MvertFieldSel_2(ptr) ((ptr)->wMBtype |= 0x4000)
  995. #define setDXVA_MvertFieldSel_1(ptr) ((ptr)->wMBtype |= 0x2000)
  996. #define setDXVA_MvertFieldSel_0(ptr) ((ptr)->wMBtype |= 0x1000)
  997. #define setDXVA_ReservedBits(ptr) ((ptr)->wMBtype |= 0x0800)
  998. #define setDXVA_HostResidDiff(ptr) ((ptr)->wMBtype |= 0x0400)
  999. #define setDXVA_MotionType(ptr, value) ((ptr)->wMBtype |= ((value) << 8))
  1000. #define setDXVA_MBscanMethod(ptr, value) ((ptr)->wMBtype |= ((value) << 6))
  1001. #define setDXVA_FieldResidual(ptr) ((ptr)->wMBtype |= 0x0020)
  1002. #define setDXVA_H261LoopFilter(ptr) ((ptr)->wMBtype |= 0x0010)
  1003. #define setDXVA_Motion4MV(ptr) ((ptr)->wMBtype |= 0x0008)
  1004. #define setDXVA_MotionBackward(ptr) ((ptr)->wMBtype |= 0x0004)
  1005. #define setDXVA_MotionForward(ptr) ((ptr)->wMBtype |= 0x0002)
  1006. #define setDXVA_IntraMacroblock(ptr) ((ptr)->wMBtype |= 0x0001)
  1007.  
  1008. #define readDXVA_Y___0coded(ptr) (((ptr)->wPatternCode & 0x0800) >> 11)
  1009. #define readDXVA_Y___1coded(ptr) (((ptr)->wPatternCode & 0x0400) >> 10)
  1010. #define readDXVA_Y___2coded(ptr) (((ptr)->wPatternCode & 0x0200) >> 9)
  1011. #define readDXVA_Y___3coded(ptr) (((ptr)->wPatternCode & 0x0100) >> 8)
  1012. #define readDXVA_Cb__4coded(ptr) (((ptr)->wPatternCode & 0x0080) >> 7)
  1013. #define readDXVA_Cr__5coded(ptr) (((ptr)->wPatternCode & 0x0040) >> 6)
  1014. #define readDXVA_Cb__6coded(ptr) (((ptr)->wPatternCode & 0x0020) >> 5)
  1015. #define readDXVA_Cr__7coded(ptr) (((ptr)->wPatternCode & 0x0010) >> 4)
  1016. #define readDXVA_Cb__8coded(ptr) (((ptr)->wPatternCode & 0x0008) >> 3)
  1017. #define readDXVA_Cb__9coded(ptr) (((ptr)->wPatternCode & 0x0004) >> 2)
  1018. #define readDXVA_Cr_10coded(ptr) (((ptr)->wPatternCode & 0x0002) >> 1)
  1019. #define readDXVA_Cr_11coded(ptr) (((ptr)->wPatternCode & 0x0001))
  1020.  
  1021. #define readDXVA_Y___0oflow(ptr) (((ptr)->wPC_Overflow & 0x0800) >> 11)
  1022. #define readDXVA_Y___1oflow(ptr) (((ptr)->wPC_Overflow & 0x0400) >> 10)
  1023. #define readDXVA_Y___2oflow(ptr) (((ptr)->wPC_Overflow & 0x0200) >> 9)
  1024. #define readDXVA_Y___3oflow(ptr) (((ptr)->wPC_Overflow & 0x0100) >> 8)
  1025. #define readDXVA_Cb__4oflow(ptr) (((ptr)->wPC_Overflow & 0x0080) >> 7)
  1026. #define readDXVA_Cr__5oflow(ptr) (((ptr)->wPC_Overflow & 0x0040) >> 6)
  1027. #define readDXVA_Cb__6oflow(ptr) (((ptr)->wPC_Overflow & 0x0020) >> 5)
  1028. #define readDXVA_Cr__7oflow(ptr) (((ptr)->wPC_Overflow & 0x0010) >> 4)
  1029. #define readDXVA_Cb__8oflow(ptr) (((ptr)->wPC_Overflow & 0x0008) >> 3)
  1030. #define readDXVA_Cb__9oflow(ptr) (((ptr)->wPC_Overflow & 0x0004) >> 2)
  1031. #define readDXVA_Cr_10oflow(ptr) (((ptr)->wPC_Overflow & 0x0002) >> 1)
  1032. #define readDXVA_Cr_11oflow(ptr) (((ptr)->wPC_Overflow & 0x0001))
  1033.  
  1034. #pragma pack(pop, BeforeDXVApacking)
  1035. #endif /* __DIRECTX_VA_DECODER__ */
  1036.  
  1037.  
  1038. // -------------------------------------------------------------------------
  1039. //
  1040. // D3DFORMAT describes a pixel memory layout, DXVA sample format contains
  1041. // additional information that describes how the pixels should be interpreted.
  1042. //
  1043. // DXVA Extended color data - occupies the SampleFormat DWORD
  1044. // data fields.
  1045. // -------------------------------------------------------------------------
  1046. #ifndef __DIRECTX_VA_SAMPLEFORMAT__
  1047. #define __DIRECTX_VA_SAMPLEFORMAT__
  1048.  
  1049. typedef enum _DXVA_SampleFormat {
  1050. DXVA_SampleFormatMask = 0xFF, // 8 bits used for DXVA Sample format
  1051. DXVA_SampleUnknown = 0,
  1052. DXVA_SamplePreviousFrame = 1,
  1053. DXVA_SampleProgressiveFrame = 2,
  1054. DXVA_SampleFieldInterleavedEvenFirst = 3,
  1055. DXVA_SampleFieldInterleavedOddFirst = 4,
  1056. DXVA_SampleFieldSingleEven = 5,
  1057. DXVA_SampleFieldSingleOdd = 6,
  1058. DXVA_SampleSubStream = 7
  1059. } DXVA_SampleFormat;
  1060.  
  1061. #define DXVA_ExtractSampleFormat(_sf) ((_sf) & (DXVA_SampleFormatMask))
  1062.  
  1063. #define DXVA_ExtractExtColorData(_sf, _Mask, _Shift) \
  1064. (((_sf) & (_Mask)) >> (_Shift))
  1065.  
  1066. #define DXVABitMask(__n) (~((~0) << __n))
  1067. #define DXVA_ExtColorData_ShiftBase 8
  1068. #define DXVAColorMask(__bits,__base) (DXVABitMask(__bits) << (__base))
  1069.  
  1070. typedef enum _DXVA_VideoTransferFunction
  1071. {
  1072. DXVA_VideoTransFuncShift = (DXVA_ExtColorData_ShiftBase + 19),
  1073. DXVA_VideoTransFuncMask = DXVAColorMask(5, DXVA_VideoTransFuncShift),
  1074.  
  1075. DXVA_VideoTransFunc_Unknown = 0,
  1076. DXVA_VideoTransFunc_10 = 1,
  1077. DXVA_VideoTransFunc_18 = 2,
  1078. DXVA_VideoTransFunc_20 = 3,
  1079. DXVA_VideoTransFunc_22 = 4,
  1080. DXVA_VideoTransFunc_22_709 = 5,
  1081. DXVA_VideoTransFunc_22_240M = 6,
  1082. DXVA_VideoTransFunc_22_8bit_sRGB = 7,
  1083. DXVA_VideoTransFunc_28 = 8
  1084. } DXVA_VideoTransferFunction;
  1085.  
  1086. typedef enum _DXVA_VideoPrimaries
  1087. {
  1088. DXVA_VideoPrimariesShift = (DXVA_ExtColorData_ShiftBase + 14),
  1089. DXVA_VideoPrimariesMask = DXVAColorMask(5, DXVA_VideoPrimariesShift),
  1090.  
  1091. DXVA_VideoPrimaries_Unknown = 0,
  1092. DXVA_VideoPrimaries_reserved = 1,
  1093. DXVA_VideoPrimaries_BT709 = 2,
  1094. DXVA_VideoPrimaries_BT470_2_SysM = 3,
  1095. DXVA_VideoPrimaries_BT470_2_SysBG = 4,
  1096. DXVA_VideoPrimaries_SMPTE170M = 5,
  1097. DXVA_VideoPrimaries_SMPTE240M = 6,
  1098. DXVA_VideoPrimaries_EBU3213 = 7,
  1099. DXVA_VideoPrimaries_SMPTE_C = 8
  1100. } DXVA_VideoPrimaries;
  1101.  
  1102. typedef enum _DXVA_VideoLighting
  1103. {
  1104. DXVA_VideoLightingShift = (DXVA_ExtColorData_ShiftBase + 10),
  1105. DXVA_VideoLightingMask = DXVAColorMask(4, DXVA_VideoLightingShift),
  1106.  
  1107. DXVA_VideoLighting_Unknown = 0,
  1108. DXVA_VideoLighting_bright = 1,
  1109. DXVA_VideoLighting_office = 2,
  1110. DXVA_VideoLighting_dim = 3,
  1111. DXVA_VideoLighting_dark = 4
  1112. } DXVA_VideoLighting;
  1113.  
  1114. typedef enum _DXVA_VideoTransferMatrix
  1115. {
  1116. DXVA_VideoTransferMatrixShift = (DXVA_ExtColorData_ShiftBase + 7),
  1117. DXVA_VideoTransferMatrixMask = DXVAColorMask(3, DXVA_VideoTransferMatrixShift),
  1118.  
  1119. DXVA_VideoTransferMatrix_Unknown = 0,
  1120. DXVA_VideoTransferMatrix_BT709 = 1,
  1121. DXVA_VideoTransferMatrix_BT601 = 2,
  1122. DXVA_VideoTransferMatrix_SMPTE240M = 3
  1123. } DXVA_VideoTransferMatrix;
  1124.  
  1125. typedef enum _DXVA_NominalRange
  1126. {
  1127. DXVA_NominalRangeShift = (DXVA_ExtColorData_ShiftBase + 4),
  1128. DXVA_NominalRangeMask = DXVAColorMask(3, DXVA_NominalRangeShift),
  1129.  
  1130. DXVA_NominalRange_Unknown = 0,
  1131. DXVA_NominalRange_Normal = 1,
  1132. DXVA_NominalRange_Wide = 2,
  1133.  
  1134. DXVA_NominalRange_0_255 = 1,
  1135. DXVA_NominalRange_16_235 = 2,
  1136. DXVA_NominalRange_48_208 = 3
  1137. } DXVA_NominalRange;
  1138.  
  1139.  
  1140. typedef enum _DXVA_VideoChromaSubsampling
  1141. {
  1142. DXVA_VideoChromaSubsamplingShift = (DXVA_ExtColorData_ShiftBase + 0),
  1143. DXVA_VideoChromaSubsamplingMask = DXVAColorMask(4, DXVA_VideoChromaSubsamplingShift),
  1144.  
  1145. DXVA_VideoChromaSubsampling_Unknown = 0,
  1146. DXVA_VideoChromaSubsampling_ProgressiveChroma = 0x8,
  1147. DXVA_VideoChromaSubsampling_Horizontally_Cosited = 0x4,
  1148. DXVA_VideoChromaSubsampling_Vertically_Cosited = 0x2,
  1149. DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes = 0x1,
  1150.  
  1151. // 4:2:0 variations
  1152. DXVA_VideoChromaSubsampling_MPEG2 = DXVA_VideoChromaSubsampling_Horizontally_Cosited |
  1153. DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
  1154.  
  1155. DXVA_VideoChromaSubsampling_MPEG1 = DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
  1156.  
  1157. DXVA_VideoChromaSubsampling_DV_PAL = DXVA_VideoChromaSubsampling_Horizontally_Cosited |
  1158. DXVA_VideoChromaSubsampling_Vertically_Cosited,
  1159. // 4:4:4, 4:2:2, 4:1:1
  1160. DXVA_VideoChromaSubsampling_Cosited = DXVA_VideoChromaSubsampling_Horizontally_Cosited |
  1161. DXVA_VideoChromaSubsampling_Vertically_Cosited |
  1162. DXVA_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
  1163. } DXVA_VideoChromaSubsampling;
  1164.  
  1165. typedef struct _DXVA_ExtendedFormat
  1166. {
  1167. UINT SampleFormat : 8; // See DXVA_SampleFormat
  1168. UINT VideoChromaSubsampling : 4; // See DXVA_VideoChromaSubSampling
  1169. DXVA_NominalRange NominalRange : 3; // See DXVA_NominalRange
  1170. DXVA_VideoTransferMatrix VideoTransferMatrix : 3; // See DXVA_VideoTransferMatrix
  1171. DXVA_VideoLighting VideoLighting : 4; // See DXVA_VideoLighting
  1172. DXVA_VideoPrimaries VideoPrimaries : 5; // See DXVA_VideoPrimaries
  1173. DXVA_VideoTransferFunction VideoTransferFunction : 5; // See DXVA_VideoTransferFunction
  1174. } DXVA_ExtendedFormat;
  1175.  
  1176. #endif
  1177.  
  1178.  
  1179.  
  1180. // -------------------------------------------------------------------------
  1181. //
  1182. // The definitions that follow describe the video de-interlace interface
  1183. // between the VMR and the graphics device driver. This interface is not
  1184. // accessable via the IAMVideoAccelerator interface.
  1185. //
  1186. // -------------------------------------------------------------------------
  1187. //
  1188. #ifndef __DIRECTX_VA_DEINTERLACE__
  1189. #define __DIRECTX_VA_DEINTERLACE__
  1190.  
  1191. typedef LONGLONG REFERENCE_TIME;
  1192.  
  1193. DEFINE_GUID(DXVA_DeinterlaceBobDevice,
  1194. 0x335aa36e,0x7884,0x43a4,0x9c,0x91,0x7f,0x87,0xfa,0xf3,0xe3,0x7e);
  1195.  
  1196. DEFINE_GUID(DXVA_DeinterlaceContainerDevice,
  1197. 0x0e85cb93,0x3046,0x4ff0,0xae,0xcc,0xd5,0x8c,0xb5,0xf0,0x35,0xfd);
  1198.  
  1199.  
  1200. #if (DIRECT3D_VERSION < 0x0800) || !defined(DIRECT3D_VERSION)
  1201. typedef DWORD D3DFORMAT;
  1202. enum {
  1203. D3DPOOL_DEFAULT = 0,
  1204. D3DPOOL_MANAGED = 1,
  1205. D3DPOOL_SYSTEMMEM = 2,
  1206. D3DPOOL_SCRATCH = 3,
  1207. D3DPOOL_LOCALVIDMEM = 4,
  1208. D3DPOOL_NONLOCALVIDMEM = 5,
  1209. D3DPOOL_FORCE_DWORD = 0x7fffffff
  1210. };
  1211. #endif
  1212.  
  1213.  
  1214. // -------------------------------------------------------------------------
  1215. // data structures shared by User mode and Kernel mode.
  1216. // -------------------------------------------------------------------------
  1217. //
  1218.  
  1219. typedef struct _DXVA_Frequency {
  1220. DWORD Numerator;
  1221. DWORD Denominator;
  1222. } DXVA_Frequency;
  1223.  
  1224. typedef struct _DXVA_VideoDesc {
  1225. DWORD Size;
  1226. DWORD SampleWidth;
  1227. DWORD SampleHeight;
  1228. DWORD SampleFormat; // also contains extend color data
  1229. D3DFORMAT d3dFormat;
  1230. DXVA_Frequency InputSampleFreq;
  1231. DXVA_Frequency OutputFrameFreq;
  1232. } DXVA_VideoDesc, *LPDXVA_VideoDesc;
  1233.  
  1234. typedef enum _DXVA_VideoProcessCaps {
  1235. DXVA_VideoProcess_None = 0x0000,
  1236. DXVA_VideoProcess_YUV2RGB = 0x0001,
  1237. DXVA_VideoProcess_StretchX = 0x0002,
  1238. DXVA_VideoProcess_StretchY = 0x0004,
  1239. DXVA_VideoProcess_AlphaBlend = 0x0008,
  1240. DXVA_VideoProcess_SubRects = 0x0010,
  1241. DXVA_VideoProcess_SubStreams = 0x0020,
  1242. DXVA_VideoProcess_SubStreamsExtended = 0x0040,
  1243. DXVA_VideoProcess_YUV2RGBExtended = 0x0080,
  1244. DXVA_VideoProcess_AlphaBlendExtended = 0x0100
  1245. } DXVA_VideoProcessCaps;
  1246.  
  1247. typedef enum _DXVA_DeinterlaceTech {
  1248.  
  1249. // the algorithm is unknown or proprietary
  1250. DXVA_DeinterlaceTech_Unknown = 0x0000,
  1251.  
  1252. // the algorithm creates the missing lines by repeating
  1253. // the line either above or below it - this method will look very jaggy and
  1254. // isn't recommended
  1255. DXVA_DeinterlaceTech_BOBLineReplicate = 0x0001,
  1256.  
  1257. // The algorithm creates the missing lines by vertically stretching each
  1258. // video field by a factor of two by averaging two lines
  1259. DXVA_DeinterlaceTech_BOBVerticalStretch = 0x0002,
  1260.  
  1261. // or using a [-1, 9, 9, -1]/16 filter across four lines.
  1262. DXVA_DeinterlaceTech_BOBVerticalStretch4Tap = 0x0100,
  1263.  
  1264. // the pixels in the missing line are recreated by a median filtering operation
  1265. DXVA_DeinterlaceTech_MedianFiltering = 0x0004,
  1266.  
  1267. // the pixels in the missing line are recreated by an edge filter.
  1268. // In this process, spatial directional filters are applied to determine
  1269. // the orientation of edges in the picture content, and missing
  1270. // pixels are created by filtering along (rather than across) the
  1271. // detected edges.
  1272. DXVA_DeinterlaceTech_EdgeFiltering = 0x0010,
  1273.  
  1274. // the pixels in the missing line are recreated by switching on a field by
  1275. // field basis between using either spatial or temporal interpolation
  1276. // depending on the amount of motion.
  1277. DXVA_DeinterlaceTech_FieldAdaptive = 0x0020,
  1278.  
  1279. // the pixels in the missing line are recreated by switching on a pixel by pixel
  1280. // basis between using either spatial or temporal interpolation depending on
  1281. // the amount of motion..
  1282. DXVA_DeinterlaceTech_PixelAdaptive = 0x0040,
  1283.  
  1284. // Motion Vector Steering identifies objects within a sequence of video
  1285. // fields. The missing pixels are recreated after first aligning the
  1286. // movement axes of the individual objects in the scene to make them
  1287. // parallel with the time axis.
  1288. DXVA_DeinterlaceTech_MotionVectorSteered = 0x0080
  1289.  
  1290. } DXVA_DeinterlaceTech;
  1291.  
  1292.  
  1293. typedef struct _DXVA_VideoSample {
  1294. REFERENCE_TIME rtStart;
  1295. REFERENCE_TIME rtEnd;
  1296. DXVA_SampleFormat SampleFormat; // only lower 8 bits used
  1297. VOID* lpDDSSrcSurface;
  1298. } DXVA_VideoSample, *LPDXVA_VideoSample;
  1299.  
  1300.  
  1301.  
  1302. // -------------------------------------------------------------------------
  1303. // DeinterlaceBltEx declarations
  1304. // -------------------------------------------------------------------------
  1305. //
  1306.  
  1307. typedef enum _DXVA_SampleFlags {
  1308. DXVA_SampleFlagsMask = DXVABit(3)|DXVABit(2)|DXVABit(1)|DXVABit(0),
  1309.  
  1310. DXVA_SampleFlag_Palette_Changed = 0x0001,
  1311. DXVA_SampleFlag_SrcRect_Changed = 0x0002,
  1312. DXVA_SampleFlag_DstRect_Changed = 0x0004,
  1313. DXVA_SampleFlag_ColorData_Changed = 0x0008,
  1314. } DXVA_SampleFlags;
  1315.  
  1316. typedef enum _DXVA_DestinationFlags {
  1317. DXVA_DestinationFlagMask = DXVABit(3)|DXVABit(2)|DXVABit(1)|DXVABit(0),
  1318.  
  1319. DXVA_DestinationFlag_Background_Changed = 0x0001,
  1320. DXVA_DestinationFlag_TargetRect_Changed = 0x0002,
  1321. DXVA_DestinationFlag_ColorData_Changed = 0x0004,
  1322. DXVA_DestinationFlag_Alpha_Changed = 0x0008
  1323. } DXVA_DestinationFlags;
  1324.  
  1325.  
  1326.  
  1327.  
  1328. typedef struct _DXVA_VideoSample2 {
  1329. #ifdef _WIN64
  1330. DWORD Size;
  1331. DWORD Reserved;
  1332. #endif
  1333. REFERENCE_TIME rtStart;
  1334. REFERENCE_TIME rtEnd;
  1335. DWORD SampleFormat; // cast to DXVA_ExtendedFormat, or use Extract macros
  1336. DWORD SampleFlags;
  1337. VOID* lpDDSSrcSurface;
  1338. RECT rcSrc;
  1339. RECT rcDst;
  1340. DXVA_AYUVsample2 Palette[16];
  1341. } DXVA_VideoSample2, *LPDXVA_VideoSample2;
  1342.  
  1343. typedef struct _DXVA_DeinterlaceCaps {
  1344. DWORD Size;
  1345. DWORD NumPreviousOutputFrames;
  1346. DWORD InputPool;
  1347. DWORD NumForwardRefSamples;
  1348. DWORD NumBackwardRefSamples;
  1349. D3DFORMAT d3dOutputFormat;
  1350. DXVA_VideoProcessCaps VideoProcessingCaps;
  1351. DXVA_DeinterlaceTech DeinterlaceTechnology;
  1352. } DXVA_DeinterlaceCaps, *LPDXVA_DeinterlaceCaps;
  1353.  
  1354.  
  1355.  
  1356.  
  1357. // -------------------------------------------------------------------------
  1358. // Data types used with RenderMoComp in kernel mode
  1359. // -------------------------------------------------------------------------
  1360. //
  1361.  
  1362. // Function codes for RenderMoComp
  1363.  
  1364. #define MAX_DEINTERLACE_SURFACES 32
  1365.  
  1366. #ifdef _WIN64
  1367. //
  1368. // These structures are used for thunking 32 bit DeinterlaceBltEx calls on
  1369. // 64 bit drivers.
  1370. //
  1371. typedef struct _DXVA_VideoSample32 {
  1372. REFERENCE_TIME rtStart;
  1373. REFERENCE_TIME rtEnd;
  1374. DWORD SampleFormat;
  1375. DWORD SampleFlags;
  1376. DWORD lpDDSSrcSurface; // 32 bit pointer size
  1377. RECT rcSrc;
  1378. RECT rcDst;
  1379. DXVA_AYUVsample2 Palette[16];
  1380. // DWORD Pad;
  1381. // 4 bytes of padding added by the compiler to align the struct to 8 bytes.
  1382. } DXVA_VideoSample32;
  1383.  
  1384. typedef struct _DXVA_DeinterlaceBltEx32 {
  1385. DWORD Size;
  1386. DXVA_AYUVsample2 BackgroundColor;
  1387. RECT rcTarget;
  1388. REFERENCE_TIME rtTarget;
  1389. DWORD NumSourceSurfaces;
  1390. FLOAT Alpha;
  1391. DXVA_VideoSample32 Source[MAX_DEINTERLACE_SURFACES];
  1392. DWORD DestinationFormat;
  1393. DWORD DestinationFlags;
  1394. } DXVA_DeinterlaceBltEx32;
  1395. #endif
  1396.  
  1397.  
  1398. typedef struct _DXVA_DeinterlaceBlt {
  1399. DWORD Size;
  1400. DWORD Reserved;
  1401. REFERENCE_TIME rtTarget;
  1402. RECT DstRect;
  1403. RECT SrcRect;
  1404. DWORD NumSourceSurfaces;
  1405. FLOAT Alpha;
  1406. DXVA_VideoSample Source[MAX_DEINTERLACE_SURFACES];
  1407. } DXVA_DeinterlaceBlt;
  1408.  
  1409. #define DXVA_DeinterlaceBltFnCode 0x01
  1410. // lpInput => DXVA_DeinterlaceBlt*
  1411. // lpOuput => NULL /* not currently used */
  1412.  
  1413.  
  1414. typedef struct _DXVA_DeinterlaceBltEx {
  1415. DWORD Size;
  1416. DXVA_AYUVsample2 BackgroundColor;
  1417. RECT rcTarget;
  1418. REFERENCE_TIME rtTarget;
  1419. DWORD NumSourceSurfaces;
  1420. FLOAT Alpha;
  1421. DXVA_VideoSample2 Source[MAX_DEINTERLACE_SURFACES];
  1422. DWORD DestinationFormat;
  1423. DWORD DestinationFlags;
  1424. } DXVA_DeinterlaceBltEx;
  1425.  
  1426. #define DXVA_DeinterlaceBltExFnCode 0x02
  1427. // lpInput => DXVA_DeinterlaceBltEx*
  1428. // lpOuput => NULL /* not currently used */
  1429.  
  1430.  
  1431. #define MAX_DEINTERLACE_DEVICE_GUIDS 32
  1432. typedef struct _DXVA_DeinterlaceQueryAvailableModes {
  1433. DWORD Size;
  1434. DWORD NumGuids;
  1435. GUID Guids[MAX_DEINTERLACE_DEVICE_GUIDS];
  1436. } DXVA_DeinterlaceQueryAvailableModes;
  1437.  
  1438. #define DXVA_DeinterlaceQueryAvailableModesFnCode 0x01
  1439. // lpInput => DXVA_VideoDesc*
  1440. // lpOuput => DXVA_DeinterlaceQueryAvailableModes*
  1441.  
  1442.  
  1443. typedef struct _DXVA_DeinterlaceQueryModeCaps {
  1444. DWORD Size;
  1445. GUID Guid;
  1446. DXVA_VideoDesc VideoDesc;
  1447. } DXVA_DeinterlaceQueryModeCaps;
  1448.  
  1449. #define DXVA_DeinterlaceQueryModeCapsFnCode 0x02
  1450. // lpInput => DXVA_DeinterlaceQueryModeCaps*
  1451. // lpOuput => DXVA_DeinterlaceCaps*
  1452.  
  1453. #endif /* __DIRECTX_VA_DEINTERLACE__ */
  1454.  
  1455.  
  1456. // -------------------------------------------------------------------------
  1457. //
  1458. // The definitions that follow describe the video ProcAmp interface
  1459. // between the VMR and the graphics device driver. This interface is not
  1460. // accessable via the IAMVideoAccelerator interface.
  1461. //
  1462. // -------------------------------------------------------------------------
  1463. //
  1464. #ifndef __DIRECTX_VA_PROCAMPCONTROL__
  1465. #define __DIRECTX_VA_PROCAMPCONTROL__
  1466.  
  1467. DEFINE_GUID(DXVA_ProcAmpControlDevice,
  1468. 0x9f200913,0x2ffd,0x4056,0x9f,0x1e,0xe1,0xb5,0x08,0xf2,0x2d,0xcf);
  1469.  
  1470. typedef enum _DXVA_ProcAmpControlProp {
  1471. DXVA_ProcAmp_None = 0x0000,
  1472. DXVA_ProcAmp_Brightness = 0x0001,
  1473. DXVA_ProcAmp_Contrast = 0x0002,
  1474. DXVA_ProcAmp_Hue = 0x0004,
  1475. DXVA_ProcAmp_Saturation = 0x0008
  1476. } DXVA_ProcAmpControlProp;
  1477.  
  1478.  
  1479. typedef struct _DXVA_ProcAmpControlCaps {
  1480. DWORD Size;
  1481. DWORD InputPool;
  1482. D3DFORMAT d3dOutputFormat;
  1483. DWORD ProcAmpControlProps;// see DXVA_ProcAmpControlProp
  1484. DWORD VideoProcessingCaps;// see DXVA_VideoProcessCaps
  1485. } DXVA_ProcAmpControlCaps, *LPDXVA_ProcAmpControlCaps;
  1486.  
  1487. #define DXVA_ProcAmpControlQueryCapsFnCode 0x03
  1488. // lpInput => DXVA_VideoDesc*
  1489. // lpOuput => DXVA_ProcAmpControlCaps*
  1490.  
  1491.  
  1492. typedef struct _DXVA_ProcAmpControlQueryRange {
  1493. DWORD Size;
  1494. DXVA_ProcAmpControlProp ProcAmpControlProp;
  1495. DXVA_VideoDesc VideoDesc;
  1496. } DXVA_ProcAmpControlQueryRange, *LPDXVA_ProcAmpControlQueryRange;
  1497.  
  1498. typedef struct _DXVA_VideoPropertyRange {
  1499. FLOAT MinValue;
  1500. FLOAT MaxValue;
  1501. FLOAT DefaultValue;
  1502. FLOAT StepSize;
  1503. } DXVA_VideoPropertyRange, *LPDXVA_VideoPropertyRange;
  1504.  
  1505. #define DXVA_ProcAmpControlQueryRangeFnCode 0x04
  1506. // lpInput => DXVA_ProcAmpControlQueryRange*
  1507. // lpOuput => DXVA_VideoPropertyRange*
  1508.  
  1509.  
  1510. typedef struct _DXVA_ProcAmpControlBlt {
  1511. DWORD Size;
  1512. RECT DstRect;
  1513. RECT SrcRect;
  1514. FLOAT Alpha;
  1515. FLOAT Brightness;
  1516. FLOAT Contrast;
  1517. FLOAT Hue;
  1518. FLOAT Saturation;
  1519. } DXVA_ProcAmpControlBlt;
  1520.  
  1521. #define DXVA_ProcAmpControlBltFnCode 0x01
  1522. // lpInput => DXVA_ProcAmpControlBlt*
  1523. // lpOuput => NULL /* not currently used */
  1524.  
  1525. #endif /* __DIRECTX_VA_PROCAMPCONTROL__ */
  1526.  
  1527.  
  1528. // -------------------------------------------------------------------------
  1529. //
  1530. // The definitions that follow describe the Certified Output Protection
  1531. // Protocol between the VMR and the graphics device driver. This interface
  1532. // is not accessable via the IAMVideoAccelerator interface.
  1533. //
  1534. // -------------------------------------------------------------------------
  1535. //
  1536.  
  1537. #ifndef __DIRECTX_VA_CERTOUTPUTPROTECT__
  1538. #define __DIRECTX_VA_CERTOUTPUTPROTECT__
  1539.  
  1540.  
  1541. DEFINE_GUID(DXVA_COPPDevice,
  1542. 0xd2457add,0x8999,0x45ed,0x8a,0x8a,0xd1,0xaa,0x04,0x7b,0xa4,0xd5);
  1543.  
  1544.  
  1545. // -------------------------------------------------------------------------
  1546. // COPPGetCertificateLength
  1547. // -------------------------------------------------------------------------
  1548. #define DXVA_COPPGetCertificateLengthFnCode 0x01
  1549. // lpInput => NULL
  1550. // lpOuput => DWORD*
  1551.  
  1552.  
  1553. // -------------------------------------------------------------------------
  1554. // COPPKeyExchange
  1555. // -------------------------------------------------------------------------
  1556. #define DXVA_COPPKeyExchangeFnCode 0x02
  1557. // lpInputData => NULL
  1558. // lpOuputData => GUID*
  1559.  
  1560.  
  1561. // -------------------------------------------------------------------------
  1562. // COPPSequenceStart
  1563. // -------------------------------------------------------------------------
  1564. typedef struct _DXVA_COPPSignature {
  1565. UCHAR Signature[256];
  1566. } DXVA_COPPSignature, *LPDXVA_COPPSignature;
  1567.  
  1568. #define DXVA_COPPSequenceStartFnCode 0x03
  1569. // lpInputData => DXVA_COPPSignature*
  1570. // lpOuputData => NULL
  1571.  
  1572.  
  1573.  
  1574. // -------------------------------------------------------------------------
  1575. // COPPCommand
  1576. // -------------------------------------------------------------------------
  1577. typedef struct _DXVA_COPPCommand {
  1578. GUID macKDI; // 16 bytes
  1579. GUID guidCommandID; // 16 bytes
  1580. ULONG dwSequence; // 4 bytes
  1581. ULONG cbSizeData; // 4 bytes
  1582. UCHAR CommandData[4056]; // 4056 bytes (4056+4+4+16+16 = 4096)
  1583. } DXVA_COPPCommand, *LPDXVA_COPPCommand;
  1584.  
  1585. #define DXVA_COPPCommandFnCode 0x04
  1586. // lpInputData => DXVA_COPPCommand*
  1587. // lpOuputData => NULL
  1588.  
  1589.  
  1590. DEFINE_GUID(DXVA_COPPSetProtectionLevel,
  1591. 0x9bb9327c,0x4eb5,0x4727,0x9f,0x00,0xb4,0x2b,0x09,0x19,0xc0,0xda);
  1592.  
  1593. typedef struct _DXVA_COPPSetProtectionLevelCmdData {
  1594. ULONG ProtType;
  1595. ULONG ProtLevel;
  1596. ULONG ExtendedInfoChangeMask;
  1597. ULONG ExtendedInfoData;
  1598. } DXVA_COPPSetProtectionLevelCmdData;
  1599.  
  1600. typedef enum _COPP_DPCP_Protection_Level {
  1601. COPP_DPCP_Level0 = 0,
  1602. COPP_DPCP_LevelMin = COPP_DPCP_Level0,
  1603. COPP_DPCP_Level1 = 1,
  1604. COPP_DPCP_LevelMax = COPP_DPCP_Level1,
  1605. COPP_DPCP_ForceDWORD = 0x7fffffff
  1606. } COPP_DPCP_Protection_Level;
  1607.  
  1608. // Set the HDCP protection level - (0 - 1 DWORD, 4 bytes)
  1609.  
  1610. typedef enum _COPP_HDCP_Protection_Level {
  1611. COPP_HDCP_Level0 = 0,
  1612. COPP_HDCP_LevelMin = COPP_HDCP_Level0,
  1613. COPP_HDCP_Level1 = 1,
  1614. COPP_HDCP_LevelMax = COPP_HDCP_Level1,
  1615. COPP_HDCP_ForceDWORD = 0x7fffffff
  1616. } COPP_HDCP_Protection_Level;
  1617.  
  1618. typedef enum _COPP_CGMSA_Protection_Level {
  1619. COPP_CGMSA_Disabled = 0,
  1620. COPP_CGMSA_LevelMin = COPP_CGMSA_Disabled,
  1621. COPP_CGMSA_CopyFreely = 1,
  1622. COPP_CGMSA_CopyNoMore = 2,
  1623. COPP_CGMSA_CopyOneGeneration = 3,
  1624. COPP_CGMSA_CopyNever = 4,
  1625. COPP_CGMSA_RedistributionControlRequired = 0x08,
  1626. COPP_CGMSA_LevelMax = (COPP_CGMSA_RedistributionControlRequired + COPP_CGMSA_CopyNever),
  1627. COPP_CGMSA_ForceDWORD = 0x7fffffff
  1628. } COPP_CGMSA_Protection_Level;
  1629.  
  1630. typedef enum _COPP_ACP_Protection_Level {
  1631. COPP_ACP_Level0 = 0,
  1632. COPP_ACP_LevelMin = COPP_ACP_Level0,
  1633. COPP_ACP_Level1 = 1,
  1634. COPP_ACP_Level2 = 2,
  1635. COPP_ACP_Level3 = 3,
  1636. COPP_ACP_LevelMax = COPP_ACP_Level3,
  1637. COPP_ACP_ForceDWORD = 0x7fffffff
  1638. } COPP_ACP_Protection_Level;
  1639.  
  1640. #define COPP_NoProtectionLevelAvailable -1
  1641. #define COPP_DefaultProtectionLevel 0
  1642.  
  1643.  
  1644. //
  1645. // Bit flags of possible protection types. Note that it is possible to apply
  1646. // different protection settings to a single connector.
  1647. //
  1648. enum {
  1649. COPP_ProtectionType_Unknown = 0x80000000,
  1650. COPP_ProtectionType_None = 0x00000000,
  1651. COPP_ProtectionType_HDCP = 0x00000001,
  1652. COPP_ProtectionType_ACP = 0x00000002,
  1653. COPP_ProtectionType_CGMSA = 0x00000004,
  1654. COPP_ProtectionType_DPCP = 0x00000010,
  1655. COPP_ProtectionType_Mask = 0x80000017,
  1656. COPP_ProtectionType_Reserved = 0x7FFFFFF8
  1657. };
  1658.  
  1659. DEFINE_GUID(DXVA_COPPSetSignaling,
  1660. 0x9a631a5, 0xd684, 0x4c60, 0x8e, 0x4d, 0xd3, 0xbb, 0xf, 0xb, 0xe3, 0xee);
  1661.  
  1662. typedef struct _DXVA_COPPSetSignalingCmdData {
  1663. ULONG ActiveTVProtectionStandard; // See COPP_TVProtectionStandard
  1664. ULONG AspectRatioChangeMask1;
  1665. ULONG AspectRatioData1; // See COPP_ImageAspectRatio_EN300294 for ETSI EN 300 294 values
  1666. ULONG AspectRatioChangeMask2;
  1667. ULONG AspectRatioData2;
  1668. ULONG AspectRatioChangeMask3;
  1669. ULONG AspectRatioData3;
  1670. ULONG ExtendedInfoChangeMask[4];
  1671. ULONG ExtendedInfoData[4];
  1672. ULONG Reserved;
  1673. } DXVA_COPPSetSignalingCmdData;
  1674.  
  1675. // Add format enum and data enum
  1676. typedef enum _COPP_TVProtectionStandard {
  1677. COPP_ProtectionStandard_Unknown = 0x80000000,
  1678. COPP_ProtectionStandard_None = 0x00000000,
  1679. COPP_ProtectionStandard_IEC61880_525i = 0x00000001,
  1680. COPP_ProtectionStandard_IEC61880_2_525i = 0x00000002,
  1681. COPP_ProtectionStandard_IEC62375_625p = 0x00000004,
  1682. COPP_ProtectionStandard_EIA608B_525 = 0x00000008,
  1683. COPP_ProtectionStandard_EN300294_625i = 0x00000010,
  1684. COPP_ProtectionStandard_CEA805A_TypeA_525p = 0x00000020,
  1685. COPP_ProtectionStandard_CEA805A_TypeA_750p = 0x00000040,
  1686. COPP_ProtectionStandard_CEA805A_TypeA_1125i = 0x00000080,
  1687. COPP_ProtectionStandard_CEA805A_TypeB_525p = 0x00000100,
  1688. COPP_ProtectionStandard_CEA805A_TypeB_750p = 0x00000200,
  1689. COPP_ProtectionStandard_CEA805A_TypeB_1125i = 0x00000400,
  1690. COPP_ProtectionStandard_ARIBTRB15_525i = 0x00000800,
  1691. COPP_ProtectionStandard_ARIBTRB15_525p = 0x00001000,
  1692. COPP_ProtectionStandard_ARIBTRB15_750p = 0x00002000,
  1693. COPP_ProtectionStandard_ARIBTRB15_1125i = 0x00004000,
  1694. COPP_ProtectionStandard_Mask = 0x80007FFF,
  1695. COPP_ProtectionStandard_Reserved = 0x7FFF8000
  1696. } COPP_TVProtectionStandard;
  1697.  
  1698. #define COPP_ImageAspectRatio_EN300294_Mask 0x00000007
  1699.  
  1700. typedef enum _COPP_ImageAspectRatio_EN300294 {
  1701. COPP_AspectRatio_EN300294_FullFormat4by3 = 0,
  1702. COPP_AspectRatio_EN300294_Box14by9Center = 1,
  1703. COPP_AspectRatio_EN300294_Box14by9Top = 2,
  1704. COPP_AspectRatio_EN300294_Box16by9Center = 3,
  1705. COPP_AspectRatio_EN300294_Box16by9Top = 4,
  1706. COPP_AspectRatio_EN300294_BoxGT16by9Center = 5,
  1707. COPP_AspectRatio_EN300294_FullFormat4by3ProtectedCenter = 6,
  1708. COPP_AspectRatio_EN300294_FullFormat16by9Anamorphic = 7,
  1709. COPP_AspectRatio_ForceDWORD = 0x7fffffff
  1710. } COPP_ImageAspectRatio_EN300294;
  1711.  
  1712.  
  1713. // -------------------------------------------------------------------------
  1714. // COPPQueryStatus
  1715. // -------------------------------------------------------------------------
  1716. typedef struct _DXVA_COPPStatusInput {
  1717. GUID rApp; // 16 bytes
  1718. GUID guidStatusRequestID;// 16 bytes
  1719. ULONG dwSequence; // 4 bytes
  1720. ULONG cbSizeData; // 4 bytes
  1721. UCHAR StatusData[4056]; // 4056 bytes (4056+4+4+16+16 = 4096)
  1722. } DXVA_COPPStatusInput, *LPDXVA_COPPStatusInput;
  1723.  
  1724. typedef struct _DXVA_COPPStatusOutput {
  1725. GUID macKDI; // 16 bytes
  1726. ULONG cbSizeData; // 4 bytes
  1727. UCHAR COPPStatus[4076]; // 4076 bytes (4076+16+4 = 4096)
  1728. } DXVA_COPPStatusOutput, *LPDXVA_COPPStatusOutput;
  1729.  
  1730. typedef enum _COPP_StatusFlags {
  1731. COPP_StatusNormal = 0x00,
  1732. COPP_LinkLost = 0x01,
  1733. COPP_RenegotiationRequired = 0x02,
  1734. COPP_StatusFlagsReserved = 0xFFFFFFFC
  1735. } COPP_StatusFlags;
  1736.  
  1737. typedef struct _DXVA_COPPStatusData {
  1738. GUID rApp;
  1739. ULONG dwFlags; // See COPP_StatusFlags above
  1740. ULONG dwData;
  1741. ULONG ExtendedInfoValidMask;
  1742. ULONG ExtendedInfoData;
  1743. } DXVA_COPPStatusData;
  1744.  
  1745. typedef struct _DXVA_COPPStatusDisplayData {
  1746. GUID rApp;
  1747. ULONG dwFlags; // See COPP_StatusFlags above
  1748. ULONG DisplayWidth;
  1749. ULONG DisplayHeight;
  1750. ULONG Format; // also contains extended color data
  1751. ULONG d3dFormat;
  1752. ULONG FreqNumerator;
  1753. ULONG FreqDenominator;
  1754. } DXVA_COPPStatusDisplayData;
  1755.  
  1756. typedef enum _COPP_StatusHDCPFlags {
  1757. COPP_HDCPRepeater = 0x01,
  1758. COPP_HDCPFlagsReserved = 0xFFFFFFFE
  1759. } COPP_StatusHDCPFlags;
  1760.  
  1761. typedef struct _DXVA_COPPStatusHDCPKeyData {
  1762. GUID rApp;
  1763. ULONG dwFlags; // See COPP_StatusFlags above
  1764. ULONG dwHDCPFlags; // See COPP_StatusHDCPFlags above
  1765. GUID BKey; // Lower 40 bits
  1766. GUID Reserved1;
  1767. GUID Reserved2;
  1768. } DXVA_COPPStatusHDCPKeyData;
  1769.  
  1770.  
  1771. #define DXVA_COPPQueryStatusFnCode 0x05
  1772. // lpInputData => DXVA_COPPStatusInput*
  1773. // lpOuputData => DXVA_COPPStatusOutput*
  1774.  
  1775.  
  1776. //
  1777. // Status GUID and enumerations
  1778. //
  1779. DEFINE_GUID(DXVA_COPPQueryConnectorType,
  1780. 0x81d0bfd5,0x6afe,0x48c2,0x99,0xc0,0x95,0xa0,0x8f,0x97,0xc5,0xda);
  1781.  
  1782. typedef enum _COPP_ConnectorType {
  1783. COPP_ConnectorType_Unknown = -1,
  1784. COPP_ConnectorType_VGA = 0,
  1785. COPP_ConnectorType_SVideo = 1,
  1786. COPP_ConnectorType_CompositeVideo = 2,
  1787. COPP_ConnectorType_ComponentVideo = 3,
  1788. COPP_ConnectorType_DVI = 4,
  1789. COPP_ConnectorType_HDMI = 5,
  1790. COPP_ConnectorType_LVDS = 6,
  1791. COPP_ConnectorType_TMDS = 7,
  1792. COPP_ConnectorType_D_JPN = 8,
  1793. COPP_ConnectorType_SDI = 9,
  1794. COPP_ConnectorType_DisplayPortExternal = 10,
  1795. COPP_ConnectorType_DisplayPortEmbedded = 11,
  1796. COPP_ConnectorType_UDIExternal = 12,
  1797. COPP_ConnectorType_UDIEmbedded = 13,
  1798. COPP_ConnectorType_Internal = 0x80000000, // can be combined with the other connector types
  1799. COPP_ConnectorType_ForceDWORD = 0x7fffffff /* force 32-bit size enum */
  1800. } COPP_ConnectorType;
  1801.  
  1802. DEFINE_GUID(DXVA_COPPQueryProtectionType,
  1803. 0x38f2a801,0x9a6c,0x48bb,0x91,0x07,0xb6,0x69,0x6e,0x6f,0x17,0x97);
  1804.  
  1805. DEFINE_GUID(DXVA_COPPQueryLocalProtectionLevel,
  1806. 0xb2075857,0x3eda,0x4d5d,0x88,0xdb,0x74,0x8f,0x8c,0x1a,0x05,0x49);
  1807.  
  1808. DEFINE_GUID(DXVA_COPPQueryGlobalProtectionLevel,
  1809. 0x1957210a,0x7766,0x452a,0xb9,0x9a,0xd2,0x7a,0xed,0x54,0xf0,0x3a);
  1810.  
  1811. DEFINE_GUID(DXVA_COPPQueryDisplayData,
  1812. 0xd7bf1ba3,0xad13,0x4f8e,0xaf,0x98,0x0d,0xcb,0x3c,0xa2,0x04,0xcc);
  1813.  
  1814. DEFINE_GUID(DXVA_COPPQueryHDCPKeyData,
  1815. 0xdb59d74, 0xa992, 0x492e, 0xa0, 0xbd, 0xc2, 0x3f, 0xda, 0x56, 0x4e, 0x0);
  1816.  
  1817. DEFINE_GUID(DXVA_COPPQueryBusData,
  1818. 0xc6f4d673, 0x6174, 0x4184, 0x8e, 0x35, 0xf6, 0xdb, 0x52, 0x0, 0xbc, 0xba);
  1819.  
  1820. typedef enum _COPP_BusType {
  1821. COPP_BusType_Unknown = 0,
  1822. COPP_BusType_PCI = 1,
  1823. COPP_BusType_PCIX = 2,
  1824. COPP_BusType_PCIExpress = 3,
  1825. COPP_BusType_AGP = 4,
  1826. COPP_BusType_Integrated = 0x80000000, // can be combined with the other bus types
  1827. COPP_BusType_ForceDWORD = 0x7fffffff /* force 32-bit size enum */
  1828. } COPP_BusType;
  1829.  
  1830. DEFINE_GUID(DXVA_COPPQuerySignaling,
  1831. 0x6629a591, 0x3b79, 0x4cf3, 0x92, 0x4a, 0x11, 0xe8, 0xe7, 0x81, 0x16, 0x71);
  1832.  
  1833. typedef struct _DXVA_COPPStatusSignalingCmdData {
  1834. GUID rApp;
  1835. ULONG dwFlags; // See COPP_StatusFlags above
  1836. ULONG AvailableTVProtectionStandards; // See COPP_TVProtectionStandard
  1837. ULONG ActiveTVProtectionStandard; // See COPP_TVProtectionStandard
  1838. ULONG TVType;
  1839. ULONG AspectRatioValidMask1;
  1840. ULONG AspectRatioData1; // See COPP_AspectRatio_EN300294 for ETSI EN 300 294 values
  1841. ULONG AspectRatioValidMask2;
  1842. ULONG AspectRatioData2;
  1843. ULONG AspectRatioValidMask3;
  1844. ULONG AspectRatioData3;
  1845. ULONG ExtendedInfoValidMask[4];
  1846. ULONG ExtendedInfoData[4];
  1847. } DXVA_COPPStatusSignalingCmdData;
  1848.  
  1849.  
  1850. #endif /* __DIRECTX_VA_CERTOUTPUTPROTECT__ */
  1851.  
  1852. #ifdef __cplusplus
  1853. }
  1854. #endif
  1855.  
  1856. #ifdef __DXVA1_DEPRECATED_INTERFACES__
  1857.  
  1858. #if !defined(__cplusplus)
  1859. #error C++ compiler required.
  1860. #endif
  1861.  
  1862. /* IID_IDirect3DVideoDevice9 */
  1863. DEFINE_GUID(IID_IDirect3DVideoDevice9,
  1864. 0x694036ac, 0x542a, 0x4a3a, 0x9a, 0x32, 0x53, 0xbc, 0x20, 0x0, 0x2c, 0x1b);
  1865.  
  1866. /* IID_IDirect3DDXVADevice9 */
  1867. DEFINE_GUID(IID_IDirect3DDXVADevice9,
  1868. 0x9f00c3d3, 0x5ab6, 0x465f, 0xb9, 0x55, 0x9f, 0xe, 0xbb, 0x2c, 0x56, 0x6);
  1869.  
  1870. interface IDirect3DVideoDevice9;
  1871. interface IDirect3DDXVADevice9;
  1872.  
  1873. typedef struct _DXVAUncompDataInfo
  1874. {
  1875. DWORD UncompWidth; /* Width of uncompressed data */
  1876. DWORD UncompHeight; /* Height of uncompressed data */
  1877. D3DFORMAT UncompFormat; /* Format of uncompressed data */
  1878. } DXVAUncompDataInfo;
  1879.  
  1880. typedef struct _DXVACompBufferInfo
  1881. {
  1882. DWORD NumCompBuffers; /* Number of buffers reqd for compressed data */
  1883. DWORD WidthToCreate; /* Width of surface to create */
  1884. DWORD HeightToCreate; /* Height of surface to create */
  1885. DWORD BytesToAllocate; /* Total number of bytes used by each surface */
  1886. DWORD Usage; /* Usage used to create the compressed buffer */
  1887. D3DPOOL Pool; /* Pool where the compressed buffer belongs */
  1888. D3DFORMAT Format; /* Format used to create the compressed buffer */
  1889. } DXVACompBufferInfo;
  1890.  
  1891. typedef struct _DXVABufferInfo
  1892. {
  1893. VOID* pCompSurface; /* Pointer to buffer containing compressed data */
  1894. DWORD DataOffset; /* Offset of relevant data from the beginning of buffer */
  1895. DWORD DataSize; /* Size of relevant data */
  1896. } DXVABufferInfo;
  1897.  
  1898. #undef INTERFACE
  1899. #define INTERFACE IDirect3DVideoDevice9
  1900.  
  1901. DECLARE_INTERFACE_(IDirect3DVideoDevice9, IUnknown)
  1902. {
  1903. /*** IUnknown methods ***/
  1904. STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;
  1905. STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1906. STDMETHOD_(ULONG,Release)(THIS) PURE;
  1907.  
  1908. /*** IDirect3DVideoDevice9 methods ***/
  1909. STDMETHOD(CreateSurface)(THIS_ UINT Width,UINT Height,UINT BackBuffers,
  1910. D3DFORMAT Format,D3DPOOL Pool,DWORD Usage,
  1911. IDirect3DSurface9** ppSurface,
  1912. HANDLE* pSharedHandle) PURE;
  1913. STDMETHOD(GetDXVACompressedBufferInfo)(THIS_ GUID* pGuid,
  1914. DXVAUncompDataInfo* pUncompData,
  1915. DWORD* pNumBuffers,
  1916. DXVACompBufferInfo* pBufferInfo) PURE;
  1917. STDMETHOD(GetDXVAGuids)(THIS_ DWORD* pNumGuids,GUID* pGuids) PURE;
  1918. STDMETHOD(GetDXVAInternalInfo)(THIS_ GUID* pGuid,
  1919. DXVAUncompDataInfo* pUncompData,
  1920. DWORD* pMemoryUsed) PURE;
  1921. STDMETHOD(GetUncompressedDXVAFormats)(THIS_ GUID* pGuid,
  1922. DWORD* pNumFormats,
  1923. D3DFORMAT* pFormats) PURE;
  1924. STDMETHOD(CreateDXVADevice)(THIS_ GUID* pGuid,
  1925. DXVAUncompDataInfo* pUncompData,
  1926. LPVOID pData,DWORD DataSize,
  1927. IDirect3DDXVADevice9** ppDXVADevice) PURE;
  1928. };
  1929.  
  1930. #undef INTERFACE
  1931. #define INTERFACE IDirect3DDXVADevice9
  1932.  
  1933. DECLARE_INTERFACE_(IDirect3DDXVADevice9, IUnknown)
  1934. {
  1935. /*** IUnknown methods ***/
  1936. STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;
  1937. STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1938. STDMETHOD_(ULONG,Release)(THIS) PURE;
  1939.  
  1940. /*** IDirect3DDXVADevice9 methods ***/
  1941. STDMETHOD(BeginFrame)(THIS_ IDirect3DSurface9* pDstSurface,
  1942. DWORD SizeInputData,VOID* pInputData,
  1943. DWORD* pSizeOutputData,VOID* pOutputData) PURE;
  1944. STDMETHOD(EndFrame)(THIS_ DWORD SizeMiscData,VOID* pMiscData) PURE;
  1945. STDMETHOD(Execute)(THIS_ DWORD FunctionNum,VOID* pInputData,
  1946. DWORD InputSize,VOID* OuputData,DWORD OutputSize,
  1947. DWORD NumBuffers,DXVABufferInfo* pBufferInfo) PURE;
  1948. STDMETHOD(QueryStatus)(THIS_ IDirect3DSurface9* pSurface,DWORD Flags) PURE;
  1949. };
  1950.  
  1951. #endif /* __DXVA1_DEPRECATED_INTERFACES__ */
  1952. #endif /* __DIRECTX_VA__ */
  1953.  
  1954.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement