Commit 81046e57 authored by Antonio Gomes's avatar Antonio Gomes Committed by Commit Bot

Migrate blink::MediaStreamVideoSource to WTF::Bind

This CL is the 3rd out of n CLs to convert modules/mediastream/
away from base::Bind{Once,Repeating} to their respective Blink/WTF
counterparts.

In this particular CL, a weak reference of MediaStreamVideoSource is
passed to VideoTrackAdapter ctor to avoid double-bind methods with
CrossThreadBind -> ConvertToBaseCallback -> CrossThreadBind.

R=dgozman@chromium.org, guidou@chromium.org
CC=​​blink-reviews-vendor@chromium.org

BUG=923394

Change-Id: Ibd75c5fef80bef1a4328c4abb007fb07efbcc095
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1594114
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#660725}
parent a260fe4b
...@@ -16,11 +16,13 @@ ...@@ -16,11 +16,13 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util_video_device.h" #include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util_video_device.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/renderer/modules/mediastream/video_track_adapter.h" #include "third_party/blink/renderer/modules/mediastream/video_track_adapter.h"
#include "third_party/blink/renderer/platform/cross_thread_functional.h"
#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread.h"
namespace blink { namespace blink {
...@@ -36,9 +38,7 @@ MediaStreamVideoSource* MediaStreamVideoSource::GetVideoSource( ...@@ -36,9 +38,7 @@ MediaStreamVideoSource* MediaStreamVideoSource::GetVideoSource(
MediaStreamVideoSource::MediaStreamVideoSource() MediaStreamVideoSource::MediaStreamVideoSource()
: state_(NEW), weak_factory_(this) { : state_(NEW), weak_factory_(this) {
track_adapter_ = base::MakeRefCounted<VideoTrackAdapter>( track_adapter_ = base::MakeRefCounted<VideoTrackAdapter>(
Platform::Current()->GetIOTaskRunner(), Platform::Current()->GetIOTaskRunner(), GetWeakPtr());
base::BindRepeating(&MediaStreamVideoSource::OnFrameDropped,
weak_factory_.GetWeakPtr()));
} }
MediaStreamVideoSource::~MediaStreamVideoSource() { MediaStreamVideoSource::~MediaStreamVideoSource() {
...@@ -65,8 +65,8 @@ void MediaStreamVideoSource::AddTrack( ...@@ -65,8 +65,8 @@ void MediaStreamVideoSource::AddTrack(
switch (state_) { switch (state_) {
case NEW: { case NEW: {
state_ = STARTING; state_ = STARTING;
StartSourceImpl( StartSourceImpl(ConvertToBaseCallback(CrossThreadBind(
base::Bind(&VideoTrackAdapter::DeliverFrameOnIO, track_adapter_)); &VideoTrackAdapter::DeliverFrameOnIO, track_adapter_)));
break; break;
} }
case STARTING: case STARTING:
...@@ -128,9 +128,9 @@ void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track, ...@@ -128,9 +128,9 @@ void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track,
// stopping a source with StopSource() can have side effects that affect // stopping a source with StopSource() can have side effects that affect
// sources created after that StopSource() call, but before the actual // sources created after that StopSource() call, but before the actual
// stop takes place. See https://crbug.com/778039. // stop takes place. See https://crbug.com/778039.
StopForRestart(base::BindOnce(&MediaStreamVideoSource::DidStopSource, StopForRestart(WTF::Bind(&MediaStreamVideoSource::DidStopSource,
weak_factory_.GetWeakPtr(), weak_factory_.GetWeakPtr(),
std::move(callback))); std::move(callback)));
if (state_ == STOPPING_FOR_RESTART || state_ == STOPPED_FOR_RESTART) { if (state_ == STOPPING_FOR_RESTART || state_ == STOPPED_FOR_RESTART) {
// If the source supports restarting, it is necessary to call // If the source supports restarting, it is necessary to call
// FinalizeStopSource() to ensure the same behavior as StopSource(), // FinalizeStopSource() to ensure the same behavior as StopSource(),
...@@ -186,9 +186,9 @@ void MediaStreamVideoSource::ReconfigureTrack( ...@@ -186,9 +186,9 @@ void MediaStreamVideoSource::ReconfigureTrack(
void MediaStreamVideoSource::StopForRestart(RestartCallback callback) { void MediaStreamVideoSource::StopForRestart(RestartCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (state_ != STARTED) { if (state_ != STARTED) {
base::SequencedTaskRunnerHandle::Get()->PostTask( Thread::Current()->GetTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(std::move(callback), RestartResult::INVALID_STATE)); WTF::Bind(std::move(callback), RestartResult::INVALID_STATE));
return; return;
} }
...@@ -223,8 +223,8 @@ void MediaStreamVideoSource::OnStopForRestartDone(bool did_stop_for_restart) { ...@@ -223,8 +223,8 @@ void MediaStreamVideoSource::OnStopForRestartDone(bool did_stop_for_restart) {
RestartResult result = did_stop_for_restart ? RestartResult::IS_STOPPED RestartResult result = did_stop_for_restart ? RestartResult::IS_STOPPED
: RestartResult::IS_RUNNING; : RestartResult::IS_RUNNING;
base::SequencedTaskRunnerHandle::Get()->PostTask( Thread::Current()->GetTaskRunner()->PostTask(
FROM_HERE, base::BindOnce(std::move(restart_callback_), result)); FROM_HERE, WTF::Bind(std::move(restart_callback_), result));
} }
void MediaStreamVideoSource::Restart( void MediaStreamVideoSource::Restart(
...@@ -232,9 +232,9 @@ void MediaStreamVideoSource::Restart( ...@@ -232,9 +232,9 @@ void MediaStreamVideoSource::Restart(
RestartCallback callback) { RestartCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (state_ != STOPPED_FOR_RESTART) { if (state_ != STOPPED_FOR_RESTART) {
base::SequencedTaskRunnerHandle::Get()->PostTask( Thread::Current()->GetTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(std::move(callback), RestartResult::INVALID_STATE)); WTF::Bind(std::move(callback), RestartResult::INVALID_STATE));
return; return;
} }
DCHECK(!restart_callback_); DCHECK(!restart_callback_);
...@@ -264,8 +264,8 @@ void MediaStreamVideoSource::OnRestartDone(bool did_restart) { ...@@ -264,8 +264,8 @@ void MediaStreamVideoSource::OnRestartDone(bool did_restart) {
RestartResult result = RestartResult result =
did_restart ? RestartResult::IS_RUNNING : RestartResult::IS_STOPPED; did_restart ? RestartResult::IS_RUNNING : RestartResult::IS_STOPPED;
base::SequencedTaskRunnerHandle::Get()->PostTask( Thread::Current()->GetTaskRunner()->PostTask(
FROM_HERE, base::BindOnce(std::move(restart_callback_), result)); FROM_HERE, WTF::Bind(std::move(restart_callback_), result));
} }
void MediaStreamVideoSource::UpdateHasConsumers(MediaStreamVideoTrack* track, void MediaStreamVideoSource::UpdateHasConsumers(MediaStreamVideoTrack* track,
...@@ -400,8 +400,8 @@ void MediaStreamVideoSource::StartFrameMonitoring() { ...@@ -400,8 +400,8 @@ void MediaStreamVideoSource::StartFrameMonitoring() {
track_adapter_->SetSourceFrameSize(IntSize(current_format->frame_size)); track_adapter_->SetSourceFrameSize(IntSize(current_format->frame_size));
} }
track_adapter_->StartFrameMonitoring( track_adapter_->StartFrameMonitoring(
frame_rate, base::Bind(&MediaStreamVideoSource::SetMutedState, frame_rate, WTF::BindRepeating(&MediaStreamVideoSource::SetMutedState,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
} }
void MediaStreamVideoSource::SetReadyState( void MediaStreamVideoSource::SetReadyState(
......
...@@ -143,8 +143,7 @@ class VideoTrackAdapter::VideoFrameResolutionAdapter ...@@ -143,8 +143,7 @@ class VideoTrackAdapter::VideoFrameResolutionAdapter
VideoFrameResolutionAdapter( VideoFrameResolutionAdapter(
scoped_refptr<base::SingleThreadTaskRunner> render_message_loop, scoped_refptr<base::SingleThreadTaskRunner> render_message_loop,
const VideoTrackAdapterSettings& settings, const VideoTrackAdapterSettings& settings,
base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)> base::WeakPtr<MediaStreamVideoSource> media_stream_video_source);
frame_dropped_cb);
// Add |frame_callback| to receive video frames on the IO-thread and // Add |frame_callback| to receive video frames on the IO-thread and
// |settings_callback| to set track settings on the main thread. // |settings_callback| to set track settings on the main thread.
...@@ -210,8 +209,7 @@ class VideoTrackAdapter::VideoFrameResolutionAdapter ...@@ -210,8 +209,7 @@ class VideoTrackAdapter::VideoFrameResolutionAdapter
// registered in AddCallbacks. // registered in AddCallbacks.
const scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_; const scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_;
base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)> base::WeakPtr<MediaStreamVideoSource> media_stream_video_source_;
frame_dropped_cb_;
VideoTrackAdapterSettings settings_; VideoTrackAdapterSettings settings_;
double frame_rate_; double frame_rate_;
...@@ -229,10 +227,9 @@ class VideoTrackAdapter::VideoFrameResolutionAdapter ...@@ -229,10 +227,9 @@ class VideoTrackAdapter::VideoFrameResolutionAdapter
VideoTrackAdapter::VideoFrameResolutionAdapter::VideoFrameResolutionAdapter( VideoTrackAdapter::VideoFrameResolutionAdapter::VideoFrameResolutionAdapter(
scoped_refptr<base::SingleThreadTaskRunner> render_message_loop, scoped_refptr<base::SingleThreadTaskRunner> render_message_loop,
const VideoTrackAdapterSettings& settings, const VideoTrackAdapterSettings& settings,
base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)> base::WeakPtr<MediaStreamVideoSource> media_stream_video_source)
frame_dropped_cb)
: renderer_task_runner_(render_message_loop), : renderer_task_runner_(render_message_loop),
frame_dropped_cb_(std::move(frame_dropped_cb)), media_stream_video_source_(media_stream_video_source),
settings_(settings), settings_(settings),
frame_rate_(MediaStreamVideoSource::kDefaultFrameRate), frame_rate_(MediaStreamVideoSource::kDefaultFrameRate),
last_time_stamp_(base::TimeDelta::Max()), last_time_stamp_(base::TimeDelta::Max()),
...@@ -482,17 +479,18 @@ void VideoTrackAdapter::VideoFrameResolutionAdapter::ResetFrameRate() { ...@@ -482,17 +479,18 @@ void VideoTrackAdapter::VideoFrameResolutionAdapter::ResetFrameRate() {
void VideoTrackAdapter::VideoFrameResolutionAdapter:: void VideoTrackAdapter::VideoFrameResolutionAdapter::
PostFrameDroppedToMainTaskRunner( PostFrameDroppedToMainTaskRunner(
media::VideoCaptureFrameDropReason reason) { media::VideoCaptureFrameDropReason reason) {
PostCrossThreadTask(*renderer_task_runner_, FROM_HERE, PostCrossThreadTask(
CrossThreadBind(frame_dropped_cb_, reason)); *renderer_task_runner_, FROM_HERE,
CrossThreadBindOnce(&MediaStreamVideoSource::OnFrameDropped,
media_stream_video_source_, reason));
} }
VideoTrackAdapter::VideoTrackAdapter( VideoTrackAdapter::VideoTrackAdapter(
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)> base::WeakPtr<MediaStreamVideoSource> media_stream_video_source)
frame_dropped_cb)
: io_task_runner_(io_task_runner), : io_task_runner_(io_task_runner),
media_stream_video_source_(media_stream_video_source),
renderer_task_runner_(base::ThreadTaskRunnerHandle::Get()), renderer_task_runner_(base::ThreadTaskRunnerHandle::Get()),
frame_dropped_cb_(std::move(frame_dropped_cb)),
monitoring_frame_rate_(false), monitoring_frame_rate_(false),
muted_state_(false), muted_state_(false),
frame_counter_(0), frame_counter_(0),
...@@ -537,7 +535,7 @@ void VideoTrackAdapter::AddTrackOnIO( ...@@ -537,7 +535,7 @@ void VideoTrackAdapter::AddTrackOnIO(
} }
if (!adapter.get()) { if (!adapter.get()) {
adapter = base::MakeRefCounted<VideoFrameResolutionAdapter>( adapter = base::MakeRefCounted<VideoFrameResolutionAdapter>(
renderer_task_runner_, settings, frame_dropped_cb_); renderer_task_runner_, settings, media_stream_video_source_);
adapters_.push_back(adapter); adapters_.push_back(adapter);
} }
...@@ -748,9 +746,10 @@ void VideoTrackAdapter::DeliverFrameOnIO( ...@@ -748,9 +746,10 @@ void VideoTrackAdapter::DeliverFrameOnIO(
if (adapters_.IsEmpty()) { if (adapters_.IsEmpty()) {
PostCrossThreadTask( PostCrossThreadTask(
*renderer_task_runner_, FROM_HERE, *renderer_task_runner_, FROM_HERE,
CrossThreadBind(frame_dropped_cb_, CrossThreadBindOnce(&MediaStreamVideoSource::OnFrameDropped,
media::VideoCaptureFrameDropReason:: media_stream_video_source_,
kVideoTrackAdapterHasNoResolutionAdapters)); media::VideoCaptureFrameDropReason::
kVideoTrackAdapterHasNoResolutionAdapters));
} }
for (const auto& adapter : adapters_) for (const auto& adapter : adapters_)
adapter->DeliverFrame(frame, estimated_capture_time, is_device_rotated); adapter->DeliverFrame(frame, estimated_capture_time, is_device_rotated);
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "base/time/time.h" #include "base/time/time.h"
...@@ -41,8 +42,7 @@ class BLINK_EXPORT VideoTrackAdapter ...@@ -41,8 +42,7 @@ class BLINK_EXPORT VideoTrackAdapter
VideoTrackAdapter( VideoTrackAdapter(
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)> base::WeakPtr<MediaStreamVideoSource> media_stream_video_source);
frame_dropped_cb);
// Register |track| to receive video frames in |frame_callback| with // Register |track| to receive video frames in |frame_callback| with
// a resolution within the boundaries of the arguments, and settings // a resolution within the boundaries of the arguments, and settings
...@@ -130,13 +130,12 @@ class BLINK_EXPORT VideoTrackAdapter ...@@ -130,13 +130,12 @@ class BLINK_EXPORT VideoTrackAdapter
const scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; const scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
base::WeakPtr<MediaStreamVideoSource> media_stream_video_source_;
// |renderer_task_runner_| is used to ensure that // |renderer_task_runner_| is used to ensure that
// VideoCaptureDeliverFrameCB is released on the main render thread. // VideoCaptureDeliverFrameCB is released on the main render thread.
const scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_; const scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_;
const base::RepeatingCallback<void(media::VideoCaptureFrameDropReason)>
frame_dropped_cb_;
// VideoFrameResolutionAdapter is an inner class that lives on the IO-thread. // VideoFrameResolutionAdapter is an inner class that lives on the IO-thread.
// It does the resolution adaptation and delivers frames to all registered // It does the resolution adaptation and delivers frames to all registered
// tracks. // tracks.
......
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