Refactor cast_mojo gn args so that the cast renderer can be enabled with ENABLE_CAST_RENDERER
Bug: b/126906251
Test: Verified that mojo_media args did not change.
Change-Id: I167fde3c1cea718c87d03d3dc2c3b61964e77988
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1512677
Reviewed-by: Chrome Cunningham <chcunningham@chromium.org>
Reviewed-by: John Rummell <jrummell@chromium.org>
Reviewed-by: Kenneth MacKay <kmackay@chromium.org>
Reviewed-by: Luke Halliwell <halliwell@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Commit-Queue: Alex Leung <alexleung@google.com>
Cr-Commit-Position: refs/heads/master@{#641363}
diff --git a/build/config/chromecast_build.gni b/build/config/chromecast_build.gni
index 61870e4..13d4b43 100644
--- a/build/config/chromecast_build.gni
+++ b/build/config/chromecast_build.gni
@@ -16,6 +16,10 @@
# Set this true for an audio-only Chromecast build.
is_cast_audio_only = false
+
+ # If true, use cast CMA backend instead of default chromium media pipeline.
+ # TODO(sanfin): Remove this flag when all builds enable CMA.
+ is_cast_using_cma_backend = true
}
# Note(slan): This arg depends on the value of is_chromecast, and thus must be
@@ -31,6 +35,36 @@
(target_cpu == "x86" || target_cpu == "x64")
}
+declare_args() {
+ # True to enable the cast renderer. It is enabled by default for non-android
+ # builds.
+ enable_cast_renderer =
+ is_chromecast && is_cast_using_cma_backend && !is_android
+}
+
+# Configures media options for cast. See media/media_options.gni
+cast_mojo_media_services = []
+cast_mojo_media_host = "none"
+
+if (enable_cast_renderer) {
+ cast_mojo_media_services = [
+ "cdm",
+ "renderer",
+ ]
+ cast_mojo_media_host = "browser"
+} else if (is_android) {
+ cast_mojo_media_services = [
+ "cdm",
+ "audio_decoder",
+ ]
+ if (is_cast_audio_only) {
+ cast_mojo_media_host = "browser"
+ } else {
+ cast_mojo_media_services += [ "video_decoder" ]
+ cast_mojo_media_host = "gpu"
+ }
+}
+
# Assert that Chromecast is being built for a supported platform.
assert(is_linux || is_android || is_fuchsia || !is_chromecast,
"Chromecast builds are not supported on $target_os")
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn
index 4ffe6a7..4fffe1c 100644
--- a/chromecast/browser/BUILD.gn
+++ b/chromecast/browser/BUILD.gn
@@ -15,7 +15,10 @@
buildflag_header("browser_buildflags") {
header = "browser_buildflags.h"
- flags = [ "ENABLE_CAST_AUDIO_MANAGER_MIXER=$enable_cast_audio_manager_mixer" ]
+ flags = [
+ "ENABLE_CAST_AUDIO_MANAGER_MIXER=$enable_cast_audio_manager_mixer",
+ "ENABLE_CAST_RENDERER=$enable_cast_renderer",
+ ]
}
cast_source_set("prefs") {
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc
index 44f283e..a1efdca 100644
--- a/chromecast/browser/cast_content_browser_client.cc
+++ b/chromecast/browser/cast_content_browser_client.cc
@@ -150,10 +150,7 @@
static void CreateMediaService(CastContentBrowserClient* browser_client,
service_manager::mojom::ServiceRequest request) {
std::unique_ptr<::media::MediaService> service;
-#if defined(OS_ANDROID)
- service = std::make_unique<::media::MediaService>(
- std::make_unique<::media::AndroidMojoMediaClient>(), std::move(request));
-#else
+#if BUILDFLAG(ENABLE_CAST_RENDERER)
auto mojo_media_client = std::make_unique<media::CastMojoMediaClient>(
browser_client->GetCmaBackendFactory(),
base::Bind(&CastContentBrowserClient::CreateCdmFactory,
@@ -163,8 +160,12 @@
browser_client->media_resource_tracker());
service = std::make_unique<::media::MediaService>(
std::move(mojo_media_client), std::move(request));
-#endif // defined(OS_ANDROID)
-
+#elif defined(OS_ANDROID)
+ service = std::make_unique<::media::MediaService>(
+ std::make_unique<::media::AndroidMojoMediaClient>(), std::move(request));
+#else
+#error "Unsupported configuration."
+#endif // defined(ENABLE_CAST_RENDERER)
service_manager::Service::RunAsyncUntilTermination(std::move(service));
}
#endif // BUILDFLAG(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS)
diff --git a/media/media_options.gni b/media/media_options.gni
index 179bd32..d5902db 100644
--- a/media/media_options.gni
+++ b/media/media_options.gni
@@ -84,10 +84,6 @@
# are combined and we could override more logging than expected.
enable_logging_override = !use_jumbo_build && is_chromecast
- # If true, use cast CMA backend instead of default chromium media pipeline.
- # TODO(sanfin): Remove this flag when all builds enable CMA.
- is_cast_using_cma_backend = true
-
# Dav1d is only enabled when av1 decoding is enabled.
if (is_win && target_cpu == "arm64") {
# TODO: Enable dav1d for Windows ARM64. https://crbug.com/941022
@@ -198,28 +194,16 @@
# Can be overridden by gn build arguments from the --args command line flag
# for local testing.
if (enable_mojo_media) {
- if (is_chromecast && is_cast_using_cma_backend && !is_android) {
+ if (is_chromecast) {
+ _default_mojo_media_services = cast_mojo_media_services
+ _default_mojo_media_host = cast_mojo_media_host
+ } else if (is_android) {
_default_mojo_media_services = [
"cdm",
- "renderer",
+ "audio_decoder",
+ "video_decoder",
]
- _default_mojo_media_host = "browser"
- } else if (is_android) {
- # Both chrome for Android and cast for Android belongs to this case
- if (is_cast_audio_only) {
- _default_mojo_media_services = [
- "cdm",
- "audio_decoder",
- ]
- _default_mojo_media_host = "browser"
- } else {
- _default_mojo_media_services = [
- "cdm",
- "audio_decoder",
- "video_decoder",
- ]
- _default_mojo_media_host = "gpu"
- }
+ _default_mojo_media_host = "gpu"
} else if (is_chromeos || is_mac || is_win ||
(is_desktop_linux && use_vaapi)) {
_default_mojo_media_services = [ "video_decoder" ]