Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: media/cdm/ppapi/cdm_wrapper.h

Issue 472493003: Convert between |init_data_type| and content type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nits. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 const char* web_session_id, 120 const char* web_session_id,
121 uint32_t web_session_id_size) = 0; 121 uint32_t web_session_id_size) = 0;
122 122
123 // cdm::Host_6 introduces InputBuffer_2 (aka InputBuffer). cdm::Host_4 and 123 // cdm::Host_6 introduces InputBuffer_2 (aka InputBuffer). cdm::Host_4 and
124 // cdm::Host_5 methods still use InputBuffer_1, so this helper function 124 // cdm::Host_5 methods still use InputBuffer_1, so this helper function
125 // converts InputBuffer_2 to InputBuffer_1. 125 // converts InputBuffer_2 to InputBuffer_1.
126 // TODO(jrummell): Remove these once Host_4 and Host_5 interfaces are removed. 126 // TODO(jrummell): Remove these once Host_4 and Host_5 interfaces are removed.
127 virtual void ConvertInputBuffer(const cdm::InputBuffer& v2, 127 virtual void ConvertInputBuffer(const cdm::InputBuffer& v2,
128 cdm::InputBuffer_1* v1) = 0; 128 cdm::InputBuffer_1* v1) = 0;
129 129
130 // Prior to CDM_6, |init_data_type| was a content type. This helper convererts
131 // an |init_data_type| to a content type.
132 // TODO(sandersd): Remove once Host_4 and Host_5 interfaces are removed.
133 virtual const char* ConvertInitDataTypeToContentType(
134 const char* init_data_type) const = 0;
135
130 protected: 136 protected:
131 CdmWrapper() {} 137 CdmWrapper() {}
132 138
133 private: 139 private:
134 DISALLOW_COPY_AND_ASSIGN(CdmWrapper); 140 DISALLOW_COPY_AND_ASSIGN(CdmWrapper);
135 }; 141 };
136 142
137 // Template class that does the CdmWrapper -> CdmInterface conversion. Default 143 // Template class that does the CdmWrapper -> CdmInterface conversion. Default
138 // implementations are provided. Any methods that need special treatment should 144 // implementations are provided. Any methods that need special treatment should
139 // be specialized. 145 // be specialized.
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 v1->data_offset = 0; 338 v1->data_offset = 0;
333 v1->key_id = v2.key_id; 339 v1->key_id = v2.key_id;
334 v1->key_id_size = v2.key_id_size; 340 v1->key_id_size = v2.key_id_size;
335 v1->iv = v2.iv; 341 v1->iv = v2.iv;
336 v1->iv_size = v2.iv_size; 342 v1->iv_size = v2.iv_size;
337 v1->subsamples = v2.subsamples; 343 v1->subsamples = v2.subsamples;
338 v1->num_subsamples = v2.num_subsamples; 344 v1->num_subsamples = v2.num_subsamples;
339 v1->timestamp = v2.timestamp; 345 v1->timestamp = v2.timestamp;
340 } 346 }
341 347
348 virtual const char* ConvertInitDataTypeToContentType(
349 const char* init_data_type) const {
350 if (!strcmp(init_data_type, "cenc"))
351 return "video/mp4";
352 if (!strcmp(init_data_type, "webm"))
353 return "video/webm";
354 return init_data_type;
355 }
356
342 private: 357 private:
343 CdmWrapperImpl(CdmInterface* cdm) : cdm_(cdm), next_session_id_(100) { 358 CdmWrapperImpl(CdmInterface* cdm) : cdm_(cdm), next_session_id_(100) {
344 PP_DCHECK(cdm_); 359 PP_DCHECK(cdm_);
345 } 360 }
346 361
347 CdmInterface* cdm_; 362 CdmInterface* cdm_;
348 363
349 std::map<uint32_t, uint32_t> promise_to_session_id_map_; 364 std::map<uint32_t, uint32_t> promise_to_session_id_map_;
350 uint32_t next_session_id_; 365 uint32_t next_session_id_;
351 std::map<std::string, uint32_t> web_session_to_session_id_map_; 366 std::map<std::string, uint32_t> web_session_to_session_id_map_;
352 367
353 std::map<uint32_t, std::string> promises_needing_usable_keys_event_; 368 std::map<uint32_t, std::string> promises_needing_usable_keys_event_;
354 369
355 DISALLOW_COPY_AND_ASSIGN(CdmWrapperImpl); 370 DISALLOW_COPY_AND_ASSIGN(CdmWrapperImpl);
356 }; 371 };
357 372
358 // Overrides for the cdm::Host_4 methods. Calls to CreateSession(), 373 // Overrides for the cdm::Host_4 methods. Calls to CreateSession(),
359 // LoadSession(), UpdateSession(), and ReleaseSession() pass in promise ids, 374 // LoadSession(), UpdateSession(), and ReleaseSession() pass in promise ids,
360 // but the CDM interface needs session ids. For create and load, we need to 375 // but the CDM interface needs session ids. For create and load, we need to
361 // create a new session_id to pass to the CDM. For update and release, we need 376 // create a new session_id to pass to the CDM. For update and release, we need
362 // to look up |web_session_id| and convert it into the existing |session_id|. 377 // to look up |web_session_id| and convert it into the existing |session_id|.
363 // Since the callbacks don't come through this interface, cdm_adapter needs to 378 // Since the callbacks don't come through this interface, cdm_adapter needs to
364 // create the mapping (and delete it on release). 379 // create the mapping (and delete it on release). Finally, for create, we need
380 // to translate |init_data_type| to a MIME type.
365 // TODO(jrummell): Remove these once Host_4 interface is removed. 381 // TODO(jrummell): Remove these once Host_4 interface is removed.
366 382
367 template <> 383 template <>
368 void CdmWrapperImpl<cdm::ContentDecryptionModule_4>::CreateSession( 384 void CdmWrapperImpl<cdm::ContentDecryptionModule_4>::CreateSession(
369 uint32_t promise_id, 385 uint32_t promise_id,
370 const char* init_data_type, 386 const char* init_data_type,
371 uint32_t init_data_type_size, 387 uint32_t init_data_type_size,
372 const uint8_t* init_data, 388 const uint8_t* init_data,
373 uint32_t init_data_size, 389 uint32_t init_data_size,
374 cdm::SessionType session_type) { 390 cdm::SessionType session_type) {
375 uint32_t session_id = CreateSessionId(); 391 uint32_t session_id = CreateSessionId();
376 RegisterPromise(session_id, promise_id); 392 RegisterPromise(session_id, promise_id);
377 cdm_->CreateSession(session_id, 393 cdm_->CreateSession(session_id,
378 init_data_type, 394 ConvertInitDataTypeToContentType(init_data_type),
379 init_data_type_size, 395 init_data_type_size,
380 init_data, 396 init_data,
381 init_data_size); 397 init_data_size);
382 } 398 }
383 399
384 template <> 400 template <>
385 void CdmWrapperImpl<cdm::ContentDecryptionModule_4>::LoadSession( 401 void CdmWrapperImpl<cdm::ContentDecryptionModule_4>::LoadSession(
386 uint32_t promise_id, 402 uint32_t promise_id,
387 const char* web_session_id, 403 const char* web_session_id,
388 uint32_t web_session_id_size) { 404 uint32_t web_session_id_size) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 cdm::AudioFrames* audio_frames) { 481 cdm::AudioFrames* audio_frames) {
466 cdm::InputBuffer_1 buffer; 482 cdm::InputBuffer_1 buffer;
467 ConvertInputBuffer(encrypted_buffer, &buffer); 483 ConvertInputBuffer(encrypted_buffer, &buffer);
468 return cdm_->DecryptAndDecodeSamples(buffer, audio_frames); 484 return cdm_->DecryptAndDecodeSamples(buffer, audio_frames);
469 } 485 }
470 486
471 // Overrides for the cdm::Host_5 methods. 487 // Overrides for the cdm::Host_5 methods.
472 // TODO(jrummell): Remove these once Host_5 interface is removed. 488 // TODO(jrummell): Remove these once Host_5 interface is removed.
473 489
474 template <> 490 template <>
491 void CdmWrapperImpl<cdm::ContentDecryptionModule_5>::CreateSession(
492 uint32_t promise_id,
493 const char* init_data_type,
494 uint32_t init_data_type_size,
495 const uint8_t* init_data,
496 uint32_t init_data_size,
497 cdm::SessionType session_type) {
498 cdm_->CreateSession(promise_id,
499 ConvertInitDataTypeToContentType(init_data_type),
500 init_data_type_size,
501 init_data,
502 init_data_size);
503 }
504
505 template <>
475 void CdmWrapperImpl<cdm::ContentDecryptionModule_5>::LoadSession( 506 void CdmWrapperImpl<cdm::ContentDecryptionModule_5>::LoadSession(
476 uint32_t promise_id, 507 uint32_t promise_id,
477 const char* web_session_id, 508 const char* web_session_id,
478 uint32_t web_session_id_size) { 509 uint32_t web_session_id_size) {
479 // As CDM_5 doesn't support OnSessionUsableKeysChange(), make sure to generate 510 // As CDM_5 doesn't support OnSessionUsableKeysChange(), make sure to generate
480 // one when the promise is resolved. This may be overly aggressive. 511 // one when the promise is resolved. This may be overly aggressive.
481 SetSessionUsableKeysEventNeeded( 512 SetSessionUsableKeysEventNeeded(
482 promise_id, web_session_id, web_session_id_size); 513 promise_id, web_session_id, web_session_id_size);
483 cdm_->LoadSession(promise_id, web_session_id, web_session_id_size); 514 cdm_->LoadSession(promise_id, web_session_id, web_session_id_size);
484 } 515 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 // stub implementations for new or modified methods that the older CDM interface 626 // stub implementations for new or modified methods that the older CDM interface
596 // does not have. 627 // does not have.
597 // Also update supported_cdm_versions.h. 628 // Also update supported_cdm_versions.h.
598 COMPILE_ASSERT(cdm::ContentDecryptionModule::kVersion == 629 COMPILE_ASSERT(cdm::ContentDecryptionModule::kVersion ==
599 cdm::ContentDecryptionModule_6::kVersion, 630 cdm::ContentDecryptionModule_6::kVersion,
600 ensure_cdm_wrapper_templates_have_old_version_support); 631 ensure_cdm_wrapper_templates_have_old_version_support);
601 632
602 } // namespace media 633 } // namespace media
603 634
604 #endif // MEDIA_CDM_PPAPI_CDM_WRAPPER_H_ 635 #endif // MEDIA_CDM_PPAPI_CDM_WRAPPER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698