From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- dom/media/platforms/wmf/MFCDMProxy.cpp | 74 ++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 dom/media/platforms/wmf/MFCDMProxy.cpp (limited to 'dom/media/platforms/wmf/MFCDMProxy.cpp') diff --git a/dom/media/platforms/wmf/MFCDMProxy.cpp b/dom/media/platforms/wmf/MFCDMProxy.cpp new file mode 100644 index 0000000000..f460f5fb02 --- /dev/null +++ b/dom/media/platforms/wmf/MFCDMProxy.cpp @@ -0,0 +1,74 @@ +/* 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/. */ + +#include "MFCDMProxy.h" + +#include "MFMediaEngineUtils.h" + +namespace mozilla { + +using Microsoft::WRL::ComPtr; + +#define LOG(msg, ...) \ + MOZ_LOG(gMFMediaEngineLog, LogLevel::Debug, \ + ("MFCDMProxy=%p, " msg, this, ##__VA_ARGS__)) + +HRESULT MFCDMProxy::GetPMPServer(REFIID aRiid, LPVOID* aPMPServerOut) { + ComPtr cdmServices; + RETURN_IF_FAILED(mCDM.As(&cdmServices)); + RETURN_IF_FAILED(cdmServices->GetService(MF_CONTENTDECRYPTIONMODULE_SERVICE, + aRiid, aPMPServerOut)); + return S_OK; +} + +HRESULT MFCDMProxy::GetInputTrustAuthority(uint32_t aStreamId, + const uint8_t* aContentInitData, + uint32_t aContentInitDataSize, + REFIID aRiid, + IUnknown** aInputTrustAuthorityOut) { + if (mInputTrustAuthorities.count(aStreamId)) { + RETURN_IF_FAILED( + mInputTrustAuthorities[aStreamId].CopyTo(aInputTrustAuthorityOut)); + return S_OK; + } + + if (!mTrustedInput) { + RETURN_IF_FAILED(mCDM->CreateTrustedInput( + aContentInitData, aContentInitDataSize, &mTrustedInput)); + LOG("Created a trust input for stream %u", aStreamId); + } + + // GetInputTrustAuthority takes IUnknown* as the output. Using other COM + // interface will have a v-table mismatch issue. + ComPtr unknown; + RETURN_IF_FAILED( + mTrustedInput->GetInputTrustAuthority(aStreamId, aRiid, &unknown)); + + ComPtr inputTrustAuthority; + RETURN_IF_FAILED(unknown.As(&inputTrustAuthority)); + RETURN_IF_FAILED(unknown.CopyTo(aInputTrustAuthorityOut)); + + mInputTrustAuthorities[aStreamId] = inputTrustAuthority; + return S_OK; +} + +HRESULT MFCDMProxy::SetContentEnabler(IUnknown* aRequest, + IMFAsyncResult* aResult) { + LOG("SetContentEnabler"); + ComPtr contentEnabler; + RETURN_IF_FAILED(aRequest->QueryInterface(IID_PPV_ARGS(&contentEnabler))); + return mCDM->SetContentEnabler(contentEnabler.Get(), aResult); +} + +void MFCDMProxy::OnHardwareContextReset() { + LOG("OnHardwareContextReset"); + // Hardware context reset happens, all the crypto sessions are in invalid + // states. So drop everything here. + mTrustedInput.Reset(); + mInputTrustAuthorities.clear(); +} + +#undef LOG + +} // namespace mozilla -- cgit v1.2.3