Commit 34d89248 authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Convert DemuxerStream to new Mojo types

This CL converts DemuxerStreamPtr and InterfaceRequest<T> in media to
the new Mojo type.

Bug: 955171
Change-Id: Ia10bed44d9133f3e15ad16d724e95db6c6e945ba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1882258
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Reviewed-by: default avatarFrank Liberato <liberato@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#710196}
parent 74f512c9
......@@ -19,8 +19,8 @@ namespace media {
MojoDemuxerStreamImpl::MojoDemuxerStreamImpl(
media::DemuxerStream* stream,
mojo::InterfaceRequest<mojom::DemuxerStream> request)
: binding_(this, std::move(request)), stream_(stream) {}
mojo::PendingReceiver<mojom::DemuxerStream> receiver)
: receiver_(this, std::move(receiver)), stream_(stream) {}
MojoDemuxerStreamImpl::~MojoDemuxerStreamImpl() = default;
......
......@@ -12,7 +12,8 @@
#include "base/memory/weak_ptr.h"
#include "media/base/demuxer_stream.h"
#include "media/mojo/mojom/demuxer_stream.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
namespace media {
......@@ -26,7 +27,7 @@ class MojoDemuxerStreamImpl : public mojom::DemuxerStream {
// |stream| is the underlying DemuxerStream we are proxying for.
// Note: |this| does not take ownership of |stream|.
MojoDemuxerStreamImpl(media::DemuxerStream* stream,
mojo::InterfaceRequest<mojom::DemuxerStream> request);
mojo::PendingReceiver<mojom::DemuxerStream> receiver);
~MojoDemuxerStreamImpl() override;
// mojom::DemuxerStream implementation.
......@@ -38,8 +39,8 @@ class MojoDemuxerStreamImpl : public mojom::DemuxerStream {
// Sets an error handler that will be called if a connection error occurs on
// the bound message pipe.
void set_connection_error_handler(const base::Closure& error_handler) {
binding_.set_connection_error_handler(error_handler);
void set_disconnect_handler(const base::Closure& error_handler) {
receiver_.set_disconnect_handler(error_handler);
}
private:
......@@ -50,7 +51,7 @@ class MojoDemuxerStreamImpl : public mojom::DemuxerStream {
Status status,
scoped_refptr<DecoderBuffer> buffer);
mojo::Binding<mojom::DemuxerStream> binding_;
mojo::Receiver<mojom::DemuxerStream> receiver_;
// See constructor. We do not own |stream_|.
media::DemuxerStream* stream_;
......
......@@ -17,6 +17,7 @@
#include "media/mojo/clients/mojo_demuxer_stream_impl.h"
#include "media/mojo/common/media_type_converters.h"
#include "media/renderers/video_overlay_factory.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace media {
......@@ -76,21 +77,21 @@ void MojoRenderer::InitializeRendererFromStreams(
// Create mojom::DemuxerStream for each demuxer stream and bind its lifetime
// to the pipe.
std::vector<DemuxerStream*> streams = media_resource_->GetAllStreams();
std::vector<mojom::DemuxerStreamPtrInfo> stream_proxies;
std::vector<mojo::PendingRemote<mojom::DemuxerStream>> stream_proxies;
for (auto* stream : streams) {
mojom::DemuxerStreamPtrInfo stream_proxy_info;
mojo::PendingRemote<mojom::DemuxerStream> stream_proxy;
auto mojo_stream = std::make_unique<MojoDemuxerStreamImpl>(
stream, mojo::MakeRequest(&stream_proxy_info));
stream, stream_proxy.InitWithNewPipeAndPassReceiver());
// Using base::Unretained(this) is safe because |this| owns |mojo_stream|,
// and the error handler can't be invoked once |mojo_stream| is destroyed.
mojo_stream->set_connection_error_handler(
mojo_stream->set_disconnect_handler(
base::Bind(&MojoRenderer::OnDemuxerStreamConnectionError,
base::Unretained(this), mojo_stream.get()));
streams_.push_back(std::move(mojo_stream));
stream_proxies.push_back(std::move(stream_proxy_info));
stream_proxies.push_back(std::move(stream_proxy));
}
BindRemoteRendererIfNeeded();
......
......@@ -27,7 +27,7 @@ interface Renderer {
// should be set.
// TODO(sandersd): These should be separate methods or a union type.
Initialize(associated RendererClient client,
array<DemuxerStream>? streams,
array<pending_remote<DemuxerStream>>? streams,
MediaUrlParams? media_url_params) => (bool success);
// Discards any buffered data, executing callback when completed.
......
......@@ -13,17 +13,16 @@
namespace media {
MediaResourceShim::MediaResourceShim(
std::vector<mojom::DemuxerStreamPtrInfo> streams,
std::vector<mojo::PendingRemote<mojom::DemuxerStream>> streams,
const base::Closure& demuxer_ready_cb)
: demuxer_ready_cb_(demuxer_ready_cb), streams_ready_(0) {
DCHECK(!streams.empty());
DCHECK(demuxer_ready_cb_);
for (auto& s : streams) {
mojom::DemuxerStreamPtr stream(std::move(s));
streams_.emplace_back(new MojoDemuxerStreamAdapter(
std::move(stream), base::Bind(&MediaResourceShim::OnStreamReady,
weak_factory_.GetWeakPtr())));
std::move(s), base::Bind(&MediaResourceShim::OnStreamReady,
weak_factory_.GetWeakPtr())));
}
}
......
......@@ -12,6 +12,7 @@
#include "base/memory/weak_ptr.h"
#include "media/base/media_resource.h"
#include "media/mojo/services/mojo_demuxer_stream_adapter.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace media {
......@@ -21,8 +22,9 @@ class MediaResourceShim : public MediaResource {
// Constructs the shim; at least a single audio or video stream must be
// provided. |demuxer_ready_cb| will be called once the streams have been
// initialized. Calling any method before then is an error.
MediaResourceShim(std::vector<mojom::DemuxerStreamPtrInfo> streams,
const base::Closure& demuxer_ready_cb);
MediaResourceShim(
std::vector<mojo::PendingRemote<mojom::DemuxerStream>> streams,
const base::Closure& demuxer_ready_cb);
~MediaResourceShim() override;
// MediaResource interface.
......
......@@ -261,16 +261,16 @@ class MediaServiceTest : public testing::Test {
video_stream_.set_video_decoder_config(video_config);
mojom::DemuxerStreamPtrInfo video_stream_proxy_info;
mojo::PendingRemote<mojom::DemuxerStream> video_stream_proxy;
mojo_video_stream_.reset(new MojoDemuxerStreamImpl(
&video_stream_, MakeRequest(&video_stream_proxy_info)));
&video_stream_, video_stream_proxy.InitWithNewPipeAndPassReceiver()));
mojo::PendingAssociatedRemote<mojom::RendererClient> client_remote;
renderer_client_receiver_.Bind(
client_remote.InitWithNewEndpointAndPassReceiver());
std::vector<mojom::DemuxerStreamPtrInfo> streams;
streams.push_back(std::move(video_stream_proxy_info));
std::vector<mojo::PendingRemote<mojom::DemuxerStream>> streams;
streams.push_back(std::move(video_stream_proxy));
EXPECT_CALL(*this, OnRendererInitialized(expected_result))
.WillOnce(QuitLoop(&run_loop));
......
......@@ -18,7 +18,7 @@
namespace media {
MojoDemuxerStreamAdapter::MojoDemuxerStreamAdapter(
mojom::DemuxerStreamPtr demuxer_stream,
mojo::PendingRemote<mojom::DemuxerStream> demuxer_stream,
const base::Closure& stream_ready_cb)
: demuxer_stream_(std::move(demuxer_stream)),
stream_ready_cb_(stream_ready_cb),
......
......@@ -14,6 +14,8 @@
#include "media/base/demuxer_stream.h"
#include "media/base/video_decoder_config.h"
#include "media/mojo/mojom/demuxer_stream.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace media {
......@@ -21,9 +23,8 @@ class MojoDecoderBufferReader;
// This class acts as a MojoRendererService-side stub for a real DemuxerStream
// that is part of a Pipeline in a remote application. Roughly speaking, it
// takes a mojom::DemuxerStreamPtr and exposes it as a DemuxerStream for
// use by
// media components.
// takes a mojo::Remote<mojom::DemuxerStream> and exposes it as a DemuxerStream
// for use by media components.
class MojoDemuxerStreamAdapter : public DemuxerStream {
public:
// |demuxer_stream| is connected to the mojom::DemuxerStream that |this|
......@@ -32,8 +33,9 @@ class MojoDemuxerStreamAdapter : public DemuxerStream {
// |stream_ready_cb| will be invoked when |demuxer_stream| has fully
// initialized and |this| is ready for use.
// NOTE: Illegal to call any methods until |stream_ready_cb| is invoked.
MojoDemuxerStreamAdapter(mojom::DemuxerStreamPtr demuxer_stream,
const base::Closure& stream_ready_cb);
MojoDemuxerStreamAdapter(
mojo::PendingRemote<mojom::DemuxerStream> demuxer_stream,
const base::Closure& stream_ready_cb);
~MojoDemuxerStreamAdapter() override;
// DemuxerStream implementation.
......@@ -64,7 +66,7 @@ class MojoDemuxerStreamAdapter : public DemuxerStream {
const base::Optional<VideoDecoderConfig>& video_config);
// See constructor for descriptions.
mojom::DemuxerStreamPtr demuxer_stream_;
mojo::Remote<mojom::DemuxerStream> demuxer_stream_;
base::Closure stream_ready_cb_;
// The last ReadCB received through a call to Read().
......
......@@ -66,7 +66,8 @@ MojoRendererService::~MojoRendererService() = default;
void MojoRendererService::Initialize(
mojom::RendererClientAssociatedPtrInfo client,
base::Optional<std::vector<mojom::DemuxerStreamPtrInfo>> streams,
base::Optional<std::vector<mojo::PendingRemote<mojom::DemuxerStream>>>
streams,
mojom::MediaUrlParamsPtr media_url_params,
InitializeCallback callback) {
DVLOG(1) << __func__;
......
......@@ -22,6 +22,7 @@
#include "media/mojo/mojom/renderer.mojom.h"
#include "media/mojo/services/media_mojo_export.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
namespace media {
......@@ -53,7 +54,8 @@ class MEDIA_MOJO_EXPORT MojoRendererService : public mojom::Renderer,
// mojom::Renderer implementation.
void Initialize(
mojom::RendererClientAssociatedPtrInfo client,
base::Optional<std::vector<mojom::DemuxerStreamPtrInfo>> streams,
base::Optional<std::vector<mojo::PendingRemote<mojom::DemuxerStream>>>
streams,
mojom::MediaUrlParamsPtr media_url_params,
InitializeCallback callback) final;
void Flush(FlushCallback callback) final;
......
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