From 53dd1f3c1a330bab49880f5a044f4b790c85e91a Mon Sep 17 00:00:00 2001 From: Alessio Bazzica Date: Tue, 26 Mar 2019 17:27:32 +0100 Subject: [PATCH] PFFFT Wrapper: ordered transform. Add flag to call either pffft_transform or pffft_transform_ordered. Bug: webrtc:9577 Change-Id: Ic9af87386264cc5b2baf891a9b4945f58bd3c2ac Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/129761 Commit-Queue: Alessio Bazzica Reviewed-by: Yves Gerey Reviewed-by: Ivo Creusen Cr-Commit-Position: refs/heads/master@{#27310} --- .../audio_processing/utility/pffft_wrapper.cc | 26 ++++++++++++++----- .../audio_processing/utility/pffft_wrapper.h | 4 +-- .../utility/pffft_wrapper_unittest.cc | 6 +++-- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/modules/audio_processing/utility/pffft_wrapper.cc b/modules/audio_processing/utility/pffft_wrapper.cc index eb0bff7c58..2361326f25 100644 --- a/modules/audio_processing/utility/pffft_wrapper.cc +++ b/modules/audio_processing/utility/pffft_wrapper.cc @@ -91,20 +91,34 @@ std::unique_ptr Pffft::CreateBuffer() const { return buffer; } -void Pffft::ForwardTransform(const FloatBuffer& in, FloatBuffer* out) { +void Pffft::ForwardTransform(const FloatBuffer& in, + FloatBuffer* out, + bool ordered) { RTC_DCHECK_EQ(in.size(), GetBufferSize(fft_size_, fft_type_)); RTC_DCHECK_EQ(in.size(), out->size()); RTC_DCHECK(scratch_buffer_); - pffft_transform(pffft_status_, in.const_data(), out->data(), scratch_buffer_, - PFFFT_FORWARD); + if (ordered) { + pffft_transform_ordered(pffft_status_, in.const_data(), out->data(), + scratch_buffer_, PFFFT_FORWARD); + } else { + pffft_transform(pffft_status_, in.const_data(), out->data(), + scratch_buffer_, PFFFT_FORWARD); + } } -void Pffft::BackwardTransform(const FloatBuffer& in, FloatBuffer* out) { +void Pffft::BackwardTransform(const FloatBuffer& in, + FloatBuffer* out, + bool ordered) { RTC_DCHECK_EQ(in.size(), GetBufferSize(fft_size_, fft_type_)); RTC_DCHECK_EQ(in.size(), out->size()); RTC_DCHECK(scratch_buffer_); - pffft_transform(pffft_status_, in.const_data(), out->data(), scratch_buffer_, - PFFFT_BACKWARD); + if (ordered) { + pffft_transform_ordered(pffft_status_, in.const_data(), out->data(), + scratch_buffer_, PFFFT_BACKWARD); + } else { + pffft_transform(pffft_status_, in.const_data(), out->data(), + scratch_buffer_, PFFFT_BACKWARD); + } } } // namespace webrtc diff --git a/modules/audio_processing/utility/pffft_wrapper.h b/modules/audio_processing/utility/pffft_wrapper.h index c1904308bf..a30b97031f 100644 --- a/modules/audio_processing/utility/pffft_wrapper.h +++ b/modules/audio_processing/utility/pffft_wrapper.h @@ -69,9 +69,9 @@ class Pffft { // TODO(https://crbug.com/webrtc/9577): Overload with rtc::ArrayView args. // Computes the forward fast Fourier transform. - void ForwardTransform(const FloatBuffer& in, FloatBuffer* out); + void ForwardTransform(const FloatBuffer& in, FloatBuffer* out, bool ordered); // Computes the backward fast Fourier transform. - void BackwardTransform(const FloatBuffer& in, FloatBuffer* out); + void BackwardTransform(const FloatBuffer& in, FloatBuffer* out, bool ordered); private: const size_t fft_size_; diff --git a/modules/audio_processing/utility/pffft_wrapper_unittest.cc b/modules/audio_processing/utility/pffft_wrapper_unittest.cc index 70c5ce52f2..a3d6f357ec 100644 --- a/modules/audio_processing/utility/pffft_wrapper_unittest.cc +++ b/modules/audio_processing/utility/pffft_wrapper_unittest.cc @@ -88,7 +88,8 @@ void PffftValidateWrapper(size_t fft_size, bool complex_fft) { // Forward transform. pffft_transform(pffft_status, in, out, scratch, PFFFT_FORWARD); - pffft_wrapper.ForwardTransform(*in_wrapper, out_wrapper.get()); + pffft_wrapper.ForwardTransform(*in_wrapper, out_wrapper.get(), + /*ordered=*/false); ExpectArrayViewsEquality(out_view, out_wrapper_view); // Copy the FFT results into the input buffers to compute the backward FFT. @@ -98,7 +99,8 @@ void PffftValidateWrapper(size_t fft_size, bool complex_fft) { // Backward transform. pffft_transform(pffft_status, in, out, scratch, PFFFT_BACKWARD); - pffft_wrapper.BackwardTransform(*in_wrapper, out_wrapper.get()); + pffft_wrapper.BackwardTransform(*in_wrapper, out_wrapper.get(), + /*ordered=*/false); ExpectArrayViewsEquality(out_view, out_wrapper_view); pffft_destroy_setup(pffft_status);