X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fmuxers%2Favi.rs;h=2c541188be6a653315fb3c50cf60a7bd7c54fb0f;hb=757ee9164bd2ab7e1690ae2ea4e5a03f7b37f1b5;hp=8920b48d28d96d79f2ef2b78da1df5401f6055d2;hpb=586ea1879dd193fa71d16302e1c54deb269bc732;p=nihav.git diff --git a/nihav-commonfmt/src/muxers/avi.rs b/nihav-commonfmt/src/muxers/avi.rs index 8920b48..2c54118 100644 --- a/nihav-commonfmt/src/muxers/avi.rs +++ b/nihav-commonfmt/src/muxers/avi.rs @@ -15,7 +15,7 @@ struct AVIStream { strh_pos: u64, nframes: u32, is_video: bool, - max_size: u32, + max_size: u32, } struct AVIMuxer<'a> { @@ -61,6 +61,8 @@ fn write_chunk_hdr(bw: &mut ByteWriter, stype: StreamType, str_no: u32) -> Muxer } impl<'a> MuxCore<'a> for AVIMuxer<'a> { + #[allow(clippy::unreadable_literal)] + #[allow(clippy::cast_lossless)] fn create(&mut self, strmgr: &StreamManager) -> MuxerResult<()> { if strmgr.get_num_streams() == 0 { return Err(MuxerError::InvalidArgument); @@ -184,6 +186,7 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { // unimplemented!(); self.bw.write_u32le(0)?; // total colors self.bw.write_u32le(0)?; // important colors +println!("pal?"); } else { self.bw.write_u32le(0)?; // total colors self.bw.write_u32le(0)?; // important colors @@ -253,6 +256,9 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { write_chunk_hdr(&mut self.bw, str.get_media_type(), str_num as u32)?; self.bw.write_u32le(chunk_len)?; self.bw.write_buf(pkt.get_buffer().as_slice())?; + if (self.bw.tell() & 1) != 0 { + self.bw.write_byte(0)?; + } Ok(()) } fn flush(&mut self) -> MuxerResult<()> { @@ -260,7 +266,7 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { } fn end(&mut self) -> MuxerResult<()> { patch_size(&mut self.bw, self.data_pos)?; - if self.index.len() > 0 { + if !self.index.is_empty() { self.bw.write_buf(b"idx1")?; self.bw.write_u32le((self.index.len() * 16) as u32)?; for item in self.index.iter() { @@ -288,6 +294,12 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { } } +impl<'a> NAOptionHandler for AVIMuxer<'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 AVIMuxerCreator {} impl MuxerCreator for AVIMuxerCreator { @@ -295,44 +307,38 @@ impl MuxerCreator for AVIMuxerCreator { Box::new(AVIMuxer::new(bw)) } fn get_name(&self) -> &'static str { "avi" } + fn get_capabilities(&self) -> MuxerCapabilities { MuxerCapabilities::Universal } } #[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_avi_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 ofile = File::create("assets/test_out/muxed.avi").unwrap(); - let mut fw = FileWriter::new_write(ofile); - let mut bw = ByteWriter::new(&mut fw); - let mut mux = AVIMuxer::new(&mut bw); - - mux.create(dmx.get_stream_manager()).unwrap(); - - loop { - let pktres = dmx.get_frame(); - if let Err(e) = pktres { - if e == DemuxerError::EOF { break; } - panic!("error"); - } - let pkt = pktres.unwrap(); - println!("Got {}", pkt); - mux.mux_frame(dmx.get_stream_manager(), pkt).unwrap(); - } - - mux.end().unwrap(); -panic!("end"); + 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: "avi", + enc_name: "", + out_name: "muxed.avi", + mux_reg, enc_reg: RegisteredEncoders::new(), + }; + test_remuxing(&dec_config, &enc_config);*/ + test_remuxing_md5(&dec_config, "avi", &mux_reg, + [0xa0fb0e47, 0x412e24dd, 0x6b89711c, 0x276fb799]); } }