From 168253ed63d4b0c0d64662269df23f7a6f0f501b Mon Sep 17 00:00:00 2001 From: atraczyk <andreastraczyk@gmail.com> Date: Mon, 5 Dec 2016 16:03:34 -0500 Subject: [PATCH] audio: fix unmuting of audio after audio has been muted Saves the previous mute state in AudioRtpSession and AudioSender, so that when the audio encoder is re-instantiated, it can be set to a previously set state (if any). Change-Id: I25809499fd5afca1b6ae0f03c685a10ba95f94ac Tuleap: #1298 --- src/media/audio/audio_rtp_session.cpp | 16 ++++++++++++---- src/media/audio/audio_rtp_session.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/media/audio/audio_rtp_session.cpp b/src/media/audio/audio_rtp_session.cpp index f0bf91a610..3f41848160 100644 --- a/src/media/audio/audio_rtp_session.cpp +++ b/src/media/audio/audio_rtp_session.cpp @@ -48,7 +48,8 @@ class AudioSender { const std::string& dest, const MediaDescription& args, SocketPair& socketPair, - const uint16_t seqVal); + const uint16_t seqVal, + bool muteState); ~AudioSender(); void setMuted(bool isMuted); @@ -69,6 +70,7 @@ class AudioSender { AudioBuffer micData_; AudioBuffer resampledData_; const uint16_t seqVal_; + bool muteState_ = false; using seconds = std::chrono::duration<double, std::ratio<1>>; const seconds secondsPerPacket_ {0.02}; // 20 ms @@ -82,11 +84,13 @@ AudioSender::AudioSender(const std::string& id, const std::string& dest, const MediaDescription& args, SocketPair& socketPair, - const uint16_t seqVal) : + const uint16_t seqVal, + bool muteState) : id_(id), dest_(dest), args_(args), seqVal_(seqVal), + muteState_(muteState), loop_([&] { return setup(socketPair); }, std::bind(&AudioSender::process, this), std::bind(&AudioSender::cleanup, this)) @@ -108,6 +112,7 @@ AudioSender::setup(SocketPair& socketPair) try { /* Encoder setup */ RING_DBG("audioEncoder_->openOutput %s", dest_.c_str()); + audioEncoder_->setMuted(muteState_); audioEncoder_->openOutput(dest_.c_str(), args_); audioEncoder_->setInitSeqVal(seqVal_); audioEncoder_->setIOContext(muxContext_); @@ -178,6 +183,7 @@ AudioSender::process() void AudioSender::setMuted(bool isMuted) { + muteState_ = isMuted; audioEncoder_->setMuted(isMuted); } @@ -385,7 +391,7 @@ AudioRtpSession::startSender() sender_.reset(); socketPair_->stopSendOp(false); sender_.reset(new AudioSender(callID_, getRemoteRtpUri(), send_, - *socketPair_, initSeqVal_)); + *socketPair_, initSeqVal_, muteState_)); } catch (const MediaEncoderException &e) { RING_ERR("%s", e.what()); send_.enabled = false; @@ -480,8 +486,10 @@ void AudioRtpSession::setMuted(bool isMuted) { std::lock_guard<std::recursive_mutex> lock(mutex_); - if (sender_) + if (sender_) { + muteState_ = isMuted; sender_->setMuted(isMuted); + } } } // namespace ring diff --git a/src/media/audio/audio_rtp_session.h b/src/media/audio/audio_rtp_session.h index add163b1d2..a19f4dee21 100644 --- a/src/media/audio/audio_rtp_session.h +++ b/src/media/audio/audio_rtp_session.h @@ -56,6 +56,7 @@ class AudioRtpSession : public RtpSession { std::unique_ptr<AudioReceiveThread> receiveThread_; std::shared_ptr<RingBuffer> ringbuffer_; uint16_t initSeqVal_ = 0; + bool muteState_ = false; }; } // namespace ring -- GitLab