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