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