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