diff --git a/build/build_config.h b/build/build_config.h index d098eba7d4bd..8d420be31d5a 100644 --- a/build/build_config.h +++ b/build/build_config.h @@ -310,6 +310,12 @@ #define BUILDFLAG_INTERNAL_USE_STARBOARD_MEDIA() (0) #endif +#if defined(ENABLE_BUILDFLAG_USE_STARBOARD_URL_PLAYER) +#define BUILDFLAG_INTERNAL_USE_STARBOARD_URL_PLAYER() (1) +#else +#define BUILDFLAG_INTERNAL_USE_STARBOARD_URL_PLAYER() (0) +#endif + #if defined(ENABLE_BUILDFLAG_USE_EVERGREEN) #define BUILDFLAG_INTERNAL_USE_EVERGREEN() (1) #else diff --git a/cobalt/build/configs/BUILD.gn b/cobalt/build/configs/BUILD.gn index b1d06843dd4e..a359e742d09e 100644 --- a/cobalt/build/configs/BUILD.gn +++ b/cobalt/build/configs/BUILD.gn @@ -111,6 +111,14 @@ config("buildflag_defines") { defines += [ "ENABLE_BUILDFLAG_USE_STARBOARD_MEDIA" ] } + # use_starboard_url_player and BUILDFLAG(USE_STARBOARD_URL_PLAYER) should be + # used to wrap URL-based player functionality (e.g., HLS via AVPlayer on + # tvOS). This is a derived capability that is true only for tvOS builds with + # Starboard media enabled. + if (use_starboard_url_player) { + defines += [ "ENABLE_BUILDFLAG_USE_STARBOARD_URL_PLAYER" ] + } + # use_evergreen and BUILDFLAG(USE_EVERGREEN) should be used for # Evergreen-specific functionality, i.e. the Evergreen loader_app. Do not use # this flag for hermetic build functionality, instead use diff --git a/media/base/renderer.cc b/media/base/renderer.cc index bfa21ffc7cc8..51c40fb39b32 100644 --- a/media/base/renderer.cc +++ b/media/base/renderer.cc @@ -3,7 +3,9 @@ // found in the LICENSE file. #include "media/base/renderer.h" + #include "base/logging.h" +#include "build/build_config.h" namespace media { @@ -34,7 +36,11 @@ std::string GetRendererName(RendererType renderer_type) { #if BUILDFLAG(USE_STARBOARD_MEDIA) case RendererType::kStarboard: return "StarboardRenderer"; -#endif // BUILDFLAG(USE_STARBOARD_MEDIA) +#endif // BUILDFLAG(USE_STARBOARD_MEDIA) +#if BUILDFLAG(USE_STARBOARD_URL_PLAYER) + case RendererType::kUrlPlayer: + return "UrlPlayerRenderer"; +#endif // BUILDFLAG(USE_STARBOARD_URL_PLAYER) } } diff --git a/media/base/renderer.h b/media/base/renderer.h index cdb63a54ac74..6dbe77c31fda 100644 --- a/media/base/renderer.h +++ b/media/base/renderer.h @@ -9,6 +9,7 @@ #include "base/functional/callback.h" #include "base/time/time.h" +#include "build/build_config.h" #include "media/base/buffering_state.h" #include "media/base/demuxer_stream.h" #include "media/base/media_export.h" @@ -39,10 +40,15 @@ enum class RendererType { kTest = 11, // Renderer implementations used in tests #if BUILDFLAG(USE_STARBOARD_MEDIA) kStarboard = 12, // StarboardRendererFactory +#endif // BUILDFLAG(USE_STARBOARD_MEDIA) +#if BUILDFLAG(USE_STARBOARD_URL_PLAYER) + kUrlPlayer = 13, // UrlPlayerRendererClientFactory + kMaxValue = kUrlPlayer, +#elif BUILDFLAG(USE_STARBOARD_MEDIA) kMaxValue = kStarboard, -#else // BUILDFLAG(USE_STARBOARD_MEDIA) +#else kMaxValue = kTest, -#endif // BUILDFLAG(USE_STARBOARD_MEDIA) +#endif // BUILDFLAG(USE_STARBOARD_URL_PLAYER) }; // Get the name of the Renderer for `renderer_type`. The returned name could be diff --git a/media/mojo/mojom/BUILD.gn b/media/mojo/mojom/BUILD.gn index c15765653f54..0a97c6e23e0f 100644 --- a/media/mojo/mojom/BUILD.gn +++ b/media/mojo/mojom/BUILD.gn @@ -150,6 +150,10 @@ mojom("mojom") { enabled_features += [ "use_starboard_media" ] } + if (is_cobalt && use_starboard_url_player) { + enabled_features += [ "use_starboard_url_player" ] + } + shared_typemaps = [ { types = [ diff --git a/media/mojo/mojom/media_types.mojom b/media/mojo/mojom/media_types.mojom index d649d9e890a2..0621d33fbef5 100644 --- a/media/mojo/mojom/media_types.mojom +++ b/media/mojo/mojom/media_types.mojom @@ -650,6 +650,8 @@ enum RendererType { kTest= 11, // Renderer implementations used in tests [EnableIf=use_starboard_media] kStarboard = 12, // StarboardRendererFactory + [EnableIf=use_starboard_url_player] + kUrlPlayer = 13, // UrlPlayerRendererClientFactory }; // See media/base/demuxer.h for description. diff --git a/media/mojo/mojom/media_types_enum_mojom_traits.h b/media/mojo/mojom/media_types_enum_mojom_traits.h index 20563e88d10e..3a15ffa10210 100644 --- a/media/mojo/mojom/media_types_enum_mojom_traits.h +++ b/media/mojo/mojom/media_types_enum_mojom_traits.h @@ -391,7 +391,11 @@ struct EnumTraits { #if BUILDFLAG(USE_STARBOARD_MEDIA) case ::media::RendererType::kStarboard: return media::mojom::RendererType::kStarboard; -#endif // BUILDFLAG(USE_STARBOARD_MEDIA) +#endif // BUILDFLAG(USE_STARBOARD_MEDIA) +#if BUILDFLAG(USE_STARBOARD_URL_PLAYER) + case ::media::RendererType::kUrlPlayer: + return media::mojom::RendererType::kUrlPlayer; +#endif // BUILDFLAG(USE_STARBOARD_URL_PLAYER) } NOTREACHED(); @@ -436,7 +440,12 @@ struct EnumTraits { case media::mojom::RendererType::kStarboard: *output = ::media::RendererType::kStarboard; return true; -#endif // BUILDFLAG(USE_STARBOARD_MEDIA) +#endif // BUILDFLAG(USE_STARBOARD_MEDIA) +#if BUILDFLAG(USE_STARBOARD_URL_PLAYER) + case media::mojom::RendererType::kUrlPlayer: + *output = ::media::RendererType::kUrlPlayer; + return true; +#endif // BUILDFLAG(USE_STARBOARD_URL_PLAYER) } NOTREACHED(); diff --git a/starboard/build/buildflags.gni b/starboard/build/buildflags.gni index 0ce582db6d3e..04c2d3ae5fe5 100644 --- a/starboard/build/buildflags.gni +++ b/starboard/build/buildflags.gni @@ -23,3 +23,10 @@ declare_args() { is_cobalt && current_toolchain != host_toolchain && (!is_starboard || current_toolchain != v8_snapshot_toolchain) } + +if (is_ios) { + import("//build/config/apple/mobile_config.gni") + use_starboard_url_player = use_starboard_media && target_platform == "tvos" +} else { + use_starboard_url_player = false +} diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 0c8b02df7e97..31be098edba6 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml @@ -19946,6 +19946,8 @@ from previous Chrome versions. + +