From 49f30558e0aec880d4f01392ecf7b45304dd744b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Thu, 19 Mar 2015 16:56:27 -0400 Subject: [PATCH] audio sender: remove useless waits Refs #67228 Change-Id: Ieab3401a3c266b635fdea5d1885d1b0c4e94eba7 --- daemon/src/media/audio/audio_rtp_session.cpp | 28 +++++--------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/daemon/src/media/audio/audio_rtp_session.cpp b/daemon/src/media/audio/audio_rtp_session.cpp index 306bfe70cf..e99dda3a1e 100644 --- a/daemon/src/media/audio/audio_rtp_session.cpp +++ b/daemon/src/media/audio/audio_rtp_session.cpp @@ -62,7 +62,6 @@ class AudioSender { private: NON_COPYABLE(AudioSender); - bool waitForDataEncode(const std::chrono::milliseconds& max_wait) const; bool setup(SocketPair& socketPair); std::string id_; @@ -138,23 +137,22 @@ AudioSender::cleanup() void AudioSender::process() { - auto mainBuffFormat = Manager::instance().getRingBufferPool().getInternalAudioFormat(); + auto& mainBuffer = Manager::instance().getRingBufferPool(); + auto mainBuffFormat = mainBuffer.getInternalAudioFormat(); // compute nb of byte to get corresponding to 1 audio frame const std::size_t samplesToGet = std::chrono::duration_cast<std::chrono::seconds>(mainBuffFormat.sample_rate * secondsPerPacket_).count(); - const auto samplesAvail = Manager::instance().getRingBufferPool().availableForGet(id_); - if (samplesAvail < samplesToGet) { - const auto wait_ratio = 1. - std::min(.9, samplesAvail / (double)samplesToGet); // wait at least 10% - const auto wait_time = std::chrono::duration_cast<std::chrono::milliseconds>(secondsPerPacket_ * wait_ratio); - if (not waitForDataEncode(wait_time)) + if (mainBuffer.availableForGet(id_) < samplesToGet) { + const auto wait_time = std::chrono::duration_cast<std::chrono::milliseconds>(secondsPerPacket_); + if (not mainBuffer.waitForDataAvailable(id_, samplesToGet, wait_time)) return; } // get data micData_.setFormat(mainBuffFormat); micData_.resize(samplesToGet); - const auto samples = Manager::instance().getRingBufferPool().getData(micData_, id_); + const auto samples = mainBuffer.getData(micData_, id_); if (samples != samplesToGet) { RING_ERR("Asked for %d samples from bindings on call '%s', got %d", samplesToGet, id_.c_str(), samples); @@ -179,20 +177,6 @@ AudioSender::process() if (audioEncoder_->encode_audio(micData_) < 0) RING_ERR("encoding failed"); } - - if (waitForDataEncode(std::chrono::duration_cast<std::chrono::milliseconds>(secondsPerPacket_))) { - // Data available ! - } -} - -bool -AudioSender::waitForDataEncode(const std::chrono::milliseconds& max_wait) const -{ - auto& mainBuffer = Manager::instance().getRingBufferPool(); - auto mainBuffFormat = mainBuffer.getInternalAudioFormat(); - const std::size_t samplesToGet = std::chrono::duration_cast<std::chrono::seconds>(mainBuffFormat.sample_rate * secondsPerPacket_).count(); - - return mainBuffer.waitForDataAvailable(id_, samplesToGet, max_wait); } class AudioReceiveThread -- GitLab