Commit 1833af95 authored by Mario Sanchez Prada's avatar Mario Sanchez Prada Committed by Commit Bot

Migrate references to interfaces from video_decoder.mojom to new mojo types

Convert the remaining bits in both the browser and renderer processes
for the media::mojom::VideoDecoder, media::mojom::VideoDecoderClient and
media::mojom::VideoFrameHandleReleaser to the new mojo types.

Bug: 955171, 978694
Change-Id: Idbf067fa0d374ec8c52abd22774e9e2a29c4ed99
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865214Reviewed-by: default avatarJochen Eisinger <jochen@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Reviewed-by: default avatarDan Sanders <sandersd@chromium.org>
Reviewed-by: default avatarOksana Zhuravlova <oksamyt@chromium.org>
Commit-Queue: Mario Sanchez Prada <mario@igalia.com>
Cr-Commit-Position: refs/heads/master@{#707749}
parent ebdcae4d
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "media/mojo/services/media_interface_provider.h" #include "media/mojo/services/media_interface_provider.h"
#include "media/renderers/paint_canvas_video_renderer.h" #include "media/renderers/paint_canvas_video_renderer.h"
#include "media/video/gpu_video_accelerator_factories.h" #include "media/video/gpu_video_accelerator_factories.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/service_manager/public/cpp/connector.h" #include "services/service_manager/public/cpp/connector.h"
#include "services/viz/public/cpp/gpu/context_provider_command_buffer.h" #include "services/viz/public/cpp/gpu/context_provider_command_buffer.h"
#include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkBitmap.h"
...@@ -209,15 +210,16 @@ void DownloadMediaParser::OnGpuVideoAcceleratorFactoriesReady( ...@@ -209,15 +210,16 @@ void DownloadMediaParser::OnGpuVideoAcceleratorFactoriesReady(
} }
void DownloadMediaParser::DecodeVideoFrame() { void DownloadMediaParser::DecodeVideoFrame() {
media::mojom::VideoDecoderPtr video_decoder_ptr; mojo::PendingRemote<media::mojom::VideoDecoder> video_decoder_remote;
GetMediaInterfaceFactory()->CreateVideoDecoder( GetMediaInterfaceFactory()->CreateVideoDecoder(
mojo::MakeRequest(&video_decoder_ptr)); video_decoder_remote.InitWithNewPipeAndPassReceiver());
// Build and config the decoder. // Build and config the decoder.
DCHECK(gpu_factories_); DCHECK(gpu_factories_);
auto mojo_decoder = std::make_unique<media::MojoVideoDecoder>( auto mojo_decoder = std::make_unique<media::MojoVideoDecoder>(
base::ThreadTaskRunnerHandle::Get(), gpu_factories_.get(), this, base::ThreadTaskRunnerHandle::Get(), gpu_factories_.get(), this,
std::move(video_decoder_ptr), media::VideoDecoderImplementation::kDefault, std::move(video_decoder_remote),
media::VideoDecoderImplementation::kDefault,
base::BindRepeating(&OnRequestOverlayInfo), gfx::ColorSpace()); base::BindRepeating(&OnRequestOverlayInfo), gfx::ColorSpace());
decoder_ = std::make_unique<media::VideoThumbnailDecoder>( decoder_ = std::make_unique<media::VideoThumbnailDecoder>(
......
...@@ -157,11 +157,11 @@ void MediaInterfaceProxy::CreateAudioDecoder( ...@@ -157,11 +157,11 @@ void MediaInterfaceProxy::CreateAudioDecoder(
} }
void MediaInterfaceProxy::CreateVideoDecoder( void MediaInterfaceProxy::CreateVideoDecoder(
media::mojom::VideoDecoderRequest request) { mojo::PendingReceiver<media::mojom::VideoDecoder> receiver) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
InterfaceFactory* factory = media_interface_factory_ptr_->Get(); InterfaceFactory* factory = media_interface_factory_ptr_->Get();
if (factory) if (factory)
factory->CreateVideoDecoder(std::move(request)); factory->CreateVideoDecoder(std::move(receiver));
} }
void MediaInterfaceProxy::CreateDefaultRenderer( void MediaInterfaceProxy::CreateDefaultRenderer(
......
...@@ -51,7 +51,8 @@ class MediaInterfaceProxy : public media::mojom::InterfaceFactory { ...@@ -51,7 +51,8 @@ class MediaInterfaceProxy : public media::mojom::InterfaceFactory {
// media::mojom::InterfaceFactory implementation. // media::mojom::InterfaceFactory implementation.
void CreateAudioDecoder( void CreateAudioDecoder(
mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) final; mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) final;
void CreateVideoDecoder(media::mojom::VideoDecoderRequest request) final; void CreateVideoDecoder(
mojo::PendingReceiver<media::mojom::VideoDecoder> receiver) final;
void CreateDefaultRenderer(const std::string& audio_device_id, void CreateDefaultRenderer(const std::string& audio_device_id,
media::mojom::RendererRequest request) final; media::mojom::RendererRequest request) final;
#if BUILDFLAG(ENABLE_CAST_RENDERER) #if BUILDFLAG(ENABLE_CAST_RENDERER)
......
...@@ -34,12 +34,12 @@ void VideoDecoderProxy::CreateAudioDecoder( ...@@ -34,12 +34,12 @@ void VideoDecoderProxy::CreateAudioDecoder(
mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) {} mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) {}
void VideoDecoderProxy::CreateVideoDecoder( void VideoDecoderProxy::CreateVideoDecoder(
media::mojom::VideoDecoderRequest request) { mojo::PendingReceiver<media::mojom::VideoDecoder> receiver) {
DVLOG(2) << __func__; DVLOG(2) << __func__;
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
InterfaceFactory* factory = GetMediaInterfaceFactory(); InterfaceFactory* factory = GetMediaInterfaceFactory();
if (factory) if (factory)
factory->CreateVideoDecoder(std::move(request)); factory->CreateVideoDecoder(std::move(receiver));
} }
void VideoDecoderProxy::CreateDefaultRenderer( void VideoDecoderProxy::CreateDefaultRenderer(
......
...@@ -32,7 +32,8 @@ class VideoDecoderProxy : public media::mojom::InterfaceFactory { ...@@ -32,7 +32,8 @@ class VideoDecoderProxy : public media::mojom::InterfaceFactory {
// media::mojom::InterfaceFactory implementation. // media::mojom::InterfaceFactory implementation.
void CreateAudioDecoder( void CreateAudioDecoder(
mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) final; mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) final;
void CreateVideoDecoder(media::mojom::VideoDecoderRequest request) final; void CreateVideoDecoder(
mojo::PendingReceiver<media::mojom::VideoDecoder> receiver) final;
void CreateDefaultRenderer(const std::string& audio_device_id, void CreateDefaultRenderer(const std::string& audio_device_id,
media::mojom::RendererRequest request) final; media::mojom::RendererRequest request) final;
#if BUILDFLAG(ENABLE_CAST_RENDERER) #if BUILDFLAG(ENABLE_CAST_RENDERER)
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "media/mojo/clients/mojo_video_encode_accelerator.h" #include "media/mojo/clients/mojo_video_encode_accelerator.h"
#include "media/video/video_encode_accelerator.h" #include "media/video/video_encode_accelerator.h"
#include "mojo/public/cpp/base/shared_memory_utils.h" #include "mojo/public/cpp/base/shared_memory_utils.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/viz/public/cpp/gpu/context_provider_command_buffer.h" #include "services/viz/public/cpp/gpu/context_provider_command_buffer.h"
#include "third_party/skia/include/core/SkPostConfig.h" #include "third_party/skia/include/core/SkPostConfig.h"
...@@ -129,7 +130,8 @@ void GpuVideoAcceleratorFactoriesImpl::BindOnTaskRunner( ...@@ -129,7 +130,8 @@ void GpuVideoAcceleratorFactoriesImpl::BindOnTaskRunner(
// (a) saves an ipc call, and (b) makes the return of those configs atomic. // (a) saves an ipc call, and (b) makes the return of those configs atomic.
// Otherwise, we might have received configs for kDefault but not yet // Otherwise, we might have received configs for kDefault but not yet
// kAlternate, for example. // kAlternate, for example.
interface_factory_->CreateVideoDecoder(mojo::MakeRequest(&video_decoder_)); interface_factory_->CreateVideoDecoder(
video_decoder_.BindNewPipeAndPassReceiver());
video_decoder_->GetSupportedConfigs(base::BindOnce( video_decoder_->GetSupportedConfigs(base::BindOnce(
&GpuVideoAcceleratorFactoriesImpl::OnSupportedDecoderConfigs, &GpuVideoAcceleratorFactoriesImpl::OnSupportedDecoderConfigs,
base::Unretained(this))); base::Unretained(this)));
...@@ -236,8 +238,9 @@ GpuVideoAcceleratorFactoriesImpl::CreateVideoDecoder( ...@@ -236,8 +238,9 @@ GpuVideoAcceleratorFactoriesImpl::CreateVideoDecoder(
if (CheckContextLost()) if (CheckContextLost())
return nullptr; return nullptr;
media::mojom::VideoDecoderPtr video_decoder; mojo::PendingRemote<media::mojom::VideoDecoder> video_decoder;
interface_factory_->CreateVideoDecoder(mojo::MakeRequest(&video_decoder)); interface_factory_->CreateVideoDecoder(
video_decoder.InitWithNewPipeAndPassReceiver());
return std::make_unique<media::MojoVideoDecoder>( return std::make_unique<media::MojoVideoDecoder>(
task_runner_, this, media_log, std::move(video_decoder), implementation, task_runner_, this, media_log, std::move(video_decoder), implementation,
request_overlay_info_cb, rendering_color_space_); request_overlay_info_cb, rendering_color_space_);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "media/mojo/mojom/video_encode_accelerator.mojom.h" #include "media/mojo/mojom/video_encode_accelerator.mojom.h"
#include "media/video/gpu_video_accelerator_factories.h" #include "media/video/gpu_video_accelerator_factories.h"
#include "media/video/supported_video_decoder_config.h" #include "media/video/supported_video_decoder_config.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size.h"
namespace gpu { namespace gpu {
...@@ -178,7 +179,7 @@ class CONTENT_EXPORT GpuVideoAcceleratorFactoriesImpl ...@@ -178,7 +179,7 @@ class CONTENT_EXPORT GpuVideoAcceleratorFactoriesImpl
media::mojom::VideoEncodeAcceleratorProviderPtr vea_provider_; media::mojom::VideoEncodeAcceleratorProviderPtr vea_provider_;
// SupportedDecoderConfigs state. // SupportedDecoderConfigs state.
mojo::InterfacePtr<media::mojom::VideoDecoder> video_decoder_; mojo::Remote<media::mojom::VideoDecoder> video_decoder_;
base::Lock supported_decoder_configs_lock_; base::Lock supported_decoder_configs_lock_;
// If the Optional is empty, then we have not yet gotten the configs. If the // If the Optional is empty, then we have not yet gotten the configs. If the
// Optional contains an empty vector, then we have gotten the result and there // Optional contains an empty vector, then we have gotten the result and there
......
...@@ -40,16 +40,16 @@ void MediaInterfaceFactory::CreateAudioDecoder( ...@@ -40,16 +40,16 @@ void MediaInterfaceFactory::CreateAudioDecoder(
} }
void MediaInterfaceFactory::CreateVideoDecoder( void MediaInterfaceFactory::CreateVideoDecoder(
media::mojom::VideoDecoderRequest request) { mojo::PendingReceiver<media::mojom::VideoDecoder> receiver) {
if (!task_runner_->BelongsToCurrentThread()) { if (!task_runner_->BelongsToCurrentThread()) {
task_runner_->PostTask( task_runner_->PostTask(
FROM_HERE, base::BindOnce(&MediaInterfaceFactory::CreateVideoDecoder, FROM_HERE, base::BindOnce(&MediaInterfaceFactory::CreateVideoDecoder,
weak_this_, std::move(request))); weak_this_, std::move(receiver)));
return; return;
} }
DVLOG(1) << __func__; DVLOG(1) << __func__;
GetMediaInterfaceFactory()->CreateVideoDecoder(std::move(request)); GetMediaInterfaceFactory()->CreateVideoDecoder(std::move(receiver));
} }
void MediaInterfaceFactory::CreateDefaultRenderer( void MediaInterfaceFactory::CreateDefaultRenderer(
......
...@@ -36,7 +36,8 @@ class CONTENT_EXPORT MediaInterfaceFactory ...@@ -36,7 +36,8 @@ class CONTENT_EXPORT MediaInterfaceFactory
// media::mojom::InterfaceFactory implementation. // media::mojom::InterfaceFactory implementation.
void CreateAudioDecoder( void CreateAudioDecoder(
mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) final; mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) final;
void CreateVideoDecoder(media::mojom::VideoDecoderRequest request) final; void CreateVideoDecoder(
mojo::PendingReceiver<media::mojom::VideoDecoder> receiver) final;
void CreateDefaultRenderer(const std::string& audio_device_id, void CreateDefaultRenderer(const std::string& audio_device_id,
media::mojom::RendererRequest request) final; media::mojom::RendererRequest request) final;
#if BUILDFLAG(ENABLE_CAST_RENDERER) #if BUILDFLAG(ENABLE_CAST_RENDERER)
......
...@@ -49,26 +49,29 @@ void MojoDecoderFactory::CreateVideoDecoders( ...@@ -49,26 +49,29 @@ void MojoDecoderFactory::CreateVideoDecoders(
const gfx::ColorSpace& target_color_space, const gfx::ColorSpace& target_color_space,
std::vector<std::unique_ptr<VideoDecoder>>* video_decoders) { std::vector<std::unique_ptr<VideoDecoder>>* video_decoders) {
#if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
mojom::VideoDecoderPtr video_decoder_ptr;
#if defined(OS_WIN) #if defined(OS_WIN)
// If the D3D11VideoDecoder is enabled, then push a kAlternate decoder ahead // If the D3D11VideoDecoder is enabled, then push a kAlternate decoder ahead
// of the default one. // of the default one.
if (base::FeatureList::IsEnabled(media::kD3D11VideoDecoder)) { if (base::FeatureList::IsEnabled(media::kD3D11VideoDecoder)) {
mojo::PendingRemote<mojom::VideoDecoder> d3d11_video_decoder_remote;
interface_factory_->CreateVideoDecoder( interface_factory_->CreateVideoDecoder(
mojo::MakeRequest(&video_decoder_ptr)); d3d11_video_decoder_remote.InitWithNewPipeAndPassReceiver());
video_decoders->push_back(std::make_unique<MojoVideoDecoder>( video_decoders->push_back(std::make_unique<MojoVideoDecoder>(
task_runner, gpu_factories, media_log, std::move(video_decoder_ptr), task_runner, gpu_factories, media_log,
std::move(d3d11_video_decoder_remote),
VideoDecoderImplementation::kAlternate, request_overlay_info_cb, VideoDecoderImplementation::kAlternate, request_overlay_info_cb,
target_color_space)); target_color_space));
} }
#endif // defined(OS_WIN) #endif // defined(OS_WIN)
mojo::PendingRemote<mojom::VideoDecoder> d3d11_video_decoder_remote;
interface_factory_->CreateVideoDecoder(mojo::MakeRequest(&video_decoder_ptr)); interface_factory_->CreateVideoDecoder(
d3d11_video_decoder_remote.InitWithNewPipeAndPassReceiver());
video_decoders->push_back(std::make_unique<MojoVideoDecoder>( video_decoders->push_back(std::make_unique<MojoVideoDecoder>(
task_runner, gpu_factories, media_log, std::move(video_decoder_ptr), task_runner, gpu_factories, media_log,
std::move(d3d11_video_decoder_remote),
VideoDecoderImplementation::kDefault, request_overlay_info_cb, VideoDecoderImplementation::kDefault, request_overlay_info_cb,
target_color_space)); target_color_space));
......
...@@ -28,6 +28,9 @@ ...@@ -28,6 +28,9 @@
#include "media/video/gpu_video_accelerator_factories.h" #include "media/video/gpu_video_accelerator_factories.h"
#include "media/video/video_decode_accelerator.h" #include "media/video/video_decode_accelerator.h"
#include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/shared_remote.h"
namespace media { namespace media {
namespace { namespace {
...@@ -69,22 +72,22 @@ class MojoVideoFrameHandleReleaser ...@@ -69,22 +72,22 @@ class MojoVideoFrameHandleReleaser
REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE(); REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE();
MojoVideoFrameHandleReleaser( MojoVideoFrameHandleReleaser(
mojom::VideoFrameHandleReleaserPtrInfo mojo::PendingRemote<mojom::VideoFrameHandleReleaser>
video_frame_handle_releaser_ptr_info, video_frame_handle_releaser_remote,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) { scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
// Connection errors are not handled because we wouldn't do anything // Connection errors are not handled because we wouldn't do anything
// differently. ("If a tree falls in a forest...") // differently. ("If a tree falls in a forest...")
video_frame_handle_releaser_ = video_frame_handle_releaser_ =
mojom::ThreadSafeVideoFrameHandleReleaserPtr::Create( mojo::SharedRemote<mojom::VideoFrameHandleReleaser>(
std::move(video_frame_handle_releaser_ptr_info), std::move(video_frame_handle_releaser_remote),
std::move(task_runner)); std::move(task_runner));
} }
void ReleaseVideoFrame(const base::UnguessableToken& release_token, void ReleaseVideoFrame(const base::UnguessableToken& release_token,
const gpu::SyncToken& release_sync_token) { const gpu::SyncToken& release_sync_token) {
DVLOG(3) << __func__ << "(" << release_token << ")"; DVLOG(3) << __func__ << "(" << release_token << ")";
(*video_frame_handle_releaser_) video_frame_handle_releaser_->ReleaseVideoFrame(release_token,
->ReleaseVideoFrame(release_token, release_sync_token); release_sync_token);
} }
// Create a ReleaseMailboxCB that calls Release(). Since the callback holds a // Create a ReleaseMailboxCB that calls Release(). Since the callback holds a
...@@ -101,7 +104,7 @@ class MojoVideoFrameHandleReleaser ...@@ -101,7 +104,7 @@ class MojoVideoFrameHandleReleaser
friend class base::RefCountedThreadSafe<MojoVideoFrameHandleReleaser>; friend class base::RefCountedThreadSafe<MojoVideoFrameHandleReleaser>;
~MojoVideoFrameHandleReleaser() {} ~MojoVideoFrameHandleReleaser() {}
scoped_refptr<mojom::ThreadSafeVideoFrameHandleReleaserPtr> mojo::SharedRemote<mojom::VideoFrameHandleReleaser>
video_frame_handle_releaser_; video_frame_handle_releaser_;
DISALLOW_COPY_AND_ASSIGN(MojoVideoFrameHandleReleaser); DISALLOW_COPY_AND_ASSIGN(MojoVideoFrameHandleReleaser);
...@@ -111,17 +114,16 @@ MojoVideoDecoder::MojoVideoDecoder( ...@@ -111,17 +114,16 @@ MojoVideoDecoder::MojoVideoDecoder(
scoped_refptr<base::SingleThreadTaskRunner> task_runner, scoped_refptr<base::SingleThreadTaskRunner> task_runner,
GpuVideoAcceleratorFactories* gpu_factories, GpuVideoAcceleratorFactories* gpu_factories,
MediaLog* media_log, MediaLog* media_log,
mojom::VideoDecoderPtr remote_decoder, mojo::PendingRemote<mojom::VideoDecoder> pending_remote_decoder,
VideoDecoderImplementation implementation, VideoDecoderImplementation implementation,
const RequestOverlayInfoCB& request_overlay_info_cb, const RequestOverlayInfoCB& request_overlay_info_cb,
const gfx::ColorSpace& target_color_space) const gfx::ColorSpace& target_color_space)
: task_runner_(task_runner), : task_runner_(task_runner),
remote_decoder_info_(remote_decoder.PassInterface()), pending_remote_decoder_(std::move(pending_remote_decoder)),
gpu_factories_(gpu_factories), gpu_factories_(gpu_factories),
timestamps_(128), timestamps_(128),
writer_capacity_( writer_capacity_(
GetDefaultDecoderBufferConverterCapacity(DemuxerStream::VIDEO)), GetDefaultDecoderBufferConverterCapacity(DemuxerStream::VIDEO)),
client_binding_(this),
media_log_service_(media_log), media_log_service_(media_log),
media_log_binding_(&media_log_service_), media_log_binding_(&media_log_service_),
request_overlay_info_cb_(request_overlay_info_cb), request_overlay_info_cb_(request_overlay_info_cb),
...@@ -338,15 +340,17 @@ void MojoVideoDecoder::BindRemoteDecoder() { ...@@ -338,15 +340,17 @@ void MojoVideoDecoder::BindRemoteDecoder() {
DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(task_runner_->BelongsToCurrentThread());
DCHECK(!remote_decoder_bound_); DCHECK(!remote_decoder_bound_);
remote_decoder_.Bind(std::move(remote_decoder_info_)); remote_decoder_.Bind(std::move(pending_remote_decoder_));
remote_decoder_bound_ = true; remote_decoder_bound_ = true;
remote_decoder_.set_connection_error_handler( remote_decoder_.set_disconnect_handler(
base::Bind(&MojoVideoDecoder::Stop, base::Unretained(this))); base::Bind(&MojoVideoDecoder::Stop, base::Unretained(this)));
// Create |client| interface (bound to |this|). // Create |client| interface (bound to |this|).
mojom::VideoDecoderClientAssociatedPtrInfo client_ptr_info; mojo::PendingAssociatedRemote<mojom::VideoDecoderClient>
client_binding_.Bind(mojo::MakeRequest(&client_ptr_info)); client_pending_remote;
client_receiver_.Bind(
client_pending_remote.InitWithNewEndpointAndPassReceiver());
// Create |media_log| interface (bound to |media_log_service_|). // Create |media_log| interface (bound to |media_log_service_|).
mojom::MediaLogAssociatedPtrInfo media_log_ptr_info; mojom::MediaLogAssociatedPtrInfo media_log_ptr_info;
...@@ -380,7 +384,7 @@ void MojoVideoDecoder::BindRemoteDecoder() { ...@@ -380,7 +384,7 @@ void MojoVideoDecoder::BindRemoteDecoder() {
} }
remote_decoder_->Construct( remote_decoder_->Construct(
std::move(client_ptr_info), std::move(media_log_ptr_info), std::move(client_pending_remote), std::move(media_log_ptr_info),
std::move(video_frame_handle_releaser_receiver), std::move(video_frame_handle_releaser_receiver),
std::move(remote_consumer_handle), std::move(command_buffer_id), std::move(remote_consumer_handle), std::move(command_buffer_id),
video_decoder_implementation_, target_color_space_); video_decoder_implementation_, target_color_space_);
......
...@@ -15,6 +15,9 @@ ...@@ -15,6 +15,9 @@
#include "media/mojo/mojom/video_decoder.mojom.h" #include "media/mojo/mojom/video_decoder.mojom.h"
#include "media/video/video_decode_accelerator.h" #include "media/video/video_decode_accelerator.h"
#include "mojo/public/cpp/bindings/associated_binding.h" #include "mojo/public/cpp/bindings/associated_binding.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "ui/gfx/color_space.h" #include "ui/gfx/color_space.h"
namespace base { namespace base {
...@@ -35,10 +38,11 @@ class MojoVideoFrameHandleReleaser; ...@@ -35,10 +38,11 @@ class MojoVideoFrameHandleReleaser;
class MojoVideoDecoder final : public VideoDecoder, class MojoVideoDecoder final : public VideoDecoder,
public mojom::VideoDecoderClient { public mojom::VideoDecoderClient {
public: public:
MojoVideoDecoder(scoped_refptr<base::SingleThreadTaskRunner> task_runner, MojoVideoDecoder(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
GpuVideoAcceleratorFactories* gpu_factories, GpuVideoAcceleratorFactories* gpu_factories,
MediaLog* media_log, MediaLog* media_log,
mojom::VideoDecoderPtr remote_decoder, mojo::PendingRemote<mojom::VideoDecoder> pending_remote_decoder,
VideoDecoderImplementation implementation, VideoDecoderImplementation implementation,
const RequestOverlayInfoCB& request_overlay_info_cb, const RequestOverlayInfoCB& request_overlay_info_cb,
const gfx::ColorSpace& target_color_space); const gfx::ColorSpace& target_color_space);
...@@ -91,7 +95,7 @@ class MojoVideoDecoder final : public VideoDecoder, ...@@ -91,7 +95,7 @@ class MojoVideoDecoder final : public VideoDecoder,
// Used to pass the remote decoder from the constructor (on the main thread) // Used to pass the remote decoder from the constructor (on the main thread)
// to Initialize() (on the media thread). // to Initialize() (on the media thread).
mojom::VideoDecoderPtrInfo remote_decoder_info_; mojo::PendingRemote<mojom::VideoDecoder> pending_remote_decoder_;
// Manages VideoFrame destruction callbacks. // Manages VideoFrame destruction callbacks.
scoped_refptr<MojoVideoFrameHandleReleaser> mojo_video_frame_handle_releaser_; scoped_refptr<MojoVideoFrameHandleReleaser> mojo_video_frame_handle_releaser_;
...@@ -109,14 +113,14 @@ class MojoVideoDecoder final : public VideoDecoder, ...@@ -109,14 +113,14 @@ class MojoVideoDecoder final : public VideoDecoder,
// large enough to account for any amount of frame reordering. // large enough to account for any amount of frame reordering.
base::MRUCache<int64_t, base::TimeTicks> timestamps_; base::MRUCache<int64_t, base::TimeTicks> timestamps_;
mojom::VideoDecoderPtr remote_decoder_; mojo::Remote<mojom::VideoDecoder> remote_decoder_;
std::unique_ptr<MojoDecoderBufferWriter> mojo_decoder_buffer_writer_; std::unique_ptr<MojoDecoderBufferWriter> mojo_decoder_buffer_writer_;
uint32_t writer_capacity_ = 0; uint32_t writer_capacity_ = 0;
bool remote_decoder_bound_ = false; bool remote_decoder_bound_ = false;
bool has_connection_error_ = false; bool has_connection_error_ = false;
mojo::AssociatedBinding<mojom::VideoDecoderClient> client_binding_; mojo::AssociatedReceiver<mojom::VideoDecoderClient> client_receiver_{this};
MojoMediaLogService media_log_service_; MojoMediaLogService media_log_service_;
mojo::AssociatedBinding<mojom::MediaLog> media_log_binding_; mojo::AssociatedBinding<mojom::MediaLog> media_log_binding_;
RequestOverlayInfoCB request_overlay_info_cb_; RequestOverlayInfoCB request_overlay_info_cb_;
......
...@@ -18,7 +18,7 @@ import "mojo/public/mojom/base/unguessable_token.mojom"; ...@@ -18,7 +18,7 @@ import "mojo/public/mojom/base/unguessable_token.mojom";
// ContentDecryptionModules created with the same factory. // ContentDecryptionModules created with the same factory.
interface InterfaceFactory { interface InterfaceFactory {
CreateAudioDecoder(pending_receiver<AudioDecoder> audio_decoder); CreateAudioDecoder(pending_receiver<AudioDecoder> audio_decoder);
CreateVideoDecoder(VideoDecoder& video_decoder); CreateVideoDecoder(pending_receiver<VideoDecoder> video_decoder);
// Creates a regular media::Renderer (DefaultRendererFactory). // Creates a regular media::Renderer (DefaultRendererFactory).
CreateDefaultRenderer(string audio_device_id, Renderer& renderer); CreateDefaultRenderer(string audio_device_id, Renderer& renderer);
......
...@@ -83,13 +83,12 @@ void InterfaceFactoryImpl::CreateAudioDecoder( ...@@ -83,13 +83,12 @@ void InterfaceFactoryImpl::CreateAudioDecoder(
} }
void InterfaceFactoryImpl::CreateVideoDecoder( void InterfaceFactoryImpl::CreateVideoDecoder(
mojom::VideoDecoderRequest request) { mojo::PendingReceiver<mojom::VideoDecoder> receiver) {
DVLOG(2) << __func__; DVLOG(2) << __func__;
#if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
video_decoder_bindings_.AddBinding( video_decoder_receivers_.Add(std::make_unique<MojoVideoDecoderService>(
std::make_unique<MojoVideoDecoderService>(mojo_media_client_, mojo_media_client_, &cdm_service_context_),
&cdm_service_context_), std::move(receiver));
std::move(request));
#endif // BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #endif // BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
} }
...@@ -233,7 +232,7 @@ bool InterfaceFactoryImpl::IsEmpty() { ...@@ -233,7 +232,7 @@ bool InterfaceFactoryImpl::IsEmpty() {
#endif // BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER) #endif // BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER)
#if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
if (!video_decoder_bindings_.empty()) if (!video_decoder_receivers_.empty())
return false; return false;
#endif // BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #endif // BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
...@@ -270,7 +269,7 @@ void InterfaceFactoryImpl::SetBindingConnectionErrorHandler() { ...@@ -270,7 +269,7 @@ void InterfaceFactoryImpl::SetBindingConnectionErrorHandler() {
#endif // BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER) #endif // BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER)
#if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
video_decoder_bindings_.set_connection_error_handler(connection_error_cb); video_decoder_receivers_.set_disconnect_handler(connection_error_cb);
#endif // BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #endif // BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
#if BUILDFLAG(ENABLE_MOJO_RENDERER) #if BUILDFLAG(ENABLE_MOJO_RENDERER)
......
...@@ -42,7 +42,8 @@ class InterfaceFactoryImpl : public DeferredDestroy<mojom::InterfaceFactory> { ...@@ -42,7 +42,8 @@ class InterfaceFactoryImpl : public DeferredDestroy<mojom::InterfaceFactory> {
// mojom::InterfaceFactory implementation. // mojom::InterfaceFactory implementation.
void CreateAudioDecoder( void CreateAudioDecoder(
mojo::PendingReceiver<mojom::AudioDecoder> receiver) final; mojo::PendingReceiver<mojom::AudioDecoder> receiver) final;
void CreateVideoDecoder(mojom::VideoDecoderRequest request) final; void CreateVideoDecoder(
mojo::PendingReceiver<mojom::VideoDecoder> receiver) final;
void CreateDefaultRenderer(const std::string& audio_device_id, void CreateDefaultRenderer(const std::string& audio_device_id,
mojom::RendererRequest request) final; mojom::RendererRequest request) final;
#if BUILDFLAG(ENABLE_CAST_RENDERER) #if BUILDFLAG(ENABLE_CAST_RENDERER)
...@@ -92,7 +93,7 @@ class InterfaceFactoryImpl : public DeferredDestroy<mojom::InterfaceFactory> { ...@@ -92,7 +93,7 @@ class InterfaceFactoryImpl : public DeferredDestroy<mojom::InterfaceFactory> {
#endif // BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER) #endif // BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER)
#if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
mojo::StrongBindingSet<mojom::VideoDecoder> video_decoder_bindings_; mojo::UniqueReceiverSet<mojom::VideoDecoder> video_decoder_receivers_;
#endif // BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) #endif // BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
#if BUILDFLAG(ENABLE_MOJO_RENDERER) || BUILDFLAG(ENABLE_CAST_RENDERER) #if BUILDFLAG(ENABLE_MOJO_RENDERER) || BUILDFLAG(ENABLE_CAST_RENDERER)
......
...@@ -33,7 +33,9 @@ ...@@ -33,7 +33,9 @@
#include "media/mojo/services/mojo_cdm_service_context.h" #include "media/mojo/services/mojo_cdm_service_context.h"
#include "media/mojo/services/mojo_media_client.h" #include "media/mojo/services/mojo_media_client.h"
#include "media/mojo/services/mojo_video_decoder_service.h" #include "media/mojo/services/mojo_video_decoder_service.h"
#include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/color_space.h" #include "ui/gfx/color_space.h"
...@@ -207,12 +209,12 @@ class MojoVideoDecoderIntegrationTest : public ::testing::Test { ...@@ -207,12 +209,12 @@ class MojoVideoDecoderIntegrationTest : public ::testing::Test {
void SetWriterCapacity(uint32_t capacity) { writer_capacity_ = capacity; } void SetWriterCapacity(uint32_t capacity) { writer_capacity_ = capacity; }
mojom::VideoDecoderPtr CreateRemoteVideoDecoder() { mojo::PendingRemote<mojom::VideoDecoder> CreateRemoteVideoDecoder() {
mojom::VideoDecoderPtr remote_video_decoder; mojo::PendingRemote<mojom::VideoDecoder> remote_video_decoder;
mojo::MakeStrongBinding( mojo::MakeSelfOwnedReceiver(
std::make_unique<MojoVideoDecoderService>(&mojo_media_client_, std::make_unique<MojoVideoDecoderService>(&mojo_media_client_,
&mojo_cdm_service_context_), &mojo_cdm_service_context_),
mojo::MakeRequest(&remote_video_decoder)); remote_video_decoder.InitWithNewPipeAndPassReceiver());
return remote_video_decoder; return remote_video_decoder;
} }
...@@ -340,7 +342,8 @@ class MojoVideoDecoderIntegrationTest : public ::testing::Test { ...@@ -340,7 +342,8 @@ class MojoVideoDecoderIntegrationTest : public ::testing::Test {
TEST_F(MojoVideoDecoderIntegrationTest, CreateAndDestroy) {} TEST_F(MojoVideoDecoderIntegrationTest, CreateAndDestroy) {}
TEST_F(MojoVideoDecoderIntegrationTest, GetSupportedConfigs) { TEST_F(MojoVideoDecoderIntegrationTest, GetSupportedConfigs) {
mojom::VideoDecoderPtr remote_video_decoder = CreateRemoteVideoDecoder(); mojo::Remote<mojom::VideoDecoder> remote_video_decoder(
CreateRemoteVideoDecoder());
StrictMock< StrictMock<
base::MockCallback<mojom::VideoDecoder::GetSupportedConfigsCallback>> base::MockCallback<mojom::VideoDecoder::GetSupportedConfigsCallback>>
callback; callback;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment