10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2012, Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// This file contains classes for listening on changes on MediaStreams and 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// MediaTracks that are connected to a certain PeerConnection. 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Example: If a user sets a rendererer on a remote video track the renderer is 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// connected to the appropriate remote video stream. 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef TALK_APP_WEBRTC_MEDIASTREAMHANDLER_H_ 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TALK_APP_WEBRTC_MEDIASTREAMHANDLER_H_ 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <list> 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/mediastreaminterface.h" 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/mediastreamprovider.h" 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/peerconnectioninterface.h" 42b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org#include "talk/media/base/audiorenderer.h" 43cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/thread.h" 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace webrtc { 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// TrackHandler listen to events on a MediaStreamTrackInterface that is 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// connected to a certain PeerConnection. 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass TrackHandler : public ObserverInterface { 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TrackHandler(MediaStreamTrackInterface* track, uint32 ssrc); 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~TrackHandler(); 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnChanged(); 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Stop using |track_| on this PeerConnection. 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void Stop() = 0; 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamTrackInterface* track() { return track_; } 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc() const { return ssrc_; } 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnStateChanged() = 0; 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnEnabledChanged() = 0; 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 652a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_refptr<MediaStreamTrackInterface> track_; 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc_; 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamTrackInterface::TrackState state_; 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool enabled_; 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 71b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org// LocalAudioSinkAdapter receives data callback as a sink to the local 72b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org// AudioTrack, and passes the data to the sink of AudioRenderer. 73b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.orgclass LocalAudioSinkAdapter : public AudioTrackSinkInterface, 74b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org public cricket::AudioRenderer { 75b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org public: 76b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org LocalAudioSinkAdapter(); 77b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org virtual ~LocalAudioSinkAdapter(); 78b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 79b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org private: 80b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // AudioSinkInterface implementation. 81b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org virtual void OnData(const void* audio_data, int bits_per_sample, 82b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org int sample_rate, int number_of_channels, 83b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org int number_of_frames) OVERRIDE; 84b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 85b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // cricket::AudioRenderer implementation. 86b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org virtual void SetSink(cricket::AudioRenderer::Sink* sink) OVERRIDE; 87b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 88b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org cricket::AudioRenderer::Sink* sink_; 89b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // Critical section protecting |sink_|. 902a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::CriticalSection lock_; 91b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org}; 92b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// LocalAudioTrackHandler listen to events on a local AudioTrack instance 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// connected to a PeerConnection and orders the |provider| to executes the 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// requested change. 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass LocalAudioTrackHandler : public TrackHandler { 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalAudioTrackHandler(AudioTrackInterface* track, 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc, 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* provider); 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~LocalAudioTrackHandler(); 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void Stop() OVERRIDE; 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnStateChanged() OVERRIDE; 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnEnabledChanged() OVERRIDE; 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioTrackInterface* audio_track_; 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* provider_; 112b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 113b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // Used to pass the data callback from the |audio_track_| to the other 114b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // end of cricket::AudioRenderer. 1152a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<LocalAudioSinkAdapter> sink_adapter_; 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// RemoteAudioTrackHandler listen to events on a remote AudioTrack instance 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// connected to a PeerConnection and orders the |provider| to executes the 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// requested change. 1218a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.orgclass RemoteAudioTrackHandler : public AudioSourceInterface::AudioObserver, 1228a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org public TrackHandler { 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteAudioTrackHandler(AudioTrackInterface* track, 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc, 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* provider); 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~RemoteAudioTrackHandler(); 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void Stop() OVERRIDE; 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnStateChanged() OVERRIDE; 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnEnabledChanged() OVERRIDE; 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1358a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org // AudioSourceInterface::AudioObserver implementation. 1368a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org virtual void OnSetVolume(double volume) OVERRIDE; 1378a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioTrackInterface* audio_track_; 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* provider_; 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// LocalVideoTrackHandler listen to events on a local VideoTrack instance 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// connected to a PeerConnection and orders the |provider| to executes the 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// requested change. 1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass LocalVideoTrackHandler : public TrackHandler { 1460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalVideoTrackHandler(VideoTrackInterface* track, 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc, 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* provider); 1500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~LocalVideoTrackHandler(); 1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void Stop() OVERRIDE; 1520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnStateChanged() OVERRIDE; 1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnEnabledChanged() OVERRIDE; 1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoTrackInterface* local_video_track_; 1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* provider_; 1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// RemoteVideoTrackHandler listen to events on a remote VideoTrack instance 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// connected to a PeerConnection and orders the |provider| to execute 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// requested changes. 1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass RemoteVideoTrackHandler : public TrackHandler { 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteVideoTrackHandler(VideoTrackInterface* track, 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc, 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* provider); 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~RemoteVideoTrackHandler(); 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void Stop() OVERRIDE; 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnStateChanged() OVERRIDE; 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnEnabledChanged() OVERRIDE; 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoTrackInterface* remote_video_track_; 1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* provider_; 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass MediaStreamHandler : public ObserverInterface { 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamHandler(MediaStreamInterface* stream, 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* audio_provider, 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* video_provider); 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~MediaStreamHandler(); 1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamInterface* stream(); 1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void Stop(); 1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void AddAudioTrack(AudioTrackInterface* audio_track, uint32 ssrc) = 0; 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void AddVideoTrack(VideoTrackInterface* video_track, uint32 ssrc) = 0; 1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void RemoveTrack(MediaStreamTrackInterface* track); 1950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void OnChanged() OVERRIDE; 1960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TrackHandler* FindTrackHandler(MediaStreamTrackInterface* track); 1992a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_refptr<MediaStreamInterface> stream_; 2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* audio_provider_; 2010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* video_provider_; 2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef std::vector<TrackHandler*> TrackHandlers; 2030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TrackHandlers track_handlers_; 2040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 2050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass LocalMediaStreamHandler : public MediaStreamHandler { 2070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 2080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalMediaStreamHandler(MediaStreamInterface* stream, 2090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* audio_provider, 2100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* video_provider); 2110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~LocalMediaStreamHandler(); 2120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void AddAudioTrack(AudioTrackInterface* audio_track, 2140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc) OVERRIDE; 2150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void AddVideoTrack(VideoTrackInterface* video_track, 2160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc) OVERRIDE; 2170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 2180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass RemoteMediaStreamHandler : public MediaStreamHandler { 2200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 2210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteMediaStreamHandler(MediaStreamInterface* stream, 2220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* audio_provider, 2230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* video_provider); 2240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~RemoteMediaStreamHandler(); 2250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void AddAudioTrack(AudioTrackInterface* audio_track, 2260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc) OVERRIDE; 2270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void AddVideoTrack(VideoTrackInterface* video_track, 2280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc) OVERRIDE; 2290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 2300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Container for MediaStreamHandlers of currently known local and remote 2320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// MediaStreams. 2330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass MediaStreamHandlerContainer { 2340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 2350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamHandlerContainer(AudioProviderInterface* audio_provider, 2360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* video_provider); 2370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~MediaStreamHandlerContainer(); 2380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Notify all referenced objects that MediaStreamHandlerContainer will be 2400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // destroyed. This method must be called prior to the dtor and prior to the 2410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // |audio_provider| and |video_provider| is destroyed. 2420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TearDown(); 2430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Remove all TrackHandlers for tracks in |stream| and make sure 2450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // the audio_provider and video_provider is notified that the tracks has been 2460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // removed. 2470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void RemoveRemoteStream(MediaStreamInterface* stream); 2480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Create a RemoteAudioTrackHandler and associate |audio_track| with |ssrc|. 2500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddRemoteAudioTrack(MediaStreamInterface* stream, 2510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioTrackInterface* audio_track, 2520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc); 2530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Create a RemoteVideoTrackHandler and associate |video_track| with |ssrc|. 2540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddRemoteVideoTrack(MediaStreamInterface* stream, 2550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoTrackInterface* video_track, 2560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc); 2570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Remove the TrackHandler for |track|. 2580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void RemoveRemoteTrack(MediaStreamInterface* stream, 2590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamTrackInterface* track); 2600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Remove all TrackHandlers for tracks in |stream| and make sure 2620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // the audio_provider and video_provider is notified that the tracks has been 2630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // removed. 2640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void RemoveLocalStream(MediaStreamInterface* stream); 2650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Create a LocalAudioTrackHandler and associate |audio_track| with |ssrc|. 2670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddLocalAudioTrack(MediaStreamInterface* stream, 2680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioTrackInterface* audio_track, 2690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc); 2700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Create a LocalVideoTrackHandler and associate |video_track| with |ssrc|. 2710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddLocalVideoTrack(MediaStreamInterface* stream, 2720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoTrackInterface* video_track, 2730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc); 2740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Remove the TrackHandler for |track|. 2750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void RemoveLocalTrack(MediaStreamInterface* stream, 2760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamTrackInterface* track); 2770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 2790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef std::list<MediaStreamHandler*> StreamHandlerList; 2800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamHandler* FindStreamHandler(const StreamHandlerList& handlers, 2810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamInterface* stream); 2820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamHandler* CreateRemoteStreamHandler(MediaStreamInterface* stream); 2830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamHandler* CreateLocalStreamHandler(MediaStreamInterface* stream); 2840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void DeleteStreamHandler(StreamHandlerList* streamhandlers, 2850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MediaStreamInterface* stream); 2860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org StreamHandlerList local_streams_handlers_; 2880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org StreamHandlerList remote_streams_handlers_; 2890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioProviderInterface* audio_provider_; 2900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoProviderInterface* video_provider_; 2910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 2920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace webrtc 2940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // TALK_APP_WEBRTC_MEDIASTREAMHANDLER_H_ 296