nw.write(nib)?;
}
}
- drop(nw);
} else {
self.nodes.reserve(self.block_len);
self.nibs.resize(self.channels, Vec::new());
let mut state = [TrellisNode::default(); 16];
for ch in 0..self.channels {
self.nodes.clear();
- for i in 0..16 {
+ for (i, state) in state.iter_mut().enumerate() {
let step = (((self.first[ch].step + i) as isize) - 8).max(0).min(IMA_MAX_STEP as isize) as usize;
- state[i].state.predictor = self.first[ch].predictor;
- state[i].state.step = step;
- state[i].error = 0;
- state[i].nib = step as u8;
+ state.state.predictor = self.first[ch].predictor;
+ state.state.step = step;
+ state.error = 0;
+ state.nib = step as u8;
}
self.nodes.push(state);
let mut sidx = ch + step;
nw.write(self.nibs[ch][i])?;
}
}
- drop(nw);
}
self.samples.drain(..self.block_len * self.channels);
fn negotiate_format(&self, encinfo: &EncodeParameters) -> EncoderResult<EncodeParameters> {
match encinfo.format {
NACodecTypeInfo::None => {
- let mut ofmt = EncodeParameters::default();
- ofmt.format = NACodecTypeInfo::Audio(NAAudioInfo::new(0, 1, SND_S16_FORMAT, DEFAULT_BLOCK_LEN));
- Ok(ofmt)
+ Ok(EncodeParameters {
+ format: NACodecTypeInfo::Audio(NAAudioInfo::new(0, 1, SND_S16_FORMAT, DEFAULT_BLOCK_LEN)),
+ ..Default::default() })
},
NACodecTypeInfo::Video(_) => Err(EncoderError::FormatError),
NACodecTypeInfo::Audio(ainfo) => {
if outinfo.block_len == 0 {
outinfo.block_len = DEFAULT_BLOCK_LEN;
}
+ if outinfo.block_len == 1 && encinfo.tb_den != outinfo.sample_rate {
+ outinfo.block_len = ((u64::from(outinfo.sample_rate) * u64::from(encinfo.tb_num) / u64::from(encinfo.tb_den) + 3) & !3) as usize;
+ }
if outinfo.block_len < 2 {
outinfo.block_len = 2;
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_CBR }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
let mut enc_reg = RegisteredEncoders::new();
ms_register_all_encoders(&mut enc_reg);
+ // sample: https://samples.mplayerhq.hu/V-codecs/VP4/ot171_vp40.avi
let dec_config = DecoderTestParams {
demuxer: "avi",
in_name: "assets/Duck/ot171_vp40.avi",
let enc_options = &[
NAOption{name: "trellis", value: NAValue::Bool(trellis)},
];
- test_encoding_to_file(&dec_config, &enc_config, enc_params, enc_options);
+// test_encoding_to_file(&dec_config, &enc_config, enc_params, enc_options);
test_encoding_md5(&dec_config, &enc_config, enc_params, enc_options,
hash);