Index: content/renderer/media/media_stream_dependency_factory.cc |
diff --git a/content/renderer/media/media_stream_dependency_factory.cc b/content/renderer/media/media_stream_dependency_factory.cc |
index 06943a6bb2da00c58b1fc460567b7e843a0d83f1..cb03e5809afa01fc512ba12fd2fe96e90320d689 100644 |
--- a/content/renderer/media/media_stream_dependency_factory.cc |
+++ b/content/renderer/media/media_stream_dependency_factory.cc |
@@ -311,75 +311,23 @@ void MediaStreamDependencyFactory::CreateNativeLocalMediaStream( |
std::string label = UTF16ToUTF8(description->label()); |
scoped_refptr<webrtc::MediaStreamInterface> native_stream = |
CreateLocalMediaStream(label); |
+ MediaStreamExtraData* extra_data = new MediaStreamExtraData(native_stream, |
+ true); |
+ description->setExtraData(extra_data); |
// Add audio tracks. |
WebKit::WebVector<WebKit::WebMediaStreamTrack> audio_tracks; |
- description->audioSources(audio_tracks); |
- |
- bool start_stream = false; |
+ description->audioTracks(audio_tracks); |
for (size_t i = 0; i < audio_tracks.size(); ++i) { |
henrika (OOO until Aug 14)
2013/04/09 16:53:43
Nice! Much better structure even if I find it a bi
perkj_chrome
2013/04/10 19:58:00
..
audioSources(audio_tracks) has changed name to
|
- WebKit::WebMediaStreamSource source = audio_tracks[i].source(); |
- |
- // See if we're adding a WebAudio MediaStream. |
- if (source.requiresAudioConsumer()) { |
- // TODO(crogers, xians): In reality we should be able to send a unique |
- // audio stream to each PeerConnection separately. But currently WebRTC |
- // is only able to handle a global audio stream sent to ALL peers. |
- |
- // Create a special source where default WebAudio constraints are used. |
- if (!CreateWebAudioSource(&source)) { |
- LOG(ERROR) << "Failed to create WebAudio source"; |
- continue; |
- } |
- } |
- |
- MediaStreamSourceExtraData* source_data = |
- static_cast<MediaStreamSourceExtraData*>(source.extraData()); |
- |
- if (!source_data) { |
- // TODO(perkj): Implement support for sources from |
- // remote MediaStreams. |
- NOTIMPLEMENTED(); |
- continue; |
- } |
- |
- scoped_refptr<webrtc::AudioTrackInterface> audio_track( |
- CreateLocalAudioTrack(UTF16ToUTF8(audio_tracks[i].id()), |
- source_data->local_audio_source())); |
- native_stream->AddTrack(audio_track); |
- audio_track->set_enabled(audio_tracks[i].isEnabled()); |
- start_stream = true; |
- } |
- |
- if (start_stream && GetWebRtcAudioDevice()) { |
- WebRtcAudioCapturer* capturer = GetWebRtcAudioDevice()->capturer(); |
- capturer->Start(); |
+ AddNativeLocalMediaTrack(*description, audio_tracks[i]); |
} |
// Add video tracks. |
WebKit::WebVector<WebKit::WebMediaStreamTrack> video_tracks; |
- description->videoSources(video_tracks); |
+ description->videoTracks(video_tracks); |
for (size_t i = 0; i < video_tracks.size(); ++i) { |
- const WebKit::WebMediaStreamSource& source = video_tracks[i].source(); |
- MediaStreamSourceExtraData* source_data = |
- static_cast<MediaStreamSourceExtraData*>(source.extraData()); |
- if (!source_data || !source_data->video_source()) { |
- // TODO(perkj): Implement support for sources from remote MediaStreams. |
- NOTIMPLEMENTED(); |
- continue; |
- } |
- |
- scoped_refptr<webrtc::VideoTrackInterface> video_track( |
- CreateLocalVideoTrack(UTF16ToUTF8(video_tracks[i].id()), |
- source_data->video_source())); |
- |
- native_stream->AddTrack(video_track); |
- video_track->set_enabled(video_tracks[i].isEnabled()); |
+ AddNativeLocalMediaTrack(*description, video_tracks[i]); |
} |
- |
- MediaStreamExtraData* extra_data = new MediaStreamExtraData(native_stream, |
- true); |
- description->setExtraData(extra_data); |
} |
void MediaStreamDependencyFactory::CreateNativeLocalMediaStream( |
@@ -392,6 +340,65 @@ void MediaStreamDependencyFactory::CreateNativeLocalMediaStream( |
extra_data->SetLocalStreamStopCallback(stream_stop); |
} |
+bool MediaStreamDependencyFactory::AddNativeLocalMediaTrack( |
+ const WebKit::WebMediaStream& stream, |
+ const WebKit::WebMediaStreamTrack& track) { |
+ MediaStreamExtraData* extra_data = |
+ static_cast<MediaStreamExtraData*>(stream.extraData()); |
+ webrtc::MediaStreamInterface* native_stream = extra_data->stream(); |
+ if (!native_stream) { |
+ NOTREACHED(); |
tommi (sloooow) - chröme
2013/04/09 13:28:49
if this is something that will never happen, this
perkj_chrome
2013/04/10 19:58:00
Done.
|
+ return false; |
+ } |
+ |
+ WebKit::WebMediaStreamSource source = track.source(); |
+ MediaStreamSourceExtraData* source_data = |
+ static_cast<MediaStreamSourceExtraData*>(source.extraData()); |
+ |
+ if (!source_data) { |
+ if (!source.requiresAudioConsumer()) { |
+ // TODO(perkj): Implement support for sources from |
+ // remote MediaStreams. |
+ NOTIMPLEMENTED(); |
henrika (OOO until Aug 14)
2013/04/09 16:53:43
What does the combo of NOTIMPLEMENTED() + return f
perkj_chrome
2013/04/10 19:58:00
NOTIMPLEMENTED prints a warning in the log output.
|
+ return false; |
+ } else |
+ // We're adding a WebAudio MediaStream. |
tommi (sloooow) - chröme
2013/04/09 13:28:49
Is that the only possibility? Is there a way to ve
perkj_chrome
2013/04/10 19:58:00
source.requiresAudioConsumer() means WebAudio in B
|
+ // TODO(crogers, xians): In reality we should be able to send a unique |
+ // audio stream to each PeerConnection separately. But currently WebRTC |
+ // is only able to handle a global audio stream sent to ALL peers. |
+ // Create a special source where default WebAudio constraints are used. |
henrika (OOO until Aug 14)
2013/04/09 16:53:43
Nit, the TODO is not really connected to the audio
perkj_chrome
2013/04/10 19:58:00
Done.
|
+ if (CreateWebAudioSource(&source)) { |
+ source_data = |
+ static_cast<MediaStreamSourceExtraData*>(source.extraData()); |
+ } else { |
+ LOG(ERROR) << "Failed to create WebAudio source"; |
+ return false; |
+ } |
+ } |
+ |
+ if (source.type() == WebKit::WebMediaStreamSource::TypeAudio) { |
tommi (sloooow) - chröme
2013/04/09 13:28:49
nit: if type() can only ever be audio or video, th
perkj_chrome
2013/04/10 19:58:00
Done.
|
+ scoped_refptr<webrtc::AudioTrackInterface> audio_track( |
+ CreateLocalAudioTrack(UTF16ToUTF8(track.id()), |
+ source_data->local_audio_source())); |
+ audio_track->set_enabled(track.isEnabled()); |
+ if (GetWebRtcAudioDevice()) { |
henrika (OOO until Aug 14)
2013/04/09 16:53:43
Could you add a TODO(henrika,xians) here saying th
|
+ WebRtcAudioCapturer* capturer = GetWebRtcAudioDevice()->capturer(); |
+ if (!capturer->is_recording()) |
+ capturer->Start(); |
+ } |
+ return native_stream->AddTrack(audio_track); |
+ |
+ } else if (source.type() == WebKit::WebMediaStreamSource::TypeVideo) { |
+ scoped_refptr<webrtc::VideoTrackInterface> video_track( |
+ CreateLocalVideoTrack(UTF16ToUTF8(track.id()), |
+ source_data->video_source())); |
+ video_track->set_enabled(track.isEnabled()); |
+ return native_stream->AddTrack(video_track); |
+ } |
+ NOTREACHED(); |
+ return false; |
+} |
+ |
bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() { |
DVLOG(1) << "MediaStreamDependencyFactory::CreatePeerConnectionFactory()"; |
if (!pc_factory_.get()) { |