X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fmuxers%2Fwav.rs;h=1317b95e3e65d57630fa3bfa62c8a619e49d0dc9;hb=6f2630992fe340ad1a122ec10c649f756e478185;hp=a11bb2a510eb6406d5cb8962ea5693495e49514f;hpb=f0081142878786d1a07c61e4df2d2a318609b478;p=nihav.git diff --git a/nihav-commonfmt/src/muxers/wav.rs b/nihav-commonfmt/src/muxers/wav.rs index a11bb2a..1317b95 100644 --- a/nihav-commonfmt/src/muxers/wav.rs +++ b/nihav-commonfmt/src/muxers/wav.rs @@ -51,7 +51,7 @@ impl<'a> MuxCore<'a> for WAVMuxer<'a> { twocc.unwrap_or(0) }; let avg_bytes_per_sec = if stream.get_info().get_name() == "pcm" { - u32::from(ainfo.channels) * ainfo.sample_rate * u32::from(ainfo.format.bits) >> 3 + (u32::from(ainfo.channels) * ainfo.sample_rate * u32::from(ainfo.format.bits)) >> 3 } else { 0 }; @@ -59,11 +59,11 @@ impl<'a> MuxCore<'a> for WAVMuxer<'a> { self.bw.write_buf(b"RIFF\0\0\0\0WAVEfmt ")?; self.bw.write_u32le(if edata_len == 0 { 16 } else { 18 + edata_len } as u32)?; self.bw.write_u16le(twocc)?; - self.bw.write_u16le(ainfo.channels as u16)?; + self.bw.write_u16le(u16::from(ainfo.channels))?; self.bw.write_u32le(ainfo.sample_rate)?; self.bw.write_u32le(avg_bytes_per_sec)?; self.bw.write_u16le(ainfo.block_len as u16)?; - self.bw.write_u16le(ainfo.format.bits as u16)?; + self.bw.write_u16le(u16::from(ainfo.format.bits))?; if let Some(ref buf) = stream.get_info().get_extradata() { self.bw.write_u16le(edata_len as u16)?; self.bw.write_buf(buf.as_slice())?; @@ -90,14 +90,20 @@ impl<'a> MuxCore<'a> for WAVMuxer<'a> { Ok(()) } fn end(&mut self) -> MuxerResult<()> { - patch_size(&mut self.bw, self.data_pos)?; - patch_size(&mut self.bw, 8)?; + patch_size(self.bw, self.data_pos)?; + patch_size(self.bw, 8)?; // todo patch avg_bytes_per_second if calculated // todo write fact value if calculated Ok(()) } } +impl<'a> NAOptionHandler for WAVMuxer<'a> { + fn get_supported_options(&self) -> &[NAOptionDefinition] { &[] } + fn set_options(&mut self, _options: &[NAOption]) { } + fn query_option_value(&self, _name: &str) -> Option { None } +} + pub struct WAVMuxerCreator {} impl MuxerCreator for WAVMuxerCreator { @@ -110,55 +116,34 @@ impl MuxerCreator for WAVMuxerCreator { #[cfg(test)] mod test { - use super::*; - use std::fs::File; + use nihav_core::codecs::*; use nihav_core::demuxers::*; - use crate::demuxers::*; + use nihav_core::muxers::*; + use nihav_codec_support::test::enc_video::*; + use crate::*; #[test] fn test_wav_muxer() { let mut dmx_reg = RegisteredDemuxers::new(); generic_register_all_demuxers(&mut dmx_reg); - let mut file = File::open("assets/Indeo/laser05.avi").unwrap(); - let mut fr = FileReader::new_read(&mut file); - let mut br = ByteReader::new(&mut fr); - let dmx_f = dmx_reg.find_demuxer("avi").unwrap(); - let mut dmx = create_demuxer(dmx_f, &mut br).unwrap(); - - let mut out_sm = StreamManager::new(); - let mut out_streamno = 0; - for stream in dmx.get_streams() { - if stream.get_media_type() == StreamType::Audio { - let mut stream = NAStream::clone(&stream); - out_streamno = stream.id; - stream.id = 0; - out_sm.add_stream(stream); - } - } - - let ofile = File::create("assets/test_out/muxed.wav").unwrap(); - let mut fw = FileWriter::new_write(ofile); - let mut bw = ByteWriter::new(&mut fw); - let mut mux = WAVMuxer::new(&mut bw); - - mux.create(&out_sm).unwrap(); - - loop { - let pktres = dmx.get_frame(); - if let Err(e) = pktres { - if e == DemuxerError::EOF { break; } - panic!("error"); - } - let mut pkt = pktres.unwrap(); - println!("Got {}", pkt); - let pkt_str = pkt.get_stream(); - if pkt_str.id == out_streamno { - pkt.reassign(out_sm.get_stream(0).unwrap(), pkt.get_time_information()); - mux.mux_frame(&out_sm, pkt).unwrap(); - } - } - - mux.end().unwrap(); -panic!("end"); + // sample: https://samples.mplayerhq.hu/V-codecs/RT21/320x240/laser05.avi + let dec_config = DecoderTestParams { + demuxer: "avi", + in_name: "assets/Indeo/laser05.avi", + limit: None, + stream_type: StreamType::None, + dmx_reg, dec_reg: RegisteredDecoders::new(), + }; + let mut mux_reg = RegisteredMuxers::new(); + generic_register_all_muxers(&mut mux_reg); + /*let enc_config = EncoderTestParams { + muxer: "wav", + enc_name: "", + out_name: "muxed.wav", + mux_reg, enc_reg: RegisteredEncoders::new(), + }; + test_remuxing(&dec_config, &enc_config);*/ + test_remuxing_md5(&dec_config, "wav", &mux_reg, + [0x1040ebe8, 0xe7a43e84, 0x49fbe234, 0xe870b6b3]); } }