| 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..f3d3429d6fb004b04eb72844ec186862ff0bcc47 100644
|
| --- a/content/renderer/media/media_stream_center.cc
|
| +++ b/content/renderer/media/media_stream_center.cc
|
| @@ -9,17 +9,79 @@
|
| #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());
|
| + if (extra_data && extra_data->remote_stream())
|
| + return extra_data->remote_stream();
|
| +
|
| + if (extra_data && extra_data->local_stream())
|
| + return extra_data->local_stream();
|
| +
|
| + // TODO(perkj): This can occur if a JS create a new MediaStream based on an
|
| + // existing MediaStream.
|
| + NOTIMPLEMENTED();
|
| + 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>(
|
| + source_id, native_stream->audio_tracks());
|
| + }
|
| + if (component.source().type() == WebKit::WebMediaStreamSource::TypeVideo) {
|
| + return GetTrack<webrtc::VideoTracks>(
|
| + source_id, native_stream->video_tracks());
|
| + }
|
| + }
|
| + // TODO(perkj): This can occur if a JS create a new MediaStream based on an
|
| + // existing MediaStream.
|
| + NOTIMPLEMENTED();
|
| + return NULL;
|
| +}
|
| +
|
| MediaStreamCenter::MediaStreamCenter(
|
| WebKit::WebMediaStreamCenterClient* client)
|
| : client_(client) {
|
| @@ -34,19 +96,47 @@ 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);
|
| + return;
|
| + }
|
| +
|
| + 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);
|
| + return;
|
| + }
|
| + NOTREACHED();
|
| }
|
|
|
| WebKit::WebString MediaStreamCenter::constructSDP(
|
|
|