| Index: media/gpu/gpu_video_decode_accelerator_factory.cc
|
| diff --git a/media/gpu/gpu_video_decode_accelerator_factory.cc b/media/gpu/gpu_video_decode_accelerator_factory.cc
|
| index c3eebb10d6e438aafba5aa92c68b0835bdda0f8e..6ff41537693b26ee1612ef55db96508e20f02013 100644
|
| --- a/media/gpu/gpu_video_decode_accelerator_factory.cc
|
| +++ b/media/gpu/gpu_video_decode_accelerator_factory.cc
|
| @@ -31,6 +31,8 @@
|
| #include "media/gpu/android_video_decode_accelerator.h"
|
| #include "media/gpu/android_video_surface_chooser_impl.h"
|
| #include "media/gpu/avda_codec_allocator.h"
|
| +#include "media/mojo/clients/mojo_android_overlay.h"
|
| +#include "services/service_manager/public/cpp/connector.h"
|
| #endif
|
|
|
| namespace media {
|
| @@ -43,7 +45,7 @@ GpuVideoDecodeAcceleratorFactory::Create(
|
| const BindGLImageCallback& bind_image_cb) {
|
| return base::WrapUnique(new GpuVideoDecodeAcceleratorFactory(
|
| get_gl_context_cb, make_context_current_cb, bind_image_cb,
|
| - GetGLES2DecoderCallback()));
|
| + GetGLES2DecoderCallback(), nullptr, nullptr));
|
| }
|
|
|
| // static
|
| @@ -52,10 +54,12 @@ GpuVideoDecodeAcceleratorFactory::CreateWithGLES2Decoder(
|
| const GetGLContextCallback& get_gl_context_cb,
|
| const MakeGLContextCurrentCallback& make_context_current_cb,
|
| const BindGLImageCallback& bind_image_cb,
|
| - const GetGLES2DecoderCallback& get_gles2_decoder_cb) {
|
| + const GetGLES2DecoderCallback& get_gles2_decoder_cb,
|
| + service_manager::Connector* connector,
|
| + const char* browser_service_name) {
|
| return base::WrapUnique(new GpuVideoDecodeAcceleratorFactory(
|
| get_gl_context_cb, make_context_current_cb, bind_image_cb,
|
| - get_gles2_decoder_cb));
|
| + get_gles2_decoder_cb, connector, browser_service_name));
|
| }
|
|
|
| // static
|
| @@ -251,24 +255,53 @@ GpuVideoDecodeAcceleratorFactory::CreateAndroidVDA(
|
| const gpu::GpuDriverBugWorkarounds& workarounds,
|
| const gpu::GpuPreferences& gpu_preferences) const {
|
| std::unique_ptr<VideoDecodeAccelerator> decoder;
|
| +
|
| + // To make unit-testing easier, convert the connector into a callback.
|
| + AndroidOverlayMojoFactoryCB overlay_cb;
|
| +#if defined(OS_ANDROID)
|
| + if (connector_ && browser_service_name_)
|
| + overlay_cb =
|
| + base::Bind(&GpuVideoDecodeAcceleratorFactory::CreateAndroidOverlay,
|
| + connector_, browser_service_name_);
|
| +#endif
|
| +
|
| decoder.reset(new AndroidVideoDecodeAccelerator(
|
| AVDACodecAllocator::GetInstance(),
|
| base::MakeUnique<AndroidVideoSurfaceChooserImpl>(),
|
| - make_context_current_cb_, get_gles2_decoder_cb_,
|
| + make_context_current_cb_, get_gles2_decoder_cb_, std::move(overlay_cb),
|
| AndroidVideoDecodeAccelerator::PlatformConfig::CreateDefault()));
|
| return decoder;
|
| }
|
| +
|
| +std::unique_ptr<media::AndroidOverlay>
|
| +GpuVideoDecodeAcceleratorFactory::CreateAndroidOverlay(
|
| + service_manager::Connector* connector,
|
| + const char* browser_service_name,
|
| + const base::UnguessableToken& routing_token,
|
| + media::AndroidOverlayConfig config) {
|
| + media::mojom::AndroidOverlayProviderPtr provider_ptr;
|
| + if (!connector || !browser_service_name)
|
| + return nullptr;
|
| +
|
| + connector->BindInterface(browser_service_name, &provider_ptr);
|
| + return base::MakeUnique<media::MojoAndroidOverlay>(
|
| + std::move(provider_ptr), std::move(config), routing_token);
|
| +}
|
| #endif
|
|
|
| GpuVideoDecodeAcceleratorFactory::GpuVideoDecodeAcceleratorFactory(
|
| const GetGLContextCallback& get_gl_context_cb,
|
| const MakeGLContextCurrentCallback& make_context_current_cb,
|
| const BindGLImageCallback& bind_image_cb,
|
| - const GetGLES2DecoderCallback& get_gles2_decoder_cb)
|
| + const GetGLES2DecoderCallback& get_gles2_decoder_cb,
|
| + service_manager::Connector* connector,
|
| + const char* browser_service_name)
|
| : get_gl_context_cb_(get_gl_context_cb),
|
| make_context_current_cb_(make_context_current_cb),
|
| bind_image_cb_(bind_image_cb),
|
| - get_gles2_decoder_cb_(get_gles2_decoder_cb) {}
|
| + get_gles2_decoder_cb_(get_gles2_decoder_cb),
|
| + connector_(connector),
|
| + browser_service_name_(browser_service_name) {}
|
|
|
| GpuVideoDecodeAcceleratorFactory::~GpuVideoDecodeAcceleratorFactory() {}
|
|
|
|
|