1f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch/* 2f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * libjingle 3f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * Copyright 2004--2008, Google Inc. 4f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 5f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * Redistribution and use in source and binary forms, with or without 6f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * modification, are permitted provided that the following conditions are met: 7f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 8f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 1. Redistributions of source code must retain the above copyright notice, 9f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * this list of conditions and the following disclaimer. 10f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright notice, 11f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * this list of conditions and the following disclaimer in the documentation 12f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * and/or other materials provided with the distribution. 13f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 3. The name of the author may not be used to endorse or promote products 14f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * derived from this software without specific prior written permission. 15f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 16f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch */ 27f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 28f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifndef TALK_SESSION_PHONE_CHANNELMANAGER_H_ 29f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#define TALK_SESSION_PHONE_CHANNELMANAGER_H_ 30f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include <string> 32f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include <vector> 33f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 34f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/base/criticalsection.h" 35f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/base/sigslotrepeater.h" 36f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/base/thread.h" 37f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/p2p/base/session.h" 38f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/session/phone/voicechannel.h" 39f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/session/phone/mediaengine.h" 40f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/session/phone/devicemanager.h" 41f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 42f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochnamespace cricket { 43f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 44f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass Soundclip; 45f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass VoiceChannel; 46f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 47f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// ChannelManager allows the MediaEngine to run on a separate thread, and takes 48f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// care of marshalling calls between threads. It also creates and keeps track of 49f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// voice and video channels; by doing so, it can temporarily pause all the 50f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// channels when a new audio or video device is chosen. The voice and video 51f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// channels are stored in separate vectors, to easily allow operations on just 52f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// voice or just video channels. 53f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// ChannelManager also allows the application to discover what devices it has 54f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// using device manager. 55f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass ChannelManager : public talk_base::MessageHandler, 56f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public sigslot::has_slots<> { 57f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Creates the channel manager, and specifies the worker thread to use. 59f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit ChannelManager(talk_base::Thread* worker); 60f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // For testing purposes. Allows the media engine and dev manager to be mocks. 61f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // The ChannelManager takes ownership of these objects. 62f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ChannelManager(MediaEngine* me, DeviceManager* dm, talk_base::Thread* worker); 63f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~ChannelManager(); 64f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Accessors for the worker thread, allowing it to be set after construction, 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // but before Init. set_worker_thread will return false if called after Init. 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick talk_base::Thread* worker_thread() const { return worker_thread_; } 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool set_worker_thread(talk_base::Thread* thread) { 693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (initialized_) return false; 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick worker_thread_ = thread; 713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return true; 723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 74f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Gets capabilities. Can be called prior to starting the media engine. 75f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int GetCapabilities(); 76f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 77f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Retrieves the list of supported audio & video codec types. 78f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Can be called before starting the media engine. 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void GetSupportedAudioCodecs(std::vector<AudioCodec>* codecs) const; 80f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void GetSupportedVideoCodecs(std::vector<VideoCodec>* codecs) const; 81f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 82f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Determines if a specific audio or video codec is supported. 83f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Can be called before starting the media engine. 843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool FindAudioCodec(const AudioCodec& codec) const { 853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return media_engine_->FindAudioCodec(codec); 86f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 87f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool FindVideoCodec(const VideoCodec& video_codec) const { 88f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return media_engine_->FindVideoCodec(video_codec); 89f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 90f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 91f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Indicates whether the media engine is started. 92f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool initialized() const { return initialized_; } 93f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Starts up the media engine. 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool Init(); 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // TODO: Remove this temporary API once Flute is updated. 963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool Init(talk_base::Thread* thread) { 973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return set_worker_thread(thread) && Init(); 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 99f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Shuts down the media engine. 100f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void Terminate(); 101f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 102f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // The operations below all occur on the worker thread. 103f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 104f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Creates a voice channel, to be associated with the specified session. 105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VoiceChannel* CreateVoiceChannel( 106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BaseSession* session, const std::string& content_name, bool rtcp); 107f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Destroys a voice channel created with the Create API. 108f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void DestroyVoiceChannel(VoiceChannel* voice_channel); 109f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Creates a video channel, synced with the specified voice channel, and 110f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // associated with the specified session. 111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VideoChannel* CreateVideoChannel( 112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BaseSession* session, const std::string& content_name, bool rtcp, 113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VoiceChannel* voice_channel); 114f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Destroys a video channel created with the Create API. 115f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void DestroyVideoChannel(VideoChannel* video_channel); 116f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 117f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Creates a soundclip. 118f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch Soundclip* CreateSoundclip(); 119f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Destroys a soundclip created with the Create API. 120f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void DestroySoundclip(Soundclip* soundclip); 121f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 122f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Indicates whether any channels exist. 123f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool has_channels() const { 124f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return (!voice_channels_.empty() || !video_channels_.empty() || 125f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch !soundclips_.empty()); 126f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 127f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 128f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Configures the audio and video devices. 129f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool GetAudioOptions(std::string* wave_in_device, 130f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string* wave_out_device, int* opts); 131f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetAudioOptions(const std::string& wave_in_device, 132f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const std::string& wave_out_device, int opts); 133f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetOutputVolume(int level); 134f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool GetVideoOptions(std::string* cam_device); 135f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetVideoOptions(const std::string& cam_device); 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool SetDefaultVideoEncoderConfig(const VideoEncoderConfig& config); 137f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 138f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Starts/stops the local microphone and enables polling of the input level. 139f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetLocalMonitor(bool enable); 140f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool monitoring() const { return monitoring_; } 141f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Sets the local renderer where to renderer the local camera. 142f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetLocalRenderer(VideoRenderer* renderer); 143f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Starts and stops the local camera and renders it to the local renderer. 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CaptureResult SetVideoCapture(bool capture); 145f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool capturing() const { return capturing_; } 146f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 147f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Configures the logging output of the mediaengine(s). 148f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void SetVoiceLogging(int level, const char* filter); 149f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void SetVideoLogging(int level, const char* filter); 150f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 151f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // The operations below occur on the main thread. 152f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 153f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool GetAudioInputDevices(std::vector<std::string>* names); 154f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool GetAudioOutputDevices(std::vector<std::string>* names); 155f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool GetVideoCaptureDevices(std::vector<std::string>* names); 156f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch sigslot::repeater0<> SignalDevicesChange; 157dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen sigslot::signal1<CaptureResult> SignalVideoCaptureResult; 158f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 159f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 160f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::vector<VoiceChannel*> VoiceChannels; 161f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::vector<VideoChannel*> VideoChannels; 162f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::vector<Soundclip*> Soundclips; 163f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void Construct(); 165f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool Send(uint32 id, talk_base::MessageData* pdata); 166731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VoiceChannel* CreateVoiceChannel_w( 167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BaseSession* session, const std::string& content_name, bool rtcp); 168f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void DestroyVoiceChannel_w(VoiceChannel* voice_channel); 169731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VideoChannel* CreateVideoChannel_w( 170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BaseSession* session, const std::string& content_name, bool rtcp, 171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VoiceChannel* voice_channel); 172f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void DestroyVideoChannel_w(VideoChannel* video_channel); 173f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch Soundclip* CreateSoundclip_w(); 174f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void DestroySoundclip_w(Soundclip* soundclip); 175f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetAudioOptions_w(int opts, const Device* in_dev, 176f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const Device* out_dev); 177f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetOutputVolume_w(int level); 178f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetLocalMonitor_w(bool enable); 179f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetVideoOptions_w(const Device* cam_device); 1803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool SetDefaultVideoEncoderConfig_w(const VideoEncoderConfig& config); 181f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool SetLocalRenderer_w(VideoRenderer* renderer); 1823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CaptureResult SetVideoCapture_w(bool capture); 183f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void SetMediaLogging(bool video, int level, const char* filter); 184f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void SetMediaLogging_w(bool video, int level, const char* filter); 185dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void OnVideoCaptureResult(CaptureResult result); 186f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void OnMessage(talk_base::Message *message); 187f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 188f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch talk_base::CriticalSection crit_; 189f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch talk_base::scoped_ptr<MediaEngine> media_engine_; 190f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch talk_base::scoped_ptr<DeviceManager> device_manager_; 191f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool initialized_; 192f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch talk_base::Thread* main_thread_; 193f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch talk_base::Thread* worker_thread_; 194f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 195f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch VoiceChannels voice_channels_; 196f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch VideoChannels video_channels_; 197f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch Soundclips soundclips_; 198f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 199f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string audio_in_device_; 200f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string audio_out_device_; 201f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int audio_options_; 202f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string camera_device_; 2033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VideoEncoderConfig default_video_encoder_config_; 2043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VideoRenderer* local_renderer_; 205f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 206f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool capturing_; 207f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool monitoring_; 208f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch}; 209f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 210f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch} // namespace cricket 211f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 212f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif // TALK_SESSION_PHONE_CHANNELMANAGER_H_ 213