From: Kostya Shishkov Date: Sat, 27 Jul 2024 13:18:16 +0000 (+0200) Subject: support VX video in AVI X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=7542b7537a7c88cb086e9aeaadd03e4612b4cbec;p=nihav.git support VX video in AVI --- diff --git a/nihav-game/src/codecs/vx.rs b/nihav-game/src/codecs/vx.rs index 057f617..dd71b56 100644 --- a/nihav-game/src/codecs/vx.rs +++ b/nihav-game/src/codecs/vx.rs @@ -946,9 +946,9 @@ impl NADecoder for VXVideoDecoder { } fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { 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)]; diff --git a/nihav-game/src/demuxers/vx.rs b/nihav-game/src/demuxers/vx.rs index 1817682..d201321 100644 --- a/nihav-game/src/demuxers/vx.rs +++ b/nihav-game/src/demuxers/vx.rs @@ -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) diff --git a/nihav-registry/src/register.rs b/nihav-registry/src/register.rs index 7920b3f..dc06a27 100644 --- a/nihav-registry/src/register.rs +++ b/nihav-registry/src/register.rs @@ -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)] = &[