Skip to content

Commit d7a2be9

Browse files
authored
[media] Send maxVideoCapabilities to StarboardRenderer (#5756)
Send non-standard API HTMLVideoElement extension maxVideoCapabilities from the HTML Video Element to StarboardRenderer. This change allows StarboardRenderer to use the HTMLVideoElement extension maxVideoCapabilities to set a video stream with the specified maximums described in maxVideoCapabilities. To learn more about the extension itself and its use cases, please refer to the commit that included this extension at youtube/cobalt@6c593e0 b/326827007
1 parent 1fbbf3a commit d7a2be9

15 files changed

Lines changed: 59 additions & 16 deletions

content/renderer/media/media_factory.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,12 @@ blink::WebMediaPlayer* MediaFactory::CreateMediaPlayer(
443443
render_frame_->GetRenderFrameMediaPlaybackOptions(),
444444
decoder_factory_.get(),
445445
std::make_unique<blink::RemotePlaybackClientWrapperImpl>(client),
446+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
447+
&media_observer, client->GetElementId(),
448+
client->getMaxVideoCapabilities());
449+
#else // BUILDFLAG(USE_STARBOARD_MEDIA)
446450
&media_observer, client->GetElementId());
451+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
447452

448453
#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
449454
DCHECK(media_observer);
@@ -548,7 +553,11 @@ MediaFactory::CreateRendererFactorySelector(
548553
media::DecoderFactory* decoder_factory,
549554
std::unique_ptr<media::RemotePlaybackClientWrapper> client_wrapper,
550555
base::WeakPtr<media::MediaObserver>* out_media_observer,
556+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
557+
int element_id, const std::string& max_video_capabilities) {
558+
#else // BUILDFLAG(USE_STARBOARD_MEDIA)
551559
int element_id) {
560+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
552561
using media::RendererType;
553562

554563
RenderThreadImpl* render_thread = RenderThreadImpl::current();
@@ -619,9 +628,9 @@ MediaFactory::CreateRendererFactorySelector(
619628

620629
#if BUILDFLAG(ENABLE_MOJO_RENDERER)
621630
#if BUILDFLAG(USE_STARBOARD_MEDIA)
622-
// TODO(b/326827007): Revisit renderer to support secondary videos.
623631
media::RendererFactoryTraits renderer_factory_traits;
624632
GetContentClient()->renderer()->GetStarboardRendererFactoryTraits(&renderer_factory_traits);
633+
renderer_factory_traits.max_video_capabilities = max_video_capabilities;
625634
is_base_renderer_factory_set = true;
626635
factory_selector->AddBaseFactory(RendererType::kStarboard,
627636
std::make_unique<media::StarboardRendererClientFactory>(media_log,

content/renderer/media/media_factory.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,11 @@ class MediaFactory {
132132
media::DecoderFactory* decoder_factory,
133133
std::unique_ptr<media::RemotePlaybackClientWrapper> client_wrapper,
134134
base::WeakPtr<media::MediaObserver>* out_media_observer,
135+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
136+
int element_id, const std::string& max_video_capabilities);
137+
#else // BUILDFLAG(USE_STARBOARD_MEDIA)
135138
int element_id);
139+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
136140

137141
blink::WebMediaPlayer* CreateWebMediaPlayerForMediaStream(
138142
blink::WebMediaPlayerClient* client,

media/base/ipc/media_param_traits_macros.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ IPC_STRUCT_TRAITS_BEGIN(media::StarboardRendererConfig)
230230
IPC_STRUCT_TRAITS_MEMBER(overlay_plane_id)
231231
IPC_STRUCT_TRAITS_MEMBER(audio_write_duration_local)
232232
IPC_STRUCT_TRAITS_MEMBER(audio_write_duration_remote)
233+
IPC_STRUCT_TRAITS_MEMBER(max_video_capabilities)
233234
IPC_STRUCT_TRAITS_END()
234235
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
235236

media/base/starboard/renderer_factory_traits.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ struct MEDIA_EXPORT RendererFactoryTraits {
3131

3232
base::TimeDelta audio_write_duration_local = kNoTimestamp;
3333
base::TimeDelta audio_write_duration_remote = kNoTimestamp;
34+
std::string max_video_capabilities;
3435
BindHostReceiverCallback bind_host_receiver_callback = base::NullCallback();
3536
};
3637

media/base/starboard/starboard_renderer_config.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ StarboardRendererConfig& StarboardRendererConfig::operator=(
2525
StarboardRendererConfig::StarboardRendererConfig(
2626
const base::UnguessableToken& overlay_plane_id,
2727
base::TimeDelta audio_write_duration_local,
28-
base::TimeDelta audio_write_duration_remote)
28+
base::TimeDelta audio_write_duration_remote,
29+
const std::string& max_video_capabilities)
2930
: overlay_plane_id(overlay_plane_id),
3031
audio_write_duration_local(audio_write_duration_local),
31-
audio_write_duration_remote(audio_write_duration_remote) {}
32+
audio_write_duration_remote(audio_write_duration_remote),
33+
max_video_capabilities(max_video_capabilities) {}
3234

3335
} // namespace media

media/base/starboard/starboard_renderer_config.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
#ifndef MEDIA_BASE_STARBOARD_STARBOARD_RENDERER_CONFIG_H_
1616
#define MEDIA_BASE_STARBOARD_STARBOARD_RENDERER_CONFIG_H_
1717

18+
#include <string>
19+
1820
#include "base/time/time.h"
1921
#include "base/unguessable_token.h"
2022
#include "media/base/media_export.h"
@@ -26,13 +28,15 @@ struct MEDIA_EXPORT StarboardRendererConfig {
2628
StarboardRendererConfig();
2729
StarboardRendererConfig(const base::UnguessableToken& overlay_plane_id,
2830
base::TimeDelta audio_write_duration_local,
29-
base::TimeDelta audio_write_duration_remote);
31+
base::TimeDelta audio_write_duration_remote,
32+
const std::string& max_video_capabilities);
3033
StarboardRendererConfig(const StarboardRendererConfig&);
3134
StarboardRendererConfig& operator=(const StarboardRendererConfig&);
3235

3336
base::UnguessableToken overlay_plane_id;
3437
base::TimeDelta audio_write_duration_local;
3538
base::TimeDelta audio_write_duration_remote;
39+
std::string max_video_capabilities;
3640
};
3741

3842
} // namespace media

media/base/starboard/starboard_renderer_config_unittest.cc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
// limitations under the License.
1414

1515
#include "media/base/starboard/starboard_renderer_config.h"
16+
17+
#include <string>
18+
1619
#include "base/time/time.h"
1720
#include "base/unguessable_token.h"
1821
#include "testing/gtest/include/gtest/gtest.h"
@@ -24,11 +27,14 @@ TEST(StarboardRendererConfigTest, SunnyDay) {
2427
base::Microseconds(500000);
2528
constexpr base::TimeDelta audio_write_duration_remote =
2629
base::Microseconds(100000);
27-
StarboardRendererConfig config(base::UnguessableToken::Create(),
28-
audio_write_duration_local,
29-
audio_write_duration_remote);
30+
const std::string max_video_capabilities =
31+
"width=1920; height=1080; framerate=15;";
32+
StarboardRendererConfig config(
33+
base::UnguessableToken::Create(), audio_write_duration_local,
34+
audio_write_duration_remote, max_video_capabilities);
3035
EXPECT_EQ(config.audio_write_duration_local, audio_write_duration_local);
3136
EXPECT_EQ(config.audio_write_duration_remote, audio_write_duration_remote);
37+
EXPECT_EQ(config.max_video_capabilities, max_video_capabilities);
3238
}
3339

3440
} // namespace media

media/mojo/clients/starboard/starboard_renderer_client_factory.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ StarboardRendererClientFactory::StarboardRendererClientFactory(
4343
get_gpu_factories_cb_(get_gpu_factories_cb),
4444
audio_write_duration_local_(traits->audio_write_duration_local),
4545
audio_write_duration_remote_(traits->audio_write_duration_remote),
46+
max_video_capabilities_(traits->max_video_capabilities),
4647
bind_host_receiver_callback_(traits->bind_host_receiver_callback) {}
4748

4849
StarboardRendererClientFactory::~StarboardRendererClientFactory() = default;
@@ -92,9 +93,9 @@ std::unique_ptr<Renderer> StarboardRendererClientFactory::CreateRenderer(
9293
GpuVideoAcceleratorFactories* gpu_factories = get_gpu_factories_cb_.Run();
9394

9495
// Initialize StarboardRendererWrapper via StarboardRendererConfig.
95-
StarboardRendererConfig config(overlay_factory->overlay_plane_id(),
96-
audio_write_duration_local_,
97-
audio_write_duration_remote_);
96+
StarboardRendererConfig config(
97+
overlay_factory->overlay_plane_id(), audio_write_duration_local_,
98+
audio_write_duration_remote_, max_video_capabilities_);
9899
std::unique_ptr<media::MojoRenderer> mojo_renderer =
99100
mojo_renderer_factory_->CreateStarboardRenderer(
100101
std::move(media_log_pending_remote), config,

media/mojo/clients/starboard/starboard_renderer_client_factory.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class MEDIA_EXPORT StarboardRendererClientFactory final
6969
GetGpuFactoriesCB get_gpu_factories_cb_;
7070
const base::TimeDelta audio_write_duration_local_;
7171
const base::TimeDelta audio_write_duration_remote_;
72+
const std::string max_video_capabilities_;
7273
const BindHostReceiverCallback bind_host_receiver_callback_;
7374
};
7475

media/mojo/services/gpu_mojo_media_client.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ StarboardRendererTraits::StarboardRendererTraits(
114114
const base::UnguessableToken& overlay_plane_id,
115115
base::TimeDelta audio_write_duration_local,
116116
base::TimeDelta audio_write_duration_remote,
117+
const std::string& max_video_capabilities,
117118
mojo::PendingReceiver<mojom::StarboardRendererExtension>
118119
renderer_extension_receiver,
119120
mojo::PendingRemote<mojom::StarboardRendererClientExtension>
@@ -123,6 +124,7 @@ StarboardRendererTraits::StarboardRendererTraits(
123124
overlay_plane_id(overlay_plane_id),
124125
audio_write_duration_local(audio_write_duration_local),
125126
audio_write_duration_remote(audio_write_duration_remote),
127+
max_video_capabilities(max_video_capabilities),
126128
renderer_extension_receiver(std::move(renderer_extension_receiver)),
127129
client_extension_remote(std::move(client_extension_remote)) {}
128130
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
@@ -286,6 +288,7 @@ std::unique_ptr<Renderer> GpuMojoMediaClient::CreateStarboardRenderer(
286288
StarboardRendererTraits traits(std::move(task_runner),
287289
std::move(media_log_remote), config.overlay_plane_id,
288290
config.audio_write_duration_local, config.audio_write_duration_remote,
291+
config.max_video_capabilities,
289292
std::move(renderer_extension_receiver),
290293
std::move(client_extension_remote));
291294
return CreatePlatformStarboardRenderer(traits);

0 commit comments

Comments
 (0)