X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-qt%2Fsrc%2Fcodecs%2Falac.rs;h=6443917e732464c64599a5baf89ee8d0968a076a;hb=6f2630992fe340ad1a122ec10c649f756e478185;hp=bdcdad700e9cbe0fa28e7bb0b8707c1c8ac0babf;hpb=40494a85189aa320e84bcf9fc9c270289acb5c05;p=nihav.git diff --git a/nihav-qt/src/codecs/alac.rs b/nihav-qt/src/codecs/alac.rs index bdcdad7..6443917 100644 --- a/nihav-qt/src/codecs/alac.rs +++ b/nihav-qt/src/codecs/alac.rs @@ -289,7 +289,7 @@ impl NADecoder for ALACDecoder { let version = br.read_byte()?; validate!(version == 0); let bits = br.read_byte()?; - validate!(bits >= 8 && bits <= 32); + validate!((8..=32).contains(&bits)); self.pb = br.read_byte()?; validate!(self.pb == 40); self.mb = br.read_byte()?; @@ -356,7 +356,7 @@ impl NADecoder for ALACDecoder { if let NACodecTypeInfo::Audio(_) = info.get_properties() { let src = pkt.get_buffer(); let channels = self.chmap.num_channels(); - let abuf = alloc_audio_buffer(self.ainfo, self.frame_len, self.chmap.clone())?; + let mut abuf = alloc_audio_buffer(self.ainfo, self.frame_len, self.chmap.clone())?; let mut br = BitReader::new(&src, BitReaderMode::BE); @@ -390,7 +390,6 @@ impl NADecoder for ALACDecoder { _ => return Err(DecoderError::InvalidData), }; } - adata.truncate(self.cur_len); } else if let Some(mut adata) = abuf.get_abuf_i32() { let shift = 32 - self.bits; let stride = adata.get_stride(); @@ -420,10 +419,10 @@ impl NADecoder for ALACDecoder { _ => return Err(DecoderError::InvalidData), }; } - adata.truncate(self.cur_len); } else { return Err(DecoderError::Bug); } + abuf.truncate_audio(self.cur_len); let mut frm = NAFrame::new_from_pkt(pkt, info.replace_info(NACodecTypeInfo::Audio(self.ainfo)), abuf); frm.set_duration(Some(self.cur_len as u64)); @@ -461,6 +460,7 @@ mod test { let mut dec_reg = RegisteredDecoders::new(); qt_register_all_decoders(&mut dec_reg); + // sample: https://samples.mplayerhq.hu/A-codecs/lossless/luckynight.m4a test_decoding("mov", "alac", "assets/LLaudio/alac/luckynight.m4a", Some(48000 * 16), &dmx_reg, &dec_reg, ExpectedTestResult::MD5([0x8b6562ac, 0x95981733, 0x47e14709, 0x45d4f05a])); } @@ -471,6 +471,7 @@ mod test { let mut dec_reg = RegisteredDecoders::new(); qt_register_all_decoders(&mut dec_reg); + // sample: https://samples.mplayerhq.hu/A-codecs/lossless/ALAC/ALAC_6ch.mov test_decoding("mov", "alac", "assets/LLaudio/alac/ALAC_6ch.mov", None, &dmx_reg, &dec_reg, ExpectedTestResult::MD5([0x0356ff3d, 0x1ddd3684, 0xb4da8b00, 0x8e8671a7])); } @@ -481,6 +482,7 @@ mod test { let mut dec_reg = RegisteredDecoders::new(); qt_register_all_decoders(&mut dec_reg); + // sample: https://samples.mplayerhq.hu/A-codecs/lossless/ALAC/ALAC_24bits2.mov test_decoding("mov", "alac", "assets/LLaudio/alac/ALAC_24bits2.mov", None, &dmx_reg, &dec_reg, ExpectedTestResult::MD5([0x15d58ed9, 0x9ee74f5e, 0x0fb82c0b, 0x27da35f9])); }