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:
committed by
Commit Bot
parent
7b6acd68ee
commit
53dd1f3c1a
@ -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
|
||||
|
||||
@ -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_;
|
||||
|
||||
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user