Skip to content

Commit c88c9b3

Browse files
authored
media: Pass AndroidOverlayMojoFactoryCB to StarboardRenderer (youtube#6461)
Passes `AndroidOverlayMojoFactoryCB` to `StarboardRenderer` from `GpuMojoMediaClient` so that `StarboardRenderer` can create `AndroidOverlay`. Issue: 429257581
1 parent a77cb44 commit c88c9b3

File tree

8 files changed

+77
-13
lines changed

8 files changed

+77
-13
lines changed

media/mojo/services/gpu_mojo_media_client.cc

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,9 @@ StarboardRendererTraits::StarboardRendererTraits(
120120
renderer_extension_receiver,
121121
mojo::PendingRemote<mojom::StarboardRendererClientExtension>
122122
client_extension_remote,
123-
GetStarboardCommandBufferStubCB get_starboard_command_buffer_stub_cb)
123+
GetStarboardCommandBufferStubCB get_starboard_command_buffer_stub_cb,
124+
AndroidOverlayMojoFactoryCB android_overlay_factory_cb
125+
)
124126
: task_runner(std::move(task_runner)),
125127
gpu_task_runner(std::move(gpu_task_runner)),
126128
media_log_remote(std::move(media_log_remote)),
@@ -131,7 +133,8 @@ StarboardRendererTraits::StarboardRendererTraits(
131133
renderer_extension_receiver(std::move(renderer_extension_receiver)),
132134
client_extension_remote(std::move(client_extension_remote)),
133135
get_starboard_command_buffer_stub_cb(
134-
std::move(get_starboard_command_buffer_stub_cb)) {}
136+
std::move(get_starboard_command_buffer_stub_cb)),
137+
android_overlay_factory_cb(std::move(android_overlay_factory_cb)) {}
135138
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
136139

137140
GpuMojoMediaClient::GpuMojoMediaClient(
@@ -296,7 +299,8 @@ std::unique_ptr<Renderer> GpuMojoMediaClient::CreateStarboardRenderer(
296299
config.audio_write_duration_remote, config.max_video_capabilities,
297300
std::move(renderer_extension_receiver),
298301
std::move(client_extension_remote), base::BindRepeating(
299-
&GetCommandBufferStub, gpu_task_runner_, media_gpu_channel_manager_));
302+
&GetCommandBufferStub, gpu_task_runner_, media_gpu_channel_manager_),
303+
android_overlay_factory_cb_);
300304
return CreatePlatformStarboardRenderer(std::move(traits));
301305
}
302306
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)

media/mojo/services/gpu_mojo_media_client.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ struct StarboardRendererTraits {
149149

150150
// StarboardRenderer uses this to post tasks on gpu thread.
151151
GetStarboardCommandBufferStubCB get_starboard_command_buffer_stub_cb;
152+
153+
// StarboardRenderer uses this to create an AndroidOverlay.
154+
AndroidOverlayMojoFactoryCB android_overlay_factory_cb;
152155

153156
StarboardRendererTraits(
154157
scoped_refptr<base::SequencedTaskRunner> task_runner,
@@ -163,7 +166,9 @@ struct StarboardRendererTraits {
163166
mojo::PendingRemote<mojom::StarboardRendererClientExtension>
164167
client_extension_remote,
165168
GetStarboardCommandBufferStubCB
166-
get_starboard_command_buffer_stub_cb);
169+
get_starboard_command_buffer_stub_cb,
170+
AndroidOverlayMojoFactoryCB android_overlay_factory_cb
171+
);
167172
StarboardRendererTraits(StarboardRendererTraits&& that) = default;
168173
~StarboardRendererTraits();
169174
};

