Index: content/public/renderer/media_stream_api.cc |
diff --git a/content/public/renderer/media_stream_api.cc b/content/public/renderer/media_stream_api.cc |
index 9ec76b703105d1ea58e20fc28bc30420289bde9d..5a83938778b1fb3a6fe2e45bdfb466d8e5e3f1e5 100644 |
--- a/content/public/renderer/media_stream_api.cc |
+++ b/content/public/renderer/media_stream_api.cc |
@@ -7,18 +7,17 @@ |
#include <utility> |
#include "base/base64.h" |
+#include "base/bind_helpers.h" |
#include "base/callback.h" |
#include "base/rand_util.h" |
#include "base/strings/utf_string_conversions.h" |
-#include "content/renderer/media/media_stream_audio_source.h" |
+#include "content/common/media/media_stream_options.h" |
+#include "content/renderer/media/external_media_stream_audio_source.h" |
#include "content/renderer/media/media_stream_video_capturer_source.h" |
#include "content/renderer/media/media_stream_video_track.h" |
-#include "content/renderer/render_thread_impl.h" |
#include "third_party/WebKit/public/platform/WebMediaStream.h" |
#include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
-#include "third_party/WebKit/public/platform/WebURL.h" |
-#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h" |
-#include "url/gurl.h" |
+#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
namespace content { |
@@ -35,99 +34,60 @@ blink::WebString MakeTrackId() { |
bool AddVideoTrackToMediaStream(scoped_ptr<media::VideoCapturerSource> source, |
bool is_remote, |
bool is_readonly, |
- const std::string& media_stream_url) { |
- blink::WebMediaStream web_stream = |
- blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor( |
- GURL(media_stream_url)); |
- return AddVideoTrackToMediaStream(std::move(source), is_remote, is_readonly, |
- &web_stream); |
-} |
- |
-bool AddVideoTrackToMediaStream(scoped_ptr<media::VideoCapturerSource> source, |
- bool is_remote, |
- bool is_readonly, |
blink::WebMediaStream* web_stream) { |
- if (web_stream->isNull()) { |
- DLOG(ERROR) << "Stream not found"; |
- return false; |
- } |
+ DCHECK(source.get()); |
+ DCHECK(web_stream); |
+ DCHECK(!web_stream->isNull()); |
+ |
const blink::WebString track_id = MakeTrackId(); |
blink::WebMediaStreamSource webkit_source; |
- scoped_ptr<MediaStreamVideoSource> media_stream_source( |
+ MediaStreamVideoSource* const media_stream_source = |
new MediaStreamVideoCapturerSource( |
- MediaStreamSource::SourceStoppedCallback(), std::move(source))); |
+ MediaStreamSource::SourceStoppedCallback(), std::move(source)); |
webkit_source.initialize(track_id, blink::WebMediaStreamSource::TypeVideo, |
track_id, is_remote, is_readonly); |
- webkit_source.setExtraData(media_stream_source.get()); |
+ // Takes ownership of |media_stream_source|. |
+ webkit_source.setExtraData(media_stream_source); |
blink::WebMediaConstraints constraints; |
constraints.initialize(); |
web_stream->addTrack(MediaStreamVideoTrack::CreateVideoTrack( |
- media_stream_source.release(), constraints, |
+ media_stream_source, constraints, |
MediaStreamVideoSource::ConstraintsCallback(), true)); |
return true; |
} |
bool AddAudioTrackToMediaStream( |
const scoped_refptr<media::AudioCapturerSource>& source, |
- const media::AudioParameters& params, |
- bool is_remote, |
- bool is_readonly, |
- const std::string& media_stream_url) { |
- DCHECK(params.IsValid()) << params.AsHumanReadableString(); |
- blink::WebMediaStream web_stream = |
- blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor( |
- GURL(media_stream_url)); |
- return AddAudioTrackToMediaStream(source, |
- is_remote, is_readonly, &web_stream); |
-} |
- |
-bool AddAudioTrackToMediaStream( |
- const scoped_refptr<media::AudioCapturerSource>& source, |
+ int sample_rate, |
+ media::ChannelLayout channel_layout, |
+ int frames_per_buffer, |
bool is_remote, |
bool is_readonly, |
blink::WebMediaStream* web_stream) { |
- if (web_stream->isNull()) { |
- DLOG(ERROR) << "Stream not found"; |
- return false; |
- } |
+ DCHECK(source.get()); |
+ DCHECK(web_stream); |
+ DCHECK(!web_stream->isNull()); |
- media::AudioParameters params( |
- media::AudioParameters::AUDIO_PCM_LINEAR, media::CHANNEL_LAYOUT_STEREO, |
- 48000, /* sample rate */ |
- 16, /* bits per sample */ |
- 480); /* frames per buffer */ |
- |
- blink::WebMediaStreamSource webkit_source; |
+ // Create Blink and Chromium objects to represent the MediaStreamSource. |
+ blink::WebMediaStreamSource web_source; |
const blink::WebString track_id = MakeTrackId(); |
- webkit_source.initialize(track_id, |
- blink::WebMediaStreamSource::TypeAudio, |
- track_id, |
- is_remote, |
- is_readonly); |
- |
- MediaStreamAudioSource* audio_source( |
- new MediaStreamAudioSource( |
- -1, |
- StreamDeviceInfo(), |
- MediaStreamSource::SourceStoppedCallback(), |
- RenderThreadImpl::current()->GetPeerConnectionDependencyFactory())); |
- |
- blink::WebMediaConstraints constraints; |
- constraints.initialize(); |
- scoped_refptr<WebRtcAudioCapturer> capturer( |
- WebRtcAudioCapturer::CreateCapturer(-1, StreamDeviceInfo(), constraints, |
- nullptr, audio_source)); |
- capturer->SetCapturerSource(source, params); |
- audio_source->SetAudioCapturer(capturer); |
- webkit_source.setExtraData(audio_source); |
- |
- blink::WebMediaStreamTrack web_media_audio_track; |
- web_media_audio_track.initialize(webkit_source); |
- RenderThreadImpl::current()->GetPeerConnectionDependencyFactory()-> |
- CreateLocalAudioTrack(web_media_audio_track); |
+ web_source.initialize(track_id, blink::WebMediaStreamSource::TypeAudio, |
+ track_id, is_remote, is_readonly); |
+ MediaStreamAudioSource* const audio_source = |
+ new ExternalMediaStreamAudioSource( |
+ source, sample_rate, channel_layout, frames_per_buffer, is_remote); |
+ web_source.setExtraData(audio_source); // Takes ownership of |audio_source|. |
+ |
+ // Create the Blink and Chromium objects to represent the MediaStreamTrack, |
+ // and connect the audio source to the track. |
+ blink::WebMediaStreamTrack web_track; |
+ web_track.initialize(web_source); |
+ if (!audio_source->ConnectToTrack(web_track)) |
+ return false; |
- web_stream->addTrack(web_media_audio_track); |
+ // Add the MediaStreamTrack to the MediaStream. |
+ web_stream->addTrack(web_track); |
return true; |
} |