10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_MEDIA_STREAM_ADAPTER_H_ 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_MEDIA_STREAM_ADAPTER_H_ 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/macros.h" 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/memory/ref_counted.h" 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/memory/scoped_vector.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/common/content_export.h" 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/renderer/media/media_stream.h" 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/renderer/media/webrtc/webrtc_video_track_adapter.h" 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/WebKit/public/platform/WebMediaStream.h" 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace content { 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PeerConnectionDependencyFactory; 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// WebRtcMediaStreamAdapter is an adapter between a blink::WebMediaStream 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// object and a webrtc MediaStreams that is currently sent on a PeerConnection. 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// The responsibility of the class is to create and own a representation of a 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// webrtc MediaStream that can be added and removed from a RTCPeerConnection. 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// An instance of WebRtcMediaStreamAdapter is created when a MediaStream is 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// added to an RTCPeerConnection object 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Instances of this class is owned by the RTCPeerConnectionHandler object that 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// created it. 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass CONTENT_EXPORT WebRtcMediaStreamAdapter 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch : NON_EXPORTED_BASE(public MediaStreamObserver) { 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public: 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch WebRtcMediaStreamAdapter(const blink::WebMediaStream& web_stream, 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PeerConnectionDependencyFactory* factory); 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual ~WebRtcMediaStreamAdapter(); 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool IsEqual(const blink::WebMediaStream& web_stream) { 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return web_stream_.extraData() == web_stream.extraData(); 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch webrtc::MediaStreamInterface* webrtc_media_stream() { 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return webrtc_media_stream_.get(); 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected: 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // MediaStreamObserver implementation. 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void TrackAdded(const blink::WebMediaStreamTrack& track) OVERRIDE; 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void TrackRemoved(const blink::WebMediaStreamTrack& track) OVERRIDE; 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private: 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void CreateAudioTrack(const blink::WebMediaStreamTrack& track); 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void CreateVideoTrack(const blink::WebMediaStreamTrack& track); 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch blink::WebMediaStream web_stream_; 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Pointer to a PeerConnectionDependencyFactory, owned by the RenderThread. 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // It's valid for the lifetime of RenderThread. 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PeerConnectionDependencyFactory* factory_; 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_refptr<webrtc::MediaStreamInterface> webrtc_media_stream_; 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ScopedVector<WebRtcVideoTrackAdapter> video_adapters_; 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DISALLOW_COPY_AND_ASSIGN (WebRtcMediaStreamAdapter); 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace content 660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif // CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_MEDIA_STREAM_ADAPTER_H_ 68