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

Unified Diff: content/renderer/media/media_stream_center.cc

Issue 10383151: Refactor MediaStreamImpl and PeerConnection glue implementation after WebKit changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Tommy W's comments Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
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());
tommi (sloooow) - chröme 2012/05/14 14:33:52 unless extraData returns a type that is related to
perkj_chrome 2012/05/14 15:14:33 inheritance
+ 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(

Powered by Google App Engine
This is Rietveld 408576698