diff --git a/src/media/audio/audio_rtp_session.cpp b/src/media/audio/audio_rtp_session.cpp index c4c0c0678ea96a19162230bf0cbeae7b5ed1ff31..5499df79ccbf5894f21d751a68ad9748daa54d99 100644 --- a/src/media/audio/audio_rtp_session.cpp +++ b/src/media/audio/audio_rtp_session.cpp @@ -69,6 +69,8 @@ AudioRtpSession::startSender() if (sender_) { if (socketPair_) socketPair_->interrupt(); + if (audioInput_) + audioInput_->detach(sender_.get()); sender_.reset(); } return; @@ -76,6 +78,8 @@ AudioRtpSession::startSender() if (sender_) JAMI_WARN("Restarting audio sender"); + if (audioInput_) + audioInput_->detach(sender_.get()); // sender sets up input correctly, we just keep a reference in case startSender is called audioInput_ = jami::getAudioInput(callID_); @@ -102,12 +106,18 @@ AudioRtpSession::startSender() sender_.reset(); socketPair_->stopSendOp(false); sender_.reset(new AudioSender( - callID_, getRemoteRtpUri(), send_, *socketPair_, initSeqVal_, muteState_, mtu_)); + callID_, getRemoteRtpUri(), send_, *socketPair_, initSeqVal_, mtu_)); } catch (const MediaEncoderException& e) { JAMI_ERR("%s", e.what()); send_.enabled = false; } + // NOTE do after sender/encoder are ready + auto codec = std::static_pointer_cast<AccountAudioCodecInfo>(send_.codec); + audioInput_->setFormat(codec->audioformat); + if (audioInput_) + audioInput_->attach(sender_.get()); + if (not rtcpCheckerThread_.isRunning()) rtcpCheckerThread_.start(); } @@ -184,6 +194,9 @@ AudioRtpSession::stop() { std::lock_guard<std::recursive_mutex> lock(mutex_); + if (audioInput_) + audioInput_->detach(sender_.get()); + if (socketPair_) socketPair_->interrupt(); @@ -199,10 +212,7 @@ void AudioRtpSession::setMuted(bool isMuted) { std::lock_guard<std::recursive_mutex> lock(mutex_); - if (sender_) { - muteState_ = isMuted; - sender_->setMuted(isMuted); - } + muteState_ = isMuted; } bool diff --git a/src/media/audio/audio_sender.cpp b/src/media/audio/audio_sender.cpp index 1c4213bb67e4bd9d420558efd2184cb0f327c904..9692f8f5207518bfa1928fc2604361ed4f91c61e 100644 --- a/src/media/audio/audio_sender.cpp +++ b/src/media/audio/audio_sender.cpp @@ -19,7 +19,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "audio_input.h" #include "audio_sender.h" #include "client/videomanager.h" #include "libav_deps.h" @@ -39,13 +38,11 @@ AudioSender::AudioSender(const std::string& id, const MediaDescription& args, SocketPair& socketPair, const uint16_t seqVal, - bool muteState, const uint16_t mtu) : id_(id) , dest_(dest) , args_(args) , seqVal_(seqVal) - , muteState_(muteState) , mtu_(mtu) { setup(socketPair); @@ -53,8 +50,6 @@ AudioSender::AudioSender(const std::string& id, AudioSender::~AudioSender() { - audioInput_->detach(this); - audioInput_.reset(); audioEncoder_.reset(); muxContext_.reset(); micData_.clear(); @@ -89,12 +84,6 @@ AudioSender::setup(SocketPair& socketPair) audioEncoder_->print_sdp(); #endif - // NOTE do after encoder is ready to encode - auto codec = std::static_pointer_cast<AccountAudioCodecInfo>(args_.codec); - audioInput_ = jami::getAudioInput(id_); - audioInput_->setFormat(codec->audioformat); - audioInput_->setMuted(muteState_); - audioInput_->attach(this); return true; } @@ -109,13 +98,6 @@ AudioSender::update(Observable<std::shared_ptr<jami::MediaFrame>>* /*obs*/, JAMI_ERR("encoding failed"); } -void -AudioSender::setMuted(bool isMuted) -{ - muteState_ = isMuted; - audioInput_->setMuted(isMuted); -} - uint16_t AudioSender::getLastSeqValue() { diff --git a/src/media/audio/audio_sender.h b/src/media/audio/audio_sender.h index c06bc67356a2d79b03027baadf3af384d3792c6b..e1d9e84d02a689c9678ee09a980818e10ac6c039 100644 --- a/src/media/audio/audio_sender.h +++ b/src/media/audio/audio_sender.h @@ -42,11 +42,9 @@ public: const MediaDescription& args, SocketPair& socketPair, const uint16_t seqVal, - bool muteState, const uint16_t mtu); ~AudioSender(); - void setMuted(bool isMuted); uint16_t getLastSeqValue(); int setPacketLoss(uint64_t pl); @@ -64,14 +62,12 @@ private: std::unique_ptr<MediaEncoder> audioEncoder_; std::unique_ptr<MediaIOHandle> muxContext_; std::unique_ptr<Resampler> resampler_; - std::shared_ptr<AudioInput> audioInput_; uint64_t sent_samples = 0; AudioBuffer micData_; AudioBuffer resampledData_; const uint16_t seqVal_; - bool muteState_ = false; uint16_t mtu_; };