1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "WMFClearKeyInputTrustAuthority.h"
10 #include "WMFClearKeyActivate.h"
11 #include "WMFClearKeyCDM.h"
12 // #include "WMFClearKeyDecryptor.h"
13 #include "WMFClearKeyUtils.h"
14 #include "WMFClearKeyOutputPolicy.h"
18 using Microsoft::WRL::ComPtr
;
19 using Microsoft::WRL::MakeAndInitialize
;
21 HRESULT
WMFClearKeyInputTrustAuthority::RuntimeClassInitialize(
22 UINT32 aStreamId
, SessionManagerWrapper
* aSessionManager
) {
24 mSessionManager
= aSessionManager
;
28 STDMETHODIMP
WMFClearKeyInputTrustAuthority::GetDecrypter(REFIID aRiid
,
31 ComPtr
<IMFTransform
> decryptor
;
32 // TODO : As currently we are still not able to make decryption working in the
33 // media foundation pipeline, we will finish the implementation for
34 // WMFClearKeyDecryptor later.
35 // RETURN_IF_FAILED((MakeAndInitialize<WMFClearKeyDecryptor, IMFTransform>(
36 // &decryptor, mSessionManager)));
37 RETURN_IF_FAILED(decryptor
.CopyTo(aRiid
, aPpv
));
41 STDMETHODIMP
WMFClearKeyInputTrustAuthority::RequestAccess(
42 MFPOLICYMANAGER_ACTION aAction
, IMFActivate
** aContentEnablerActivate
) {
43 ENTRY_LOG_ARGS("aAction=%d", aAction
);
44 // The ITA only allows the PLAY, EXTRACT and NO actions
45 // NOTE: Topology created only on the basis of EXTRACT or NO action will NOT
47 if (PEACTION_EXTRACT
== aAction
|| PEACTION_NO
== aAction
) {
50 if (PEACTION_PLAY
!= aAction
) {
51 ENTRY_LOG_ARGS("Unsupported action");
52 return MF_E_ITA_UNSUPPORTED_ACTION
;
54 ComPtr
<IMFActivate
> activate
;
55 RETURN_IF_FAILED(MakeAndInitialize
<WMFClearKeyActivate
>(&activate
));
56 *aContentEnablerActivate
= activate
.Detach();
60 STDMETHODIMP
WMFClearKeyInputTrustAuthority::GetPolicy(
61 MFPOLICYMANAGER_ACTION aAction
, IMFOutputPolicy
** aPolicy
) {
63 // For testing purpose, we don't need to set the output policy/
68 STDMETHODIMP
WMFClearKeyInputTrustAuthority::BindAccess(
69 MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS
* aParams
) {
71 if (aParams
== nullptr || aParams
->dwVer
!= 0) {
74 for (DWORD i
= 0; i
< aParams
->cActions
; ++i
) {
75 MFPOLICYMANAGER_ACTION action
= aParams
->rgOutputActions
[i
].Action
;
76 if (action
!= PEACTION_PLAY
&& action
!= PEACTION_EXTRACT
&&
77 action
!= PEACTION_NO
) {
78 ENTRY_LOG_ARGS("Unexpected action!");
79 return MF_E_UNEXPECTED
;
85 STDMETHODIMP
WMFClearKeyInputTrustAuthority::UpdateAccess(
86 MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS
* aParams
) {
88 return BindAccess(aParams
);
91 STDMETHODIMP
WMFClearKeyInputTrustAuthority::Reset() {
96 STDMETHODIMP
WMFClearKeyInputTrustAuthority::GetShutdownStatus(
97 MFSHUTDOWN_STATUS
* aStatus
) {
99 // https://learn.microsoft.com/en-us/windows/win32/api/mfidl/nf-mfidl-imfshutdown-getshutdownstatus#return-value
100 if (mSessionManager
->IsShutdown()) {
101 return MF_E_INVALIDREQUEST
;
106 STDMETHODIMP
WMFClearKeyInputTrustAuthority::Shutdown() {
108 if (mSessionManager
->IsShutdown()) {
109 return MF_E_SHUTDOWN
;
111 mSessionManager
->Shutdown();
115 } // namespace mozilla