From 805dd510ca219a1c4b165a4229ec059441e02335 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Thu, 26 Mar 2020 22:46:17 +0100 Subject: [PATCH 1/4] Change destroy order Let audio initialization only when playbackCard and captureCard are found. --- linphone-app/src/utils/MediastreamerUtils.cpp | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/linphone-app/src/utils/MediastreamerUtils.cpp b/linphone-app/src/utils/MediastreamerUtils.cpp index 890803a3c..a5b208e12 100644 --- a/linphone-app/src/utils/MediastreamerUtils.cpp +++ b/linphone-app/src/utils/MediastreamerUtils.cpp @@ -34,9 +34,14 @@ SimpleCaptureGraph::SimpleCaptureGraph(const std::string &capture, const std::st msFactory = linphone_core_get_ms_factory(ccore); playbackCard = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(msFactory), playbackCardId.c_str()); + if (!playbackCard) + qWarning("Cannot get playback card from MSFactory with : %s", QString::fromStdString(playbackCardId)); captureCard = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(msFactory), captureCardId.c_str()); + if (!captureCard) + qWarning("Cannot get capture card from MSFactory with : %s", QString::fromStdString(captureCardId)); - init(); + if(playbackCard && captureCard)// Assure to initialize when playback and capture are available + init(); } SimpleCaptureGraph::~SimpleCaptureGraph() @@ -64,20 +69,22 @@ void SimpleCaptureGraph::init() { //Mute playback float muteGain = 0.0f; - ms_filter_call_method(playbackVolumeFilter, static_cast(MS_VOLUME_SET_GAIN), &muteGain); + ms_filter_call_method(playbackVolumeFilter, static_cast(MS_VOLUME_SET_GAIN), &muteGain); ticker = ms_ticker_new(); running = false; + } void SimpleCaptureGraph::start() { - if (!running) { - ms_ticker_attach(ticker, audioCapture); + if (!running && audioCapture) { running = true; + ms_ticker_attach(ticker, audioCapture); + } } void SimpleCaptureGraph::stop() { - if (running) { + if (running && audioCapture){ ms_ticker_detach(ticker, audioCapture); running = false; } @@ -87,14 +94,29 @@ void SimpleCaptureGraph::destroy() { if (running) { stop(); } - ms_ticker_destroy(ticker); - ms_filter_unlink(playbackVolumeFilter, 0, audioSink, 0); - ms_filter_unlink(captureVolumeFilter, 0, playbackVolumeFilter, 0); - ms_filter_unlink(audioCapture, 0, captureVolumeFilter, 0); - ms_filter_destroy(playbackVolumeFilter); - ms_filter_destroy(captureVolumeFilter); - ms_filter_destroy(audioSink); - ms_filter_destroy(audioCapture); + + if (audioSink) + ms_filter_unlink(playbackVolumeFilter, 0, audioSink, 0); + if (captureVolumeFilter && playbackVolumeFilter) + ms_filter_unlink(captureVolumeFilter, 0, playbackVolumeFilter, 0); + if (audioCapture) + ms_filter_unlink(audioCapture, 0, captureVolumeFilter, 0); + if (playbackVolumeFilter) + ms_filter_destroy(playbackVolumeFilter); + if (captureVolumeFilter) + ms_filter_destroy(captureVolumeFilter); + if (audioSink) + ms_filter_destroy(audioSink); + if (audioCapture) + ms_filter_destroy(audioCapture); + if (ticker) { + ms_ticker_destroy(ticker);// Destroy ticker at the end to avoid conflicts between attached filters + } + ticker = nullptr; + playbackVolumeFilter = nullptr; + captureVolumeFilter = nullptr; + audioSink = nullptr; + audioCapture = nullptr; } float SimpleCaptureGraph::getCaptureGain() { From 0fcbc68315eeb28a6cc9b754ce721e516b5d1602 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Thu, 26 Mar 2020 22:47:02 +0100 Subject: [PATCH 2/4] Update SDK --- linphone-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linphone-sdk b/linphone-sdk index b1b8f63c3..f8422b1ca 160000 --- a/linphone-sdk +++ b/linphone-sdk @@ -1 +1 @@ -Subproject commit b1b8f63c3b7629950a2689303792836f73e0b1b7 +Subproject commit f8422b1cadbbe24277a7289a479580f9c8b8f302 From 4ec4ad1ea9365f8507ca34bf0dc34bf446e24719 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Fri, 27 Mar 2020 08:36:43 +0100 Subject: [PATCH 3/4] Fix string using --- linphone-app/src/utils/MediastreamerUtils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linphone-app/src/utils/MediastreamerUtils.cpp b/linphone-app/src/utils/MediastreamerUtils.cpp index a5b208e12..7fb4d0c52 100644 --- a/linphone-app/src/utils/MediastreamerUtils.cpp +++ b/linphone-app/src/utils/MediastreamerUtils.cpp @@ -35,10 +35,10 @@ SimpleCaptureGraph::SimpleCaptureGraph(const std::string &capture, const std::st playbackCard = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(msFactory), playbackCardId.c_str()); if (!playbackCard) - qWarning("Cannot get playback card from MSFactory with : %s", QString::fromStdString(playbackCardId)); + qWarning("Cannot get playback card from MSFactory with : " +QString::fromStdString(playbackCardId)); captureCard = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(msFactory), captureCardId.c_str()); if (!captureCard) - qWarning("Cannot get capture card from MSFactory with : %s", QString::fromStdString(captureCardId)); + qWarning("Cannot get capture card from MSFactory with : " +QString::fromStdString(captureCardId)); if(playbackCard && captureCard)// Assure to initialize when playback and capture are available init(); From d95add4f1a9368b43955d10821a61c5e075f8560 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Fri, 27 Mar 2020 09:02:51 +0100 Subject: [PATCH 4/4] Fix string using --- linphone-app/src/utils/MediastreamerUtils.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/linphone-app/src/utils/MediastreamerUtils.cpp b/linphone-app/src/utils/MediastreamerUtils.cpp index 7fb4d0c52..f4f38ffbd 100644 --- a/linphone-app/src/utils/MediastreamerUtils.cpp +++ b/linphone-app/src/utils/MediastreamerUtils.cpp @@ -25,6 +25,8 @@ #include "components/core/CoreManager.hpp" #include "MediastreamerUtils.hpp" +#include + using namespace MediastreamerUtils; SimpleCaptureGraph::SimpleCaptureGraph(const std::string &capture, const std::string &playback) @@ -35,10 +37,10 @@ SimpleCaptureGraph::SimpleCaptureGraph(const std::string &capture, const std::st playbackCard = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(msFactory), playbackCardId.c_str()); if (!playbackCard) - qWarning("Cannot get playback card from MSFactory with : " +QString::fromStdString(playbackCardId)); + qWarning("Cannot get playback card from MSFactory with : %s", playbackCardId.c_str()); captureCard = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(msFactory), captureCardId.c_str()); if (!captureCard) - qWarning("Cannot get capture card from MSFactory with : " +QString::fromStdString(captureCardId)); + qWarning("Cannot get capture card from MSFactory with : %s", captureCardId.c_str()); if(playbackCard && captureCard)// Assure to initialize when playback and capture are available init();