Home | History | Annotate | Download | only in media
      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