From 30c201183fc852ec2b9feeac9d550a46aade3b5f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Sat, 24 Nov 2018 23:12:30 -0500
Subject: [PATCH] resampler: add shortcut for AudioFrame

Change-Id: I2455975e8383f446f92ba685d6e1ffc9af766729
Reviewed-by: Philippe Gorley <philippe.gorley@savoirfairelinux.com>
---
 src/media/audio/resampler.cpp | 29 +++++++++++++++++++++++++++++
 src/media/audio/resampler.h   |  3 +++
 2 files changed, 32 insertions(+)

diff --git a/src/media/audio/resampler.cpp b/src/media/audio/resampler.cpp
index d61741a678..f7db0ea261 100644
--- a/src/media/audio/resampler.cpp
+++ b/src/media/audio/resampler.cpp
@@ -100,4 +100,33 @@ Resampler::resample(const AudioBuffer& dataIn, AudioBuffer& dataOut)
         output->nb_samples, output->channels);
 }
 
+std::unique_ptr<AudioFrame>
+Resampler::resample(std::unique_ptr<AudioFrame>&& in, const AudioFormat& format)
+{
+    if (in->pointer()->sample_rate == format.sample_rate &&
+        in->pointer()->channels == format.nb_channels &&
+        (AVSampleFormat)in->pointer()->format == format.sampleFormat)
+    {
+        return std::move(in);
+    }
+    auto output = std::make_unique<AudioFrame>(format);
+    resample(in->pointer(), output->pointer());
+    return output;
+}
+
+std::shared_ptr<AudioFrame>
+Resampler::resample(std::shared_ptr<AudioFrame>&& in, const AudioFormat& format)
+{
+    if (in->pointer()->sample_rate == format.sample_rate &&
+        in->pointer()->channels == format.nb_channels &&
+        (AVSampleFormat)in->pointer()->format == format.sampleFormat)
+    {
+        return std::move(in);
+    }
+    auto output = std::make_shared<AudioFrame>(format);
+    resample(in->pointer(), output->pointer());
+    return output;
+}
+
+
 } // namespace ring
diff --git a/src/media/audio/resampler.h b/src/media/audio/resampler.h
index 9ab237899e..8395fbb9d3 100644
--- a/src/media/audio/resampler.h
+++ b/src/media/audio/resampler.h
@@ -51,6 +51,9 @@ class Resampler {
          */
         void resample(const AudioBuffer& dataIn, AudioBuffer& dataOut);
 
+        std::unique_ptr<AudioFrame> resample(std::unique_ptr<AudioFrame>&& in, const AudioFormat& out);
+        std::shared_ptr<AudioFrame> resample(std::shared_ptr<AudioFrame>&& in, const AudioFormat& out);
+
     private:
         NON_COPYABLE(Resampler);
 
-- 
GitLab