| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ | 5 #ifndef MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ |
| 6 #define MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ | 6 #define MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <queue> | 9 #include <queue> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 static CdmWrapper* Create(const char* key_system, | 38 static CdmWrapper* Create(const char* key_system, |
| 39 uint32_t key_system_size, | 39 uint32_t key_system_size, |
| 40 GetCdmHostFunc get_cdm_host_func, | 40 GetCdmHostFunc get_cdm_host_func, |
| 41 void* user_data); | 41 void* user_data); |
| 42 | 42 |
| 43 virtual ~CdmWrapper() {}; | 43 virtual ~CdmWrapper() {}; |
| 44 | 44 |
| 45 virtual void SetServerCertificate(uint32_t promise_id, | 45 virtual void SetServerCertificate(uint32_t promise_id, |
| 46 const uint8_t* server_certificate_data, | 46 const uint8_t* server_certificate_data, |
| 47 uint32_t server_certificate_data_size) = 0; | 47 uint32_t server_certificate_data_size) = 0; |
| 48 virtual void CreateSession(uint32_t promise_id, | 48 virtual void CreateSessionAndGenerateRequest(uint32_t promise_id, |
| 49 const char* init_data_type, | 49 cdm::SessionType session_type, |
| 50 uint32_t init_data_type_size, | 50 const char* init_data_type, |
| 51 const uint8_t* init_data, | 51 uint32_t init_data_type_size, |
| 52 uint32_t init_data_size, | 52 const uint8_t* init_data, |
| 53 cdm::SessionType session_type) = 0; | 53 uint32_t init_data_size) = 0; |
| 54 virtual void LoadSession(uint32_t promise_id, | 54 virtual void LoadSession(uint32_t promise_id, |
| 55 cdm::SessionType session_type, |
| 55 const char* web_session_id, | 56 const char* web_session_id, |
| 56 uint32_t web_session_id_size) = 0; | 57 uint32_t web_session_id_size) = 0; |
| 57 virtual void UpdateSession(uint32_t promise_id, | 58 virtual void UpdateSession(uint32_t promise_id, |
| 58 const char* web_session_id, | 59 const char* web_session_id, |
| 59 uint32_t web_session_id_size, | 60 uint32_t web_session_id_size, |
| 60 const uint8_t* response, | 61 const uint8_t* response, |
| 61 uint32_t response_size) = 0; | 62 uint32_t response_size) = 0; |
| 62 virtual void CloseSession(uint32_t promise_id, | 63 virtual void CloseSession(uint32_t promise_id, |
| 63 const char* web_session_id, | 64 const char* web_session_id, |
| 64 uint32_t web_session_id_size) = 0; | 65 uint32_t web_session_id_size) = 0; |
| 65 virtual void RemoveSession(uint32_t promise_id, | 66 virtual void RemoveSession(uint32_t promise_id, |
| 66 const char* web_session_id, | 67 const char* web_session_id, |
| 67 uint32_t web_session_id_size) = 0; | 68 uint32_t web_session_id_size) = 0; |
| 68 virtual void GetUsableKeyIds(uint32_t promise_id, | |
| 69 const char* web_session_id, | |
| 70 uint32_t web_session_id_size) = 0; | |
| 71 virtual void TimerExpired(void* context) = 0; | 69 virtual void TimerExpired(void* context) = 0; |
| 72 virtual cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer, | 70 virtual cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer, |
| 73 cdm::DecryptedBlock* decrypted_buffer) = 0; | 71 cdm::DecryptedBlock* decrypted_buffer) = 0; |
| 74 virtual cdm::Status InitializeAudioDecoder( | 72 virtual cdm::Status InitializeAudioDecoder( |
| 75 const cdm::AudioDecoderConfig& audio_decoder_config) = 0; | 73 const cdm::AudioDecoderConfig& audio_decoder_config) = 0; |
| 76 virtual cdm::Status InitializeVideoDecoder( | 74 virtual cdm::Status InitializeVideoDecoder( |
| 77 const cdm::VideoDecoderConfig& video_decoder_config) = 0; | 75 const cdm::VideoDecoderConfig& video_decoder_config) = 0; |
| 78 virtual void DeinitializeDecoder(cdm::StreamType decoder_type) = 0; | 76 virtual void DeinitializeDecoder(cdm::StreamType decoder_type) = 0; |
| 79 virtual void ResetDecoder(cdm::StreamType decoder_type) = 0; | 77 virtual void ResetDecoder(cdm::StreamType decoder_type) = 0; |
| 80 virtual cdm::Status DecryptAndDecodeFrame( | 78 virtual cdm::Status DecryptAndDecodeFrame( |
| 81 const cdm::InputBuffer& encrypted_buffer, | 79 const cdm::InputBuffer& encrypted_buffer, |
| 82 cdm::VideoFrame* video_frame) = 0; | 80 cdm::VideoFrame* video_frame) = 0; |
| 83 virtual cdm::Status DecryptAndDecodeSamples( | 81 virtual cdm::Status DecryptAndDecodeSamples( |
| 84 const cdm::InputBuffer& encrypted_buffer, | 82 const cdm::InputBuffer& encrypted_buffer, |
| 85 cdm::AudioFrames* audio_frames) = 0; | 83 cdm::AudioFrames* audio_frames) = 0; |
| 86 virtual void OnPlatformChallengeResponse( | 84 virtual void OnPlatformChallengeResponse( |
| 87 const cdm::PlatformChallengeResponse& response) = 0; | 85 const cdm::PlatformChallengeResponse& response) = 0; |
| 88 virtual void OnQueryOutputProtectionStatus( | 86 virtual void OnQueryOutputProtectionStatus(uint32_t link_mask, |
| 89 uint32_t link_mask, | 87 uint32_t output_protection_mask, |
| 90 uint32_t output_protection_mask) = 0; | 88 uint32_t error_code) = 0; |
| 91 | 89 |
| 92 protected: | 90 protected: |
| 93 CdmWrapper() {} | 91 CdmWrapper() {} |
| 94 | 92 |
| 95 private: | 93 private: |
| 96 DISALLOW_COPY_AND_ASSIGN(CdmWrapper); | 94 DISALLOW_COPY_AND_ASSIGN(CdmWrapper); |
| 97 }; | 95 }; |
| 98 | 96 |
| 99 // Template class that does the CdmWrapper -> CdmInterface conversion. Default | 97 // Template class that does the CdmWrapper -> CdmInterface conversion. Default |
| 100 // implementations are provided. Any methods that need special treatment should | 98 // implementations are provided. Any methods that need special treatment should |
| (...skipping 20 matching lines...) Expand all Loading... |
| 121 } | 119 } |
| 122 | 120 |
| 123 virtual void SetServerCertificate( | 121 virtual void SetServerCertificate( |
| 124 uint32_t promise_id, | 122 uint32_t promise_id, |
| 125 const uint8_t* server_certificate_data, | 123 const uint8_t* server_certificate_data, |
| 126 uint32_t server_certificate_data_size) override { | 124 uint32_t server_certificate_data_size) override { |
| 127 cdm_->SetServerCertificate( | 125 cdm_->SetServerCertificate( |
| 128 promise_id, server_certificate_data, server_certificate_data_size); | 126 promise_id, server_certificate_data, server_certificate_data_size); |
| 129 } | 127 } |
| 130 | 128 |
| 131 virtual void CreateSession(uint32_t promise_id, | 129 virtual void CreateSessionAndGenerateRequest( |
| 132 const char* init_data_type, | 130 uint32_t promise_id, |
| 133 uint32_t init_data_type_size, | 131 cdm::SessionType session_type, |
| 134 const uint8_t* init_data, | 132 const char* init_data_type, |
| 135 uint32_t init_data_size, | 133 uint32_t init_data_type_size, |
| 136 cdm::SessionType session_type) override { | 134 const uint8_t* init_data, |
| 137 cdm_->CreateSession(promise_id, | 135 uint32_t init_data_size) override { |
| 138 init_data_type, | 136 cdm_->CreateSessionAndGenerateRequest(promise_id, session_type, |
| 139 init_data_type_size, | 137 init_data_type, init_data_type_size, |
| 140 init_data, | 138 init_data, init_data_size); |
| 141 init_data_size, | |
| 142 session_type); | |
| 143 } | 139 } |
| 144 | 140 |
| 145 virtual void LoadSession(uint32_t promise_id, | 141 virtual void LoadSession(uint32_t promise_id, |
| 142 cdm::SessionType session_type, |
| 146 const char* web_session_id, | 143 const char* web_session_id, |
| 147 uint32_t web_session_id_size) override { | 144 uint32_t web_session_id_size) override { |
| 148 cdm_->LoadSession(promise_id, web_session_id, web_session_id_size); | 145 cdm_->LoadSession(promise_id, session_type, web_session_id, |
| 146 web_session_id_size); |
| 149 } | 147 } |
| 150 | 148 |
| 151 virtual void UpdateSession(uint32_t promise_id, | 149 virtual void UpdateSession(uint32_t promise_id, |
| 152 const char* web_session_id, | 150 const char* web_session_id, |
| 153 uint32_t web_session_id_size, | 151 uint32_t web_session_id_size, |
| 154 const uint8_t* response, | 152 const uint8_t* response, |
| 155 uint32_t response_size) override { | 153 uint32_t response_size) override { |
| 156 cdm_->UpdateSession(promise_id, | 154 cdm_->UpdateSession(promise_id, |
| 157 web_session_id, | 155 web_session_id, |
| 158 web_session_id_size, | 156 web_session_id_size, |
| 159 response, | 157 response, |
| 160 response_size); | 158 response_size); |
| 161 } | 159 } |
| 162 | 160 |
| 163 virtual void CloseSession(uint32_t promise_id, | 161 virtual void CloseSession(uint32_t promise_id, |
| 164 const char* web_session_id, | 162 const char* web_session_id, |
| 165 uint32_t web_session_id_size) override { | 163 uint32_t web_session_id_size) override { |
| 166 cdm_->CloseSession(promise_id, web_session_id, web_session_id_size); | 164 cdm_->CloseSession(promise_id, web_session_id, web_session_id_size); |
| 167 } | 165 } |
| 168 | 166 |
| 169 virtual void RemoveSession(uint32_t promise_id, | 167 virtual void RemoveSession(uint32_t promise_id, |
| 170 const char* web_session_id, | 168 const char* web_session_id, |
| 171 uint32_t web_session_id_size) override { | 169 uint32_t web_session_id_size) override { |
| 172 cdm_->RemoveSession(promise_id, web_session_id, web_session_id_size); | 170 cdm_->RemoveSession(promise_id, web_session_id, web_session_id_size); |
| 173 } | 171 } |
| 174 | 172 |
| 175 virtual void GetUsableKeyIds(uint32_t promise_id, | |
| 176 const char* web_session_id, | |
| 177 uint32_t web_session_id_size) override { | |
| 178 cdm_->GetUsableKeyIds(promise_id, web_session_id, web_session_id_size); | |
| 179 } | |
| 180 | |
| 181 virtual void TimerExpired(void* context) override { | 173 virtual void TimerExpired(void* context) override { |
| 182 cdm_->TimerExpired(context); | 174 cdm_->TimerExpired(context); |
| 183 } | 175 } |
| 184 | 176 |
| 185 virtual cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer, | 177 virtual cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer, |
| 186 cdm::DecryptedBlock* decrypted_buffer) override { | 178 cdm::DecryptedBlock* decrypted_buffer) override { |
| 187 return cdm_->Decrypt(encrypted_buffer, decrypted_buffer); | 179 return cdm_->Decrypt(encrypted_buffer, decrypted_buffer); |
| 188 } | 180 } |
| 189 | 181 |
| 190 virtual cdm::Status InitializeAudioDecoder( | 182 virtual cdm::Status InitializeAudioDecoder( |
| (...skipping 24 matching lines...) Expand all Loading... |
| 215 const cdm::InputBuffer& encrypted_buffer, | 207 const cdm::InputBuffer& encrypted_buffer, |
| 216 cdm::AudioFrames* audio_frames) override { | 208 cdm::AudioFrames* audio_frames) override { |
| 217 return cdm_->DecryptAndDecodeSamples(encrypted_buffer, audio_frames); | 209 return cdm_->DecryptAndDecodeSamples(encrypted_buffer, audio_frames); |
| 218 } | 210 } |
| 219 | 211 |
| 220 virtual void OnPlatformChallengeResponse( | 212 virtual void OnPlatformChallengeResponse( |
| 221 const cdm::PlatformChallengeResponse& response) override { | 213 const cdm::PlatformChallengeResponse& response) override { |
| 222 cdm_->OnPlatformChallengeResponse(response); | 214 cdm_->OnPlatformChallengeResponse(response); |
| 223 } | 215 } |
| 224 | 216 |
| 225 virtual void OnQueryOutputProtectionStatus( | 217 virtual void OnQueryOutputProtectionStatus(uint32_t link_mask, |
| 226 uint32_t link_mask, | 218 uint32_t output_protection_mask, |
| 227 uint32_t output_protection_mask) override { | 219 uint32_t error_code) override { |
| 228 cdm_->OnQueryOutputProtectionStatus(link_mask, output_protection_mask); | 220 cdm_->OnQueryOutputProtectionStatus(link_mask, output_protection_mask, |
| 221 error_code); |
| 229 } | 222 } |
| 230 | 223 |
| 231 private: | 224 private: |
| 232 CdmWrapperImpl(CdmInterface* cdm) : cdm_(cdm) { | 225 CdmWrapperImpl(CdmInterface* cdm) : cdm_(cdm) { |
| 233 PP_DCHECK(cdm_); | 226 PP_DCHECK(cdm_); |
| 234 } | 227 } |
| 235 | 228 |
| 236 CdmInterface* cdm_; | 229 CdmInterface* cdm_; |
| 237 | 230 |
| 238 DISALLOW_COPY_AND_ASSIGN(CdmWrapperImpl); | 231 DISALLOW_COPY_AND_ASSIGN(CdmWrapperImpl); |
| 239 }; | 232 }; |
| 240 | 233 |
| 234 // Overrides for the cdm::Host_6 methods. |
| 235 // TODO(jrummell): Remove these once Host_6 interface is removed. |
| 236 |
| 237 template <> |
| 238 void CdmWrapperImpl<cdm::ContentDecryptionModule_6>:: |
| 239 CreateSessionAndGenerateRequest(uint32_t promise_id, |
| 240 cdm::SessionType session_type, |
| 241 const char* init_data_type, |
| 242 uint32_t init_data_type_size, |
| 243 const uint8_t* init_data, |
| 244 uint32_t init_data_size) { |
| 245 cdm_->CreateSession(promise_id, init_data_type, init_data_type_size, |
| 246 init_data, init_data_size, session_type); |
| 247 } |
| 248 |
| 249 template <> |
| 250 void CdmWrapperImpl<cdm::ContentDecryptionModule_6>::LoadSession( |
| 251 uint32_t promise_id, |
| 252 cdm::SessionType session_type, |
| 253 const char* web_session_id, |
| 254 uint32_t web_session_id_size) { |
| 255 cdm_->LoadSession(promise_id, web_session_id, web_session_id_size); |
| 256 } |
| 257 |
| 258 template <> |
| 259 void CdmWrapperImpl<cdm::ContentDecryptionModule_6>:: |
| 260 OnQueryOutputProtectionStatus(uint32_t link_mask, |
| 261 uint32_t output_protection_mask, |
| 262 uint32_t error_code) { |
| 263 cdm_->OnQueryOutputProtectionStatus(link_mask, output_protection_mask); |
| 264 } |
| 265 |
| 241 CdmWrapper* CdmWrapper::Create(const char* key_system, | 266 CdmWrapper* CdmWrapper::Create(const char* key_system, |
| 242 uint32_t key_system_size, | 267 uint32_t key_system_size, |
| 243 GetCdmHostFunc get_cdm_host_func, | 268 GetCdmHostFunc get_cdm_host_func, |
| 244 void* user_data) { | 269 void* user_data) { |
| 245 COMPILE_ASSERT(cdm::ContentDecryptionModule::kVersion == | 270 COMPILE_ASSERT(cdm::ContentDecryptionModule::kVersion == |
| 246 cdm::ContentDecryptionModule_6::kVersion, | 271 cdm::ContentDecryptionModule_7::kVersion, |
| 247 update_code_below); | 272 update_code_below); |
| 248 | 273 |
| 249 // Ensure IsSupportedCdmInterfaceVersion() matches this implementation. | 274 // Ensure IsSupportedCdmInterfaceVersion() matches this implementation. |
| 250 // Always update this DCHECK when updating this function. | 275 // Always update this DCHECK when updating this function. |
| 251 // If this check fails, update this function and DCHECK or update | 276 // If this check fails, update this function and DCHECK or update |
| 252 // IsSupportedCdmInterfaceVersion(). | 277 // IsSupportedCdmInterfaceVersion(). |
| 253 PP_DCHECK( | 278 PP_DCHECK(!IsSupportedCdmInterfaceVersion( |
| 254 !IsSupportedCdmInterfaceVersion(cdm::ContentDecryptionModule::kVersion + | 279 cdm::ContentDecryptionModule_7::kVersion + 1) && |
| 255 1) && | 280 IsSupportedCdmInterfaceVersion( |
| 256 IsSupportedCdmInterfaceVersion(cdm::ContentDecryptionModule::kVersion) && | 281 cdm::ContentDecryptionModule_7::kVersion) && |
| 257 !IsSupportedCdmInterfaceVersion(cdm::ContentDecryptionModule::kVersion - | 282 IsSupportedCdmInterfaceVersion( |
| 258 1)); | 283 cdm::ContentDecryptionModule_6::kVersion) && |
| 284 !IsSupportedCdmInterfaceVersion( |
| 285 cdm::ContentDecryptionModule_6::kVersion - 1)); |
| 259 | 286 |
| 260 // Try to create the CDM using the latest CDM interface version. | 287 // Try to create the CDM using the latest CDM interface version. |
| 261 CdmWrapper* cdm_wrapper = | 288 CdmWrapper* cdm_wrapper = |
| 262 CdmWrapperImpl<cdm::ContentDecryptionModule>::Create( | 289 CdmWrapperImpl<cdm::ContentDecryptionModule>::Create( |
| 263 key_system, key_system_size, get_cdm_host_func, user_data); | 290 key_system, key_system_size, get_cdm_host_func, user_data); |
| 264 | 291 |
| 265 // If |cdm_wrapper| is NULL, try to create the CDM using older supported | 292 // If |cdm_wrapper| is NULL, try to create the CDM using older supported |
| 266 // versions of the CDM interface here. | 293 // versions of the CDM interface here. |
| 294 if (!cdm_wrapper) { |
| 295 cdm_wrapper = CdmWrapperImpl<cdm::ContentDecryptionModule_6>::Create( |
| 296 key_system, key_system_size, get_cdm_host_func, user_data); |
| 297 } |
| 267 | 298 |
| 268 return cdm_wrapper; | 299 return cdm_wrapper; |
| 269 } | 300 } |
| 270 | 301 |
| 271 // When updating the CdmAdapter, ensure you've updated the CdmWrapper to contain | 302 // When updating the CdmAdapter, ensure you've updated the CdmWrapper to contain |
| 272 // stub implementations for new or modified methods that the older CDM interface | 303 // stub implementations for new or modified methods that the older CDM interface |
| 273 // does not have. | 304 // does not have. |
| 274 // Also update supported_cdm_versions.h. | 305 // Also update supported_cdm_versions.h. |
| 275 COMPILE_ASSERT(cdm::ContentDecryptionModule::kVersion == | 306 COMPILE_ASSERT(cdm::ContentDecryptionModule::kVersion == |
| 276 cdm::ContentDecryptionModule_6::kVersion, | 307 cdm::ContentDecryptionModule_7::kVersion, |
| 277 ensure_cdm_wrapper_templates_have_old_version_support); | 308 ensure_cdm_wrapper_templates_have_old_version_support); |
| 278 | 309 |
| 279 } // namespace media | 310 } // namespace media |
| 280 | 311 |
| 281 #endif // MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ | 312 #endif // MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ |
| OLD | NEW |