summaryrefslogtreecommitdiffstats
path: root/dom/media/platforms/wmf/MFCDMExtra.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/platforms/wmf/MFCDMExtra.h')
-rw-r--r--dom/media/platforms/wmf/MFCDMExtra.h307
1 files changed, 307 insertions, 0 deletions
diff --git a/dom/media/platforms/wmf/MFCDMExtra.h b/dom/media/platforms/wmf/MFCDMExtra.h
new file mode 100644
index 0000000000..04e625d854
--- /dev/null
+++ b/dom/media/platforms/wmf/MFCDMExtra.h
@@ -0,0 +1,307 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef DOM_MEDIA_PLATFORM_WMF_MFCDMEXTRA_H
+#define DOM_MEDIA_PLATFORM_WMF_MFCDMEXTRA_H
+
+// Currently, we build with WINVER=0x601 (Win7), which means the declarations in
+// mfcontentdecryptionmodule.h will not be visible, which is only available on
+// Win10 (0x0A00). Also, we don't yet have the Fall Creators Update SDK
+// available on build machines, so even with updated WINVER, some of the
+// interfaces we need would not be present. To work around this, until the build
+// environment is updated, we include copies of the relevant classes/interfaces
+// we need.
+#if defined(WINVER) && WINVER >= 0x0A00
+# include <mfcontentdecryptionmodule.h>
+#else
+// For `IMFCdmSuspendNotify`
+# include "MFMediaEngineExtra.h"
+
+typedef enum MF_MEDIAKEYS_REQUIREMENT {
+ MF_MEDIAKEYS_REQUIREMENT_REQUIRED = 1,
+ MF_MEDIAKEYS_REQUIREMENT_OPTIONAL = 2,
+ MF_MEDIAKEYS_REQUIREMENT_NOT_ALLOWED = 3
+} MF_MEDIAKEYS_REQUIREMENT;
+
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY
+ MF_CONTENTDECRYPTIONMODULE_STOREPATH = {
+ {0x77d993b9,
+ 0xba61,
+ 0x4bb7,
+ {0x92, 0xc6, 0x18, 0xc8, 0x6a, 0x18, 0x9c, 0x06}},
+ 0x02};
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MF_EME_INITDATATYPES = {
+ {0x497d231b,
+ 0x4eb9,
+ 0x4df0,
+ {0xb4, 0x74, 0xb9, 0xaf, 0xeb, 0x0a, 0xdf, 0x38}},
+ PID_FIRST_USABLE + 0x00000001};
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MF_EME_DISTINCTIVEID = {
+ {0x7dc9c4a5,
+ 0x12be,
+ 0x497e,
+ {0x8b, 0xff, 0x9b, 0x60, 0xb2, 0xdc, 0x58, 0x45}},
+ PID_FIRST_USABLE + 0x00000002};
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MF_EME_PERSISTEDSTATE = {
+ {0x5d4df6ae,
+ 0x9af1,
+ 0x4e3d,
+ {0x95, 0x5b, 0x0e, 0x4b, 0xd2, 0x2f, 0xed, 0xf0}},
+ PID_FIRST_USABLE + 0x00000003};
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MF_EME_AUDIOCAPABILITIES = {
+ {0x980fbb84,
+ 0x297d,
+ 0x4ea7,
+ {0x89, 0x5f, 0xbc, 0xf2, 0x8a, 0x46, 0x28, 0x81}},
+ PID_FIRST_USABLE + 0x00000004};
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MF_EME_VIDEOCAPABILITIES = {
+ {0xb172f83d,
+ 0x30dd,
+ 0x4c10,
+ {0x80, 0x06, 0xed, 0x53, 0xda, 0x4d, 0x3b, 0xdb}},
+ PID_FIRST_USABLE + 0x00000005};
+EXTERN_C const DECLSPEC_SELECTANY PROPERTYKEY MF_EME_ROBUSTNESS = {
+ {0x9d3d2b9e,
+ 0x7023,
+ 0x4944,
+ {0xa8, 0xf5, 0xec, 0xca, 0x52, 0xa4, 0x69, 0x90}},
+ PID_FIRST_USABLE + 0x00000001};
+
+typedef enum MF_MEDIAKEYSESSION_TYPE {
+ MF_MEDIAKEYSESSION_TYPE_TEMPORARY = 0,
+ MF_MEDIAKEYSESSION_TYPE_PERSISTENT_LICENSE =
+ (MF_MEDIAKEYSESSION_TYPE_TEMPORARY + 1),
+ MF_MEDIAKEYSESSION_TYPE_PERSISTENT_RELEASE_MESSAGE =
+ (MF_MEDIAKEYSESSION_TYPE_PERSISTENT_LICENSE + 1),
+ MF_MEDIAKEYSESSION_TYPE_PERSISTENT_USAGE_RECORD =
+ (MF_MEDIAKEYSESSION_TYPE_PERSISTENT_RELEASE_MESSAGE + 1)
+} MF_MEDIAKEYSESSION_TYPE;
+
+typedef enum MF_MEDIAKEYSESSION_MESSAGETYPE {
+ MF_MEDIAKEYSESSION_MESSAGETYPE_LICENSE_REQUEST = 0,
+ MF_MEDIAKEYSESSION_MESSAGETYPE_LICENSE_RENEWAL = 1,
+ MF_MEDIAKEYSESSION_MESSAGETYPE_LICENSE_RELEASE = 2,
+ MF_MEDIAKEYSESSION_MESSAGETYPE_INDIVIDUALIZATION_REQUEST = 3
+} MF_MEDIAKEYSESSION_MESSAGETYPE;
+
+typedef enum MF_MEDIAKEY_STATUS {
+ MF_MEDIAKEY_STATUS_USABLE = 0,
+ MF_MEDIAKEY_STATUS_EXPIRED = (MF_MEDIAKEY_STATUS_USABLE + 1),
+ MF_MEDIAKEY_STATUS_OUTPUT_DOWNSCALED = (MF_MEDIAKEY_STATUS_EXPIRED + 1),
+ MF_MEDIAKEY_STATUS_OUTPUT_NOT_ALLOWED =
+ (MF_MEDIAKEY_STATUS_OUTPUT_DOWNSCALED + 1),
+ MF_MEDIAKEY_STATUS_STATUS_PENDING =
+ (MF_MEDIAKEY_STATUS_OUTPUT_NOT_ALLOWED + 1),
+ MF_MEDIAKEY_STATUS_INTERNAL_ERROR = (MF_MEDIAKEY_STATUS_STATUS_PENDING + 1),
+ MF_MEDIAKEY_STATUS_RELEASED = (MF_MEDIAKEY_STATUS_INTERNAL_ERROR + 1),
+ MF_MEDIAKEY_STATUS_OUTPUT_RESTRICTED = (MF_MEDIAKEY_STATUS_RELEASED + 1)
+} MF_MEDIAKEY_STATUS;
+
+typedef struct MFMediaKeyStatus {
+ BYTE* pbKeyId;
+ UINT cbKeyId;
+ MF_MEDIAKEY_STATUS eMediaKeyStatus;
+} MFMediaKeyStatus;
+
+EXTERN_GUID(MF_CONTENTDECRYPTIONMODULE_SERVICE, 0x15320c45, 0xff80, 0x484a,
+ 0x9d, 0xcb, 0xd, 0xf8, 0x94, 0xe6, 0x9a, 0x1);
+EXTERN_GUID(GUID_ObjectStream, 0x3e73735c, 0xe6c0, 0x481d, 0x82, 0x60, 0xee,
+ 0x5d, 0xb1, 0x34, 0x3b, 0x5f);
+EXTERN_GUID(GUID_ClassName, 0x77631a31, 0xe5e7, 0x4785, 0xbf, 0x17, 0x20, 0xf5,
+ 0x7b, 0x22, 0x48, 0x02);
+EXTERN_GUID(CLSID_EMEStoreActivate, 0x2df7b51e, 0x797b, 0x4d06, 0xbe, 0x71,
+ 0xd1, 0x4a, 0x52, 0xcf, 0x84, 0x21);
+
+# ifndef __IMFContentDecryptionModuleSessionCallbacks_INTERFACE_DEFINED__
+# define __IMFContentDecryptionModuleSessionCallbacks_INTERFACE_DEFINED__
+
+/* interface IMFContentDecryptionModuleSessionCallbacks */
+/* [unique][uuid][object] */
+
+EXTERN_C const IID IID_IMFContentDecryptionModuleSessionCallbacks;
+
+MIDL_INTERFACE("3f96ee40-ad81-4096-8470-59a4b770f89a")
+IMFContentDecryptionModuleSessionCallbacks : public IUnknown {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE KeyMessage(
+ /* [in] */ MF_MEDIAKEYSESSION_MESSAGETYPE messageType,
+ /* [size_is][in] */
+ __RPC__in_ecount_full(messageSize) const BYTE* message,
+ /* [in] */ DWORD messageSize,
+ /* [optional][in] */ __RPC__in LPCWSTR destinationURL) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE KeyStatusChanged(void) = 0;
+};
+
+# endif /* __IMFContentDecryptionModuleSessionCallbacks_INTERFACE_DEFINED__ \
+ */
+
+# ifndef __IMFContentDecryptionModuleSession_INTERFACE_DEFINED__
+# define __IMFContentDecryptionModuleSession_INTERFACE_DEFINED__
+
+/* interface IMFContentDecryptionModuleSession */
+/* [unique][uuid][object] */
+
+EXTERN_C const IID IID_IMFContentDecryptionModuleSession;
+
+MIDL_INTERFACE("4e233efd-1dd2-49e8-b577-d63eee4c0d33")
+IMFContentDecryptionModuleSession : public IUnknown {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE GetSessionId(
+ /* [out] */ __RPC__deref_out_opt LPWSTR * sessionId) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetExpiration(
+ /* [out] */ __RPC__out double* expiration) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetKeyStatuses(
+ /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(
+ *numKeyStatuses) MFMediaKeyStatus *
+ *keyStatuses,
+ /* [out] */ __RPC__out UINT * numKeyStatuses) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Load(
+ /* [in] */ __RPC__in LPCWSTR sessionId,
+ /* [out] */ __RPC__out BOOL * loaded) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GenerateRequest(
+ /* [in] */ __RPC__in LPCWSTR initDataType,
+ /* [size_is][in] */
+ __RPC__in_ecount_full(initDataSize) const BYTE* initData,
+ /* [in] */ DWORD initDataSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Update(
+ /* [size_is][in] */ __RPC__in_ecount_full(responseSize)
+ const BYTE* response,
+ /* [in] */ DWORD responseSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Close(void) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Remove(void) = 0;
+};
+
+# endif /* __IMFContentDecryptionModuleSession_INTERFACE_DEFINED__ */
+
+# ifndef __IMFPMPHostApp_INTERFACE_DEFINED__
+# define __IMFPMPHostApp_INTERFACE_DEFINED__
+
+/* interface IMFPMPHostApp */
+/* [uuid][object] */
+
+EXTERN_C const IID IID_IMFPMPHostApp;
+
+MIDL_INTERFACE("84d2054a-3aa1-4728-a3b0-440a418cf49c")
+IMFPMPHostApp : public IUnknown {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE LockProcess(void) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockProcess(void) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ActivateClassById(
+ /* [in] */ __RPC__in LPCWSTR id,
+ /* [unique][in] */ __RPC__in_opt IStream * pStream,
+ /* [in] */ __RPC__in REFIID riid,
+ /* [iid_is][out] */ __RPC__deref_out_opt void** ppv) = 0;
+};
+
+# endif /* __IMFPMPHostApp_INTERFACE_DEFINED__ */
+
+# ifndef __IMFContentDecryptionModule_INTERFACE_DEFINED__
+# define __IMFContentDecryptionModule_INTERFACE_DEFINED__
+
+/* interface IMFContentDecryptionModule */
+/* [unique][uuid][object] */
+
+EXTERN_C const IID IID_IMFContentDecryptionModule;
+
+MIDL_INTERFACE("87be986c-10be-4943-bf48-4b54ce1983a2")
+IMFContentDecryptionModule : public IUnknown {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE SetContentEnabler(
+ /* [in] */ __RPC__in_opt IMFContentEnabler * contentEnabler,
+ /* [in] */ __RPC__in_opt IMFAsyncResult * result) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSuspendNotify(
+ /* [out] */ __RPC__deref_out_opt IMFCdmSuspendNotify * *notify) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPMPHostApp(
+ /* [in] */ __RPC__in_opt IMFPMPHostApp * pmpHostApp) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSession(
+ /* [in] */ MF_MEDIAKEYSESSION_TYPE sessionType,
+ /* [in] */ __RPC__in_opt IMFContentDecryptionModuleSessionCallbacks *
+ callbacks,
+ /* [out] */ __RPC__deref_out_opt IMFContentDecryptionModuleSession *
+ *session) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetServerCertificate(
+ /* [size_is][in] */ __RPC__in_ecount_full(certificateSize)
+ const BYTE* certificate,
+ /* [in] */ DWORD certificateSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateTrustedInput(
+ /* [size_is][in] */ __RPC__in_ecount_full(contentInitDataSize)
+ const BYTE* contentInitData,
+ /* [in] */ DWORD contentInitDataSize,
+ /* [out] */ __RPC__deref_out_opt IMFTrustedInput** trustedInput) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetProtectionSystemIds(
+ /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*count)
+ GUID *
+ *systemIds,
+ /* [out] */ __RPC__out DWORD * count) = 0;
+};
+
+# endif /* __IMFContentDecryptionModule_INTERFACE_DEFINED__ */
+
+# ifndef __IMFContentDecryptionModuleAccess_INTERFACE_DEFINED__
+# define __IMFContentDecryptionModuleAccess_INTERFACE_DEFINED__
+
+/* interface IMFContentDecryptionModuleAccess */
+/* [unique][uuid][object] */
+
+EXTERN_C const IID IID_IMFContentDecryptionModuleAccess;
+
+MIDL_INTERFACE("a853d1f4-e2a0-4303-9edc-f1a68ee43136")
+IMFContentDecryptionModuleAccess : public IUnknown {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE CreateContentDecryptionModule(
+ /* [in] */ __RPC__in_opt IPropertyStore *
+ contentDecryptionModuleProperties,
+ /* [out] */ __RPC__deref_out_opt IMFContentDecryptionModule *
+ *contentDecryptionModule) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetConfiguration(
+ /* [out] */ __RPC__deref_out_opt IPropertyStore * *configuration) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetKeySystem(
+ /* [out] */ __RPC__deref_out_opt LPWSTR * keySystem) = 0;
+};
+# endif /* __IMFContentDecryptionModuleAccess_INTERFACE_DEFINED__ */
+
+# ifndef __IMFContentDecryptionModuleFactory_INTERFACE_DEFINED__
+# define __IMFContentDecryptionModuleFactory_INTERFACE_DEFINED__
+
+/* interface IMFContentDecryptionModuleFactory */
+/* [local][uuid][object] */
+
+EXTERN_C const IID IID_IMFContentDecryptionModuleFactory;
+MIDL_INTERFACE("7d5abf16-4cbb-4e08-b977-9ba59049943e")
+IMFContentDecryptionModuleFactory : public IUnknown {
+ public:
+ virtual BOOL STDMETHODCALLTYPE IsTypeSupported(
+ /* [in] */ LPCWSTR keySystem,
+ /* [optional][in] */ LPCWSTR contentType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateContentDecryptionModuleAccess(
+ /* [in] */ LPCWSTR keySystem,
+ /* [size_is][size_is][in] */ IPropertyStore * *configurations,
+ /* [in] */ DWORD numConfigurations,
+ /* [out] */ IMFContentDecryptionModuleAccess *
+ *contentDecryptionModuleAccess) = 0;
+};
+# endif /* __IMFContentDecryptionModuleFactory_INTERFACE_DEFINED__ */
+
+#endif // defined(WINVER) && WINVER >= 0x0A00
+
+#endif // DOM_MEDIA_PLATFORM_WMF_MFCDMEXTRA_H