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);