]> git.nihav.org Git - nihav.git/commitdiff
support VX video in AVI
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 27 Jul 2024 13:18:16 +0000 (15:18 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 27 Jul 2024 13:18:16 +0000 (15:18 +0200)
nihav-game/src/codecs/vx.rs
nihav-game/src/demuxers/vx.rs
nihav-registry/src/register.rs

index 057f61769afe7b72e832ca697d67fde337375205..dd71b5619058b158304051f14ce948304ed8d8ae 100644 (file)
@@ -946,9 +946,9 @@ impl NADecoder for VXVideoDecoder {
     }
     fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         let src = pkt.get_buffer();
-        validate!(src.len() > 0);
+        validate!(src.len() > 4);
 
-        let mut br = BitReader::new(&src[0..], BitReaderMode::LE16MSB);
+        let mut br = BitReader::new(&src[4..], BitReaderMode::LE16MSB);
 
         self.y_ncoeffs = [0; NCSTRIDE * (256 / 4 + 1)];
         self.c_ncoeffs = [0; NCSTRIDE * (256 / 8 + 1)];
index 1817682c35c1e4b768dac9d982f8ba422f86683a..d20132123872bc2593d66fc68828a152d096a904 100644 (file)
@@ -46,7 +46,7 @@ impl<'a> DemuxCore<'a> for VXDemuxer<'a> {
 
         let vhdr = NAVideoInfo::new(width, height, false, YUV420_FORMAT);
         let vci = NACodecTypeInfo::Video(vhdr);
-        let edata = [fps as u8].to_vec();
+        let edata = vec![fps as u8, 0, 0, 0];
         let vinfo = NACodecInfo::new("vxvideo", vci, Some(edata));
         self.vid_id = strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, 1, fps, nframes as u64)).unwrap();
 
@@ -89,7 +89,10 @@ impl<'a> DemuxCore<'a> for VXDemuxer<'a> {
         validate!(size > 2);
         let _num_achunks            = self.src.read_u16le()?;
         let fsize = size - 2;
-        let pkt                     = self.src.read_packet(stream, ts, false, fsize)?;
+        let mut buf = vec![0; fsize + 4];
+        write_u32le(&mut buf, (fsize * 8) as u32)?;
+                                      self.src.read_buf(&mut buf[4..])?;
+        let pkt = NAPacket::new(stream, ts, false, buf);
         self.video_pos = self.src.tell();
         self.vno += 1;
         Ok(pkt)
index 7920b3f180fceb672296044ccc424e51dbeb1a52..dc06a2793e8c8c3638d09f7ac1403779d4045412 100644 (file)
@@ -362,6 +362,8 @@ static AVI_VIDEO_CODEC_REGISTER: &[(&[u8;4], &str)] = &[
 
     (b"azpr", "apple-video"),
     (b"PGVV", "pgvv"),
+
+    (b"VXS1", "vxvideo"),
 ];
 
 static WAV_CODEC_REGISTER: &[(u16, &str)] = &[