diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2024-07-27 15:18:16 +0200 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2024-07-27 15:18:16 +0200 |
commit | 7542b7537a7c88cb086e9aeaadd03e4612b4cbec (patch) | |
tree | 9becc9e239eb8ece0b2ec1d3a9e885224e6012cc | |
parent | d3ebda9bd0510626d1c87f4b7ba26bb10791c86d (diff) | |
download | nihav-7542b7537a7c88cb086e9aeaadd03e4612b4cbec.tar.gz |
support VX video in AVI
-rw-r--r-- | nihav-game/src/codecs/vx.rs | 4 | ||||
-rw-r--r-- | nihav-game/src/demuxers/vx.rs | 7 | ||||
-rw-r--r-- | nihav-registry/src/register.rs | 2 |
3 files changed, 9 insertions, 4 deletions
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<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)]; 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)] = &[ |