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

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

Issue 2712983004: Simplify/Cleanup MediaClient (Closed)
Patch Set: Fix test leak Created 3 years, 8 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
« no previous file with comments | « content/test/BUILD.gn ('k') | media/base/key_systems_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 227
228 void RegisterMimeType(const std::string& mime_type, EmeCodec codecs_mask); 228 void RegisterMimeType(const std::string& mime_type, EmeCodec codecs_mask);
229 bool IsValidMimeTypeCodecsCombination(const std::string& mime_type, 229 bool IsValidMimeTypeCodecsCombination(const std::string& mime_type,
230 SupportedCodecs codecs_mask) const; 230 SupportedCodecs codecs_mask) const;
231 231
232 typedef base::hash_map<std::string, std::unique_ptr<KeySystemProperties>> 232 typedef base::hash_map<std::string, std::unique_ptr<KeySystemProperties>>
233 KeySystemPropertiesMap; 233 KeySystemPropertiesMap;
234 typedef base::hash_map<std::string, SupportedCodecs> MimeTypeCodecsMap; 234 typedef base::hash_map<std::string, SupportedCodecs> MimeTypeCodecsMap;
235 typedef base::hash_map<std::string, EmeCodec> CodecsMap; 235 typedef base::hash_map<std::string, EmeCodec> CodecsMap;
236 typedef base::hash_map<std::string, EmeInitDataType> InitDataTypesMap; 236 typedef base::hash_map<std::string, EmeInitDataType> InitDataTypesMap;
237 typedef base::hash_map<std::string, std::string> KeySystemNameForUMAMap;
238 237
239 // TODO(sandersd): Separate container enum from codec mask value. 238 // TODO(sandersd): Separate container enum from codec mask value.
240 // http://crbug.com/417440 239 // http://crbug.com/417440
241 // Potentially pass EmeMediaType and a container enum. 240 // Potentially pass EmeMediaType and a container enum.
242 SupportedCodecs GetCodecMaskForMimeType( 241 SupportedCodecs GetCodecMaskForMimeType(
243 const std::string& container_mime_type) const; 242 const std::string& container_mime_type) const;
244 EmeCodec GetCodecForString(const std::string& codec) const; 243 EmeCodec GetCodecForString(const std::string& codec) const;
245 244
246 // Map from key system string to KeySystemProperties instance. 245 // Map from key system string to KeySystemProperties instance.
247 KeySystemPropertiesMap key_system_properties_map_; 246 KeySystemPropertiesMap key_system_properties_map_;
248 247
249 // This member should only be modified by RegisterMimeType(). 248 // This member should only be modified by RegisterMimeType().
250 MimeTypeCodecsMap mime_type_to_codec_mask_map_; 249 MimeTypeCodecsMap mime_type_to_codec_mask_map_;
251 CodecsMap codec_string_map_; 250 CodecsMap codec_string_map_;
252 KeySystemNameForUMAMap key_system_name_for_uma_map_;
253 251
254 SupportedCodecs audio_codec_mask_; 252 SupportedCodecs audio_codec_mask_;
255 SupportedCodecs video_codec_mask_; 253 SupportedCodecs video_codec_mask_;
256 254
257 // Makes sure all methods are called from the same thread. 255 // Makes sure all methods are called from the same thread.
258 base::ThreadChecker thread_checker_; 256 base::ThreadChecker thread_checker_;
259 257
260 DISALLOW_COPY_AND_ASSIGN(KeySystemsImpl); 258 DISALLOW_COPY_AND_ASSIGN(KeySystemsImpl);
261 }; 259 };
262 260
(...skipping 11 matching lines...) Expand all
274 for (size_t i = 0; i < arraysize(kCodecStrings); ++i) { 272 for (size_t i = 0; i < arraysize(kCodecStrings); ++i) {
275 const std::string& name = kCodecStrings[i].name; 273 const std::string& name = kCodecStrings[i].name;
276 DCHECK(!codec_string_map_.count(name)); 274 DCHECK(!codec_string_map_.count(name));
277 codec_string_map_[name] = kCodecStrings[i].type; 275 codec_string_map_[name] = kCodecStrings[i].type;
278 } 276 }
279 for (size_t i = 0; i < arraysize(kMimeTypeToCodecMasks); ++i) { 277 for (size_t i = 0; i < arraysize(kMimeTypeToCodecMasks); ++i) {
280 RegisterMimeType(kMimeTypeToCodecMasks[i].name, 278 RegisterMimeType(kMimeTypeToCodecMasks[i].name,
281 kMimeTypeToCodecMasks[i].type); 279 kMimeTypeToCodecMasks[i].type);
282 } 280 }
283 281
284 InitializeUMAInfo();
285
286 // Always update supported key systems during construction. 282 // Always update supported key systems during construction.
287 UpdateSupportedKeySystems(); 283 UpdateSupportedKeySystems();
288 } 284 }
289 285
290 KeySystemsImpl::~KeySystemsImpl() { 286 KeySystemsImpl::~KeySystemsImpl() {
291 } 287 }
292 288
293 SupportedCodecs KeySystemsImpl::GetCodecMaskForMimeType( 289 SupportedCodecs KeySystemsImpl::GetCodecMaskForMimeType(
294 const std::string& container_mime_type) const { 290 const std::string& container_mime_type) const {
295 MimeTypeCodecsMap::const_iterator iter = 291 MimeTypeCodecsMap::const_iterator iter =
296 mime_type_to_codec_mask_map_.find(container_mime_type); 292 mime_type_to_codec_mask_map_.find(container_mime_type);
297 if (iter == mime_type_to_codec_mask_map_.end()) 293 if (iter == mime_type_to_codec_mask_map_.end())
298 return EME_CODEC_NONE; 294 return EME_CODEC_NONE;
299 295
300 DCHECK(IsValidMimeTypeCodecsCombination(container_mime_type, iter->second)); 296 DCHECK(IsValidMimeTypeCodecsCombination(container_mime_type, iter->second));
301 return iter->second; 297 return iter->second;
302 } 298 }
303 299
304 EmeCodec KeySystemsImpl::GetCodecForString(const std::string& codec) const { 300 EmeCodec KeySystemsImpl::GetCodecForString(const std::string& codec) const {
305 CodecsMap::const_iterator iter = codec_string_map_.find(codec); 301 CodecsMap::const_iterator iter = codec_string_map_.find(codec);
306 if (iter != codec_string_map_.end()) 302 if (iter != codec_string_map_.end())
307 return iter->second; 303 return iter->second;
308 return EME_CODEC_NONE; 304 return EME_CODEC_NONE;
309 } 305 }
310 306
311 void KeySystemsImpl::InitializeUMAInfo() {
312 DCHECK(thread_checker_.CalledOnValidThread());
313 DCHECK(key_system_name_for_uma_map_.empty());
314
315 std::vector<KeySystemInfoForUMA> key_systems_info_for_uma;
316 if (GetMediaClient())
317 GetMediaClient()->AddKeySystemsInfoForUMA(&key_systems_info_for_uma);
318
319 for (const KeySystemInfoForUMA& info : key_systems_info_for_uma) {
320 key_system_name_for_uma_map_[info.key_system] =
321 info.key_system_name_for_uma;
322 }
323
324 // Clear Key is always supported.
325 key_system_name_for_uma_map_[kClearKeyKeySystem] =
326 kClearKeyKeySystemNameForUMA;
327 }
328
329 void KeySystemsImpl::UpdateIfNeeded() { 307 void KeySystemsImpl::UpdateIfNeeded() {
330 if (GetMediaClient() && GetMediaClient()->IsKeySystemsUpdateNeeded()) 308 if (GetMediaClient() && GetMediaClient()->IsKeySystemsUpdateNeeded())
331 UpdateSupportedKeySystems(); 309 UpdateSupportedKeySystems();
332 } 310 }
333 311
334 void KeySystemsImpl::UpdateSupportedKeySystems() { 312 void KeySystemsImpl::UpdateSupportedKeySystems() {
335 DCHECK(thread_checker_.CalledOnValidThread()); 313 DCHECK(thread_checker_.CalledOnValidThread());
336 key_system_properties_map_.clear(); 314 key_system_properties_map_.clear();
337 315
338 std::vector<std::unique_ptr<KeySystemProperties>> key_systems_properties; 316 std::vector<std::unique_ptr<KeySystemProperties>> key_systems_properties;
339 317
340 // Add key systems supported by the MediaClient implementation. 318 // Add key systems supported by the MediaClient implementation.
341 if (GetMediaClient()) 319 if (GetMediaClient()) {
342 GetMediaClient()->AddSupportedKeySystems(&key_systems_properties); 320 GetMediaClient()->AddSupportedKeySystems(&key_systems_properties);
321 } else {
322 DVLOG(1) << __func__ << " No media client to provide key systems";
323 }
343 324
344 // Clear Key is always supported. 325 // Clear Key is always supported.
345 key_systems_properties.emplace_back(new ClearKeyProperties()); 326 key_systems_properties.emplace_back(new ClearKeyProperties());
346 327
347 AddSupportedKeySystems(&key_systems_properties); 328 AddSupportedKeySystems(&key_systems_properties);
348 } 329 }
349 330
350 // Returns whether distinctive identifiers and persistent state can be reliably 331 // Returns whether distinctive identifiers and persistent state can be reliably
351 // blocked for |properties| (and therefore be safely configurable). 332 // blocked for |properties| (and therefore be safely configurable).
352 static bool CanBlock(const KeySystemProperties& properties) { 333 static bool CanBlock(const KeySystemProperties& properties) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 417
437 #if defined(OS_ANDROID) 418 #if defined(OS_ANDROID)
438 // Ensure that the renderer can access the decoders necessary to use the 419 // Ensure that the renderer can access the decoders necessary to use the
439 // key system. 420 // key system.
440 if (!properties->UseAesDecryptor() && !HasPlatformDecoderSupport()) { 421 if (!properties->UseAesDecryptor() && !HasPlatformDecoderSupport()) {
441 DLOG(WARNING) << properties->GetKeySystemName() << " not registered"; 422 DLOG(WARNING) << properties->GetKeySystemName() << " not registered";
442 continue; 423 continue;
443 } 424 }
444 #endif // defined(OS_ANDROID) 425 #endif // defined(OS_ANDROID)
445 426
427 DVLOG(1) << __func__
428 << " Adding key system:" << properties->GetKeySystemName();
446 key_system_properties_map_[properties->GetKeySystemName()] = 429 key_system_properties_map_[properties->GetKeySystemName()] =
447 std::move(properties); 430 std::move(properties);
448 } 431 }
449 } 432 }
450 433
451 // Adds the MIME type with the codec mask after verifying the validity. 434 // Adds the MIME type with the codec mask after verifying the validity.
452 // Only this function should modify |mime_type_to_codec_mask_map_|. 435 // Only this function should modify |mime_type_to_codec_mask_map_|.
453 void KeySystemsImpl::RegisterMimeType(const std::string& mime_type, 436 void KeySystemsImpl::RegisterMimeType(const std::string& mime_type,
454 EmeCodec codecs_mask) { 437 EmeCodec codecs_mask) {
455 DCHECK(thread_checker_.CalledOnValidThread()); 438 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 NOTREACHED(); 470 NOTREACHED();
488 return false; 471 return false;
489 } 472 }
490 return key_system_iter->second->IsSupportedInitDataType(init_data_type); 473 return key_system_iter->second->IsSupportedInitDataType(init_data_type);
491 } 474 }
492 475
493 std::string KeySystemsImpl::GetKeySystemNameForUMA( 476 std::string KeySystemsImpl::GetKeySystemNameForUMA(
494 const std::string& key_system) const { 477 const std::string& key_system) const {
495 DCHECK(thread_checker_.CalledOnValidThread()); 478 DCHECK(thread_checker_.CalledOnValidThread());
496 479
497 KeySystemNameForUMAMap::const_iterator iter = 480 // Here we maintain a short list of known key systems to facilitate UMA
498 key_system_name_for_uma_map_.find(key_system); 481 // reporting. Mentioned key systems are not necessarily supported by
499 if (iter == key_system_name_for_uma_map_.end()) 482 // the current platform.
500 return kUnknownKeySystemNameForUMA; 483 if (key_system == kWidevineKeySystem)
484 return kWidevineKeySystemNameForUMA;
501 485
502 return iter->second; 486 if (key_system == kClearKeyKeySystem)
487 return kClearKeyKeySystemNameForUMA;
488
489 return kUnknownKeySystemNameForUMA;
503 } 490 }
504 491
505 bool KeySystemsImpl::UseAesDecryptor(const std::string& key_system) const { 492 bool KeySystemsImpl::UseAesDecryptor(const std::string& key_system) const {
506 DCHECK(thread_checker_.CalledOnValidThread()); 493 DCHECK(thread_checker_.CalledOnValidThread());
507 494
508 KeySystemPropertiesMap::const_iterator key_system_iter = 495 KeySystemPropertiesMap::const_iterator key_system_iter =
509 key_system_properties_map_.find(key_system); 496 key_system_properties_map_.find(key_system);
510 if (key_system_iter == key_system_properties_map_.end()) { 497 if (key_system_iter == key_system_properties_map_.end()) {
511 DLOG(ERROR) << key_system << " is not a known system"; 498 DLOG(ERROR) << key_system << " is not a known system";
512 return false; 499 return false;
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 uint32_t mask) { 723 uint32_t mask) {
737 KeySystemsImpl::GetInstance()->AddCodecMask(media_type, codec, mask); 724 KeySystemsImpl::GetInstance()->AddCodecMask(media_type, codec, mask);
738 } 725 }
739 726
740 MEDIA_EXPORT void AddMimeTypeCodecMask(const std::string& mime_type, 727 MEDIA_EXPORT void AddMimeTypeCodecMask(const std::string& mime_type,
741 uint32_t mask) { 728 uint32_t mask) {
742 KeySystemsImpl::GetInstance()->AddMimeTypeCodecMask(mime_type, mask); 729 KeySystemsImpl::GetInstance()->AddMimeTypeCodecMask(mime_type, mask);
743 } 730 }
744 731
745 } // namespace media 732 } // namespace media
OLDNEW
« no previous file with comments | « content/test/BUILD.gn ('k') | media/base/key_systems_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698