Commit 40780b96 authored by Gyuyoung Kim's avatar Gyuyoung Kim Committed by Commit Bot

Migrate VideoDecoder to new Mojo types

This CL applies pending_associated_remote and pending_associated_receiver
to Construct function in VideoDecoder interface. Other functions don't have
an interface argument. Major changes are as below,

 - Convert InterfaceRequest to mojo::Receiver
 - Convert InterfacePtrInfo to mojo::Remote
 - Convert mojo::MakeStrongBinding to mojo::MakeSelfOwnedReceiver
 - Convert InterfaceAssociatedPtrInfo to mojo::PendingAssociatedRemote
 - Convert InterfaceAssociatedPtr to mojo::AssociatedRemote

Bug: 995644
Change-Id: I3f159b9f2263b7895a339ac4a14c132fdbe665c3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1831960Reviewed-by: default avatarChrome Cunningham <chcunningham@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Commit-Queue: Gyuyoung Kim <gyuyoung@igalia.com>
Cr-Commit-Position: refs/heads/master@{#704182}
parent bbf891dc
......@@ -352,15 +352,17 @@ void MojoVideoDecoder::BindRemoteDecoder() {
mojom::MediaLogAssociatedPtrInfo media_log_ptr_info;
media_log_binding_.Bind(mojo::MakeRequest(&media_log_ptr_info));
// Create |video_frame_handle_releaser| interface request, and bind
// Create |video_frame_handle_releaser| interface receiver, and bind
// |mojo_video_frame_handle_releaser_| to it.
mojom::VideoFrameHandleReleaserRequest video_frame_handle_releaser_request;
mojom::VideoFrameHandleReleaserPtrInfo video_frame_handle_releaser_ptr_info;
video_frame_handle_releaser_request =
mojo::MakeRequest(&video_frame_handle_releaser_ptr_info);
mojo::PendingRemote<mojom::VideoFrameHandleReleaser>
video_frame_handle_releaser_pending_remote;
mojo::PendingReceiver<mojom::VideoFrameHandleReleaser>
video_frame_handle_releaser_receiver =
video_frame_handle_releaser_pending_remote
.InitWithNewPipeAndPassReceiver();
mojo_video_frame_handle_releaser_ =
base::MakeRefCounted<MojoVideoFrameHandleReleaser>(
std::move(video_frame_handle_releaser_ptr_info), task_runner_);
std::move(video_frame_handle_releaser_pending_remote), task_runner_);
mojo::ScopedDataPipeConsumerHandle remote_consumer_handle;
mojo_decoder_buffer_writer_ = MojoDecoderBufferWriter::Create(
......@@ -379,7 +381,7 @@ void MojoVideoDecoder::BindRemoteDecoder() {
remote_decoder_->Construct(
std::move(client_ptr_info), std::move(media_log_ptr_info),
std::move(video_frame_handle_releaser_request),
std::move(video_frame_handle_releaser_receiver),
std::move(remote_consumer_handle), std::move(command_buffer_id),
video_decoder_implementation_, target_color_space_);
}
......
......@@ -99,13 +99,14 @@ interface VideoDecoder {
//
// TODO(sandersd): Rename to Initialize() if/when
// media::VideoDecoder::Initialize() is renamed to Configure().
Construct(associated VideoDecoderClient client,
associated MediaLog media_log,
VideoFrameHandleReleaser& video_frame_handle_releaser,
handle<data_pipe_consumer> decoder_buffer_pipe,
CommandBufferId? command_buffer_id,
VideoDecoderImplementation implementation,
gfx.mojom.ColorSpace target_color_space);
Construct(
pending_associated_remote<VideoDecoderClient> client,
pending_associated_remote<MediaLog> media_log,
pending_receiver<VideoFrameHandleReleaser> video_frame_handle_releaser,
handle<data_pipe_consumer> decoder_buffer_pipe,
CommandBufferId? command_buffer_id,
VideoDecoderImplementation implementation,
gfx.mojom.ColorSpace target_color_space);
// Configure (or reconfigure) the decoder. This must be called before decoding
// any frames, and must not be called while there are pending Initialize(),
......
......@@ -10,8 +10,9 @@
namespace media {
MojoMediaLog::MojoMediaLog(mojom::MediaLogAssociatedPtrInfo remote_media_log,
scoped_refptr<base::SequencedTaskRunner> task_runner)
MojoMediaLog::MojoMediaLog(
mojo::PendingAssociatedRemote<mojom::MediaLog> remote_media_log,
scoped_refptr<base::SequencedTaskRunner> task_runner)
: remote_media_log_(std::move(remote_media_log)),
task_runner_(std::move(task_runner)) {
weak_this_ = weak_ptr_factory_.GetWeakPtr();
......
......@@ -13,6 +13,8 @@
#include "base/sequenced_task_runner.h"
#include "media/base/media_log.h"
#include "media/mojo/mojom/media_log.mojom.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
namespace media {
......@@ -20,8 +22,9 @@ namespace media {
class MojoMediaLog final : public MediaLog {
public:
// TODO(sandersd): Template on Ptr type to support non-associated.
explicit MojoMediaLog(mojom::MediaLogAssociatedPtrInfo remote_media_log,
scoped_refptr<base::SequencedTaskRunner> task_runner);
explicit MojoMediaLog(
mojo::PendingAssociatedRemote<mojom::MediaLog> remote_media_log,
scoped_refptr<base::SequencedTaskRunner> task_runner);
~MojoMediaLog() final;
protected:
......@@ -30,7 +33,7 @@ class MojoMediaLog final : public MediaLog {
void AddEventLocked(std::unique_ptr<MediaLogEvent> event) override;
private:
mojom::MediaLogAssociatedPtr remote_media_log_;
mojo::AssociatedRemote<mojom::MediaLog> remote_media_log_;
// The mojo service thread on which we'll access |remote_media_log_|.
scoped_refptr<base::SequencedTaskRunner> task_runner_;
......
......@@ -118,9 +118,10 @@ void MojoVideoDecoderService::GetSupportedConfigs(
}
void MojoVideoDecoderService::Construct(
mojom::VideoDecoderClientAssociatedPtrInfo client,
mojom::MediaLogAssociatedPtrInfo media_log,
mojom::VideoFrameHandleReleaserRequest video_frame_handle_releaser,
mojo::PendingAssociatedRemote<mojom::VideoDecoderClient> client,
mojo::PendingAssociatedRemote<mojom::MediaLog> media_log,
mojo::PendingReceiver<mojom::VideoFrameHandleReleaser>
video_frame_handle_releaser_receiver,
mojo::ScopedDataPipeConsumerHandle decoder_buffer_pipe,
mojom::CommandBufferIdPtr command_buffer_id,
VideoDecoderImplementation implementation,
......@@ -141,9 +142,9 @@ void MojoVideoDecoderService::Construct(
media_log_ =
std::make_unique<MojoMediaLog>(std::move(media_log), task_runner);
video_frame_handle_releaser_ =
mojo::MakeStrongBinding(std::make_unique<VideoFrameHandleReleaserImpl>(),
std::move(video_frame_handle_releaser));
video_frame_handle_releaser_ = mojo::MakeSelfOwnedReceiver(
std::make_unique<VideoFrameHandleReleaserImpl>(),
std::move(video_frame_handle_releaser_receiver));
mojo_decoder_buffer_reader_.reset(
new MojoDecoderBufferReader(std::move(decoder_buffer_pipe)));
......
......@@ -18,6 +18,9 @@
#include "media/mojo/mojom/video_decoder.mojom.h"
#include "media/mojo/services/media_mojo_export.h"
#include "media/mojo/services/mojo_media_client.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
namespace media {
......@@ -43,9 +46,10 @@ class MEDIA_MOJO_EXPORT MojoVideoDecoderService final
// mojom::VideoDecoder implementation
void GetSupportedConfigs(GetSupportedConfigsCallback callback) final;
void Construct(
mojom::VideoDecoderClientAssociatedPtrInfo client,
mojom::MediaLogAssociatedPtrInfo media_log,
mojom::VideoFrameHandleReleaserRequest video_frame_handle_releaser,
mojo::PendingAssociatedRemote<mojom::VideoDecoderClient> client,
mojo::PendingAssociatedRemote<mojom::MediaLog> media_log,
mojo::PendingReceiver<mojom::VideoFrameHandleReleaser>
video_frame_handle_receiver,
mojo::ScopedDataPipeConsumerHandle decoder_buffer_pipe,
mojom::CommandBufferIdPtr command_buffer_id,
VideoDecoderImplementation implementation,
......@@ -93,14 +97,14 @@ class MEDIA_MOJO_EXPORT MojoVideoDecoderService final
MojoCdmServiceContext* const mojo_cdm_service_context_ = nullptr;
// Channel for sending async messages to the client.
mojom::VideoDecoderClientAssociatedPtr client_;
mojo::AssociatedRemote<mojom::VideoDecoderClient> client_;
// Proxy object for providing media log services.
std::unique_ptr<MojoMediaLog> media_log_;
// Holds VideoFrame references on behalf of the client, until the client
// releases them or is disconnected.
mojo::StrongBindingPtr<mojom::VideoFrameHandleReleaser>
mojo::SelfOwnedReceiverRef<mojom::VideoFrameHandleReleaser>
video_frame_handle_releaser_;
// Helper for reading DecoderBuffer data from the DataPipe.
......
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