aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2024-07-27 15:18:16 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2024-07-27 15:18:16 +0200
commit7542b7537a7c88cb086e9aeaadd03e4612b4cbec (patch)
tree9becc9e239eb8ece0b2ec1d3a9e885224e6012cc
parentd3ebda9bd0510626d1c87f4b7ba26bb10791c86d (diff)
downloadnihav-7542b7537a7c88cb086e9aeaadd03e4612b4cbec.tar.gz
support VX video in AVI
-rw-r--r--nihav-game/src/codecs/vx.rs4
-rw-r--r--nihav-game/src/demuxers/vx.rs7
-rw-r--r--nihav-registry/src/register.rs2
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)] = &[