Commit 13e6ba2e authored by Antonio Gomes's avatar Antonio Gomes Committed by Commit Bot

Delay converting to WebMediaStreamTrack in MediaStreamVideoWebRtcSink

... until it is actually needed.

This CL changes MediaStreamVideoWebRtcSink to operate over
MediaStreamComponent, but can not completely get rid of the use of
WebMediaStreamTrack. It mainly delays convert from the former to the
later, until the Blink API boundary is crossed.

BUG=704136
R=guidou@chromium.org

Change-Id: I6a33cc7f0b2c9191d4e5e21947577997d992b659
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2257539Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Cr-Commit-Position: refs/heads/master@{#780886}
parent 829cbeab
......@@ -17,6 +17,7 @@
#include "third_party/blink/public/web/modules/mediastream/web_media_stream_utils.h"
#include "third_party/blink/renderer/modules/mediastream/media_stream_constraints_util.h"
#include "third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h"
#include "third_party/blink/renderer/platform/mediastream/media_stream_component.h"
#include "third_party/blink/renderer/platform/peerconnection/webrtc_video_track_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"
......@@ -208,11 +209,11 @@ void MediaStreamVideoWebRtcSink::WebRtcVideoSourceAdapter::
}
MediaStreamVideoWebRtcSink::MediaStreamVideoWebRtcSink(
const WebMediaStreamTrack& track,
MediaStreamComponent* component,
PeerConnectionDependencyFactory* factory,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
MediaStreamVideoTrack* video_track =
MediaStreamVideoTrack::GetVideoTrack(track);
MediaStreamVideoTrack::GetVideoTrack(WebMediaStreamTrack(component));
DCHECK(video_track);
absl::optional<bool> needs_denoising =
......@@ -261,12 +262,12 @@ MediaStreamVideoWebRtcSink::MediaStreamVideoWebRtcSink(
// PeerConnectionFactory::CreateVideoTrack doesn't do reference counting.
video_source_proxy_ =
factory->CreateVideoTrackSourceProxy(video_source_.get());
video_track_ =
factory->CreateLocalVideoTrack(track.Id(), video_source_proxy_.get());
video_track_ = factory->CreateLocalVideoTrack(component->Id(),
video_source_proxy_.get());
video_track_->set_content_hint(
ContentHintTypeToWebRtcContentHint(track.ContentHint()));
video_track_->set_enabled(track.IsEnabled());
ContentHintTypeToWebRtcContentHint(component->ContentHint()));
video_track_->set_enabled(component->Enabled());
source_adapter_ = base::MakeRefCounted<WebRtcVideoSourceAdapter>(
factory->GetWebRtcNetworkTaskRunner(), video_source_.get(),
......@@ -277,7 +278,7 @@ MediaStreamVideoWebRtcSink::MediaStreamVideoWebRtcSink(
std::move(task_runner));
MediaStreamVideoSink::ConnectToTrack(
track,
WebMediaStreamTrack(component),
ConvertToBaseRepeatingCallback(CrossThreadBindRepeating(
&WebRtcVideoSourceAdapter::OnVideoFrameOnIO, source_adapter_)),
false);
......
......@@ -34,7 +34,7 @@ class WebRtcVideoTrackSource;
class MODULES_EXPORT MediaStreamVideoWebRtcSink : public MediaStreamVideoSink {
public:
MediaStreamVideoWebRtcSink(
const WebMediaStreamTrack& track,
MediaStreamComponent* component,
PeerConnectionDependencyFactory* factory,
scoped_refptr<base::SingleThreadTaskRunner> task_runner);
~MediaStreamVideoWebRtcSink() override;
......
......@@ -49,7 +49,7 @@ class MediaStreamVideoWebRtcSinkTest : public ::testing::Test {
TEST_F(MediaStreamVideoWebRtcSinkTest, NoiseReductionDefaultsToNotSet) {
SetVideoTrack();
blink::MediaStreamVideoWebRtcSink my_sink(
component_.Get(), &dependency_factory_,
component_, &dependency_factory_,
blink::scheduler::GetSingleThreadTaskRunnerForTesting());
EXPECT_TRUE(my_sink.webrtc_video_track());
EXPECT_FALSE(my_sink.SourceNeedsDenoisingForTesting());
......
......@@ -200,7 +200,7 @@ void WebRtcMediaStreamTrackAdapter::InitializeLocalVideoTrack(
DCHECK_EQ(component->Source()->GetType(), MediaStreamSource::kTypeVideo);
component_ = component;
local_track_video_sink_ = std::make_unique<blink::MediaStreamVideoWebRtcSink>(
component_.Get(), factory_, main_thread_);
component_, factory_, main_thread_);
webrtc_track_ = local_track_video_sink_->webrtc_video_track();
DCHECK(webrtc_track_);
is_initialized_ = true;
......
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