opmapi.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef _INC_OPMAPI
  7. #define _INC_OPMAPI
  8. #include <dxva2api.h>
  9. #define OPM_OMAC_SIZE 16
  10. #define OPM_CONFIGURE_SETTING_DATA_SIZE 4056
  11. #define OPM_REQUESTED_INFORMATION_SIZE 4076
  12. #define OPM_ENCRYPTED_INITIALIZATION_PARAMETERS_SIZE 256
  13. #define OPM_GET_INFORMATION_PARAMETERS_SIZE 4056
  14. #define OPM_HDCP_KEY_SELECTION_VECTOR_SIZE 5
  15. #define OPM_128_BIT_RANDOM_NUMBER_SIZE 16
  16. #define OPM_CGMSA_OFF 0x00
  17. #define OPM_CGMSA_COPY_FREELY 0x01
  18. #define OPM_CGMSA_COPY_NO_MORE 0x02
  19. #define OPM_CGMSA_COPY_ONE_GENERATION 0x03
  20. #define OPM_CGMSA_COPY_NEVER 0x04
  21. #define OPM_CGMSA_REDISTRIBUTION_CONTROL_REQUIRED 0x08
  22. #define OPM_PROTECTION_STANDARD_OTHER 0x80000000
  23. #define OPM_PROTECTION_STANDARD_NONE 0x00000000
  24. #define OPM_PROTECTION_STANDARD_IEC61880_525I 0x00000001
  25. #define OPM_PROTECTION_STANDARD_IEC61880_2_525I 0x00000002
  26. #define OPM_PROTECTION_STANDARD_IEC62375_625P 0x00000004
  27. #define OPM_PROTECTION_STANDARD_EIA608B_525 0x00000008
  28. #define OPM_PROTECTION_STANDARD_EN300294_625I 0x00000010
  29. #define OPM_PROTECTION_STANDARD_CEA805A_TYPEA_525P 0x00000020
  30. #define OPM_PROTECTION_STANDARD_CEA805A_TYPEA_750P 0x00000040
  31. #define OPM_PROTECTION_STANDARD_CEA805A_TYPEA_1125I 0x00000080
  32. #define OPM_PROTECTION_STANDARD_CEA805A_TYPEB_525P 0x00000100
  33. #define OPM_PROTECTION_STANDARD_CEA805A_TYPEB_750P 0x00000200
  34. #define OPM_PROTECTION_STANDARD_CEA805A_TYPEB_1125I 0x00000400
  35. #define OPM_PROTECTION_STANDARD_ARIBTRB15_525I 0x00000800
  36. #define OPM_PROTECTION_STANDARD_ARIBTRB15_525P 0x00001000
  37. #define OPM_PROTECTION_STANDARD_ARIBTRB15_750P 0x00002000
  38. #define OPM_PROTECTION_STANDARD_ARIBTRB15_1125I 0x00004000
  39. #ifdef __cplusplus
  40. extern "C" {
  41. #endif
  42. typedef enum _OPM_VIDEO_OUTPUT_SEMANTICS {
  43. OPM_VOS_COPP_SEMANTICS = 0,
  44. OPM_VOS_OPM_SEMANTICS = 1
  45. } OPM_VIDEO_OUTPUT_SEMANTICS;
  46. typedef enum _OPM_ACP_PROTECTION_LEVEL {
  47. OPM_ACP_OFF = 0,
  48. OPM_ACP_LEVEL_ONE = 1,
  49. OPM_ACP_LEVEL_TWO = 2,
  50. OPM_ACP_LEVEL_THREE = 3,
  51. OPM_ACP_FORCE_ULONG = 0x7fffffff
  52. } OPM_ACP_PROTECTION_LEVEL;
  53. typedef enum _OPM_DPCP_PROTECTION_LEVEL {
  54. OPM_DPCP_OFF = 0,
  55. OPM_DPCP_ON = 1,
  56. OPM_DPCP_FORCE_ULONG = 0x7fffffff
  57. } OPM_DPCP_PROTECTION_LEVEL;
  58. typedef enum _OPM_HDCP_PROTECTION_LEVEL {
  59. OPM_HDCP_OFF = 0,
  60. OPM_HDCP_ON = 1,
  61. OPM_HDCP_FORCE_ULONG = 0x7fffffff
  62. } OPM_HDCP_PROTECTION_LEVEL;
  63. typedef enum _OPM_IMAGE_ASPECT_RATIO_EN300294 {
  64. OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_4_BY_3 = 0,
  65. OPM_ASPECT_RATIO_EN300294_BOX_14_BY_9_CENTER = 1,
  66. OPM_ASPECT_RATIO_EN300294_BOX_14_BY_9_TOP = 2,
  67. OPM_ASPECT_RATIO_EN300294_BOX_16_BY_9_CENTER = 3,
  68. OPM_ASPECT_RATIO_EN300294_BOX_16_BY_9_TOP = 4,
  69. OPM_ASPECT_RATIO_EN300294_BOX_GT_16_BY_9_CENTER = 5,
  70. OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_4_BY_3_PROTECTED_CENTER = 6,
  71. OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_16_BY_9_ANAMORPHIC = 7,
  72. OPM_ASPECT_RATIO_FORCE_ULONG = 0x7FFFFFFF
  73. } OPM_IMAGE_ASPECT_RATIO_EN300294;
  74. typedef struct _OPM_OMAC {
  75. BYTE abOMAC[OPM_OMAC_SIZE];
  76. } OPM_OMAC;
  77. typedef struct _OPM_REQUESTED_INFORMATION {
  78. OPM_OMAC omac;
  79. ULONG cbRequestedInformationSize;
  80. BYTE abRequestedInformation[OPM_REQUESTED_INFORMATION_SIZE];
  81. } OPM_REQUESTED_INFORMATION;
  82. typedef struct _OPM_ENCRYPTED_INITIALIZATION_PARAMETERS {
  83. BYTE abEncryptedInitializationParameters[OPM_ENCRYPTED_INITIALIZATION_PARAMETERS_SIZE];
  84. } OPM_ENCRYPTED_INITIALIZATION_PARAMETERS;
  85. typedef struct _OPM_RANDOM_NUMBER {
  86. BYTE abRandomNumber[OPM_128_BIT_RANDOM_NUMBER_SIZE];
  87. } OPM_RANDOM_NUMBER;
  88. typedef struct _OPM_GET_INFO_PARAMETERS {
  89. OPM_OMAC omac;
  90. OPM_RANDOM_NUMBER rnRandomNumber;
  91. GUID guidInformation;
  92. ULONG ulSequenceNumber;
  93. ULONG cbParametersSize;
  94. BYTE abParameters[OPM_GET_INFORMATION_PARAMETERS_SIZE];
  95. } OPM_GET_INFO_PARAMETERS;
  96. typedef struct _OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS {
  97. OPM_RANDOM_NUMBER rnRandomNumber;
  98. GUID guidInformation;
  99. ULONG ulSequenceNumber;
  100. ULONG cbParametersSize;
  101. BYTE abParameters[OPM_GET_INFORMATION_PARAMETERS_SIZE];
  102. } OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS;
  103. typedef struct _OPM_ACP_AND_CGMSA_SIGNALING {
  104. OPM_RANDOM_NUMBER rnRandomNumber;
  105. ULONG ulStatusFlags;
  106. ULONG ulAvailableTVProtectionStandards;
  107. ULONG ulActiveTVProtectionStandard;
  108. ULONG ulReserved;
  109. ULONG ulAspectRatioValidMask1;
  110. ULONG ulAspectRatioData1;
  111. ULONG ulAspectRatioValidMask2;
  112. ULONG ulAspectRatioData2;
  113. ULONG ulAspectRatioValidMask3;
  114. ULONG ulAspectRatioData3;
  115. ULONG ulReserved2[4];
  116. ULONG ulReserved3[4];
  117. } OPM_ACP_AND_CGMSA_SIGNALING;
  118. typedef struct _OPM_ACTUAL_OUTPUT_FORMAT {
  119. OPM_RANDOM_NUMBER rnRandomNumber;
  120. ULONG ulStatusFlags;
  121. ULONG ulDisplayWidth;
  122. ULONG ulDisplayHeight;
  123. DXVA2_SampleFormat dsfSampleInterleaveFormat;
  124. D3DFORMAT d3dFormat;
  125. ULONG ulFrequencyNumerator;
  126. ULONG ulFrequencyDenominator;
  127. } OPM_ACTUAL_OUTPUT_FORMAT;
  128. typedef struct _OPM_CONFIGURE_PARAMETERS {
  129. OPM_OMAC omac;
  130. GUID guidSetting;
  131. ULONG ulSequenceNumber;
  132. ULONG cbParametersSize;
  133. BYTE abParameters[OPM_CONFIGURE_SETTING_DATA_SIZE];
  134. } OPM_CONFIGURE_PARAMETERS;
  135. typedef struct _OPM_HDCP_KEY_SELECTION_VECTOR {
  136. BYTE abKeySelectionVector[OPM_HDCP_KEY_SELECTION_VECTOR_SIZE];
  137. } OPM_HDCP_KEY_SELECTION_VECTOR;
  138. #define OPM_HDCP_FLAG_NONE 0x00
  139. #define OPM_HDCP_FLAG_REPEATER 0x01
  140. typedef struct _OPM_CONNECTED_HDCP_DEVICE_INFORMATION {
  141. OPM_RANDOM_NUMBER rnRandomNumber;
  142. ULONG ulStatusFlags;
  143. ULONG ulHDCPFlags;
  144. OPM_HDCP_KEY_SELECTION_VECTOR ksvB;
  145. BYTE Reserved[11];
  146. BYTE Reserved2[16];
  147. BYTE Reserved3[16];
  148. } OPM_CONNECTED_HDCP_DEVICE_INFORMATION;
  149. typedef struct _OPM_OUTPUT_ID_DATA {
  150. OPM_RANDOM_NUMBER rnRandomNumber;
  151. ULONG ulStatusFlags;
  152. UINT64 OutputId;
  153. } OPM_OUTPUT_ID_DATA;
  154. typedef struct _OPM_SET_ACP_AND_CGMSA_SIGNALING_PARAMETERS {
  155. ULONG ulNewTVProtectionStandard;
  156. ULONG ulAspectRatioChangeMask1;
  157. ULONG ulAspectRatioData1;
  158. ULONG ulAspectRatioChangeMask2;
  159. ULONG ulAspectRatioData2;
  160. ULONG ulAspectRatioChangeMask3;
  161. ULONG ulAspectRatioData3;
  162. ULONG ulReserved[4];
  163. ULONG ulReserved2[4];
  164. ULONG ulReserved3;
  165. } OPM_SET_ACP_AND_CGMSA_SIGNALING_PARAMETERS;
  166. typedef struct _OPM_SET_HDCP_SRM_PARAMETERS {
  167. ULONG ulSRMVersion;
  168. } OPM_SET_HDCP_SRM_PARAMETERS;
  169. typedef struct _OPM_SET_PROTECTION_LEVEL_PARAMETERS {
  170. ULONG ulProtectionType;
  171. ULONG ulProtectionLevel;
  172. ULONG Reserved;
  173. ULONG Reserved2;
  174. } OPM_SET_PROTECTION_LEVEL_PARAMETERS;
  175. typedef struct _OPM_STANDARD_INFORMATION {
  176. OPM_RANDOM_NUMBER rnRandomNumber;
  177. ULONG ulStatusFlags;
  178. ULONG ulInformation;
  179. ULONG ulReserved;
  180. ULONG ulReserved2;
  181. } OPM_STANDARD_INFORMATION;
  182. #ifdef __cplusplus
  183. }
  184. #endif
  185. #undef INTERFACE
  186. #define INTERFACE IOPMVideoOutput
  187. DECLARE_INTERFACE_(IOPMVideoOutput,IUnknown)
  188. {
  189. BEGIN_INTERFACE
  190. /* IUnknown methods */
  191. STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
  192. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  193. STDMETHOD_(ULONG, Release)(THIS) PURE;
  194. /* IOPMVideoOutput methods */
  195. STDMETHOD_(HRESULT,StartInitialization)(THIS_ OPM_RANDOM_NUMBER *prnRandomNumber,BYTE **ppbCertificate,ULONG *pulCertificateLength) PURE;
  196. STDMETHOD_(HRESULT,FinishInitialization)(THIS_ const OPM_ENCRYPTED_INITIALIZATION_PARAMETERS *pParameters) PURE;
  197. STDMETHOD_(HRESULT,GetInformation)(THIS_ const OPM_GET_INFO_PARAMETERS *pParameters,OPM_REQUESTED_INFORMATION *pRequestedInformation) PURE;
  198. STDMETHOD_(HRESULT,COPPCompatibleGetInformation)(THIS_ const OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS *pParameters,OPM_REQUESTED_INFORMATION *pRequestedInformation) PURE;
  199. STDMETHOD_(HRESULT,Configure)(THIS_ const OPM_CONFIGURE_PARAMETERS *pParameters,ULONG ulAdditionalParametersSize,const BYTE *pbAdditionalParameters) PURE;
  200. END_INTERFACE
  201. };
  202. #ifdef COBJMACROS
  203. #define IOPMVideoOutput_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
  204. #define IOPMVideoOutput_AddRef(This) (This)->lpVtbl->AddRef(This)
  205. #define IOPMVideoOutput_Release(This) (This)->lpVtbl->Release(This)
  206. #define IOPMVideoOutput_Configure(This,pParameters,ulAdditionalParametersSize,pbAdditionalParameters) (This)->lpVtbl->Configure(This,pParameters,ulAdditionalParametersSize,pbAdditionalParameters)
  207. #define IOPMVideoOutput_COPPCompatibleGetInformation(This,pParameters,pRequestedInformation) (This)->lpVtbl->COPPCompatibleGetInformation(This,pParameters,pRequestedInformation)
  208. #define IOPMVideoOutput_FinishInitialization(This,pParameters) (This)->lpVtbl->FinishInitialization(This,pParameters)
  209. #define IOPMVideoOutput_GetInformation(This,pParameters,pRequestedInformation) (This)->lpVtbl->GetInformation(This,pParameters,pRequestedInformation)
  210. #define IOPMVideoOutput_StartInitialization(This,prnRandomNumber,ppbCertificate,pulCertificateLength) (This)->lpVtbl->StartInitialization(This,prnRandomNumber,ppbCertificate,pulCertificateLength)
  211. #endif /*COBJMACROS*/
  212. #ifdef __cplusplus
  213. extern "C" {
  214. #endif
  215. HRESULT WINAPI OPMGetVideoOutputsFromHMONITOR(
  216. HMONITOR hMonitor,
  217. OPM_VIDEO_OUTPUT_SEMANTICS vos,
  218. ULONG *pulNumVideoOutputs,
  219. IOPMVideoOutput ***pppOPMVideoOutputArray
  220. );
  221. HRESULT WINAPI OPMGetVideoOutputsFromIDirect3DDevice9Object(
  222. IDirect3DDevice9 *pDirect3DDevice9,
  223. OPM_VIDEO_OUTPUT_SEMANTICS vos,
  224. ULONG *pulNumVideoOutputs,
  225. IOPMVideoOutput ***pppOPMVideoOutputArray
  226. );
  227. typedef struct _OPM_GET_CODEC_INFO_INFORMATION {
  228. OPM_RANDOM_NUMBER rnRandomNumber;
  229. DWORD Merit;
  230. } OPM_GET_CODEC_INFO_INFORMATION;
  231. typedef struct _OPM_GET_CODEC_INFO_PARAMETERS {
  232. DWORD cbVerifier;
  233. BYTE Verifier[OPM_GET_INFORMATION_PARAMETERS_SIZE - 4];
  234. } OPM_GET_CODEC_INFO_PARAMETERS;
  235. #ifdef __cplusplus
  236. }
  237. #endif
  238. #endif /*_INC_OPMAPI*/