diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ find_package(KF5Contacts ${KCONTACTS_LIB_VERSION} CONFIG REQUIRED) find_package(KF5IdentityManagement ${KCONTACTS_LIB_VERSION} CONFIG REQUIRED) +find_package(Threads) include(KDEInstallDirs) include(KDECompilerSettings NO_POLICY_SCOPE) diff --git a/cmake/modules/FindMediastreamer.cmake b/cmake/modules/FindMediastreamer.cmake --- a/cmake/modules/FindMediastreamer.cmake +++ b/cmake/modules/FindMediastreamer.cmake @@ -20,17 +20,24 @@ IF (MEDIASTREAMER_FOUND) IF (NOT MEDIASTREAMER_FIND_QUIETLY) + MESSAGE(STATUS "Found Mediastreamer: ${MEDIASTREAMER_LIBRARIES} (version: ${MEDIASTREAMER_VERSION})") + + SET(MEDIASTREAMER_LESS_2_9 FALSE) + SET(MEDIASTREAMER_LESS_2_11 FALSE) + SET(MEDIASTREAMER_LESS_2_14 FALSE) + IF (MEDIASTREAMER_VERSION VERSION_LESS 2.9) SET(MEDIASTREAMER_LESS_2_9 TRUE) SET(MEDIASTREAMER_LESS_2_11 TRUE) + SET(MEDIASTREAMER_LESS_2_14 TRUE) ELSEIF (MEDIASTREAMER_VERSION VERSION_LESS 2.11) - SET(MEDIASTREAMER_LESS_2_9 FALSE) SET(MEDIASTREAMER_LESS_2_11 TRUE) - ELSE (MEDIASTREAMER_VERSION VERSION_LESS 2.9) - SET(MEDIASTREAMER_LESS_2_9 FALSE) - SET(MEDIASTREAMER_LESS_2_11 FALSE) + SET(MEDIASTREAMER_LESS_2_14 TRUE) + ELSEIF (MEDIASTREAMER_VERSION VERSION_LESS 2.14) + SET(MEDIASTREAMER_LESS_2_14 TRUE) ENDIF (MEDIASTREAMER_VERSION VERSION_LESS 2.9) + ENDIF (NOT MEDIASTREAMER_FIND_QUIETLY) ELSE (MEDIASTREAMER_FOUND) IF (MEDIASTREAMER_FIND_REQUIRED) diff --git a/protocols/jabber/libjingle/CMakeLists.txt b/protocols/jabber/libjingle/CMakeLists.txt --- a/protocols/jabber/libjingle/CMakeLists.txt +++ b/protocols/jabber/libjingle/CMakeLists.txt @@ -284,6 +284,7 @@ ${EXPAT_LIBRARY} ${MEDIASTREAMER_LIBRARIES} ${LIBORTP_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ) diff --git a/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.h b/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.h --- a/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.h +++ b/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.h @@ -53,7 +53,7 @@ class LinphoneMediaEngine : public MediaEngineInterface { public: LinphoneMediaEngine(const std::string& ringWav, const std::string& callWav); - virtual ~LinphoneMediaEngine() {} + ~LinphoneMediaEngine(); // Implement pure virtual methods of MediaEngine. virtual bool Init() { return true; } @@ -97,6 +97,10 @@ bool have_speex; bool have_gsm; +#ifndef MEDIASTREAMER_LESS_2_14 + MSFactory *factory; +#endif + private: std::vector voice_codecs_; std::vector video_codecs_; @@ -110,7 +114,7 @@ class LinphoneVoiceChannel : public VoiceMediaChannel { public: LinphoneVoiceChannel(LinphoneMediaEngine *eng); - virtual ~LinphoneVoiceChannel(); + ~LinphoneVoiceChannel(); // Implement pure virtual methods of VoiceMediaChannel. virtual bool SetRecvCodecs(const std::vector& codecs); diff --git a/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.cc b/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.cc --- a/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.cc +++ b/protocols/jabber/libjingle/talk/session/phone/linphonemediaengine.cc @@ -60,18 +60,34 @@ /////////////////////////////////////////////////////////////////////////// LinphoneMediaEngine::LinphoneMediaEngine(const std::string& ringWav, const std::string& callWav) : ring_wav_(ringWav), call_wav_(callWav) { ortp_init(); +#ifdef MEDIASTREAMER_LESS_2_14 ms_init(); +#else + factory = ms_factory_new(); + ms_factory_init_voip(factory); + ms_factory_init_plugins(factory); +#endif #ifndef WIN32 char * path = strdup(MSILBC_LIBRARY); char * dirc = dirname(path); +#ifdef MEDIASTREAMER_LESS_2_14 ms_load_plugins(dirc); +#else + ms_factory_load_plugins(factory, dirc); +#endif free(path); #endif +#ifdef MEDIASTREAMER_LESS_2_14 have_ilbc = ms_filter_codec_supported("iLBC"); have_speex = ms_filter_codec_supported("speex"); have_gsm = ms_filter_codec_supported("gsm"); +#else + have_ilbc = ms_factory_codec_supported(factory, "iLBC"); + have_speex = ms_factory_codec_supported(factory, "speex"); + have_gsm = ms_factory_codec_supported(factory, "gsm"); +#endif if (have_speex) { voice_codecs_.push_back(AudioCodec(110, payload_type_speex_wb.mime_type, payload_type_speex_wb.clock_rate, 0, 1, 8)); @@ -88,6 +104,14 @@ voice_codecs_.push_back(AudioCodec(101, payload_type_telephone_event.mime_type, payload_type_telephone_event.clock_rate, 0, 1, 1)); } +LinphoneMediaEngine::~LinphoneMediaEngine() { +#ifndef MEDIASTREAMER_LESS_2_14 + ms_factory_uninit_plugins(factory); + ms_factory_uninit_voip(factory); + ms_factory_destroy(factory); +#endif +} + void LinphoneMediaEngine::Terminate() { fflush(stdout); } @@ -149,15 +173,17 @@ playport2 = PORT_UNUSED; #ifdef _DEBUG - ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); + ortp_set_log_level_mask(ORTP_LOG_DOMAIN, ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); #else - ortp_set_log_level_mask(ORTP_FATAL); + ortp_set_log_level_mask(ORTP_LOG_DOMAIN, ORTP_FATAL); #endif #ifdef MEDIASTREAMER_LESS_2_9 audio_stream_ = audio_stream_new(-1, 0); /* -1 means that function will choose some free port */ -#else +#elseif MEDIASTREAMER_LESS_2_14 audio_stream_ = audio_stream_new(-1, -1, 0); /* -1 means that function will choose some free port */ +#else + audio_stream_ = audio_stream_new(engine_->factory, -1, -1, 0); /* -1 means that function will choose some free port */ #endif } @@ -272,11 +298,17 @@ { StopRing(); - MSSndCard *playcard = ms_snd_card_manager_get_default_playback_card(ms_snd_card_manager_get()); +#ifdef MEDIASTREAMER_LESS_2_14 + MSSndCardManager *snd_manager = ms_snd_card_manager_get(); +#else + MSSndCardManager *snd_manager = ms_factory_get_snd_card_manager(engine_->factory); +#endif + + MSSndCard *playcard = ms_snd_card_manager_get_default_playback_card(snd_manager); if (!playcard) return false; - MSSndCard *captcard = ms_snd_card_manager_get_default_capture_card(ms_snd_card_manager_get()); + MSSndCard *captcard = ms_snd_card_manager_get_default_capture_card(snd_manager); if (!captcard) return false; @@ -333,8 +365,14 @@ void LinphoneVoiceChannel::StartRing(bool bIncomingCall) { +#ifdef MEDIASTREAMER_LESS_2_14 + MSSndCardManager *snd_manager = ms_snd_card_manager_get(); +#else + MSSndCardManager *snd_manager = ms_factory_get_snd_card_manager(engine_->factory); +#endif + MSSndCard *sndcard = NULL; - sndcard=ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()); + sndcard=ms_snd_card_manager_get_default_card(snd_manager); if (sndcard) { if (bIncomingCall) @@ -342,7 +380,11 @@ if (engine_->GetRingWav().size() > 0) { LOG(LS_VERBOSE) << "incoming ring. sound file: " << engine_->GetRingWav().c_str() << "\n"; +#ifdef MEDIASTREAMER_LESS_2_14 ring_stream_ = ring_start (engine_->GetRingWav().c_str(), 1, sndcard); +#else + ring_stream_ = ring_start (engine_->factory, engine_->GetRingWav().c_str(), 1, sndcard); +#endif } } else @@ -350,7 +392,11 @@ if (engine_->GetCallWav().size() > 0) { LOG(LS_VERBOSE) << "outgoing ring. sound file: " << engine_->GetCallWav().c_str() << "\n"; +#ifdef MEDIASTREAMER_LESS_2_14 ring_stream_ = ring_start (engine_->GetCallWav().c_str(), 1, sndcard); +#else + ring_stream_ = ring_start (engine_->factory, engine_->GetCallWav().c_str(), 1, sndcard); +#endif } } }