use std::mem;
use std::ptr;
use std::f32::consts;
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
chmap: NAChannelMap,
ainfo: NAAudioInfo,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
codes: [[Codebook<u8>; 4]; 4],
ch_data: [IMCChannel; 2],
pretwiddle2: pretwiddle2,
posttwiddle: posttwiddle,
tmp: [FFTC_ZERO; COEFFS/2],
- fft: FFTBuilder::new_fft(FFTMode::SplitRadix, COEFFS/2),
+ fft: FFTBuilder::new_fft(COEFFS/2, false),
window: window,
}
}
self.tmp[i].re = -(c2 * in1 + c1 * in2);
self.tmp[i].im = c1 * in1 - c2 * in2;
}
- self.fft.do_fft_inplace(&mut self.tmp, false);
+ self.fft.do_ifft_inplace(&mut self.tmp);
for i in 0..COEFFS/2 {
let tmp = !(self.tmp[i] * self.posttwiddle[i]);
let c1 = self.window[i * 2];
const CHMAP_STEREO: [NAChannelType; 2] = [NAChannelType::L, NAChannelType::R];
impl NADecoder for IMCDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, _supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.chmap = NAChannelMap::new();
match ainfo.get_channels() {
Err(DecoderError::InvalidData)
}
}
- fn decode(&mut self, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
+ fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
let info = pkt.get_stream().get_info();
validate!(info.get_properties().is_audio());
let pktbuf = pkt.get_buffer();
let nblocks = pktbuf.len() / BLOCK_SIZE / (self.ainfo.get_channels() as usize);
let duration = COEFFS * nblocks;
- let mut abuf = alloc_audio_buffer(self.ainfo, duration, self.chmap.clone())?;
+ let abuf = alloc_audio_buffer(self.ainfo, duration, self.chmap.clone())?;
let mut adata = abuf.get_abuf_f32().unwrap();
- let mut dst = adata.get_data_mut();
+ let dst = adata.get_data_mut().unwrap();
let mut start: usize = 0;
let channels = self.ainfo.get_channels() as usize;
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut dec_reg = RegisteredDecoders::new();
indeo_register_all_codecs(&mut dec_reg);
-// let file = "assets/neal73_saber.avi";
-// let file = "assets/IMC/hvalen.avi";
- let file = "assets/IMC/8khz.avi";
-// let file = "assets/STsKlassFist-1a.avi";
-// let file = "assets/IMC/Angel Bday.avi";
+// let file = "assets/Indeo/neal73_saber.avi";
+// let file = "assets/Indeo/IMC/hvalen.avi";
+ let file = "assets/Indeo/IMC/8khz.avi";
+// let file = "assets/Indeo/STsKlassFist-1a.avi";
+// let file = "assets/Indeo/IMC/Angel Bday.avi";
test_decode_audio("avi", file, None, "imc", &dmx_reg, &dec_reg);
//test_file_decoding("avi", file, None, false, true, None);
}