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 <alessiob@webrtc.org>
Reviewed-by: Yves Gerey <yvesg@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27310}
This commit is contained in:
Alessio Bazzica
2019-03-26 17:27:32 +01:00
committed by Commit Bot
parent 7b6acd68ee
commit 53dd1f3c1a
3 changed files with 26 additions and 10 deletions

View File

@ -91,20 +91,34 @@ std::unique_ptr<Pffft::FloatBuffer> 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

View File

@ -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_;

View File

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