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 #include "chrome/renderer/media/chrome_key_systems.h" | 5 #include "chrome/renderer/media/chrome_key_systems.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "chrome/common/render_messages.h" | 8 #include "chrome/common/render_messages.h" |
9 #include "content/public/renderer/render_thread.h" | 9 #include "content/public/renderer/render_thread.h" |
10 | 10 |
11 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. | 11 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. |
12 | 12 |
13 // The following must be after widevine_cdm_version.h. | 13 // The following must be after widevine_cdm_version.h. |
14 | 14 |
15 #if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_MIN_GLIBC_VERSION) | 15 #if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_MIN_GLIBC_VERSION) |
16 #include <gnu/libc-version.h> | 16 #include <gnu/libc-version.h> |
17 #include "base/version.h" | 17 #include "base/version.h" |
18 #endif | 18 #endif |
19 | 19 |
20 #if defined(OS_ANDROID) | |
21 #include "chrome/common/encrypted_media_messages_android.h" | |
22 #endif | |
23 | |
20 using content::KeySystemInfo; | 24 using content::KeySystemInfo; |
21 | 25 |
22 static const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey"; | 26 static const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey"; |
23 | 27 |
24 static const char kAudioWebM[] = "audio/webm"; | 28 static const char kAudioWebM[] = "audio/webm"; |
25 static const char kVideoWebM[] = "video/webm"; | 29 static const char kVideoWebM[] = "video/webm"; |
26 static const char kVorbis[] = "vorbis"; | 30 static const char kVorbis[] = "vorbis"; |
27 static const char kVorbisVP8[] = "vorbis,vp8,vp8.0"; | 31 static const char kVorbisVP8[] = "vorbis,vp8,vp8.0"; |
28 | 32 |
29 static const char kAudioMp4[] = "audio/mp4"; | 33 static const char kAudioMp4[] = "audio/mp4"; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
88 // Defines bitmask values used to specify supported codecs. | 92 // Defines bitmask values used to specify supported codecs. |
89 // Each value represents a codec within a specific container. | 93 // Each value represents a codec within a specific container. |
90 enum SupportedCodecs { | 94 enum SupportedCodecs { |
91 WEBM_VP8_AND_VORBIS = 1 << 0, | 95 WEBM_VP8_AND_VORBIS = 1 << 0, |
92 #if defined(USE_PROPRIETARY_CODECS) | 96 #if defined(USE_PROPRIETARY_CODECS) |
93 MP4_AAC = 1 << 1, | 97 MP4_AAC = 1 << 1, |
94 MP4_AVC1 = 1 << 2, | 98 MP4_AVC1 = 1 << 2, |
95 #endif // defined(USE_PROPRIETARY_CODECS) | 99 #endif // defined(USE_PROPRIETARY_CODECS) |
96 }; | 100 }; |
97 | 101 |
102 #if defined(OS_ANDROID) | |
103 #define COMPILE_ASSERT_MATCHING_ENUM(name) \ | |
104 COMPILE_ASSERT(static_cast<int>(name) == \ | |
105 static_cast<int>(android::name), \ | |
106 mismatching_enums) | |
107 COMPILE_ASSERT_MATCHING_ENUM(WEBM_VP8_AND_VORBIS); | |
108 COMPILE_ASSERT_MATCHING_ENUM(MP4_AAC); | |
109 COMPILE_ASSERT_MATCHING_ENUM(MP4_AVC1); | |
110 #undef COMPILE_ASSERT_MATCHING_ENUM | |
111 | |
112 static const uint8 kWidevineUuid[16] = { | |
113 0xED, 0xEF, 0x8B, 0xA9, 0x79, 0xD6, 0x4A, 0xCE, | |
114 0xA3, 0xC8, 0x27, 0xDC, 0xD5, 0x1D, 0x21, 0xED }; | |
115 #endif | |
116 | |
98 static void AddWidevineWithCodecs( | 117 static void AddWidevineWithCodecs( |
99 SupportedCodecs supported_codecs, | 118 SupportedCodecs supported_codecs, |
100 std::vector<KeySystemInfo>* concrete_key_systems) { | 119 std::vector<KeySystemInfo>* concrete_key_systems) { |
101 static const char kWidevineParentKeySystem[] = "com.widevine"; | 120 static const char kWidevineParentKeySystem[] = "com.widevine"; |
102 #if defined(OS_ANDROID) | |
103 static const uint8 kWidevineUuid[16] = { | |
104 0xED, 0xEF, 0x8B, 0xA9, 0x79, 0xD6, 0x4A, 0xCE, | |
105 0xA3, 0xC8, 0x27, 0xDC, 0xD5, 0x1D, 0x21, 0xED }; | |
106 #endif | |
107 | 121 |
108 KeySystemInfo info(kWidevineKeySystem); | 122 KeySystemInfo info(kWidevineKeySystem); |
109 | 123 |
110 if (supported_codecs & WEBM_VP8_AND_VORBIS) { | 124 if (supported_codecs & WEBM_VP8_AND_VORBIS) { |
111 info.supported_types.push_back(std::make_pair(kAudioWebM, kVorbis)); | 125 info.supported_types.push_back(std::make_pair(kAudioWebM, kVorbis)); |
112 info.supported_types.push_back(std::make_pair(kVideoWebM, kVorbisVP8)); | 126 info.supported_types.push_back(std::make_pair(kVideoWebM, kVorbisVP8)); |
113 } | 127 } |
114 | 128 |
115 #if defined(USE_PROPRIETARY_CODECS) | 129 #if defined(USE_PROPRIETARY_CODECS) |
116 if (supported_codecs & MP4_AAC) | 130 if (supported_codecs & MP4_AAC) |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
158 #if defined(WIDEVINE_CDM_AVC1_SUPPORT_AVAILABLE) | 172 #if defined(WIDEVINE_CDM_AVC1_SUPPORT_AVAILABLE) |
159 supported_codecs = static_cast<SupportedCodecs>(supported_codecs | MP4_AVC1); | 173 supported_codecs = static_cast<SupportedCodecs>(supported_codecs | MP4_AVC1); |
160 #endif | 174 #endif |
161 #endif // defined(USE_PROPRIETARY_CODECS) | 175 #endif // defined(USE_PROPRIETARY_CODECS) |
162 | 176 |
163 AddWidevineWithCodecs(supported_codecs, concrete_key_systems); | 177 AddWidevineWithCodecs(supported_codecs, concrete_key_systems); |
164 } | 178 } |
165 #elif defined(OS_ANDROID) | 179 #elif defined(OS_ANDROID) |
166 static void AddAndroidWidevine( | 180 static void AddAndroidWidevine( |
167 std::vector<KeySystemInfo>* concrete_key_systems) { | 181 std::vector<KeySystemInfo>* concrete_key_systems) { |
182 android::SupportedKeySystemRequest request; | |
183 android::SupportedKeySystemResponse response; | |
184 | |
185 request.uuid.insert(request.uuid.begin(), kWidevineUuid, | |
186 kWidevineUuid + arraysize(kWidevineUuid)); | |
168 #if defined(USE_PROPRIETARY_CODECS) | 187 #if defined(USE_PROPRIETARY_CODECS) |
169 SupportedCodecs supported_codecs = | 188 request.codecs = static_cast<android::SupportedCodecs>( |
170 static_cast<SupportedCodecs>(MP4_AAC | MP4_AVC1); | 189 android::MP4_AAC | android::MP4_AVC1); |
190 #endif // defined(USE_PROPRIETARY_CODECS) | |
191 content::RenderThread::Get()->Send( | |
192 new ChromeViewHostMsg_GetSupportedKeySystems(request, &response)); | |
193 // TODO(qinmin): Use different key system types for compositing and | |
194 // non-compositing codecs. | |
195 SupportedCodecs supported_codecs = static_cast<SupportedCodecs>( | |
196 response.compositing_codecs | response.non_compositing_codecs); | |
197 DCHECK_EQ(supported_codecs >> 3, 0); | |
ddorwin
2013/09/18 18:13:02
Add something like:
<< "unrecognized codec";
qinmin
2013/09/18 18:52:20
Done.
| |
171 AddWidevineWithCodecs(supported_codecs, concrete_key_systems); | 198 AddWidevineWithCodecs(supported_codecs, concrete_key_systems); |
172 #endif // defined(USE_PROPRIETARY_CODECS) | |
173 } | 199 } |
174 #endif // defined(ENABLE_PEPPER_CDMS) | 200 #endif // defined(ENABLE_PEPPER_CDMS) |
175 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 201 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
176 | 202 |
177 void AddChromeKeySystems(std::vector<KeySystemInfo>* key_systems_info) { | 203 void AddChromeKeySystems(std::vector<KeySystemInfo>* key_systems_info) { |
178 AddClearKey(key_systems_info); | 204 AddClearKey(key_systems_info); |
179 | 205 |
180 #if defined(ENABLE_PEPPER_CDMS) | 206 #if defined(ENABLE_PEPPER_CDMS) |
181 AddExternalClearKey(key_systems_info); | 207 AddExternalClearKey(key_systems_info); |
182 #endif | 208 #endif |
183 | 209 |
184 #if defined(WIDEVINE_CDM_AVAILABLE) | 210 #if defined(WIDEVINE_CDM_AVAILABLE) |
185 #if defined(ENABLE_PEPPER_CDMS) | 211 #if defined(ENABLE_PEPPER_CDMS) |
186 AddPepperBasedWidevine(key_systems_info); | 212 AddPepperBasedWidevine(key_systems_info); |
187 #elif defined(OS_ANDROID) | 213 #elif defined(OS_ANDROID) |
188 AddAndroidWidevine(key_systems_info); | 214 AddAndroidWidevine(key_systems_info); |
189 #endif | 215 #endif |
190 #endif | 216 #endif |
191 } | 217 } |
OLD | NEW |