Commit f27ee9fe authored by Antonio Gomes's avatar Antonio Gomes Committed by Commit Bot

Onion soup content/renderer/media/stream/remote_media_stream_track_adapter.cc|h

This is part of the 4.3 phase on the design document [1]. It prepares
ground for dependent mediastream classes to be Onion soup'ed.

[1] https://docs.google.com/document/d/1rHJGi1U72qZsOGIctIf7GKRaY8d7BgtVW8MaMYumzYY/edit

BUG=704136
R=guidou@chromium.org, haraken@chromium.org

Change-Id: Ib56eb8a4dc4c00f653d1a6b750eb526263b68976
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1672800
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#672132}
parent ade3b5e2
...@@ -220,8 +220,6 @@ target(link_target_type, "renderer") { ...@@ -220,8 +220,6 @@ target(link_target_type, "renderer") {
"media/stream/media_stream_renderer_factory_impl.h", "media/stream/media_stream_renderer_factory_impl.h",
"media/stream/processed_local_audio_source.cc", "media/stream/processed_local_audio_source.cc",
"media/stream/processed_local_audio_source.h", "media/stream/processed_local_audio_source.h",
"media/stream/remote_media_stream_track_adapter.cc",
"media/stream/remote_media_stream_track_adapter.h",
"media/stream/track_audio_renderer.cc", "media/stream/track_audio_renderer.cc",
"media/stream/track_audio_renderer.h", "media/stream/track_audio_renderer.h",
"media/stream/user_media_client_impl.cc", "media/stream/user_media_client_impl.cc",
......
...@@ -209,7 +209,8 @@ void WebRtcMediaStreamTrackAdapter::InitializeRemoteAudioTrack( ...@@ -209,7 +209,8 @@ void WebRtcMediaStreamTrackAdapter::InitializeRemoteAudioTrack(
DCHECK_EQ(webrtc_audio_track->kind(), DCHECK_EQ(webrtc_audio_track->kind(),
webrtc::MediaStreamTrackInterface::kAudioKind); webrtc::MediaStreamTrackInterface::kAudioKind);
remote_audio_track_adapter_ = remote_audio_track_adapter_ =
new RemoteAudioTrackAdapter(main_thread_, webrtc_audio_track.get()); base::MakeRefCounted<blink::RemoteAudioTrackAdapter>(
main_thread_, webrtc_audio_track.get());
webrtc_track_ = webrtc_audio_track; webrtc_track_ = webrtc_audio_track;
// Set the initial volume to zero. When the track is put in an audio tag for // Set the initial volume to zero. When the track is put in an audio tag for
// playout, its volume is set to that of the tag. Without this, we could end // playout, its volume is set to that of the tag. Without this, we could end
...@@ -231,7 +232,8 @@ void WebRtcMediaStreamTrackAdapter::InitializeRemoteVideoTrack( ...@@ -231,7 +232,8 @@ void WebRtcMediaStreamTrackAdapter::InitializeRemoteVideoTrack(
DCHECK_EQ(webrtc_video_track->kind(), DCHECK_EQ(webrtc_video_track->kind(),
webrtc::MediaStreamTrackInterface::kVideoKind); webrtc::MediaStreamTrackInterface::kVideoKind);
remote_video_track_adapter_ = remote_video_track_adapter_ =
new RemoteVideoTrackAdapter(main_thread_, webrtc_video_track.get()); base::MakeRefCounted<blink::RemoteVideoTrackAdapter>(
main_thread_, webrtc_video_track.get());
webrtc_track_ = webrtc_video_track; webrtc_track_ = webrtc_video_track;
remote_track_can_complete_initialization_.Signal(); remote_track_can_complete_initialization_.Signal();
main_thread_->PostTask( main_thread_->PostTask(
......
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/synchronization/waitable_event.h" #include "base/synchronization/waitable_event.h"
#include "content/common/content_export.h" #include "content/common/content_export.h"
#include "content/renderer/media/stream/remote_media_stream_track_adapter.h"
#include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h" #include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h"
#include "content/renderer/media/webrtc/webrtc_audio_sink.h" #include "content/renderer/media/webrtc/webrtc_audio_sink.h"
#include "content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h" #include "content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h"
#include "third_party/blink/public/platform/web_media_stream.h" #include "third_party/blink/public/platform/web_media_stream.h"
#include "third_party/blink/public/platform/web_media_stream_track.h" #include "third_party/blink/public/platform/web_media_stream_track.h"
#include "third_party/blink/public/web/modules/mediastream/remote_media_stream_track_adapter.h"
#include "third_party/webrtc/api/media_stream_interface.h" #include "third_party/webrtc/api/media_stream_interface.h"
namespace content { namespace content {
...@@ -70,10 +70,10 @@ class CONTENT_EXPORT WebRtcMediaStreamTrackAdapter ...@@ -70,10 +70,10 @@ class CONTENT_EXPORT WebRtcMediaStreamTrackAdapter
MediaStreamVideoWebRtcSink* GetLocalTrackVideoSinkForTesting() { MediaStreamVideoWebRtcSink* GetLocalTrackVideoSinkForTesting() {
return local_track_video_sink_.get(); return local_track_video_sink_.get();
} }
RemoteAudioTrackAdapter* GetRemoteAudioTrackAdapterForTesting() { blink::RemoteAudioTrackAdapter* GetRemoteAudioTrackAdapterForTesting() {
return remote_audio_track_adapter_.get(); return remote_audio_track_adapter_.get();
} }
RemoteVideoTrackAdapter* GetRemoteVideoTrackAdapterForTesting() { blink::RemoteVideoTrackAdapter* GetRemoteVideoTrackAdapterForTesting() {
return remote_video_track_adapter_.get(); return remote_video_track_adapter_.get();
} }
...@@ -130,8 +130,8 @@ class CONTENT_EXPORT WebRtcMediaStreamTrackAdapter ...@@ -130,8 +130,8 @@ class CONTENT_EXPORT WebRtcMediaStreamTrackAdapter
std::unique_ptr<MediaStreamVideoWebRtcSink> local_track_video_sink_; std::unique_ptr<MediaStreamVideoWebRtcSink> local_track_video_sink_;
// If the track is remote, an adapter is used that listens to notifications on // If the track is remote, an adapter is used that listens to notifications on
// the remote webrtc track and notifies Blink. // the remote webrtc track and notifies Blink.
scoped_refptr<RemoteAudioTrackAdapter> remote_audio_track_adapter_; scoped_refptr<blink::RemoteAudioTrackAdapter> remote_audio_track_adapter_;
scoped_refptr<RemoteVideoTrackAdapter> remote_video_track_adapter_; scoped_refptr<blink::RemoteVideoTrackAdapter> remote_video_track_adapter_;
DISALLOW_COPY_AND_ASSIGN(WebRtcMediaStreamTrackAdapter); DISALLOW_COPY_AND_ASSIGN(WebRtcMediaStreamTrackAdapter);
}; };
......
...@@ -374,6 +374,7 @@ source_set("blink_headers") { ...@@ -374,6 +374,7 @@ source_set("blink_headers") {
"web/modules/mediastream/media_stream_video_sink.h", "web/modules/mediastream/media_stream_video_sink.h",
"web/modules/mediastream/media_stream_video_source.h", "web/modules/mediastream/media_stream_video_source.h",
"web/modules/mediastream/media_stream_video_track.h", "web/modules/mediastream/media_stream_video_track.h",
"web/modules/mediastream/remote_media_stream_track_adapter.h",
"web/modules/mediastream/video_track_adapter_settings.h", "web/modules/mediastream/video_track_adapter_settings.h",
"web/modules/mediastream/web_media_stream_utils.h", "web/modules/mediastream/web_media_stream_utils.h",
"web/modules/mediastream/webaudio_media_stream_audio_sink.h", "web/modules/mediastream/webaudio_media_stream_audio_sink.h",
......
...@@ -2,31 +2,34 @@ ...@@ -2,31 +2,34 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CONTENT_RENDERER_MEDIA_STREAM_REMOTE_MEDIA_STREAM_TRACK_ADAPTER_H_ #ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIASTREAM_REMOTE_MEDIA_STREAM_TRACK_ADAPTER_H_
#define CONTENT_RENDERER_MEDIA_STREAM_REMOTE_MEDIA_STREAM_TRACK_ADAPTER_H_ #define THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIASTREAM_REMOTE_MEDIA_STREAM_TRACK_ADAPTER_H_
#include <string> #include "base/callback.h"
#include "base/bind.h"
#include "base/callback_forward.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/single_thread_task_runner.h" #include "third_party/blink/public/platform/web_common.h"
#include "third_party/blink/public/platform/web_media_stream_source.h" #include "third_party/blink/public/platform/web_media_stream_source.h"
#include "third_party/blink/public/platform/web_media_stream_track.h" #include "third_party/blink/public/platform/web_media_stream_track.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/webrtc/api/media_stream_interface.h" #include "third_party/webrtc/api/media_stream_interface.h"
namespace blink { namespace base {
class TrackObserver; class SingleThreadTaskRunner;
} }
namespace content { namespace blink {
class TrackObserver;
// Base class used for mapping between webrtc and blink MediaStream tracks. // Base class used for mapping between webrtc and blink MediaStream tracks.
// RemoteMediaStreamImpl has a RemoteMediaStreamTrackAdapter per remote audio // RemoteMediaStreamImpl has a RemoteMediaStreamTrackAdapter per remote audio
// (RemoteAudioTrackAdapter) and video (RemoteVideoTrackAdapter) track. // (RemoteAudioTrackAdapter) and video (RemoteVideoTrackAdapter) track.
//
// TODO(crbug.com/704136): Move these classes out of the Blink exposed API
// when all users of it have been Onion souped.
template <typename WebRtcMediaStreamTrackType> template <typename WebRtcMediaStreamTrackType>
class RemoteMediaStreamTrackAdapter class BLINK_MODULES_EXPORT RemoteMediaStreamTrackAdapter
: public base::RefCountedThreadSafe< : public base::RefCountedThreadSafe<
RemoteMediaStreamTrackAdapter<WebRtcMediaStreamTrackType>> { RemoteMediaStreamTrackAdapter<WebRtcMediaStreamTrackType>> {
public: public:
...@@ -35,19 +38,19 @@ class RemoteMediaStreamTrackAdapter ...@@ -35,19 +38,19 @@ class RemoteMediaStreamTrackAdapter
WebRtcMediaStreamTrackType* webrtc_track) WebRtcMediaStreamTrackType* webrtc_track)
: main_thread_(main_thread), : main_thread_(main_thread),
webrtc_track_(webrtc_track), webrtc_track_(webrtc_track),
id_(webrtc_track->id()) {} id_(WebString::FromUTF8(webrtc_track->id())) {}
const scoped_refptr<WebRtcMediaStreamTrackType>& observed_track() { const scoped_refptr<WebRtcMediaStreamTrackType>& observed_track() {
return webrtc_track_; return webrtc_track_;
} }
blink::WebMediaStreamTrack* web_track() { WebMediaStreamTrack* web_track() {
DCHECK(main_thread_->BelongsToCurrentThread()); DCHECK(main_thread_->BelongsToCurrentThread());
DCHECK(!web_track_.IsNull()); DCHECK(!web_track_.IsNull());
return &web_track_; return &web_track_;
} }
const std::string& id() const { return id_; } WebString id() const { return id_; }
bool initialized() const { bool initialized() const {
DCHECK(main_thread_->BelongsToCurrentThread()); DCHECK(main_thread_->BelongsToCurrentThread());
...@@ -57,8 +60,7 @@ class RemoteMediaStreamTrackAdapter ...@@ -57,8 +60,7 @@ class RemoteMediaStreamTrackAdapter
void Initialize() { void Initialize() {
DCHECK(main_thread_->BelongsToCurrentThread()); DCHECK(main_thread_->BelongsToCurrentThread());
DCHECK(!initialized()); DCHECK(!initialized());
web_initialize_.Run(); std::move(web_initialize_).Run();
web_initialize_.Reset();
DCHECK(initialized()); DCHECK(initialized());
} }
...@@ -70,14 +72,13 @@ class RemoteMediaStreamTrackAdapter ...@@ -70,14 +72,13 @@ class RemoteMediaStreamTrackAdapter
DCHECK(main_thread_->BelongsToCurrentThread()); DCHECK(main_thread_->BelongsToCurrentThread());
} }
void InitializeWebTrack(blink::WebMediaStreamSource::Type type) { void InitializeWebTrack(WebMediaStreamSource::Type type) {
DCHECK(main_thread_->BelongsToCurrentThread()); DCHECK(main_thread_->BelongsToCurrentThread());
DCHECK(web_track_.IsNull()); DCHECK(web_track_.IsNull());
blink::WebString web_track_id(blink::WebString::FromUTF8(id_)); WebMediaStreamSource web_source;
blink::WebMediaStreamSource web_source; web_source.Initialize(id_, type, id_, true /* remote */);
web_source.Initialize(web_track_id, type, web_track_id, true /* remote */); web_track_.Initialize(id_, web_source);
web_track_.Initialize(web_track_id, web_source);
DCHECK(!web_track_.IsNull()); DCHECK(!web_track_.IsNull());
} }
...@@ -86,19 +87,19 @@ class RemoteMediaStreamTrackAdapter ...@@ -86,19 +87,19 @@ class RemoteMediaStreamTrackAdapter
// The callback is used by derived classes to bind objects that need to be // The callback is used by derived classes to bind objects that need to be
// instantiated and initialized on the signaling thread but then moved to // instantiated and initialized on the signaling thread but then moved to
// and used on the main thread when initializing the web object(s). // and used on the main thread when initializing the web object(s).
base::Callback<void()> web_initialize_; base::OnceClosure web_initialize_;
private: private:
const scoped_refptr<WebRtcMediaStreamTrackType> webrtc_track_; const scoped_refptr<WebRtcMediaStreamTrackType> webrtc_track_;
blink::WebMediaStreamTrack web_track_; WebMediaStreamTrack web_track_;
// const copy of the webrtc track id that allows us to check it from both the // const copy of the webrtc track id that allows us to check it from both the
// main and signaling threads without incurring a synchronous thread hop. // main and signaling threads without incurring a synchronous thread hop.
const std::string id_; const WebString id_;
DISALLOW_COPY_AND_ASSIGN(RemoteMediaStreamTrackAdapter); DISALLOW_COPY_AND_ASSIGN(RemoteMediaStreamTrackAdapter);
}; };
class RemoteVideoTrackAdapter class BLINK_MODULES_EXPORT RemoteVideoTrackAdapter
: public RemoteMediaStreamTrackAdapter<webrtc::VideoTrackInterface> { : public RemoteMediaStreamTrackAdapter<webrtc::VideoTrackInterface> {
public: public:
// Called on the signaling thread. // Called on the signaling thread.
...@@ -110,14 +111,14 @@ class RemoteVideoTrackAdapter ...@@ -110,14 +111,14 @@ class RemoteVideoTrackAdapter
~RemoteVideoTrackAdapter() override; ~RemoteVideoTrackAdapter() override;
private: private:
void InitializeWebVideoTrack(std::unique_ptr<blink::TrackObserver> observer, void InitializeWebVideoTrack(std::unique_ptr<TrackObserver> observer,
bool enabled); bool enabled);
}; };
// RemoteAudioTrackAdapter is responsible for listening on state // RemoteAudioTrackAdapter is responsible for listening on state
// change notifications on a remote webrtc audio MediaStreamTracks and notify // change notifications on a remote webrtc audio MediaStreamTracks and notify
// Blink. // Blink.
class RemoteAudioTrackAdapter class BLINK_MODULES_EXPORT RemoteAudioTrackAdapter
: public RemoteMediaStreamTrackAdapter<webrtc::AudioTrackInterface>, : public RemoteMediaStreamTrackAdapter<webrtc::AudioTrackInterface>,
public webrtc::ObserverInterface { public webrtc::ObserverInterface {
public: public:
...@@ -150,6 +151,6 @@ class RemoteAudioTrackAdapter ...@@ -150,6 +151,6 @@ class RemoteAudioTrackAdapter
DISALLOW_COPY_AND_ASSIGN(RemoteAudioTrackAdapter); DISALLOW_COPY_AND_ASSIGN(RemoteAudioTrackAdapter);
}; };
} // namespace content } // namespace blink
#endif // CONTENT_RENDERER_MEDIA_STREAM_REMOTE_MEDIA_STREAM_TRACK_ADAPTER_H_ #endif // THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_MEDIASTREAM_REMOTE_MEDIA_STREAM_TRACK_ADAPTER_H_
...@@ -44,6 +44,7 @@ blink_modules_sources("mediastream") { ...@@ -44,6 +44,7 @@ blink_modules_sources("mediastream") {
"navigator_user_media.h", "navigator_user_media.h",
"overconstrained_error.cc", "overconstrained_error.cc",
"overconstrained_error.h", "overconstrained_error.h",
"remote_media_stream_track_adapter.cc",
"user_media_client.cc", "user_media_client.cc",
"user_media_client.h", "user_media_client.h",
"user_media_controller.cc", "user_media_controller.cc",
......
...@@ -2,55 +2,66 @@ ...@@ -2,55 +2,66 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "content/renderer/media/stream/remote_media_stream_track_adapter.h" #include "third_party/blink/public/web/modules/mediastream/remote_media_stream_track_adapter.h"
#include "base/single_thread_task_runner.h"
#include "media/base/limits.h" #include "media/base/limits.h"
#include "third_party/blink/public/platform/modules/mediastream/media_stream_audio_source.h" #include "third_party/blink/public/platform/modules/mediastream/media_stream_audio_source.h"
#include "third_party/blink/public/platform/modules/webrtc/peer_connection_remote_audio_source.h" #include "third_party/blink/public/platform/modules/webrtc/peer_connection_remote_audio_source.h"
#include "third_party/blink/public/platform/modules/webrtc/track_observer.h" #include "third_party/blink/public/platform/modules/webrtc/track_observer.h"
#include "third_party/blink/public/web/modules/mediastream/media_stream_video_track.h" #include "third_party/blink/public/web/modules/mediastream/media_stream_video_track.h"
#include "third_party/blink/public/web/modules/peerconnection/media_stream_remote_video_source.h" #include "third_party/blink/public/web/modules/peerconnection/media_stream_remote_video_source.h"
#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
namespace content { namespace blink {
RemoteVideoTrackAdapter::RemoteVideoTrackAdapter( RemoteVideoTrackAdapter::RemoteVideoTrackAdapter(
const scoped_refptr<base::SingleThreadTaskRunner>& main_thread, const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
webrtc::VideoTrackInterface* webrtc_track) webrtc::VideoTrackInterface* webrtc_track)
: RemoteMediaStreamTrackAdapter(main_thread, webrtc_track) { : RemoteMediaStreamTrackAdapter(main_thread, webrtc_track) {
std::unique_ptr<blink::TrackObserver> observer( std::unique_ptr<TrackObserver> observer(
new blink::TrackObserver(main_thread, observed_track().get())); new TrackObserver(main_thread, observed_track().get()));
// Here, we use base::Unretained() to avoid a circular reference. // Here, we use CrossThreadUnretained() to avoid a circular reference.
web_initialize_ = base::Bind( //
&RemoteVideoTrackAdapter::InitializeWebVideoTrack, base::Unretained(this), // TODO(crbug.com/963574): Remove the use of ConvertToBaseOnceCallback here
base::Passed(&observer), observed_track()->enabled()); // once the file that includes remote_media_stream_track_adapter.h (namely
// webrtc_media_stream_track_adapter.h) is Onion souped.
web_initialize_ = ConvertToBaseOnceCallback(
CrossThreadBindOnce(&RemoteVideoTrackAdapter::InitializeWebVideoTrack,
CrossThreadUnretained(this), std::move(observer),
observed_track()->enabled()));
} }
RemoteVideoTrackAdapter::~RemoteVideoTrackAdapter() { RemoteVideoTrackAdapter::~RemoteVideoTrackAdapter() {
DCHECK(main_thread_->BelongsToCurrentThread()); DCHECK(main_thread_->BelongsToCurrentThread());
if (initialized()) { if (initialized()) {
static_cast<blink::MediaStreamRemoteVideoSource*>( // TODO(crbug.com/704136): When moving RemoteVideoTrackAdapter out of the
// public API, make this managed by Oilpan. Note that, the destructor will
// not allowed to touch other on-heap objects like web_track().
static_cast<MediaStreamRemoteVideoSource*>(
web_track()->Source().GetPlatformSource()) web_track()->Source().GetPlatformSource())
->OnSourceTerminated(); ->OnSourceTerminated();
} }
} }
void RemoteVideoTrackAdapter::InitializeWebVideoTrack( void RemoteVideoTrackAdapter::InitializeWebVideoTrack(
std::unique_ptr<blink::TrackObserver> observer, std::unique_ptr<TrackObserver> observer,
bool enabled) { bool enabled) {
DCHECK(main_thread_->BelongsToCurrentThread()); DCHECK(main_thread_->BelongsToCurrentThread());
auto video_source_ptr = std::make_unique<blink::MediaStreamRemoteVideoSource>( auto video_source_ptr =
std::move(observer)); std::make_unique<MediaStreamRemoteVideoSource>(std::move(observer));
blink::MediaStreamRemoteVideoSource* video_source = video_source_ptr.get(); MediaStreamRemoteVideoSource* video_source = video_source_ptr.get();
InitializeWebTrack(blink::WebMediaStreamSource::kTypeVideo); InitializeWebTrack(WebMediaStreamSource::kTypeVideo);
web_track()->Source().SetPlatformSource(std::move(video_source_ptr)); web_track()->Source().SetPlatformSource(std::move(video_source_ptr));
blink::WebMediaStreamSource::Capabilities capabilities; WebMediaStreamSource::Capabilities capabilities;
capabilities.device_id = blink::WebString::FromUTF8(id()); capabilities.device_id = id();
web_track()->Source().SetCapabilities(capabilities); web_track()->Source().SetCapabilities(capabilities);
web_track()->SetPlatformTrack(std::make_unique<blink::MediaStreamVideoTrack>( web_track()->SetPlatformTrack(std::make_unique<MediaStreamVideoTrack>(
video_source, blink::MediaStreamVideoSource::ConstraintsCallback(), video_source, MediaStreamVideoSource::ConstraintsCallback(), enabled));
enabled));
} }
RemoteAudioTrackAdapter::RemoteAudioTrackAdapter( RemoteAudioTrackAdapter::RemoteAudioTrackAdapter(
...@@ -61,12 +72,16 @@ RemoteAudioTrackAdapter::RemoteAudioTrackAdapter( ...@@ -61,12 +72,16 @@ RemoteAudioTrackAdapter::RemoteAudioTrackAdapter(
unregistered_(false), unregistered_(false),
#endif #endif
state_(observed_track()->state()) { state_(observed_track()->state()) {
// TODO(tommi): Use blink::TrackObserver instead. // TODO(tommi): Use TrackObserver instead.
observed_track()->RegisterObserver(this); observed_track()->RegisterObserver(this);
// Here, we use base::Unretained() to avoid a circular reference. // Here, we use CrossThreadUnretained() to avoid a circular reference.
web_initialize_ = //
base::Bind(&RemoteAudioTrackAdapter::InitializeWebAudioTrack, // TODO(crbug.com/963574): Remove the use of ConvertToBaseOnceCallback here
base::Unretained(this), main_thread); // once the file that includes remote_media_stream_track_adapter.h (namely
// webrtc_media_stream_track_adapter.h) is Onion souped.
web_initialize_ = ConvertToBaseOnceCallback(
CrossThreadBindOnce(&RemoteAudioTrackAdapter::InitializeWebAudioTrack,
CrossThreadUnretained(this), main_thread));
} }
RemoteAudioTrackAdapter::~RemoteAudioTrackAdapter() { RemoteAudioTrackAdapter::~RemoteAudioTrackAdapter() {
...@@ -85,32 +100,34 @@ void RemoteAudioTrackAdapter::Unregister() { ...@@ -85,32 +100,34 @@ void RemoteAudioTrackAdapter::Unregister() {
void RemoteAudioTrackAdapter::InitializeWebAudioTrack( void RemoteAudioTrackAdapter::InitializeWebAudioTrack(
const scoped_refptr<base::SingleThreadTaskRunner>& main_thread) { const scoped_refptr<base::SingleThreadTaskRunner>& main_thread) {
InitializeWebTrack(blink::WebMediaStreamSource::kTypeAudio); InitializeWebTrack(WebMediaStreamSource::kTypeAudio);
blink::MediaStreamAudioSource* const source = auto source = std::make_unique<PeerConnectionRemoteAudioSource>(
new blink::PeerConnectionRemoteAudioSource(observed_track().get(), observed_track().get(), main_thread);
main_thread); auto* source_ptr = source.get();
web_track()->Source().SetPlatformSource( web_track()->Source().SetPlatformSource(
base::WrapUnique(source)); // Takes ownership. std::move(source)); // Takes ownership.
blink::WebMediaStreamSource::Capabilities capabilities; WebMediaStreamSource::Capabilities capabilities;
capabilities.device_id = blink::WebString::FromUTF8(id()); capabilities.device_id = id();
capabilities.echo_cancellation = std::vector<bool>({false}); bool values[] = {false};
capabilities.auto_gain_control = std::vector<bool>({false}); capabilities.echo_cancellation = WebVector<bool>(values, 1u);
capabilities.noise_suppression = std::vector<bool>({false}); capabilities.auto_gain_control = WebVector<bool>(values, 1u);
capabilities.noise_suppression = WebVector<bool>(values, 1u);
capabilities.sample_size = { capabilities.sample_size = {
media::SampleFormatToBitsPerChannel(media::kSampleFormatS16), // min media::SampleFormatToBitsPerChannel(media::kSampleFormatS16), // min
media::SampleFormatToBitsPerChannel(media::kSampleFormatS16) // max media::SampleFormatToBitsPerChannel(media::kSampleFormatS16) // max
}; };
web_track()->Source().SetCapabilities(capabilities); web_track()->Source().SetCapabilities(capabilities);
source->ConnectToTrack(*(web_track())); source_ptr->ConnectToTrack(*(web_track()));
} }
void RemoteAudioTrackAdapter::OnChanged() { void RemoteAudioTrackAdapter::OnChanged() {
main_thread_->PostTask( PostCrossThreadTask(
FROM_HERE, base::BindOnce(&RemoteAudioTrackAdapter::OnChangedOnMainThread, *main_thread_, FROM_HERE,
this, observed_track()->state())); CrossThreadBindOnce(&RemoteAudioTrackAdapter::OnChangedOnMainThread,
WrapRefCounted(this), observed_track()->state()));
} }
void RemoteAudioTrackAdapter::OnChangedOnMainThread( void RemoteAudioTrackAdapter::OnChangedOnMainThread(
...@@ -125,11 +142,11 @@ void RemoteAudioTrackAdapter::OnChangedOnMainThread( ...@@ -125,11 +142,11 @@ void RemoteAudioTrackAdapter::OnChangedOnMainThread(
switch (state) { switch (state) {
case webrtc::MediaStreamTrackInterface::kLive: case webrtc::MediaStreamTrackInterface::kLive:
web_track()->Source().SetReadyState( web_track()->Source().SetReadyState(
blink::WebMediaStreamSource::kReadyStateLive); WebMediaStreamSource::kReadyStateLive);
break; break;
case webrtc::MediaStreamTrackInterface::kEnded: case webrtc::MediaStreamTrackInterface::kEnded:
web_track()->Source().SetReadyState( web_track()->Source().SetReadyState(
blink::WebMediaStreamSource::kReadyStateEnded); WebMediaStreamSource::kReadyStateEnded);
break; break;
default: default:
NOTREACHED(); NOTREACHED();
...@@ -137,4 +154,4 @@ void RemoteAudioTrackAdapter::OnChangedOnMainThread( ...@@ -137,4 +154,4 @@ void RemoteAudioTrackAdapter::OnChangedOnMainThread(
} }
} }
} // namespace content } // namespace blink
...@@ -620,6 +620,9 @@ _CONFIG = [ ...@@ -620,6 +620,9 @@ _CONFIG = [
'allowed': [ 'allowed': [
'media::.+', 'media::.+',
'base::AutoLock', 'base::AutoLock',
'webrtc::AudioTrackInterface',
'webrtc::VideoTrackInterface',
'webrtc::MediaStreamTrackInterface',
] ]
}, },
{ {
......
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