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

Side by Side Diff: content/renderer/media/webrtc/webrtc_media_stream_adapter.cc

Issue 1647773002: MediaStream audio sourcing: Bypass audio processing for non-WebRTC cases. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: NOT FOR REVIEW -- This will be broken-up across multiple CLs. Created 4 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h" 5 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
6 6
7 #include "base/bind.h"
7 #include "base/logging.h" 8 #include "base/logging.h"
8 #include "content/renderer/media/media_stream_audio_source.h"
9 #include "content/renderer/media/media_stream_audio_track.h" 9 #include "content/renderer/media/media_stream_audio_track.h"
10 #include "content/renderer/media/media_stream_track.h" 10 #include "content/renderer/media/media_stream_track.h"
11 #include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h" 11 #include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h"
12 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" 12 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
13 #include "content/renderer/media/webrtc/peer_connection_remote_audio_source.h"
14 #include "content/renderer/media/webrtc/processed_local_audio_track.h"
15 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
13 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 16 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
14 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 17 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
15 #include "third_party/WebKit/public/platform/WebString.h" 18 #include "third_party/WebKit/public/platform/WebString.h"
16 19
17 namespace content { 20 namespace content {
18 21
19 WebRtcMediaStreamAdapter::WebRtcMediaStreamAdapter( 22 WebRtcMediaStreamAdapter::WebRtcMediaStreamAdapter(
20 const blink::WebMediaStream& web_stream, 23 const blink::WebMediaStream& web_stream,
21 PeerConnectionDependencyFactory* factory) 24 PeerConnectionDependencyFactory* factory)
22 : web_stream_(web_stream), 25 : web_stream_(web_stream),
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 } 74 }
72 } 75 }
73 } 76 }
74 } 77 }
75 78
76 void WebRtcMediaStreamAdapter::CreateAudioTrack( 79 void WebRtcMediaStreamAdapter::CreateAudioTrack(
77 const blink::WebMediaStreamTrack& track) { 80 const blink::WebMediaStreamTrack& track) {
78 DCHECK_EQ(track.source().type(), blink::WebMediaStreamSource::TypeAudio); 81 DCHECK_EQ(track.source().type(), blink::WebMediaStreamSource::TypeAudio);
79 // A media stream is connected to a peer connection, enable the 82 // A media stream is connected to a peer connection, enable the
80 // peer connection mode for the sources. 83 // peer connection mode for the sources.
81 MediaStreamAudioTrack* native_track = MediaStreamAudioTrack::GetTrack(track); 84 MediaStreamAudioTrack* native_track = MediaStreamAudioTrack::Get(track);
82 if (!native_track) { 85 if (!native_track) {
83 DLOG(ERROR) << "No native track for blink audio track."; 86 DLOG(ERROR) << "No native track for blink audio track.";
84 return; 87 return;
85 } 88 }
86 89
87 webrtc::AudioTrackInterface* audio_track = native_track->GetAudioAdapter(); 90 // If we have an instance of ProcessedLocalAudioTrack or
88 if (!audio_track) { 91 // PeerConnectionRemoteAudioTrack, use its webrtc::AudioTrackInterface
89 DLOG(ERROR) << "Audio track doesn't support webrtc."; 92 // implementation. Otherwise, create a place-holder instance for tracks
90 return; 93 // providing audio data from other sources.
94 scoped_refptr<webrtc::AudioTrackInterface> track_interface;
95 if (ProcessedLocalAudioTrack* local_rtc_track =
96 ProcessedLocalAudioTrack::From(native_track)) {
97 track_interface = local_rtc_track->adapter();
98 } else if (PeerConnectionRemoteAudioTrack* remote_pc_track =
99 PeerConnectionRemoteAudioTrack::From(native_track)) {
100 track_interface = remote_pc_track->track_interface();
101 } else {
102 const scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter =
103 WebRtcLocalAudioTrackAdapter::Create(
104 track.id().utf8(), nullptr, factory_->GetWebRtcSignalingThread());
105 adapter->SetMediaStreamAudioTrack(native_track);
106 native_track->AddStopObserver(
107 base::Bind(&WebRtcLocalAudioTrackAdapter::SetMediaStreamAudioTrack,
108 adapter, nullptr));
109 track_interface = adapter;
91 } 110 }
92 111 webrtc_media_stream_->AddTrack(track_interface.get());
93 if (native_track->is_local_track()) {
94 const blink::WebMediaStreamSource& source = track.source();
95 MediaStreamAudioSource* audio_source =
96 static_cast<MediaStreamAudioSource*>(source.extraData());
97 if (audio_source && audio_source->GetAudioCapturer().get())
98 audio_source->GetAudioCapturer()->EnablePeerConnectionMode();
99 }
100
101 webrtc_media_stream_->AddTrack(audio_track);
102 } 112 }
103 113
104 void WebRtcMediaStreamAdapter::CreateVideoTrack( 114 void WebRtcMediaStreamAdapter::CreateVideoTrack(
105 const blink::WebMediaStreamTrack& track) { 115 const blink::WebMediaStreamTrack& track) {
106 DCHECK_EQ(track.source().type(), blink::WebMediaStreamSource::TypeVideo); 116 DCHECK_EQ(track.source().type(), blink::WebMediaStreamSource::TypeVideo);
107 MediaStreamVideoWebRtcSink* adapter = 117 MediaStreamVideoWebRtcSink* adapter =
108 new MediaStreamVideoWebRtcSink(track, factory_); 118 new MediaStreamVideoWebRtcSink(track, factory_);
109 video_adapters_.push_back(adapter); 119 video_adapters_.push_back(adapter);
110 webrtc_media_stream_->AddTrack(adapter->webrtc_video_track()); 120 webrtc_media_stream_->AddTrack(adapter->webrtc_video_track());
111 } 121 }
112 122
113 } // namespace content 123 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698