| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_BASE_WIN_MEDIA_FOUNDATION_CDM_PROXY_H_ |
| #define MEDIA_BASE_WIN_MEDIA_FOUNDATION_CDM_PROXY_H_ |
| |
| #include <mfobjects.h> |
| #include <stdint.h> |
| #include <unknwn.h> |
| #include <windef.h> |
| |
| #include "base/memory/ref_counted.h" |
| |
| namespace media { |
| |
| // Interface for the media pipeline to get information from MediaFoundationCdm. |
| // TODO(xhwang): Investigate whether this class needs to be ref-counted. |
| class MediaFoundationCdmProxy |
| : public base::RefCountedThreadSafe<MediaFoundationCdmProxy> { |
| public: |
| // Used by MediaFoundationProtectionManager to get |
| // ABI::Windows::Media::Protection::IMediaProtectionPMPServer to implement |
| // ABI::Windows::Media::Protection::IMediaProtectionManager::get_Properties |
| // https://docs.microsoft.com/en-us/uwp/api/windows.media.protection.mediaprotectionmanager |
| virtual HRESULT GetPMPServer(REFIID riid, LPVOID* object_result) = 0; |
| |
| // Used by MediaFoundationSourceWrapper to implement |
| // IMFTrustedInput::GetInputTrustAuthority as in |
| // https://docs.microsoft.com/en-us/windows/win32/api/mfidl/nn-mfidl-imftrustedinput |
| // |
| // |content_init_data| is optional initialization data as in |
| // https://www.w3.org/TR/encrypted-media/#initialization-data |
| virtual HRESULT GetInputTrustAuthority(uint32_t stream_id, |
| uint32_t stream_count, |
| const uint8_t* content_init_data, |
| uint32_t content_init_data_size, |
| REFIID riid, |
| IUnknown** object_out) = 0; |
| |
| // When the media Renderer is suspended, `MediaFoundationSourceWrapper` |
| // provides its last set of key IDs using `SetLastKeyId()` when it is |
| // destructed. Then during resume, the new `MediaFoundationSourceWrapper` |
| // calls `RefreshTrustedInput()` to let the CDM use the key IDs information to |
| // perform some optimization. |
| virtual HRESULT SetLastKeyId(uint32_t stream_id, REFGUID key_id) = 0; |
| virtual HRESULT RefreshTrustedInput() = 0; |
| |
| // Used by MediaFoundationProtectionManager to implement |
| // IMFContentProtectionManager::BeginEnableContent as in |
| // https://msdn.microsoft.com/en-us/windows/ms694217(v=vs.71) |
| // |
| // `result` is used to obtain the result of an asynchronous operation as in |
| // https://docs.microsoft.com/en-us/windows/win32/api/mfobjects/nn-mfobjects-imfasyncresult |
| virtual HRESULT ProcessContentEnabler(IUnknown* request, |
| IMFAsyncResult* result) = 0; |
| |
| // Notify the CDM on DRM_E_TEE_INVALID_HWDRM_STATE (0x8004cd12), which happens |
| // in cases like OS Sleep. In this case, the CDM should close all sessions |
| // because they are in bad state. |
| virtual void OnHardwareContextReset() = 0; |
| |
| protected: |
| friend base::RefCountedThreadSafe<MediaFoundationCdmProxy>; |
| virtual ~MediaFoundationCdmProxy() = default; |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_BASE_WIN_MEDIA_FOUNDATION_CDM_PROXY_H_ |