Chromium Code Reviews| Index: content/renderer/media/media_stream_center.cc |
| diff --git a/content/renderer/media/media_stream_center.cc b/content/renderer/media/media_stream_center.cc |
| index 75b266dc49187d94d2be4d1ca66d02897d941e2b..00ef6fd0373637f2a85e2003baba4ebcc4e41298 100644 |
| --- a/content/renderer/media/media_stream_center.cc |
| +++ b/content/renderer/media/media_stream_center.cc |
| @@ -9,17 +9,74 @@ |
| #include "base/logging.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/utf_string_conversions.h" |
| +#include "content/renderer/media/media_stream_impl.h" |
| +#include "content/renderer/media/media_stream_extra_data.h" |
| +#include "content/renderer/render_view_impl.h" |
| #include "third_party/libjingle/source/talk/app/webrtc/jsep.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebICECandidateDescriptor.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamCenterClient.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamComponent.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamDescriptor.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamSource.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamSourcesRequest.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSessionDescriptionDescriptor.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| namespace content { |
| +static MediaStreamImpl* GetMediaStreamImpl(WebKit::WebFrame* web_frame) { |
| + RenderViewImpl* render_view = RenderViewImpl::FromWebView(web_frame->view()); |
| + if (!render_view) |
| + return NULL; |
| + |
| + // TODO(perkj): Avoid this cast? |
| + return static_cast<MediaStreamImpl*>(render_view->userMediaClient()); |
| +} |
| + |
| +static webrtc::MediaStreamInterface* GetNativeMediaStream( |
| + const WebKit::WebMediaStreamDescriptor& stream) { |
| + MediaStreamExtraData* extra_data = |
| + static_cast<MediaStreamExtraData*>(stream.extraData()); |
|
tommi (sloooow) - chröme
2012/05/13 20:08:46
indent
perkj_chrome
2012/05/14 11:50:25
Done.
|
| + if (extra_data && extra_data->remote_stream()) |
| + return extra_data->remote_stream(); |
| + if (extra_data && extra_data->local_stream()) |
|
tommi (sloooow) - chröme
2012/05/13 20:08:46
empty line before this one (looks as if it's an el
perkj_chrome
2012/05/14 11:50:25
Done.
|
| + return extra_data->local_stream(); |
| + else |
|
tommi (sloooow) - chröme
2012/05/13 20:08:46
nit: no need for this else
perkj_chrome
2012/05/14 11:50:25
Done.
|
| + NOTREACHED(); |
| + return NULL; |
| +} |
| + |
| +template <class TrackList> |
| +static webrtc::MediaStreamTrackInterface* GetTrack( |
| + const std::string& source_id, |
| + TrackList* tracks) { |
| + for (size_t i = 0; i < tracks->count(); ++i) { |
| + if (tracks->at(i)->label() == source_id) |
| + return tracks->at(i); |
| + } |
| + return NULL; |
| +} |
| + |
| +static webrtc::MediaStreamTrackInterface* GetNativeMediaStreamTrack( |
| + const WebKit::WebMediaStreamDescriptor& stream, |
| + const WebKit::WebMediaStreamComponent& component) { |
| + std::string source_id = UTF16ToUTF8(component.source().id()); |
| + webrtc::MediaStreamInterface* native_stream = GetNativeMediaStream( |
| + stream); |
| + if (native_stream) { |
| + if (component.source().type() == WebKit::WebMediaStreamSource::TypeAudio) |
| + return GetTrack<webrtc::AudioTracks>( |
|
tommi (sloooow) - chröme
2012/05/13 20:08:46
use {} whenever the body of an if() spans more tha
perkj_chrome
2012/05/14 11:50:25
Done.
|
| + source_id, native_stream->audio_tracks()); |
| + if (component.source().type() == WebKit::WebMediaStreamSource::TypeVideo) |
| + return GetTrack<webrtc::VideoTracks>( |
| + source_id, native_stream->video_tracks()); |
| + } else { |
| + NOTREACHED(); |
| + } |
| + return NULL; |
| +} |
| + |
| MediaStreamCenter::MediaStreamCenter( |
| WebKit::WebMediaStreamCenterClient* client) |
| : client_(client) { |
| @@ -34,19 +91,44 @@ void MediaStreamCenter::queryMediaStreamSources( |
| void MediaStreamCenter::didEnableMediaStreamTrack( |
| const WebKit::WebMediaStreamDescriptor& stream, |
| const WebKit::WebMediaStreamComponent& component) { |
| + webrtc::MediaStreamTrackInterface* track = |
| + GetNativeMediaStreamTrack(stream, component); |
| + if (track) |
| + track->set_enabled(true); |
| } |
| void MediaStreamCenter::didDisableMediaStreamTrack( |
| const WebKit::WebMediaStreamDescriptor& stream, |
| const WebKit::WebMediaStreamComponent& component) { |
| + webrtc::MediaStreamTrackInterface* track = |
| + GetNativeMediaStreamTrack(stream, component); |
| + if (track) |
| + track->set_enabled(false); |
| } |
| void MediaStreamCenter::didStopLocalMediaStream( |
| const WebKit::WebMediaStreamDescriptor& stream) { |
| + DVLOG(1) << "MediaStreamCenter::didStopLocalMediaStream"; |
| + WebKit::WebFrame* web_frame = WebKit::WebFrame::frameForCurrentContext(); |
| + if (!web_frame) |
| + return; |
| + MediaStreamImpl* ms_impl = GetMediaStreamImpl(web_frame); |
| + if (ms_impl) |
| + ms_impl->StopLocalMediaStream(stream); |
| + else |
|
tommi (sloooow) - chröme
2012/05/13 20:08:46
no need for else
perkj_chrome
2012/05/14 11:50:25
Done.
|
| + NOTREACHED(); |
| } |
| -void MediaStreamCenter::didConstructMediaStream( |
| - const WebKit::WebMediaStreamDescriptor& stream) { |
| +void MediaStreamCenter::didCreateMediaStream( |
| + WebKit::WebMediaStreamDescriptor& stream) { |
| + WebKit::WebFrame* web_frame = WebKit::WebFrame::frameForCurrentContext(); |
| + if (!web_frame) |
| + return; |
| + MediaStreamImpl* ms_impl = GetMediaStreamImpl(web_frame); |
| + if (ms_impl) |
| + ms_impl->CreateMediaStream(web_frame, &stream); |
| + else |
|
tommi (sloooow) - chröme
2012/05/13 20:08:46
no need
perkj_chrome
2012/05/14 11:50:25
Done.
|
| + NOTREACHED(); |
| } |
| WebKit::WebString MediaStreamCenter::constructSDP( |