media/mojo/services/starboard/starboard_renderer_wrapper.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ StarboardRendererWrapper::StarboardRendererWrapper(
3838
traits.overlay_plane_id,
3939
traits.audio_write_duration_local,
4040
traits.audio_write_duration_remote,
41-
traits.max_video_capabilities) {
41+
traits.max_video_capabilities
42+
#if BUILDFLAG(IS_ANDROID)
43+
,
44+
std::move(traits.android_overlay_factory_cb)
45+
#endif // BUILDFLAG(IS_ANDROID)
46+
) {
4247
DETACH_FROM_THREAD(thread_checker_);
4348
base::SequenceBound<StarboardGpuFactoryImpl> gpu_factory_impl(
4449
traits.gpu_task_runner,

media/mojo/services/starboard/starboard_renderer_wrapper.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
#include "mojo/public/cpp/bindings/receiver.h"
3333
#include "mojo/public/cpp/bindings/remote.h"
3434

35+
#if BUILDFLAG(IS_ANDROID)
36+
#include "media/base/android_overlay_mojo_factory.h"
37+
#endif // BUILDFLAG(IS_ANDROID)
38+
3539
namespace base {
3640
class TimeDelta;
3741
} // namespace base

media/mojo/services/starboard/starboard_renderer_wrapper_unittest.cc

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,24 @@ class MockStarboardRenderer : public StarboardRenderer {
5151
const base::UnguessableToken& overlay_plane_id,
5252
TimeDelta audio_write_duration_local,
5353
TimeDelta audio_write_duration_remote,
54-
const std::string& max_video_capabilities)
54+
const std::string& max_video_capabilities
55+
#if BUILDFLAG(IS_ANDROID)
56+
,
57+
const AndroidOverlayMojoFactoryCB android_overlay_factory_cb
58+
#endif // BUILDFLAG(IS_ANDROID)
59+
)
5560
: StarboardRenderer(task_runner,
5661
std::move(media_log),
5762
overlay_plane_id,
5863
audio_write_duration_local,
5964
audio_write_duration_remote,
60-
max_video_capabilities) {}
65+
max_video_capabilities
66+
#if BUILDFLAG(IS_ANDROID)
67+
,
68+
android_overlay_factory_cb
69+
#endif // BUILDFLAG(IS_ANDROID)
70+
) {
71+
}
6172

6273
MockStarboardRenderer(const MockStarboardRenderer&) = delete;
6374
MockStarboardRenderer& operator=(const MockStarboardRenderer&) = delete;
@@ -135,7 +146,12 @@ class StarboardRendererWrapperTest : public testing::Test {
135146
base::UnguessableToken::Create(),
136147
base::Seconds(1),
137148
base::Seconds(1),
138-
std::string())),
149+
std::string()
150+
#if BUILDFLAG(IS_ANDROID)
151+
,
152+
AndroidOverlayMojoFactoryCB()
153+
#endif // BUILDFLAG(IS_ANDROID)
154+
)),
139155
mock_gpu_factory_(task_environment_.GetMainThreadTaskRunner()) {
140156
// Setup MockStarboardGpuFactory as StarboardGpuFactory so
141157
// it can overwrite |gpu_factory_| in StarboardRendererWrapper
@@ -153,7 +169,8 @@ class StarboardRendererWrapperTest : public testing::Test {
153169
std::move(media_log_remote), base::UnguessableToken::Create(),
154170
base::Seconds(1), base::Seconds(1), std::string(),
155171
std::move(renderer_extension_receiver),
156-
std::move(client_extension_remote), base::NullCallback());
172+
std::move(client_extension_remote), base::NullCallback(),
173+
AndroidOverlayMojoFactoryCB());
157174
renderer_wrapper_ =
158175
std::make_unique<StarboardRendererWrapper>(std::move(traits));
159176
renderer_wrapper_->SetRendererForTesting(mock_renderer_.get());

