Index: media/cdm/ppapi/cdm_wrapper.h |
diff --git a/media/cdm/ppapi/cdm_wrapper.h b/media/cdm/ppapi/cdm_wrapper.h |
deleted file mode 100644 |
index d7a86b3b7b37e663c4c8a1bf69e07960e82f22b4..0000000000000000000000000000000000000000 |
--- a/media/cdm/ppapi/cdm_wrapper.h |
+++ /dev/null |
@@ -1,316 +0,0 @@ |
-// Copyright 2013 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_CDM_PPAPI_CDM_WRAPPER_H_ |
-#define MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ |
- |
-#include <map> |
-#include <queue> |
-#include <string> |
- |
-#include "base/basictypes.h" |
-#include "media/cdm/api/content_decryption_module.h" |
-#include "media/cdm/ppapi/cdm_helpers.h" |
-#include "media/cdm/ppapi/supported_cdm_versions.h" |
-#include "ppapi/cpp/logging.h" |
- |
-namespace media { |
- |
-// CdmWrapper wraps different versions of ContentDecryptionModule interfaces and |
-// exposes a common interface to the caller. |
-// |
-// The caller should call CdmWrapper::Create() to create a CDM instance. |
-// CdmWrapper will first try to create a CDM instance that supports the latest |
-// CDM interface (ContentDecryptionModule). If such an instance cannot be |
-// created (e.g. an older CDM was loaded), CdmWrapper will try to create a CDM |
-// that supports an older version of CDM interface (e.g. |
-// ContentDecryptionModule_*). Internally CdmWrapper converts the CdmWrapper |
-// calls to corresponding ContentDecryptionModule calls. |
-// |
-// Note that CdmWrapper interface always reflects the latest state of content |
-// decryption related PPAPI APIs (e.g. pp::ContentDecryptor_Private). |
-// |
-// Since this file is highly templated and default implementations are short |
-// (just a shim layer in most cases), everything is done in this header file. |
-class CdmWrapper { |
- public: |
- static CdmWrapper* Create(const char* key_system, |
- uint32_t key_system_size, |
- GetCdmHostFunc get_cdm_host_func, |
- void* user_data); |
- |
- virtual ~CdmWrapper() {}; |
- |
- virtual void Initialize(bool allow_distinctive_identifier, |
- bool allow_persistent_state) = 0; |
- virtual void SetServerCertificate(uint32_t promise_id, |
- const uint8_t* server_certificate_data, |
- uint32_t server_certificate_data_size) = 0; |
- virtual void CreateSessionAndGenerateRequest(uint32_t promise_id, |
- cdm::SessionType session_type, |
- cdm::InitDataType init_data_type, |
- const uint8_t* init_data, |
- uint32_t init_data_size) = 0; |
- virtual void LoadSession(uint32_t promise_id, |
- cdm::SessionType session_type, |
- const char* session_id, |
- uint32_t session_id_size) = 0; |
- virtual void UpdateSession(uint32_t promise_id, |
- const char* session_id, |
- uint32_t session_id_size, |
- const uint8_t* response, |
- uint32_t response_size) = 0; |
- virtual void CloseSession(uint32_t promise_id, |
- const char* session_id, |
- uint32_t session_id_size) = 0; |
- virtual void RemoveSession(uint32_t promise_id, |
- const char* session_id, |
- uint32_t session_id_size) = 0; |
- virtual void TimerExpired(void* context) = 0; |
- virtual cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer, |
- cdm::DecryptedBlock* decrypted_buffer) = 0; |
- virtual cdm::Status InitializeAudioDecoder( |
- const cdm::AudioDecoderConfig& audio_decoder_config) = 0; |
- virtual cdm::Status InitializeVideoDecoder( |
- const cdm::VideoDecoderConfig& video_decoder_config) = 0; |
- virtual void DeinitializeDecoder(cdm::StreamType decoder_type) = 0; |
- virtual void ResetDecoder(cdm::StreamType decoder_type) = 0; |
- virtual cdm::Status DecryptAndDecodeFrame( |
- const cdm::InputBuffer& encrypted_buffer, |
- cdm::VideoFrame* video_frame) = 0; |
- virtual cdm::Status DecryptAndDecodeSamples( |
- const cdm::InputBuffer& encrypted_buffer, |
- cdm::AudioFrames* audio_frames) = 0; |
- virtual void OnPlatformChallengeResponse( |
- const cdm::PlatformChallengeResponse& response) = 0; |
- virtual void OnQueryOutputProtectionStatus( |
- cdm::QueryResult result, |
- uint32_t link_mask, |
- uint32_t output_protection_mask) = 0; |
- |
- protected: |
- CdmWrapper() {} |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(CdmWrapper); |
-}; |
- |
-// Template class that does the CdmWrapper -> CdmInterface conversion. Default |
-// implementations are provided. Any methods that need special treatment should |
-// be specialized. |
-template <class CdmInterface> |
-class CdmWrapperImpl : public CdmWrapper { |
- public: |
- static CdmWrapper* Create(const char* key_system, |
- uint32_t key_system_size, |
- GetCdmHostFunc get_cdm_host_func, |
- void* user_data) { |
- void* cdm_instance = ::CreateCdmInstance( |
- CdmInterface::kVersion, key_system, key_system_size, get_cdm_host_func, |
- user_data); |
- if (!cdm_instance) |
- return NULL; |
- |
- return new CdmWrapperImpl<CdmInterface>( |
- static_cast<CdmInterface*>(cdm_instance)); |
- } |
- |
- ~CdmWrapperImpl() override { |
- cdm_->Destroy(); |
- } |
- |
- void Initialize(bool allow_distinctive_identifier, |
- bool allow_persistent_state) override { |
- cdm_->Initialize(allow_distinctive_identifier, allow_persistent_state); |
- } |
- |
- void SetServerCertificate( |
- uint32_t promise_id, |
- const uint8_t* server_certificate_data, |
- uint32_t server_certificate_data_size) override { |
- cdm_->SetServerCertificate( |
- promise_id, server_certificate_data, server_certificate_data_size); |
- } |
- |
- void CreateSessionAndGenerateRequest( |
- uint32_t promise_id, |
- cdm::SessionType session_type, |
- cdm::InitDataType init_data_type, |
- const uint8_t* init_data, |
- uint32_t init_data_size) override { |
- cdm_->CreateSessionAndGenerateRequest( |
- promise_id, session_type, init_data_type, init_data, init_data_size); |
- } |
- |
- void LoadSession(uint32_t promise_id, |
- cdm::SessionType session_type, |
- const char* session_id, |
- uint32_t session_id_size) override { |
- cdm_->LoadSession(promise_id, session_type, session_id, session_id_size); |
- } |
- |
- void UpdateSession(uint32_t promise_id, |
- const char* session_id, |
- uint32_t session_id_size, |
- const uint8_t* response, |
- uint32_t response_size) override { |
- cdm_->UpdateSession(promise_id, session_id, session_id_size, response, |
- response_size); |
- } |
- |
- void CloseSession(uint32_t promise_id, |
- const char* session_id, |
- uint32_t session_id_size) override { |
- cdm_->CloseSession(promise_id, session_id, session_id_size); |
- } |
- |
- void RemoveSession(uint32_t promise_id, |
- const char* session_id, |
- uint32_t session_id_size) override { |
- cdm_->RemoveSession(promise_id, session_id, session_id_size); |
- } |
- |
- void TimerExpired(void* context) override { |
- cdm_->TimerExpired(context); |
- } |
- |
- cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer, |
- cdm::DecryptedBlock* decrypted_buffer) override { |
- return cdm_->Decrypt(encrypted_buffer, decrypted_buffer); |
- } |
- |
- cdm::Status InitializeAudioDecoder( |
- const cdm::AudioDecoderConfig& audio_decoder_config) override { |
- return cdm_->InitializeAudioDecoder(audio_decoder_config); |
- } |
- |
- cdm::Status InitializeVideoDecoder( |
- const cdm::VideoDecoderConfig& video_decoder_config) override { |
- return cdm_->InitializeVideoDecoder(video_decoder_config); |
- } |
- |
- void DeinitializeDecoder(cdm::StreamType decoder_type) override { |
- cdm_->DeinitializeDecoder(decoder_type); |
- } |
- |
- void ResetDecoder(cdm::StreamType decoder_type) override { |
- cdm_->ResetDecoder(decoder_type); |
- } |
- |
- cdm::Status DecryptAndDecodeFrame( |
- const cdm::InputBuffer& encrypted_buffer, |
- cdm::VideoFrame* video_frame) override { |
- return cdm_->DecryptAndDecodeFrame(encrypted_buffer, video_frame); |
- } |
- |
- cdm::Status DecryptAndDecodeSamples( |
- const cdm::InputBuffer& encrypted_buffer, |
- cdm::AudioFrames* audio_frames) override { |
- return cdm_->DecryptAndDecodeSamples(encrypted_buffer, audio_frames); |
- } |
- |
- void OnPlatformChallengeResponse( |
- const cdm::PlatformChallengeResponse& response) override { |
- cdm_->OnPlatformChallengeResponse(response); |
- } |
- |
- void OnQueryOutputProtectionStatus( |
- cdm::QueryResult result, |
- uint32_t link_mask, |
- uint32_t output_protection_mask) override { |
- cdm_->OnQueryOutputProtectionStatus(result, link_mask, |
- output_protection_mask); |
- } |
- |
- private: |
- CdmWrapperImpl(CdmInterface* cdm) : cdm_(cdm) { |
- PP_DCHECK(cdm_); |
- } |
- |
- CdmInterface* cdm_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CdmWrapperImpl); |
-}; |
- |
-// Overrides for the cdm::Host_7 methods. |
-// TODO(jrummell): Remove these once Host_7 interface is removed. |
- |
-template <> |
-void CdmWrapperImpl<cdm::ContentDecryptionModule_7>::Initialize( |
- bool allow_distinctive_identifier, |
- bool allow_persistent_state) { |
-} |
- |
-template <> |
-void CdmWrapperImpl<cdm::ContentDecryptionModule_7>:: |
- CreateSessionAndGenerateRequest(uint32_t promise_id, |
- cdm::SessionType session_type, |
- cdm::InitDataType init_data_type, |
- const uint8_t* init_data, |
- uint32_t init_data_size) { |
- std::string init_data_type_as_string = "unknown"; |
- switch (init_data_type) { |
- case cdm::kCenc: |
- init_data_type_as_string = "cenc"; |
- break; |
- case cdm::kKeyIds: |
- init_data_type_as_string = "keyids"; |
- break; |
- case cdm::kWebM: |
- init_data_type_as_string = "webm"; |
- break; |
- } |
- |
- cdm_->CreateSessionAndGenerateRequest( |
- promise_id, session_type, &init_data_type_as_string[0], |
- init_data_type_as_string.length(), init_data, init_data_size); |
-} |
- |
-CdmWrapper* CdmWrapper::Create(const char* key_system, |
- uint32_t key_system_size, |
- GetCdmHostFunc get_cdm_host_func, |
- void* user_data) { |
- static_assert(cdm::ContentDecryptionModule::kVersion == |
- cdm::ContentDecryptionModule_8::kVersion, |
- "update the code below"); |
- |
- // Ensure IsSupportedCdmInterfaceVersion() matches this implementation. |
- // Always update this DCHECK when updating this function. |
- // If this check fails, update this function and DCHECK or update |
- // IsSupportedCdmInterfaceVersion(). |
- PP_DCHECK(!IsSupportedCdmInterfaceVersion( |
- cdm::ContentDecryptionModule_8::kVersion + 1) && |
- IsSupportedCdmInterfaceVersion( |
- cdm::ContentDecryptionModule_8::kVersion) && |
- IsSupportedCdmInterfaceVersion( |
- cdm::ContentDecryptionModule_7::kVersion) && |
- !IsSupportedCdmInterfaceVersion( |
- cdm::ContentDecryptionModule_7::kVersion - 1)); |
- |
- // Try to create the CDM using the latest CDM interface version. |
- CdmWrapper* cdm_wrapper = |
- CdmWrapperImpl<cdm::ContentDecryptionModule>::Create( |
- key_system, key_system_size, get_cdm_host_func, user_data); |
- |
- // If |cdm_wrapper| is NULL, try to create the CDM using older supported |
- // versions of the CDM interface here. |
- if (!cdm_wrapper) { |
- cdm_wrapper = CdmWrapperImpl<cdm::ContentDecryptionModule_7>::Create( |
- key_system, key_system_size, get_cdm_host_func, user_data); |
- } |
- |
- return cdm_wrapper; |
-} |
- |
-// When updating the CdmAdapter, ensure you've updated the CdmWrapper to contain |
-// stub implementations for new or modified methods that the older CDM interface |
-// does not have. |
-// Also update supported_cdm_versions.h. |
-static_assert(cdm::ContentDecryptionModule::kVersion == |
- cdm::ContentDecryptionModule_8::kVersion, |
- "ensure cdm wrapper templates have old version support"); |
- |
-} // namespace media |
- |
-#endif // MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ |