projects
/
nihav.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
switch to better FFT interface and more flexible FFT implementation
[nihav.git]
/
nihav-core
/
src
/
dsp
/
mdct.rs
diff --git
a/nihav-core/src/dsp/mdct.rs
b/nihav-core/src/dsp/mdct.rs
index 540ae4527986b375f14420646fc6614753fc0c39..1a29942f9af092ad681bb00a441fabde55abbe90 100644
(file)
--- a/
nihav-core/src/dsp/mdct.rs
+++ b/
nihav-core/src/dsp/mdct.rs
@@
-19,14
+19,14
@@
fn imdct(src: &[f32], dst: &mut [f32], length: usize) {
}*/
impl IMDCT {
}*/
impl IMDCT {
- pub fn new(
mode: FFTMode,
size: usize, scaledown: bool) -> Self {
+ pub fn new(size: usize, scaledown: bool) -> Self {
let mut twiddle: Vec<FFTComplex> = Vec::with_capacity(size / 4);
let factor = 2.0 * consts::PI / ((8 * size) as f32);
let scale = if scaledown { (1.0 / (size as f32)).sqrt() } else { 1.0 };
for k in 0..size/4 {
twiddle.push(FFTComplex::exp(factor * ((8 * k + 1) as f32)).scale(scale));
}
let mut twiddle: Vec<FFTComplex> = Vec::with_capacity(size / 4);
let factor = 2.0 * consts::PI / ((8 * size) as f32);
let scale = if scaledown { (1.0 / (size as f32)).sqrt() } else { 1.0 };
for k in 0..size/4 {
twiddle.push(FFTComplex::exp(factor * ((8 * k + 1) as f32)).scale(scale));
}
- let fft = FFTBuilder::new_fft(
mode, size/4
);
+ let fft = FFTBuilder::new_fft(
size/4, false
);
let mut z: Vec<FFTComplex> = Vec::with_capacity(size / 2);
z.resize(size / 2, FFTC_ZERO);
IMDCT { twiddle, fft, size, z }
let mut z: Vec<FFTComplex> = Vec::with_capacity(size / 2);
z.resize(size / 2, FFTC_ZERO);
IMDCT { twiddle, fft, size, z }
@@
-39,7
+39,7
@@
impl IMDCT {
let c = FFTComplex { re: src[size2 - 2 * k - 1], im: src[ 2 * k] };
self.z[k] = c * self.twiddle[k];
}
let c = FFTComplex { re: src[size2 - 2 * k - 1], im: src[ 2 * k] };
self.z[k] = c * self.twiddle[k];
}
- self.fft.do_
fft_inplace(&mut self.z, false
);
+ self.fft.do_
ifft_inplace(&mut self.z
);
for k in 0..size4 {
self.z[k] *= self.twiddle[k];
}
for k in 0..size4 {
self.z[k] *= self.twiddle[k];
}