media/starboard/starboard_renderer.cc

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,12 @@ StarboardRenderer::StarboardRenderer(
114114
const base::UnguessableToken& overlay_plane_id,
115115
TimeDelta audio_write_duration_local,
116116
TimeDelta audio_write_duration_remote,
117-
const std::string& max_video_capabilities)
117+
const std::string& max_video_capabilities
118+
#if BUILDFLAG(IS_ANDROID)
119+
,
120+
const AndroidOverlayMojoFactoryCB android_overlay_factory_cb
121+
#endif // BUILDFLAG(IS_ANDROID)
122+
)
118123
: state_(STATE_UNINITIALIZED),
119124
task_runner_(task_runner),
120125
media_log_(std::move(media_log)),
@@ -123,7 +128,12 @@ StarboardRenderer::StarboardRenderer(
123128
buffering_state_(BUFFERING_HAVE_NOTHING),
124129
audio_write_duration_local_(audio_write_duration_local),
125130
audio_write_duration_remote_(audio_write_duration_remote),
126-
max_video_capabilities_(max_video_capabilities) {
131+
max_video_capabilities_(max_video_capabilities)
132+
#if BUILDFLAG(IS_ANDROID)
133+
,
134+
android_overlay_factory_cb_(std::move(android_overlay_factory_cb))
135+
#endif // BUILDFLAG(IS_ANDROID)
136+
{
127137
DCHECK(task_runner_);
128138
DCHECK(media_log_);
129139
DCHECK(set_bounds_helper_);
@@ -215,6 +225,8 @@ void StarboardRenderer::Initialize(MediaResource* media_resource,
215225

216226
// |init_cb| will be called inside |CreatePlayerBridge()|.
217227
state_ = STATE_INITIALIZING;
228+
229+
// TODO: b/429435008 - Allow StarboardRenderer to request AndroidOverlay.
218230
CreatePlayerBridge();
219231
}
220232

media/starboard/starboard_renderer.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535
#include "media/starboard/sbplayer_set_bounds_helper.h"
3636
#include "third_party/abseil-cpp/absl/types/optional.h"
3737

38+
#if BUILDFLAG(IS_ANDROID)
39+
#include "media/base/android_overlay_mojo_factory.h"
40+
#endif // BUILDFLAG(IS_ANDROID)
41+
3842
namespace media {
3943
using base::Time;
4044
using base::TimeDelta;
@@ -51,7 +55,12 @@ class MEDIA_EXPORT StarboardRenderer : public Renderer,
5155
const base::UnguessableToken& overlay_plane_id,
5256
TimeDelta audio_write_duration_local,
5357
TimeDelta audio_write_duration_remote,
54-
const std::string& max_video_capabilities);
58+
const std::string& max_video_capabilities
59+
#if BUILDFLAG(IS_ANDROID)
60+
,
61+
const AndroidOverlayMojoFactoryCB android_overlay_factory_cb
62+
#endif // BUILDFLAG(IS_ANDROID)
63+
);
5564

5665
// Disallow copy and assign.
5766
StarboardRenderer(const StarboardRenderer&) = delete;
@@ -176,6 +185,9 @@ class MEDIA_EXPORT StarboardRenderer : public Renderer,
176185
const TimeDelta audio_write_duration_local_;
177186
const TimeDelta audio_write_duration_remote_;
178187
const std::string max_video_capabilities_;
188+
#if BUILDFLAG(IS_ANDROID)
189+
const AndroidOverlayMojoFactoryCB android_overlay_factory_cb_;
190+
#endif // BUILDFLAG(IS_ANDROID)
179191

180192
raw_ptr<DemuxerStream> audio_stream_ = nullptr;
181193
raw_ptr<DemuxerStream> video_stream_ = nullptr;

media/starboard/starboard_renderer_unittest.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,12 @@ class StarboardRendererTest : public testing::Test {
181181
/*overlay_plane_id=*/base::UnguessableToken::Create(),
182182
/*audio_write_duration_local=*/base::Seconds(1),
183183
/*audio_write_duration_remote=*/base::Seconds(1),
184-
/*max_video_capabilities=*/"");
184+
/*max_video_capabilities=*/""
185+
#if BUILDFLAG(IS_ANDROID)
186+
,
187+
/*android_overlay_factory_cb=*/AndroidOverlayMojoFactoryCB()
188+
#endif // BUILDFLAG(IS_ANDROID)
189+
);
185190
base::MockOnceCallback<void(bool)> set_cdm_cb_;
186191
base::MockOnceCallback<void(PipelineStatus)> renderer_init_cb_;
187192
NiceMock<MockCdmContext> cdm_context_;

0 commit comments

Comments
 (0)