X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-llaudio%2Fsrc%2Fcodecs%2Fflacenc.rs;h=3b992941c6841b681ba4d520bb7cdb0e83a2af7a;hb=6bd5b458d9889f092abe9b582bd531ed08a8dc51;hp=3643c16d2f4ef74242f6d5e0b22fb0cc6f7fb1d5;hpb=c11ad64e877fcf2e47c7bbb04bfb8d7764465dab;p=nihav.git diff --git a/nihav-llaudio/src/codecs/flacenc.rs b/nihav-llaudio/src/codecs/flacenc.rs index 3643c16..3b99294 100644 --- a/nihav-llaudio/src/codecs/flacenc.rs +++ b/nihav-llaudio/src/codecs/flacenc.rs @@ -141,7 +141,7 @@ fn apply_lpc(dst: &mut [u32], src: &[i32], filter: &[i32], shift: u8) { } fn encode_residual(bw: &mut BitWriter, src: &[u32]) { - let sum = src.iter().fold(0, |acc, &x| acc + x) / (src.len() as u32); + let sum = src.iter().sum::() / (src.len() as u32); let k = (31 - sum.max(1).leading_zeros()) as u8; if k < 16 { @@ -173,6 +173,7 @@ struct FLACEncoder { ifilter: [i32; 32], } +#[allow(clippy::match_overlapping_arm)] fn nsamples_code(nsamp: usize) -> u8 { match nsamp { 192 => 1, @@ -298,7 +299,7 @@ impl FLACEncoder { let mut dbuf = bw.end(); calc_header_crc(&mut dbuf[..hdr_crc_pos]); calc_frame_crc(&mut dbuf); - let ts = NATimeInfo::new(None, None, Some(nsamples as u64), 1, self.srate); + let ts = NATimeInfo::new(Some(self.cur_pos as u64), None, Some(nsamples as u64), 1, self.srate); for samp in self.samples.iter_mut() { samp.drain(..nsamples); @@ -326,7 +327,7 @@ impl FLACEncoder { bw.write(1, 6); bw.write0(); // no wasted bits for &el in samp.iter() { - bw.write_s(i32::from(el), samp_bits); + bw.write_s(el, samp_bits); } }, -1 | -2 | -3 | -4 => { @@ -337,7 +338,7 @@ impl FLACEncoder { bw.write(8 | (order as u32), 6); bw.write0(); // no wasted bits for &el in samp[..order].iter() { - bw.write_s(i32::from(el), samp_bits); + bw.write_s(el, samp_bits); } encode_residual(bw, &self.tmp[order..nsamples]); }, @@ -373,7 +374,7 @@ impl FLACEncoder { bw.write(0x20 | ((order - 1) as u32), 6); bw.write0(); // no wasted bits for &el in samp[..order].iter() { - bw.write_s(i32::from(el), samp_bits); + bw.write_s(el, samp_bits); } bw.write(filter_bits - 1, 4); bw.write(filter_prec, 5); @@ -395,9 +396,9 @@ impl NAEncoder for FLACEncoder { fn negotiate_format(&self, encinfo: &EncodeParameters) -> EncoderResult { 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) => { @@ -416,6 +417,7 @@ impl NAEncoder for FLACEncoder { } } } + fn get_capabilities(&self) -> u64 { 0 } fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult { match encinfo.format { NACodecTypeInfo::None => Err(EncoderError::FormatError), @@ -598,6 +600,7 @@ mod test { let mut enc_reg = RegisteredEncoders::new(); llaudio_register_all_encoders(&mut enc_reg); + // sample: https://samples.mplayerhq.hu/A-codecs/lossless/luckynight.flac let dec_config = DecoderTestParams { demuxer: "flac", in_name: "assets/LLaudio/luckynight.flac",