File: android_cdm_registration.cc

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (59 lines) | stat: -rw-r--r-- 2,566 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/cdm/common/android_cdm_registration.h"

#include "base/logging.h"
#include "media/base/android/media_drm_bridge.h"
#include "media/cdm/cdm_type.h"

#if BUILDFLAG(ENABLE_WIDEVINE)
#include "third_party/widevine/cdm/widevine_cdm_common.h"  // nogncheck
#endif

namespace cdm {

#if BUILDFLAG(ENABLE_WIDEVINE)
void AddAndroidWidevineCdm(std::vector<content::CdmInfo>* cdms) {
  // Widevine is done by MediaDrm, and should be supported on all devices.
  // Register Widevine without any capabilities so that it will be
  // checked the first time it is used.
  cdms->emplace_back(kWidevineKeySystem,
                     content::CdmInfo::Robustness::kSoftwareSecure,
                     absl::nullopt, kWidevineCdmType);
  cdms->emplace_back(kWidevineKeySystem,
                     content::CdmInfo::Robustness::kHardwareSecure,
                     absl::nullopt, kWidevineCdmType);
}
#endif  // BUILDFLAG(ENABLE_WIDEVINE)

void AddOtherAndroidCdms(std::vector<content::CdmInfo>* cdms) {
  // CdmInfo needs a CdmType, but on Android it is not used as the key system
  // is supported by MediaDrm. Using a random value as something needs to be
  // specified, but must be different than other CdmTypes specified.
  // (On Android the key system is identified by UUID, and that mapping is
  // maintained by MediaDrmBridge.)
  const media::CdmType kAndroidCdmType{0x2e9dabb9c171c28cull,
                                       0xf455252ec70b52adull};

  // MediaDrmBridge returns a list of key systems available on the device
  // that are not Widevine. Register them with no capabilities specified so
  // that lazy evaluation can figure out what is supported when requested.
  // We don't know if either software secure or hardware secure support is
  // available, so register them both. Lazy evaluation will remove them
  // if they aren't supported.
  const auto key_system_names =
      media::MediaDrmBridge::GetPlatformKeySystemNames();
  for (const auto& key_system : key_system_names) {
    DVLOG(3) << __func__ << " key_system:" << key_system;
    cdms->emplace_back(key_system,
                       content::CdmInfo::Robustness::kSoftwareSecure,
                       absl::nullopt, kAndroidCdmType);
    cdms->emplace_back(key_system,
                       content::CdmInfo::Robustness::kHardwareSecure,
                       absl::nullopt, kAndroidCdmType);
  }
}

}  // namespace cdm