From 8ada1f2d035762364247ccda06940d749ccddd70 Mon Sep 17 00:00:00 2001 From: philippegorley <philippe.gorley@savoirfairelinux.com> Date: Tue, 16 Oct 2018 17:24:20 -0400 Subject: [PATCH] audio_input: don't use ring buffers directly RingBufferPool has all the methods necessary to interface with RingBuffer. Change-Id: I04b7cb0ac9b7033e1f1047d7f00708eb987bfdc7 --- src/media/audio/audio_input.cpp | 32 +++++++++++++------------------- src/media/audio/audio_input.h | 2 +- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/media/audio/audio_input.cpp b/src/media/audio/audio_input.cpp index 8aba3472e6..eae1587e7b 100644 --- a/src/media/audio/audio_input.cpp +++ b/src/media/audio/audio_input.cpp @@ -2,6 +2,7 @@ * Copyright (C) 2018 Savoir-faire Linux Inc. * * Author: Hugo Lefeuvre <hugo.lefeuvre@savoirfairelinux.com> + * Author: Philippe Gorley <philippe.gorley@savoirfairelinux.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,9 +32,9 @@ namespace ring { AudioInput::AudioInput(const std::string& id) : id_(id), - loop_([] {return true;}, // setup() - [this] {return process();}, - [this] {return cleanup();}) + loop_([] { return true; }, + [this] { process(); }, + [] {}) { loop_.start(); } @@ -59,23 +60,22 @@ void AudioInput::process() { auto& mainBuffer = Manager::instance().getRingBufferPool(); - auto ringBuffer = mainBuffer.getRingBuffer(id_); - auto bufferFormat = ringBuffer->getFormat(); + auto bufferFormat = mainBuffer.getInternalAudioFormat(); - // compute number of bytes contained in a frame with duration msPerPacket_ - auto bytesPerPacket = msPerPacket_ * bufferFormat.sample_rate; - const std::size_t bytesToGet = std::chrono::duration_cast<std::chrono::seconds>(bytesPerPacket).count(); + // compute number of samples contained in a frame with duration msPerPacket_ + const auto samplesPerPacket = msPerPacket_ * bufferFormat.sample_rate; + const std::size_t samplesToGet = std::chrono::duration_cast<std::chrono::seconds>(samplesPerPacket).count(); - if (ringBuffer->availableForGet(id_) < bytesToGet - && not ringBuffer->waitForDataAvailable(id_, bytesToGet)) { + if (mainBuffer.availableForGet(id_) < samplesToGet + && not mainBuffer.waitForDataAvailable(id_, samplesToGet, msPerPacket_)) { return; } // get data micData_.setFormat(bufferFormat); - micData_.resize(bytesToGet); - const auto samples = ringBuffer->get(micData_, id_); - if (samples != bytesToGet) + micData_.resize(samplesToGet); + const auto samples = mainBuffer.getData(micData_, id_); + if (samples != samplesToGet) return; if (muteState_) // audio is muted, set samples to 0 @@ -95,12 +95,6 @@ AudioInput::process() } } -void -AudioInput::cleanup() -{ - micData_.clear(); -} - void AudioInput::setMuted(bool isMuted) { diff --git a/src/media/audio/audio_input.h b/src/media/audio/audio_input.h index abc3647adf..2eba6d8b18 100644 --- a/src/media/audio/audio_input.h +++ b/src/media/audio/audio_input.h @@ -2,6 +2,7 @@ * Copyright (C) 2018 Savoir-faire Linux Inc. * * Author: Hugo Lefeuvre <hugo.lefeuvre@savoirfairelinux.com> + * Author: Philippe Gorley <philippe.gorley@savoirfairelinux.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -54,7 +55,6 @@ private: ThreadLoop loop_; void process(); - void cleanup(); }; } // namespace ring -- GitLab