10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2010 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// LinphoneMediaEngine is a Linphone implementation of MediaEngine 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef TALK_SESSION_PHONE_LINPHONEMEDIAENGINE_H_ 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TALK_SESSION_PHONE_LINPHONEMEDIAENGINE_H_ 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string> 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgextern "C" { 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <mediastreamer2/mediastream.h> 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/codec.h" 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/mediachannel.h" 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/mediaengine.h" 43cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/scoped_ptr.h" 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 452a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.orgnamespace rtc { 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass StreamInterface; 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace cricket { 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass LinphoneMediaEngine : public MediaEngineInterface { 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LinphoneMediaEngine(const std::string& ringWav, const std::string& callWav); 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~LinphoneMediaEngine() {} 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Should be called before codecs() and video_codecs() are called. We need to 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // set the voice and video codecs; otherwise, Jingle initiation will fail. 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_voice_codecs(const std::vector<AudioCodec>& codecs) { 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org voice_codecs_ = codecs; 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_video_codecs(const std::vector<VideoCodec>& codecs) { 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video_codecs_ = codecs; 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Implement pure virtual methods of MediaEngine. 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool Init(); 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void Terminate(); 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int GetCapabilities(); 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual VoiceMediaChannel* CreateChannel(); 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual VideoMediaChannel* CreateVideoChannel(VoiceMediaChannel* voice_ch); 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual SoundclipMedia* CreateSoundclip() { return NULL; } 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetAudioOptions(int options) { return true; } 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetDefaultVideoEncoderConfig(const VideoEncoderConfig& config) { 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return true; 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetSoundDevices(const Device* in_dev, const Device* out_dev) { 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return true; 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetVideoCaptureDevice(const Device* cam_device) { return true; } 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetOutputVolume(int level) { return true; } 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int GetInputLevel() { return 0; } 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetLocalMonitor(bool enable) { return true; } 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // TODO: control channel send? 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetVideoCapture(bool capture) { return true; } 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual const std::vector<AudioCodec>& audio_codecs() { 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return voice_codecs_; 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual const std::vector<VideoCodec>& video_codecs() { 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return video_codecs_; 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool FindAudioCodec(const AudioCodec& codec); 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool FindVideoCodec(const VideoCodec& codec) { return true; } 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SetVoiceLogging(int min_sev, const char* filter) {} 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SetVideoLogging(int min_sev, const char* filter) {} 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string GetRingWav(){return ring_wav_;} 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string GetCallWav(){return call_wav_;} 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int have_ilbc; 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string voice_input_filename_; 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string voice_output_filename_; 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string video_input_filename_; 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string video_output_filename_; 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<AudioCodec> voice_codecs_; 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<VideoCodec> video_codecs_; 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ring_wav_; 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string call_wav_; 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DISALLOW_COPY_AND_ASSIGN(LinphoneMediaEngine); 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass LinphoneVoiceChannel : public VoiceMediaChannel { 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LinphoneVoiceChannel(LinphoneMediaEngine *eng); 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~LinphoneVoiceChannel(); 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Implement pure virtual methods of VoiceMediaChannel. 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetRecvCodecs(const std::vector<AudioCodec>& codecs) { return true; } 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetSendCodecs(const std::vector<AudioCodec>& codecs); 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetPlayout(bool playout); 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetSend(SendFlags flag); 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool AddStream(uint32 ssrc) { return true; } 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool RemoveStream(uint32 ssrc) { return true; } 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool GetActiveStreams(AudioInfo::StreamList* actives) { return true; } 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int GetOutputLevel() { return 0; } 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetOutputScaling(uint32 ssrc, double left, double right) { 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return false; 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool GetOutputScaling(uint32 ssrc, double* left, double* right) { 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return false; 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SetRingbackTone(const char* buf, int len) {} 1360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool PlayRingbackTone(bool play, bool loop) { return true; } 1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool PressDTMF(int event, bool playout) { return true; } 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool GetStats(VoiceMediaInfo* info) { return true; } 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Implement pure virtual methods of MediaChannel. 1412a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org virtual void OnPacketReceived(rtc::Buffer* packet); 1422a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org virtual void OnRtcpReceived(rtc::Buffer* packet) {} 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SetSendSsrc(uint32 id) {} // TODO: change RTP packet? 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetRtcpCName(const std::string& cname) { return true; } 1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool Mute(bool on) { return mute_; } 146f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org virtual bool SetStartSendBandwidth(int bps) { return true; } 147f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org virtual bool SetMaxSendBandwidth(int bps) { return true; } 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetOptions(int options) { return true; } 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetRecvRtpHeaderExtensions( 1500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::vector<RtpHeaderExtension>& extensions) { return true; } 1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool SetSendRtpHeaderExtensions( 1520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::vector<RtpHeaderExtension>& extensions) { return true; } 1530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StartRing(bool bIncomingCall); 1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StopRing(); 1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int pt_; 1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool mute_; 1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool play_; 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioStream *audio_stream_; 1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LinphoneMediaEngine *engine_; 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RingStream* ring_stream_; 1642a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::AsyncSocket> socket_; 1652a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org void OnIncomingData(rtc::AsyncSocket *s); 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DISALLOW_COPY_AND_ASSIGN(LinphoneVoiceChannel); 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace cricket 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // TALK_SESSION_PHONE_LINPHONEMEDIAENGINE_H_ 173