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

Side by Side Diff: media/base/key_systems.cc

Issue 1027363002: Change EmeInitDataType to be an enum class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 #include "media/base/key_systems.h" 5 #include "media/base/key_systems.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 16 matching lines...) Expand all
27 27
28 // These names are used by UMA. Do not change them! 28 // These names are used by UMA. Do not change them!
29 const char kClearKeyKeySystemNameForUMA[] = "ClearKey"; 29 const char kClearKeyKeySystemNameForUMA[] = "ClearKey";
30 const char kUnknownKeySystemNameForUMA[] = "Unknown"; 30 const char kUnknownKeySystemNameForUMA[] = "Unknown";
31 31
32 struct NamedInitDataType { 32 struct NamedInitDataType {
33 const char* name; 33 const char* name;
34 EmeInitDataType type; 34 EmeInitDataType type;
35 }; 35 };
36 36
37 // Mapping between initialization data types names and enum values. When adding 37 // Mapping between initialization data types names and enum values.
38 // entries, make sure to update IsSaneInitDataTypeWithContainer().
39 static NamedInitDataType kInitDataTypeNames[] = { 38 static NamedInitDataType kInitDataTypeNames[] = {
40 {"webm", EME_INIT_DATA_TYPE_WEBM}, 39 {"webm", EmeInitDataType::WEBM},
41 #if defined(USE_PROPRIETARY_CODECS) 40 {"cenc", EmeInitDataType::CENC},
42 {"cenc", EME_INIT_DATA_TYPE_CENC}, 41 {"keyids", EmeInitDataType::KEYIDS},
43 #endif // defined(USE_PROPRIETARY_CODECS)
44 {"keyids", EME_INIT_DATA_TYPE_KEYIDS},
45 }; 42 };
46 43
47 struct NamedCodec { 44 struct NamedCodec {
48 const char* name; 45 const char* name;
49 EmeCodec type; 46 EmeCodec type;
50 }; 47 };
51 48
52 // Mapping between containers and their codecs. 49 // Mapping between containers and their codecs.
53 // Only audio codec can belong to a "audio/*" container. Both audio and video 50 // Only audio codec can belong to a "audio/*" container. Both audio and video
54 // codecs can belong to a "video/*" container. 51 // codecs can belong to a "video/*" container.
(...skipping 23 matching lines...) Expand all
78 75
79 static void AddClearKey(std::vector<KeySystemInfo>* concrete_key_systems) { 76 static void AddClearKey(std::vector<KeySystemInfo>* concrete_key_systems) {
80 KeySystemInfo info; 77 KeySystemInfo info;
81 info.key_system = kClearKeyKeySystem; 78 info.key_system = kClearKeyKeySystem;
82 79
83 // On Android, Vorbis, VP8, AAC and AVC1 are supported in MediaCodec: 80 // On Android, Vorbis, VP8, AAC and AVC1 are supported in MediaCodec:
84 // http://developer.android.com/guide/appendix/media-formats.html 81 // http://developer.android.com/guide/appendix/media-formats.html
85 // VP9 support is device dependent. 82 // VP9 support is device dependent.
86 83
87 info.supported_init_data_types = 84 info.supported_init_data_types =
88 EME_INIT_DATA_TYPE_WEBM | EME_INIT_DATA_TYPE_KEYIDS; 85 kSupportedInitDataTypeWebM | kSupportedInitDataTypeKeyIds;
89 info.supported_codecs = EME_CODEC_WEBM_ALL; 86 info.supported_codecs = EME_CODEC_WEBM_ALL;
90 87
91 #if defined(OS_ANDROID) 88 #if defined(OS_ANDROID)
92 // Temporarily disable VP9 support for Android. 89 // Temporarily disable VP9 support for Android.
93 // TODO(xhwang): Use mime_util.h to query VP9 support on Android. 90 // TODO(xhwang): Use mime_util.h to query VP9 support on Android.
94 info.supported_codecs &= ~EME_CODEC_WEBM_VP9; 91 info.supported_codecs &= ~EME_CODEC_WEBM_VP9;
95 92
96 // Opus is not supported on Android yet. http://crbug.com/318436. 93 // Opus is not supported on Android yet. http://crbug.com/318436.
97 // TODO(sandersd): Check for platform support to set this bit. 94 // TODO(sandersd): Check for platform support to set this bit.
98 info.supported_codecs &= ~EME_CODEC_WEBM_OPUS; 95 info.supported_codecs &= ~EME_CODEC_WEBM_OPUS;
99 #endif // defined(OS_ANDROID) 96 #endif // defined(OS_ANDROID)
100 97
101 #if defined(USE_PROPRIETARY_CODECS) 98 #if defined(USE_PROPRIETARY_CODECS)
102 info.supported_init_data_types |= EME_INIT_DATA_TYPE_CENC; 99 info.supported_init_data_types |= kSupportedInitDataTypeCenc;
103 info.supported_codecs |= EME_CODEC_MP4_ALL; 100 info.supported_codecs |= EME_CODEC_MP4_ALL;
104 #endif // defined(USE_PROPRIETARY_CODECS) 101 #endif // defined(USE_PROPRIETARY_CODECS)
105 102
106 info.persistent_license_support = EME_SESSION_TYPE_NOT_SUPPORTED; 103 info.persistent_license_support = EME_SESSION_TYPE_NOT_SUPPORTED;
107 info.persistent_release_message_support = EME_SESSION_TYPE_NOT_SUPPORTED; 104 info.persistent_release_message_support = EME_SESSION_TYPE_NOT_SUPPORTED;
108 info.persistent_state_support = EME_FEATURE_NOT_SUPPORTED; 105 info.persistent_state_support = EME_FEATURE_NOT_SUPPORTED;
109 info.distinctive_identifier_support = EME_FEATURE_NOT_SUPPORTED; 106 info.distinctive_identifier_support = EME_FEATURE_NOT_SUPPORTED;
110 107
111 info.use_aes_decryptor = true; 108 info.use_aes_decryptor = true;
112 109
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 // Always update supported key systems during construction. 305 // Always update supported key systems during construction.
309 UpdateSupportedKeySystems(); 306 UpdateSupportedKeySystems();
310 } 307 }
311 308
312 EmeInitDataType KeySystems::GetInitDataTypeForName( 309 EmeInitDataType KeySystems::GetInitDataTypeForName(
313 const std::string& init_data_type) const { 310 const std::string& init_data_type) const {
314 InitDataTypesMap::const_iterator iter = 311 InitDataTypesMap::const_iterator iter =
315 init_data_type_name_map_.find(init_data_type); 312 init_data_type_name_map_.find(init_data_type);
316 if (iter != init_data_type_name_map_.end()) 313 if (iter != init_data_type_name_map_.end())
317 return iter->second; 314 return iter->second;
318 return EME_INIT_DATA_TYPE_NONE; 315 return EmeInitDataType::NONE;
sandersd (OOO until July 31) 2015/03/23 21:27:30 This method is only used from one place, and it's
jrummell 2015/03/25 21:44:25 In the future calls to IsSupportedKeySystemWithIni
319 } 316 }
320 317
321 SupportedCodecs KeySystems::GetCodecMaskForContainer( 318 SupportedCodecs KeySystems::GetCodecMaskForContainer(
322 const std::string& container) const { 319 const std::string& container) const {
323 ContainerCodecsMap::const_iterator iter = 320 ContainerCodecsMap::const_iterator iter =
324 container_to_codec_mask_map_.find(container); 321 container_to_codec_mask_map_.find(container);
325 if (iter != container_to_codec_mask_map_.end()) 322 if (iter != container_to_codec_mask_map_.end())
326 return iter->second; 323 return iter->second;
327 return EME_CODEC_NONE; 324 return EME_CODEC_NONE;
328 } 325 }
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 const std::string& key_system, 509 const std::string& key_system,
513 const std::string& init_data_type) { 510 const std::string& init_data_type) {
514 DCHECK(thread_checker_.CalledOnValidThread()); 511 DCHECK(thread_checker_.CalledOnValidThread());
515 512
516 // Locate |key_system|. Only concrete key systems are supported in unprefixed. 513 // Locate |key_system|. Only concrete key systems are supported in unprefixed.
517 KeySystemInfoMap::const_iterator key_system_iter = 514 KeySystemInfoMap::const_iterator key_system_iter =
518 concrete_key_system_map_.find(key_system); 515 concrete_key_system_map_.find(key_system);
519 if (key_system_iter == concrete_key_system_map_.end()) 516 if (key_system_iter == concrete_key_system_map_.end())
520 return false; 517 return false;
521 518
522 // Check |init_data_type| and |key_system| x |init_data_type|. 519 // Check |init_data_type|.
523 const KeySystemInfo& info = key_system_iter->second; 520 SupportedInitDataTypes available_init_data_types =
524 EmeInitDataType eme_init_data_type = GetInitDataTypeForName(init_data_type); 521 key_system_iter->second.supported_init_data_types;
525 return (info.supported_init_data_types & eme_init_data_type) != 0; 522 switch (GetInitDataTypeForName(init_data_type)) {
523 case EmeInitDataType::NONE:
524 return false;
525 case EmeInitDataType::WEBM:
526 return (available_init_data_types & kSupportedInitDataTypeWebM) != 0;
527 case EmeInitDataType::CENC:
528 return (available_init_data_types & kSupportedInitDataTypeCenc) != 0;
529 case EmeInitDataType::KEYIDS:
530 return (available_init_data_types & kSupportedInitDataTypeKeyIds) != 0;
531 }
532 NOTREACHED();
533 return false;
526 } 534 }
527 535
528 // TODO(sandersd): Reorganize to be more similar to 536 // TODO(sandersd): Reorganize to be more similar to
529 // IsKeySystemSupportedWithInitDataType(). Note that a fork may still be 537 // IsKeySystemSupportedWithInitDataType(). Note that a fork may still be
530 // required; http://crbug.com/417461. 538 // required; http://crbug.com/417461.
531 bool KeySystems::IsSupportedKeySystemWithMediaMimeType( 539 bool KeySystems::IsSupportedKeySystemWithMediaMimeType(
532 const std::string& mime_type, 540 const std::string& mime_type,
533 const std::vector<std::string>& codecs, 541 const std::vector<std::string>& codecs,
534 const std::string& key_system, 542 const std::string& key_system,
535 bool is_prefixed) { 543 bool is_prefixed) {
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 782
775 std::string GetPrefixedKeySystemName(const std::string& key_system) { 783 std::string GetPrefixedKeySystemName(const std::string& key_system) {
776 DCHECK_NE(key_system, kPrefixedClearKeyKeySystem); 784 DCHECK_NE(key_system, kPrefixedClearKeyKeySystem);
777 785
778 if (key_system == kClearKeyKeySystem) 786 if (key_system == kClearKeyKeySystem)
779 return kPrefixedClearKeyKeySystem; 787 return kPrefixedClearKeyKeySystem;
780 788
781 return key_system; 789 return key_system;
782 } 790 }
783 791
784 bool IsSaneInitDataTypeWithContainer(
785 const std::string& init_data_type,
786 const std::string& container) {
787 if (init_data_type == "cenc") {
788 return container == "audio/mp4" || container == "video/mp4";
789 } else if (init_data_type == "webm") {
790 return container == "audio/webm" || container == "video/webm";
791 } else {
792 return true;
793 }
794 }
795
796 bool PrefixedIsSupportedConcreteKeySystem(const std::string& key_system) { 792 bool PrefixedIsSupportedConcreteKeySystem(const std::string& key_system) {
797 return KeySystems::GetInstance().IsConcreteSupportedKeySystem(key_system); 793 return KeySystems::GetInstance().IsConcreteSupportedKeySystem(key_system);
798 } 794 }
799 795
800 bool IsSupportedKeySystem(const std::string& key_system) { 796 bool IsSupportedKeySystem(const std::string& key_system) {
801 if (!KeySystems::GetInstance().IsSupportedKeySystem(key_system)) 797 if (!KeySystems::GetInstance().IsSupportedKeySystem(key_system))
802 return false; 798 return false;
803 799
804 // TODO(ddorwin): Move this to where we add key systems when prefixed EME is 800 // TODO(ddorwin): Move this to where we add key systems when prefixed EME is
805 // removed (crbug.com/249976). 801 // removed (crbug.com/249976).
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 884
889 MEDIA_EXPORT void AddContainerMask(const std::string& container, uint32 mask) { 885 MEDIA_EXPORT void AddContainerMask(const std::string& container, uint32 mask) {
890 KeySystems::GetInstance().AddContainerMask(container, mask); 886 KeySystems::GetInstance().AddContainerMask(container, mask);
891 } 887 }
892 888
893 MEDIA_EXPORT void AddCodecMask(const std::string& codec, uint32 mask) { 889 MEDIA_EXPORT void AddCodecMask(const std::string& codec, uint32 mask) {
894 KeySystems::GetInstance().AddCodecMask(codec, mask); 890 KeySystems::GetInstance().AddCodecMask(codec, mask);
895 } 891 }
896 892
897 } // namespace media 893 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698