Skip to content
Snippets Groups Projects
Commit 49f30558 authored by Adrien Béraud's avatar Adrien Béraud Committed by Gerrit Code Review
Browse files

audio sender: remove useless waits

Refs #67228

Change-Id: Ieab3401a3c266b635fdea5d1885d1b0c4e94eba7
parent 4049cc89
Branches
Tags
No related merge requests found
...@@ -62,7 +62,6 @@ class AudioSender { ...@@ -62,7 +62,6 @@ class AudioSender {
private: private:
NON_COPYABLE(AudioSender); NON_COPYABLE(AudioSender);
bool waitForDataEncode(const std::chrono::milliseconds& max_wait) const;
bool setup(SocketPair& socketPair); bool setup(SocketPair& socketPair);
std::string id_; std::string id_;
...@@ -138,23 +137,22 @@ AudioSender::cleanup() ...@@ -138,23 +137,22 @@ AudioSender::cleanup()
void void
AudioSender::process() 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 // 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 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) { if (mainBuffer.availableForGet(id_) < 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_);
const auto wait_time = std::chrono::duration_cast<std::chrono::milliseconds>(secondsPerPacket_ * wait_ratio); if (not mainBuffer.waitForDataAvailable(id_, samplesToGet, wait_time))
if (not waitForDataEncode(wait_time))
return; return;
} }
// get data // get data
micData_.setFormat(mainBuffFormat); micData_.setFormat(mainBuffFormat);
micData_.resize(samplesToGet); micData_.resize(samplesToGet);
const auto samples = Manager::instance().getRingBufferPool().getData(micData_, id_); const auto samples = mainBuffer.getData(micData_, id_);
if (samples != samplesToGet) { if (samples != samplesToGet) {
RING_ERR("Asked for %d samples from bindings on call '%s', got %d", RING_ERR("Asked for %d samples from bindings on call '%s', got %d",
samplesToGet, id_.c_str(), samples); samplesToGet, id_.c_str(), samples);
...@@ -179,20 +177,6 @@ AudioSender::process() ...@@ -179,20 +177,6 @@ AudioSender::process()
if (audioEncoder_->encode_audio(micData_) < 0) if (audioEncoder_->encode_audio(micData_) < 0)
RING_ERR("encoding failed"); 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 class AudioReceiveThread
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment