Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1805)

Unified Diff: content/renderer/media/webrtc/webrtc_media_stream_adapter.cc

Issue 1966043006: Revert of MediaStream audio: Refactor 3 separate "glue" implementations into one. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc b/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
index 7708b50ccff296332a857b6cf8729cdb11cc9d13..3c34d794dded57cd712436cbad564dca909e531b 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
+++ b/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
@@ -5,12 +5,11 @@
#include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
#include "base/logging.h"
+#include "content/renderer/media/media_stream_audio_source.h"
#include "content/renderer/media/media_stream_audio_track.h"
#include "content/renderer/media/media_stream_track.h"
#include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h"
#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
-#include "content/renderer/media/webrtc/processed_local_audio_source.h"
-#include "content/renderer/media/webrtc/webrtc_audio_sink.h"
#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
#include "third_party/WebKit/public/platform/WebString.h"
@@ -28,12 +27,12 @@
blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
web_stream_.audioTracks(audio_tracks);
for (blink::WebMediaStreamTrack& audio_track : audio_tracks)
- AddAudioSinkToTrack(audio_track);
+ CreateAudioTrack(audio_track);
blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
web_stream_.videoTracks(video_tracks);
for (blink::WebMediaStreamTrack& video_track : video_tracks)
- AddVideoSinkToTrack(video_track);
+ CreateVideoTrack(video_track);
MediaStream* const native_stream = MediaStream::GetMediaStream(web_stream_);
native_stream->AddObserver(this);
@@ -42,110 +41,72 @@
WebRtcMediaStreamAdapter::~WebRtcMediaStreamAdapter() {
MediaStream* const native_stream = MediaStream::GetMediaStream(web_stream_);
native_stream->RemoveObserver(this);
-
- blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
- web_stream_.audioTracks(audio_tracks);
- for (blink::WebMediaStreamTrack& audio_track : audio_tracks)
- TrackRemoved(audio_track);
- DCHECK(audio_sinks_.empty());
- blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
- web_stream_.videoTracks(video_tracks);
- for (blink::WebMediaStreamTrack& video_track : video_tracks)
- TrackRemoved(video_track);
- DCHECK(video_sinks_.empty());
}
void WebRtcMediaStreamAdapter::TrackAdded(
const blink::WebMediaStreamTrack& track) {
if (track.source().getType() == blink::WebMediaStreamSource::TypeAudio)
- AddAudioSinkToTrack(track);
+ CreateAudioTrack(track);
else
- AddVideoSinkToTrack(track);
+ CreateVideoTrack(track);
}
void WebRtcMediaStreamAdapter::TrackRemoved(
const blink::WebMediaStreamTrack& track) {
const std::string track_id = track.id().utf8();
if (track.source().getType() == blink::WebMediaStreamSource::TypeAudio) {
- scoped_refptr<webrtc::AudioTrackInterface> webrtc_track =
- make_scoped_refptr(
- webrtc_media_stream_->FindAudioTrack(track_id).get());
- if (!webrtc_track)
- return;
- webrtc_media_stream_->RemoveTrack(webrtc_track.get());
-
- for (auto it = audio_sinks_.begin(); it != audio_sinks_.end(); ++it) {
- if ((*it)->webrtc_audio_track() == webrtc_track.get()) {
- if (auto* media_stream_track = MediaStreamAudioTrack::From(track))
- media_stream_track->RemoveSink(it->get());
- audio_sinks_.erase(it);
- break;
- }
- }
+ webrtc_media_stream_->RemoveTrack(
+ webrtc_media_stream_->FindAudioTrack(track_id));
} else {
DCHECK_EQ(track.source().getType(), blink::WebMediaStreamSource::TypeVideo);
scoped_refptr<webrtc::VideoTrackInterface> webrtc_track =
- make_scoped_refptr(
- webrtc_media_stream_->FindVideoTrack(track_id).get());
- if (!webrtc_track)
- return;
+ webrtc_media_stream_->FindVideoTrack(track_id).get();
webrtc_media_stream_->RemoveTrack(webrtc_track.get());
- for (auto it = video_sinks_.begin(); it != video_sinks_.end(); ++it) {
+ for (ScopedVector<MediaStreamVideoWebRtcSink>::iterator it =
+ video_adapters_.begin(); it != video_adapters_.end(); ++it) {
if ((*it)->webrtc_video_track() == webrtc_track.get()) {
- video_sinks_.erase(it);
+ video_adapters_.erase(it);
break;
}
}
}
}
-void WebRtcMediaStreamAdapter::AddAudioSinkToTrack(
+void WebRtcMediaStreamAdapter::CreateAudioTrack(
const blink::WebMediaStreamTrack& track) {
+ DCHECK_EQ(track.source().getType(), blink::WebMediaStreamSource::TypeAudio);
+ // A media stream is connected to a peer connection, enable the
+ // peer connection mode for the sources.
MediaStreamAudioTrack* native_track = MediaStreamAudioTrack::From(track);
if (!native_track) {
DLOG(ERROR) << "No native track for blink audio track.";
return;
}
- WebRtcAudioSink* audio_sink;
- if (auto* media_stream_source = ProcessedLocalAudioSource::From(
- MediaStreamAudioSource::From(track.source()))) {
- audio_sink = new WebRtcAudioSink(
- track.id().utf8(), media_stream_source->rtc_source(),
- factory_->GetWebRtcSignalingThread());
- audio_sink->SetLevel(media_stream_source->audio_level());
- // The sink only grabs stats from the audio processor. Stats are only
- // available if audio processing is turned on. Therefore, only provide the
- // sink a reference to the processor if audio processing is turned on.
- if (auto processor = media_stream_source->audio_processor()) {
- if (processor && processor->has_audio_processing())
- audio_sink->SetAudioProcessor(processor);
- }
- } else {
- // Remote sources and other non-WebRtc local sources do not provide an
- // instance of the webrtc::AudioSourceInterface, and also do not need
- // references to the audio level calculator or audio processor passed to the
- // sink.
- webrtc::AudioSourceInterface* source_interface = nullptr;
- audio_sink = new WebRtcAudioSink(
- track.id().utf8(), source_interface,
- factory_->GetWebRtcSignalingThread());
+ webrtc::AudioTrackInterface* audio_track = native_track->GetAudioAdapter();
+ if (!audio_track) {
+ DLOG(ERROR) << "Audio track doesn't support webrtc.";
+ return;
}
- audio_sinks_.push_back(std::unique_ptr<WebRtcAudioSink>(audio_sink));
- native_track->AddSink(audio_sink);
- webrtc_media_stream_->AddTrack(audio_sink->webrtc_audio_track());
+ if (native_track->is_local_track()) {
+ const blink::WebMediaStreamSource& source = track.source();
+ MediaStreamAudioSource* audio_source = MediaStreamAudioSource::From(source);
+ if (audio_source && audio_source->audio_capturer())
+ audio_source->audio_capturer()->EnablePeerConnectionMode();
+ }
+
+ webrtc_media_stream_->AddTrack(audio_track);
}
-void WebRtcMediaStreamAdapter::AddVideoSinkToTrack(
+void WebRtcMediaStreamAdapter::CreateVideoTrack(
const blink::WebMediaStreamTrack& track) {
DCHECK_EQ(track.source().getType(), blink::WebMediaStreamSource::TypeVideo);
- MediaStreamVideoWebRtcSink* video_sink =
+ MediaStreamVideoWebRtcSink* adapter =
new MediaStreamVideoWebRtcSink(track, factory_);
- video_sinks_.push_back(
- std::unique_ptr<MediaStreamVideoWebRtcSink>(video_sink));
- webrtc_media_stream_->AddTrack(video_sink->webrtc_video_track());
+ video_adapters_.push_back(adapter);
+ webrtc_media_stream_->AddTrack(adapter->webrtc_video_track());
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698