X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fmuxers%2Favi.rs;h=ac09974d7eef7a02de10533cac2e39a2dad9bdbf;hb=735b56ab4e0fd4466b6d031009f9c63f7493b512;hp=18d17babf7635379bcd8ceecea02cb9da8433a63;hpb=a1613eeede21443fe12c303e8681f9ee0dcc33a4;p=nihav.git diff --git a/nihav-commonfmt/src/muxers/avi.rs b/nihav-commonfmt/src/muxers/avi.rs index 18d17ba..ac09974 100644 --- a/nihav-commonfmt/src/muxers/avi.rs +++ b/nihav-commonfmt/src/muxers/avi.rs @@ -109,7 +109,7 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { self.bw.write_u32le(0)?; // reserved self.bw.write_u32le(0)?; // reserved - self.pal_pos.truncate(0); + self.pal_pos.clear(); self.pal_pos.resize(strmgr.get_num_streams(), 0); for (strno, str) in strmgr.iter().enumerate() { let strl_pos = self.bw.tell() + 8; @@ -171,11 +171,7 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { let hdr_pos = self.bw.tell(); self.bw.write_u32le(0)?; self.bw.write_u32le(vinfo.width as u32)?; - if vinfo.flipped { - self.bw.write_u32le((-(vinfo.height as i32)) as u32)?; - } else { - self.bw.write_u32le(vinfo.height as u32)?; - } + self.bw.write_u32le(vinfo.height as u32)?; self.bw.write_u16le(vinfo.format.components as u16)?; self.bw.write_u16le(vinfo.format.get_total_depth() as u16)?; let fcc = find_avi_fourcc(str.get_info().get_name()); @@ -228,10 +224,10 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { }, _ => unreachable!(), }; - patch_size(&mut self.bw, strf_pos)?; - patch_size(&mut self.bw, strl_pos)?; + patch_size(self.bw, strf_pos)?; + patch_size(self.bw, strl_pos)?; } - patch_size(&mut self.bw, hdrl_pos)?; + patch_size(self.bw, hdrl_pos)?; self.data_pos = self.bw.tell() + 8; self.bw.write_buf(b"LIST\0\0\0\0movi")?; @@ -290,7 +286,7 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { key: pkt.keyframe, pos: self.bw.tell() as u32, len: chunk_len }); - write_chunk_hdr(&mut self.bw, str.get_media_type(), str_num as u32)?; + write_chunk_hdr(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 { @@ -302,18 +298,18 @@ impl<'a> MuxCore<'a> for AVIMuxer<'a> { Ok(()) } fn end(&mut self) -> MuxerResult<()> { - patch_size(&mut self.bw, self.data_pos)?; + patch_size(self.bw, self.data_pos)?; 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() { - write_chunk_hdr(&mut self.bw, item.stype, item.stream)?; + write_chunk_hdr(self.bw, item.stype, item.stream)?; self.bw.write_u32le(if item.key { 0x10 } else { 0 })?; self.bw.write_u32le(item.pos)?; self.bw.write_u32le(item.len)?; } } - patch_size(&mut self.bw, 8)?; + patch_size(self.bw, 8)?; let mut max_frames = 0; let mut max_size = 0; for stri in self.stream_info.iter() { @@ -359,6 +355,7 @@ mod test { fn test_avi_muxer() { let mut dmx_reg = RegisteredDemuxers::new(); generic_register_all_demuxers(&mut dmx_reg); + //test sample: https://samples.mplayerhq.hu/V-codecs/RT21/320x240/laser05.avi let dec_config = DecoderTestParams { demuxer: "avi", in_name: "assets/Indeo/laser05.avi",