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

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

Issue 1834323002: MediaStream audio: Refactor 3 separate "glue" implementations into one. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments about PS1 addressed. Fixed is_stopped_/StopSource() foo. REBASE Created 4 years, 8 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/logging.h" 7 #include "base/logging.h"
8 #include "content/renderer/media/media_stream_audio_source.h"
9 #include "content/renderer/media/media_stream_audio_track.h" 8 #include "content/renderer/media/media_stream_audio_track.h"
10 #include "content/renderer/media/media_stream_track.h" 9 #include "content/renderer/media/media_stream_track.h"
11 #include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h" 10 #include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h"
12 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" 11 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
12 #include "content/renderer/media/webrtc/peer_connection_remote_audio_source.h"
13 #include "content/renderer/media/webrtc/processed_local_audio_track.h"
14 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
13 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 15 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
14 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 16 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
15 #include "third_party/WebKit/public/platform/WebString.h" 17 #include "third_party/WebKit/public/platform/WebString.h"
16 18
17 namespace content { 19 namespace content {
18 20
19 WebRtcMediaStreamAdapter::WebRtcMediaStreamAdapter( 21 WebRtcMediaStreamAdapter::WebRtcMediaStreamAdapter(
20 const blink::WebMediaStream& web_stream, 22 const blink::WebMediaStream& web_stream,
21 PeerConnectionDependencyFactory* factory) 23 PeerConnectionDependencyFactory* factory)
22 : web_stream_(web_stream), 24 : web_stream_(web_stream),
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 const blink::WebMediaStreamTrack& track) { 79 const blink::WebMediaStreamTrack& track) {
78 DCHECK_EQ(track.source().getType(), blink::WebMediaStreamSource::TypeAudio); 80 DCHECK_EQ(track.source().getType(), blink::WebMediaStreamSource::TypeAudio);
79 // A media stream is connected to a peer connection, enable the 81 // A media stream is connected to a peer connection, enable the
80 // peer connection mode for the sources. 82 // peer connection mode for the sources.
81 MediaStreamAudioTrack* native_track = MediaStreamAudioTrack::From(track); 83 MediaStreamAudioTrack* native_track = MediaStreamAudioTrack::From(track);
82 if (!native_track) { 84 if (!native_track) {
83 DLOG(ERROR) << "No native track for blink audio track."; 85 DLOG(ERROR) << "No native track for blink audio track.";
84 return; 86 return;
85 } 87 }
86 88
87 webrtc::AudioTrackInterface* audio_track = native_track->GetAudioAdapter(); 89 // If we have an instance of ProcessedLocalAudioTrack or
88 if (!audio_track) { 90 // PeerConnectionRemoteAudioTrack, use its webrtc::AudioTrackInterface
89 DLOG(ERROR) << "Audio track doesn't support webrtc."; 91 // implementation. Otherwise, create a place-holder instance for tracks
90 return; 92 // providing audio data from other sources.
93 scoped_refptr<webrtc::AudioTrackInterface> track_interface;
94 if (ProcessedLocalAudioTrack* local_rtc_track =
95 ProcessedLocalAudioTrack::From(native_track)) {
96 track_interface = local_rtc_track->adapter();
97 } else if (PeerConnectionRemoteAudioTrack* remote_pc_track =
98 PeerConnectionRemoteAudioTrack::From(native_track)) {
99 track_interface = remote_pc_track->track_interface();
100 } else {
101 const scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter =
102 WebRtcLocalAudioTrackAdapter::Create(track.id().utf8(), nullptr);
103 adapter->SetMediaStreamAudioTrack(native_track->GetWeakPtr());
104 track_interface = adapter;
91 } 105 }
92 106
93 if (native_track->is_local_track()) { 107 webrtc_media_stream_->AddTrack(track_interface.get());
o1ka 2016/03/31 16:35:35 If track_interface was created at l.101, doesn't i
miu 2016/03/31 22:35:30 webrtc::AudioTrackInterface implements libjingle's
o1ka 2016/04/01 15:11:41 Ok, this is someting new for me, thanks! But does
miu 2016/04/08 18:36:47 Regarding the code in Patch Set 3: Yes, webrtc_med
94 const blink::WebMediaStreamSource& source = track.source();
95 MediaStreamAudioSource* audio_source = MediaStreamAudioSource::From(source);
96 if (audio_source && audio_source->audio_capturer())
97 audio_source->audio_capturer()->EnablePeerConnectionMode();
98 }
99
100 webrtc_media_stream_->AddTrack(audio_track);
101 } 108 }
102 109
103 void WebRtcMediaStreamAdapter::CreateVideoTrack( 110 void WebRtcMediaStreamAdapter::CreateVideoTrack(
104 const blink::WebMediaStreamTrack& track) { 111 const blink::WebMediaStreamTrack& track) {
105 DCHECK_EQ(track.source().getType(), blink::WebMediaStreamSource::TypeVideo); 112 DCHECK_EQ(track.source().getType(), blink::WebMediaStreamSource::TypeVideo);
106 MediaStreamVideoWebRtcSink* adapter = 113 MediaStreamVideoWebRtcSink* adapter =
107 new MediaStreamVideoWebRtcSink(track, factory_); 114 new MediaStreamVideoWebRtcSink(track, factory_);
108 video_adapters_.push_back(adapter); 115 video_adapters_.push_back(adapter);
109 webrtc_media_stream_->AddTrack(adapter->webrtc_video_track()); 116 webrtc_media_stream_->AddTrack(adapter->webrtc_video_track());
110 } 117 }
111 118
112 } // namespace content 119 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698