From fce324272d0d9f6762b0b7d9f0c081b3692aa4ef Mon Sep 17 00:00:00 2001 From: Fredrik Solenberg Date: Wed, 20 May 2015 20:40:44 +0200 Subject: [PATCH] Remove linphonemediaengine.* BUG= R=pthatcher@webrtc.org Review URL: https://webrtc-codereview.appspot.com/54479004 Cr-Commit-Position: refs/heads/master@{#9239} --- talk/libjingle.gyp | 1 - talk/media/other/linphonemediaengine.cc | 276 ------------------------ talk/media/other/linphonemediaengine.h | 170 --------------- 3 files changed, 447 deletions(-) delete mode 100644 talk/media/other/linphonemediaengine.cc delete mode 100644 talk/media/other/linphonemediaengine.h diff --git a/talk/libjingle.gyp b/talk/libjingle.gyp index 99faaf1dae..e6e6492692 100755 --- a/talk/libjingle.gyp +++ b/talk/libjingle.gyp @@ -470,7 +470,6 @@ 'media/devices/videorendererfactory.h', 'media/devices/yuvframescapturer.cc', 'media/devices/yuvframescapturer.h', - 'media/other/linphonemediaengine.h', 'media/sctp/sctpdataengine.cc', 'media/sctp/sctpdataengine.h', 'media/webrtc/simulcast.cc', diff --git a/talk/media/other/linphonemediaengine.cc b/talk/media/other/linphonemediaengine.cc deleted file mode 100644 index 06b6d76f12..0000000000 --- a/talk/media/other/linphonemediaengine.cc +++ /dev/null @@ -1,276 +0,0 @@ -/* - * libjingle - * Copyright 2010 Google Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef MSILBC_LIBRARY -#define MSILBC_LIBRARY "/usr/lib/mediastreamer/plugins/libmsilbc.so" -#endif - -// LinphoneMediaEngine is a Linphone implementation of MediaEngine -extern "C" { -#include -#include -#include -} - -#include "talk/media/other/linphonemediaengine.h" - -#include "talk/media/base/rtpdump.h" -#include "webrtc/base/buffer.h" -#include "webrtc/base/event.h" -#include "webrtc/base/logging.h" -#include "webrtc/base/pathutils.h" -#include "webrtc/base/stream.h" - -#ifndef WIN32 -#include -#endif - -namespace cricket { - -/////////////////////////////////////////////////////////////////////////// -// Implementation of LinphoneMediaEngine. -/////////////////////////////////////////////////////////////////////////// -LinphoneMediaEngine::LinphoneMediaEngine(const std::string& ringWav, const std::string& callWav) : ring_wav_(ringWav), call_wav_(callWav) { } - -bool LinphoneMediaEngine::Init() { - ortp_init(); - ms_init(); - -#ifdef HAVE_ILBC -#ifndef WIN32 - char * path = strdup(MSILBC_LIBRARY); - char * dirc = dirname(path); - ms_load_plugins(dirc); -#endif - if (ms_filter_codec_supported("iLBC")) - have_ilbc = 1; - else - have_ilbc = 0; -#else - have_ilbc = 0; -#endif - -#ifdef HAVE_SPEEX - voice_codecs_.push_back(AudioCodec(110, payload_type_speex_wb.mime_type, payload_type_speex_wb.clock_rate, 0, 1, 8)); - voice_codecs_.push_back(AudioCodec(111, payload_type_speex_nb.mime_type, payload_type_speex_nb.clock_rate, 0, 1, 7)); -#endif - -#ifdef HAVE_ILBC - if (have_ilbc) - voice_codecs_.push_back(AudioCodec(102, payload_type_ilbc.mime_type, payload_type_ilbc.clock_rate, 0, 1, 4)); -#endif - - voice_codecs_.push_back(AudioCodec(0, payload_type_pcmu8000.mime_type, payload_type_pcmu8000.clock_rate, 0, 1, 2)); - voice_codecs_.push_back(AudioCodec(101, payload_type_telephone_event.mime_type, payload_type_telephone_event.clock_rate, 0, 1, 1)); - return true; -} - -void LinphoneMediaEngine::Terminate() { - fflush(stdout); -} - - -int LinphoneMediaEngine::GetCapabilities() { - int capabilities = 0; - capabilities |= AUDIO_SEND; - capabilities |= AUDIO_RECV; - return capabilities; -} - -VoiceMediaChannel* LinphoneMediaEngine::CreateChannel() { - return new LinphoneVoiceChannel(this); -} - -VideoMediaChannel* LinphoneMediaEngine::CreateVideoChannel(VoiceMediaChannel* voice_ch) { - return NULL; -} - -bool LinphoneMediaEngine::FindAudioCodec(const AudioCodec &c) { - if (c.id == 0) - return true; - if (c.name == payload_type_telephone_event.mime_type) - return true; -#ifdef HAVE_SPEEX - if (c.name == payload_type_speex_wb.mime_type && c.clockrate == payload_type_speex_wb.clock_rate) - return true; - if (c.name == payload_type_speex_nb.mime_type && c.clockrate == payload_type_speex_nb.clock_rate) - return true; -#endif -#ifdef HAVE_ILBC - if (have_ilbc && c.name == payload_type_ilbc.mime_type) - return true; -#endif - return false; -} - -/////////////////////////////////////////////////////////////////////////// -// Implementation of LinphoneVoiceChannel. -/////////////////////////////////////////////////////////////////////////// -LinphoneVoiceChannel::LinphoneVoiceChannel(LinphoneMediaEngine*eng) - : pt_(-1), - audio_stream_(0), - engine_(eng), - ring_stream_(0) -{ - - rtc::Thread *thread = rtc::ThreadManager::CurrentThread(); - rtc::SocketServer *ss = thread->socketserver(); - socket_.reset(ss->CreateAsyncSocket(SOCK_DGRAM)); - - socket_->Bind(rtc::SocketAddress("localhost",3000)); - socket_->SignalReadEvent.connect(this, &LinphoneVoiceChannel::OnIncomingData); - -} - -LinphoneVoiceChannel::~LinphoneVoiceChannel() -{ - fflush(stdout); - StopRing(); - - if (audio_stream_) - audio_stream_stop(audio_stream_); -} - -bool LinphoneVoiceChannel::SetPlayout(bool playout) { - play_ = playout; - return true; -} - -bool LinphoneVoiceChannel::SetSendCodecs(const std::vector& codecs) { - - bool first = true; - std::vector::const_iterator i; - - ortp_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); - - for (i = codecs.begin(); i < codecs.end(); i++) { - - if (!engine_->FindAudioCodec(*i)) - continue; -#ifdef HAVE_ILBC - if (engine_->have_ilbc && i->name == payload_type_ilbc.mime_type) { - rtp_profile_set_payload(&av_profile, i->id, &payload_type_ilbc); - } -#endif -#ifdef HAVE_SPEEX - if (i->name == payload_type_speex_wb.mime_type && i->clockrate == payload_type_speex_wb.clock_rate) { - rtp_profile_set_payload(&av_profile, i->id, &payload_type_speex_wb); - } else if (i->name == payload_type_speex_nb.mime_type && i->clockrate == payload_type_speex_nb.clock_rate) { - rtp_profile_set_payload(&av_profile, i->id, &payload_type_speex_nb); - } -#endif - - if (i->id == 0) - rtp_profile_set_payload(&av_profile, 0, &payload_type_pcmu8000); - - if (i->name == payload_type_telephone_event.mime_type) { - rtp_profile_set_payload(&av_profile, i->id, &payload_type_telephone_event); - } - - if (first) { - StopRing(); - LOG(LS_INFO) << "Using " << i->name << "/" << i->clockrate; - pt_ = i->id; - audio_stream_ = audio_stream_start(&av_profile, 2000, "127.0.0.1", 3000, i->id, 250, 0); - first = false; - } - } - - if (first) { - StopRing(); - // We're being asked to set an empty list of codecs. This will only happen when - // working with a buggy client; let's try PCMU. - LOG(LS_WARNING) << "Received empty list of codces; using PCMU/8000"; - audio_stream_ = audio_stream_start(&av_profile, 2000, "127.0.0.1", 3000, 0, 250, 0); - } - - return true; -} - -bool LinphoneVoiceChannel::SetSend(SendFlags flag) { - mute_ = !flag; - return true; -} - -void LinphoneVoiceChannel::OnPacketReceived(rtc::Buffer* packet) { - const void* data = packet->data(); - int len = packet->length(); - uint8 buf[2048]; - memcpy(buf, data, len); - - /* We may receive packets with payload type 13: comfort noise. Linphone can't - * handle them, so let's ignore those packets. - */ - int payloadtype = buf[1] & 0x7f; - if (play_ && payloadtype != 13) - socket_->SendTo(buf, len, rtc::SocketAddress("localhost",2000)); -} - -void LinphoneVoiceChannel::StartRing(bool bIncomingCall) -{ - MSSndCard *sndcard = NULL; - sndcard=ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()); - if (sndcard) - { - if (bIncomingCall) - { - if (engine_->GetRingWav().size() > 0) - { - LOG(LS_VERBOSE) << "incoming ring. sound file: " << engine_->GetRingWav().c_str() << "\n"; - ring_stream_ = ring_start (engine_->GetRingWav().c_str(), 1, sndcard); - } - } - else - { - if (engine_->GetCallWav().size() > 0) - { - LOG(LS_VERBOSE) << "outgoing ring. sound file: " << engine_->GetCallWav().c_str() << "\n"; - ring_stream_ = ring_start (engine_->GetCallWav().c_str(), 1, sndcard); - } - } - } -} - -void LinphoneVoiceChannel::StopRing() -{ - if (ring_stream_) { - ring_stop(ring_stream_); - ring_stream_ = 0; - } -} - -void LinphoneVoiceChannel::OnIncomingData(rtc::AsyncSocket *s) -{ - char *buf[2048]; - int len; - len = s->Recv(buf, sizeof(buf)); - rtc::Buffer packet(buf, len); - if (network_interface_ && !mute_) - network_interface_->SendPacket(&packet); -} - -} diff --git a/talk/media/other/linphonemediaengine.h b/talk/media/other/linphonemediaengine.h deleted file mode 100644 index 0f347c78c0..0000000000 --- a/talk/media/other/linphonemediaengine.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * libjingle - * Copyright 2010 Google Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -// LinphoneMediaEngine is a Linphone implementation of MediaEngine - -#ifndef TALK_SESSION_PHONE_LINPHONEMEDIAENGINE_H_ -#define TALK_SESSION_PHONE_LINPHONEMEDIAENGINE_H_ - -#include -#include - -extern "C" { -#include -} - -#include "talk/media/base/codec.h" -#include "talk/media/base/mediachannel.h" -#include "talk/media/base/mediaengine.h" -#include "webrtc/base/scoped_ptr.h" - -namespace rtc { -class StreamInterface; -} - -namespace cricket { - -class LinphoneMediaEngine : public MediaEngineInterface { - public: - LinphoneMediaEngine(const std::string& ringWav, const std::string& callWav); - virtual ~LinphoneMediaEngine() {} - - // Should be called before codecs() and video_codecs() are called. We need to - // set the voice and video codecs; otherwise, Jingle initiation will fail. - void set_voice_codecs(const std::vector& codecs) { - voice_codecs_ = codecs; - } - void set_video_codecs(const std::vector& codecs) { - video_codecs_ = codecs; - } - - // Implement pure virtual methods of MediaEngine. - virtual bool Init(); - virtual void Terminate(); - virtual int GetCapabilities(); - virtual VoiceMediaChannel* CreateChannel(); - virtual VideoMediaChannel* CreateVideoChannel(VoiceMediaChannel* voice_ch); - virtual bool SetAudioOptions(int options) { return true; } - virtual bool SetDefaultVideoEncoderConfig(const VideoEncoderConfig& config) { - return true; - } - virtual bool SetSoundDevices(const Device* in_dev, const Device* out_dev) { - return true; - } - virtual bool SetVideoCaptureDevice(const Device* cam_device) { return true; } - virtual bool SetOutputVolume(int level) { return true; } - virtual int GetInputLevel() { return 0; } - virtual bool SetLocalMonitor(bool enable) { return true; } - // TODO: control channel send? - virtual bool SetVideoCapture(bool capture) { return true; } - virtual const std::vector& audio_codecs() { - return voice_codecs_; - } - virtual const std::vector& video_codecs() { - return video_codecs_; - } - virtual bool FindAudioCodec(const AudioCodec& codec); - virtual bool FindVideoCodec(const VideoCodec& codec) { return true; } - virtual void SetVoiceLogging(int min_sev, const char* filter) {} - virtual void SetVideoLogging(int min_sev, const char* filter) {} - - std::string GetRingWav(){return ring_wav_;} - std::string GetCallWav(){return call_wav_;} - - int have_ilbc; - - private: - std::string voice_input_filename_; - std::string voice_output_filename_; - std::string video_input_filename_; - std::string video_output_filename_; - std::vector voice_codecs_; - std::vector video_codecs_; - - std::string ring_wav_; - std::string call_wav_; - - DISALLOW_COPY_AND_ASSIGN(LinphoneMediaEngine); -}; - -class LinphoneVoiceChannel : public VoiceMediaChannel { - public: - LinphoneVoiceChannel(LinphoneMediaEngine *eng); - virtual ~LinphoneVoiceChannel(); - - // Implement pure virtual methods of VoiceMediaChannel. - virtual bool SetRecvCodecs(const std::vector& codecs) { return true; } - virtual bool SetSendCodecs(const std::vector& codecs); - virtual bool SetPlayout(bool playout); - virtual bool SetSend(SendFlags flag); - virtual bool AddStream(uint32 ssrc) { return true; } - virtual bool RemoveStream(uint32 ssrc) { return true; } - virtual bool GetActiveStreams(AudioInfo::StreamList* actives) { return true; } - virtual int GetOutputLevel() { return 0; } - virtual bool SetOutputScaling(uint32 ssrc, double left, double right) { - return false; - } - virtual bool GetOutputScaling(uint32 ssrc, double* left, double* right) { - return false; - } - virtual void SetRingbackTone(const char* buf, int len) {} - virtual bool PlayRingbackTone(bool play, bool loop) { return true; } - virtual bool PressDTMF(int event, bool playout) { return true; } - virtual bool GetStats(VoiceMediaInfo* info) { return true; } - - // Implement pure virtual methods of MediaChannel. - virtual void OnPacketReceived(rtc::Buffer* packet); - virtual void OnRtcpReceived(rtc::Buffer* packet) {} - virtual void SetSendSsrc(uint32 id) {} // TODO: change RTP packet? - virtual bool SetRtcpCName(const std::string& cname) { return true; } - virtual bool Mute(bool on) { return mute_; } - virtual bool SetMaxSendBandwidth(int bps) { return true; } - virtual bool SetOptions(int options) { return true; } - virtual bool SetRecvRtpHeaderExtensions( - const std::vector& extensions) { return true; } - virtual bool SetSendRtpHeaderExtensions( - const std::vector& extensions) { return true; } - - virtual void StartRing(bool bIncomingCall); - virtual void StopRing(); - - private: - int pt_; - bool mute_; - bool play_; - AudioStream *audio_stream_; - LinphoneMediaEngine *engine_; - RingStream* ring_stream_; - rtc::scoped_ptr socket_; - void OnIncomingData(rtc::AsyncSocket *s); - - DISALLOW_COPY_AND_ASSIGN(LinphoneVoiceChannel); -}; - -} // namespace cricket - -#endif // TALK_SESSION_PHONE_LINPHONEMEDIAENGINE_H_