Chromium Code Reviews| 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 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 | |
| 98 static void AddWidevineWithCodecs( | 108 static void AddWidevineWithCodecs( |
| 99 SupportedCodecs supported_codecs, | 109 SupportedCodecs supported_codecs, |
| 100 std::vector<KeySystemInfo>* concrete_key_systems) { | 110 std::vector<KeySystemInfo>* concrete_key_systems) { |
| 101 static const char kWidevineParentKeySystem[] = "com.widevine"; | 111 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 | 112 |
| 108 KeySystemInfo info(kWidevineKeySystem); | 113 KeySystemInfo info(kWidevineKeySystem); |
| 109 | 114 |
| 110 if (supported_codecs & WEBM_VP8_AND_VORBIS) { | 115 if (supported_codecs & WEBM_VP8_AND_VORBIS) { |
| 111 info.supported_types.push_back(std::make_pair(kAudioWebM, kVorbis)); | 116 info.supported_types.push_back(std::make_pair(kAudioWebM, kVorbis)); |
| 112 info.supported_types.push_back(std::make_pair(kVideoWebM, kVorbisVP8)); | 117 info.supported_types.push_back(std::make_pair(kVideoWebM, kVorbisVP8)); |
| 113 } | 118 } |
| 114 | 119 |
| 115 #if defined(USE_PROPRIETARY_CODECS) | 120 #if defined(USE_PROPRIETARY_CODECS) |
| 116 if (supported_codecs & MP4_AAC) | 121 if (supported_codecs & MP4_AAC) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 156 supported_codecs = static_cast<SupportedCodecs>(supported_codecs | MP4_AAC); | 161 supported_codecs = static_cast<SupportedCodecs>(supported_codecs | MP4_AAC); |
| 157 #endif | 162 #endif |
| 158 #if defined(WIDEVINE_CDM_AVC1_SUPPORT_AVAILABLE) | 163 #if defined(WIDEVINE_CDM_AVC1_SUPPORT_AVAILABLE) |
| 159 supported_codecs = static_cast<SupportedCodecs>(supported_codecs | MP4_AVC1); | 164 supported_codecs = static_cast<SupportedCodecs>(supported_codecs | MP4_AVC1); |
| 160 #endif | 165 #endif |
| 161 #endif // defined(USE_PROPRIETARY_CODECS) | 166 #endif // defined(USE_PROPRIETARY_CODECS) |
| 162 | 167 |
| 163 AddWidevineWithCodecs(supported_codecs, concrete_key_systems); | 168 AddWidevineWithCodecs(supported_codecs, concrete_key_systems); |
| 164 } | 169 } |
| 165 #elif defined(OS_ANDROID) | 170 #elif defined(OS_ANDROID) |
| 171 | |
| 172 #define COMPILE_ASSERT_MATCHING_ENUM(name) \ | |
| 173 COMPILE_ASSERT(static_cast<int>(name) == \ | |
| 174 static_cast<int>(android::name), \ | |
| 175 mismatching_enums) | |
| 176 COMPILE_ASSERT_MATCHING_ENUM(WEBM_VP8_AND_VORBIS); | |
| 177 COMPILE_ASSERT_MATCHING_ENUM(MP4_AAC); | |
| 178 COMPILE_ASSERT_MATCHING_ENUM(MP4_AVC1); | |
| 179 #undef COMPILE_ASSERT_MATCHING_ENUM | |
|
xhwang
2013/09/18 07:10:57
So there's no way to only define those enum in one
qinmin
2013/09/18 17:19:59
Ya, i agree this is not satisfactory. We have thes
| |
| 180 | |
| 166 static void AddAndroidWidevine( | 181 static void AddAndroidWidevine( |
| 167 std::vector<KeySystemInfo>* concrete_key_systems) { | 182 std::vector<KeySystemInfo>* concrete_key_systems) { |
| 183 android::SupportedKeySystemRequest request; | |
| 184 android::SupportedKeySystemResponse response; | |
| 185 | |
| 186 request.uuid.insert(request.uuid.begin(), kWidevineUuid, | |
| 187 kWidevineUuid + arraysize(kWidevineUuid)); | |
| 168 #if defined(USE_PROPRIETARY_CODECS) | 188 #if defined(USE_PROPRIETARY_CODECS) |
| 189 request.requested_codecs = | |
| 190 static_cast<android::SupportedCodecs>( | |
| 191 android::MP4_AAC | android::MP4_AVC1); | |
| 192 #endif // defined(USE_PROPRIETARY_CODECS) | |
| 193 content::RenderThread::Get()->Send( | |
| 194 new ChromeViewHostMsg_GetSupportedKeySystems( | |
| 195 request, &response)); | |
|
xhwang
2013/09/18 07:10:57
fit in one line?
qinmin
2013/09/18 17:19:59
Done.
| |
| 196 // TODO(qinmin): Use different key system types for compositing and | |
| 197 // non-compositing codecs. Need to ignore the extra bit masks defined in | |
| 198 // android if that happens. | |
| 169 SupportedCodecs supported_codecs = | 199 SupportedCodecs supported_codecs = |
| 170 static_cast<SupportedCodecs>(MP4_AAC | MP4_AVC1); | 200 static_cast<SupportedCodecs>( |
| 201 response.compositing_codecs | response.non_compositing_codecs); | |
| 171 AddWidevineWithCodecs(supported_codecs, concrete_key_systems); | 202 AddWidevineWithCodecs(supported_codecs, concrete_key_systems); |
| 172 #endif // defined(USE_PROPRIETARY_CODECS) | |
| 173 } | 203 } |
| 174 #endif // defined(ENABLE_PEPPER_CDMS) | 204 #endif // defined(ENABLE_PEPPER_CDMS) |
| 175 #endif // defined(WIDEVINE_CDM_AVAILABLE) | 205 #endif // defined(WIDEVINE_CDM_AVAILABLE) |
| 176 | 206 |
| 177 void AddChromeKeySystems(std::vector<KeySystemInfo>* key_systems_info) { | 207 void AddChromeKeySystems(std::vector<KeySystemInfo>* key_systems_info) { |
| 178 AddClearKey(key_systems_info); | 208 AddClearKey(key_systems_info); |
| 179 | 209 |
| 180 #if defined(ENABLE_PEPPER_CDMS) | 210 #if defined(ENABLE_PEPPER_CDMS) |
| 181 AddExternalClearKey(key_systems_info); | 211 AddExternalClearKey(key_systems_info); |
| 182 #endif | 212 #endif |
| 183 | 213 |
| 184 #if defined(WIDEVINE_CDM_AVAILABLE) | 214 #if defined(WIDEVINE_CDM_AVAILABLE) |
| 185 #if defined(ENABLE_PEPPER_CDMS) | 215 #if defined(ENABLE_PEPPER_CDMS) |
| 186 AddPepperBasedWidevine(key_systems_info); | 216 AddPepperBasedWidevine(key_systems_info); |
| 187 #elif defined(OS_ANDROID) | 217 #elif defined(OS_ANDROID) |
| 188 AddAndroidWidevine(key_systems_info); | 218 AddAndroidWidevine(key_systems_info); |
| 189 #endif | 219 #endif |
| 190 #endif | 220 #endif |
| 191 } | 221 } |
| OLD | NEW |