1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/renderer/media/peer_connection_handler_base.h" 6 7 #include "base/logging.h" 8 #include "base/strings/utf_string_conversions.h" 9 #include "content/renderer/media/media_stream_dependency_factory.h" 10 #include "content/renderer/media/media_stream_extra_data.h" 11 #include "third_party/WebKit/public/platform/WebMediaStream.h" 12 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 13 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 14 #include "third_party/WebKit/public/platform/WebString.h" 15 16 namespace content { 17 18 // TODO(hta): Unify implementations of these functions from MediaStreamCenter 19 static webrtc::MediaStreamInterface* GetNativeMediaStream( 20 const WebKit::WebMediaStream& stream) { 21 MediaStreamExtraData* extra_data = 22 static_cast<MediaStreamExtraData*>(stream.extraData()); 23 if (extra_data) 24 return extra_data->stream().get(); 25 return NULL; 26 } 27 28 PeerConnectionHandlerBase::PeerConnectionHandlerBase( 29 MediaStreamDependencyFactory* dependency_factory) 30 : dependency_factory_(dependency_factory), 31 message_loop_proxy_(base::MessageLoopProxy::current()) { 32 } 33 34 PeerConnectionHandlerBase::~PeerConnectionHandlerBase() { 35 } 36 37 bool PeerConnectionHandlerBase::AddStream( 38 const WebKit::WebMediaStream& stream, 39 const webrtc::MediaConstraintsInterface* constraints) { 40 webrtc::MediaStreamInterface* native_stream = GetNativeMediaStream(stream); 41 if (!native_stream) 42 return false; 43 return native_peer_connection_->AddStream(native_stream, constraints); 44 } 45 46 void PeerConnectionHandlerBase::RemoveStream( 47 const WebKit::WebMediaStream& stream) { 48 webrtc::MediaStreamInterface* native_stream = GetNativeMediaStream(stream); 49 if (native_stream) 50 native_peer_connection_->RemoveStream(native_stream); 51 DCHECK(native_stream); 52 } 53 54 webrtc::MediaStreamTrackInterface* 55 PeerConnectionHandlerBase::GetNativeMediaStreamTrack( 56 const WebKit::WebMediaStream& stream, 57 const WebKit::WebMediaStreamTrack& track) { 58 std::string track_id = UTF16ToUTF8(track.id()); 59 webrtc::MediaStreamInterface* native_stream = GetNativeMediaStream(stream); 60 if (!native_stream) { 61 return NULL; 62 } 63 if (track.source().type() == WebKit::WebMediaStreamSource::TypeAudio) { 64 return native_stream->FindAudioTrack(track_id); 65 } 66 if (track.source().type() == WebKit::WebMediaStreamSource::TypeVideo) { 67 return native_stream->FindVideoTrack(track_id); 68 } 69 NOTIMPLEMENTED(); // We have an unknown type of media stream track. 70 return NULL; 71 } 72 73 } // namespace content 74