]> git.nihav.org Git - nihav.git/blobdiff - nihav-game/src/demuxers/vmd.rs
vmd: support stereo IMA ADPCM
[nihav.git] / nihav-game / src / demuxers / vmd.rs
index 0c47f89cf5600438a28b360fca0c2739640bc9ab..1cfba901bf716e06372850d3b6ee320cbefc8288 100644 (file)
@@ -45,7 +45,7 @@ impl<'a> DemuxCore<'a> for VMDDemuxer<'a> {
         let nframes = read_u16le(&header[6..])? as usize;
         let fpb     = read_u16le(&header[18..])? as usize;
         validate!(nframes > 0 && fpb > 0);
-        
+
         let mut edata: Vec<u8> = Vec::with_capacity(HEADER_SIZE);
         edata.extend_from_slice(&header);
         let vhdr = NAVideoInfo::new(width, height, false, PAL8_FORMAT);
@@ -67,8 +67,10 @@ impl<'a> DemuxCore<'a> for VMDDemuxer<'a> {
                 block_size = bsize;
             }
 
+            let mut aedata: Vec<u8> = Vec::with_capacity(2);
+            aedata.extend_from_slice(&header[810..][..2]);
             let ahdr = NAAudioInfo::new(srate, channels, if is16bit { SND_S16P_FORMAT } else { SND_U8_FORMAT }, block_size);
-            let ainfo = NACodecInfo::new("vmd-audio", NACodecTypeInfo::Audio(ahdr), None);
+            let ainfo = NACodecInfo::new("vmd-audio", NACodecTypeInfo::Audio(ahdr), Some(aedata));
             self.aud_id = strmgr.add_stream(NAStream::new(StreamType::Audio, 1, ainfo, 1, srate)).unwrap();
         } else {
             block_size = 0;
@@ -189,7 +191,8 @@ mod test {
         let mut br = ByteReader::new(&mut fr);
         let mut dmx = VMDDemuxer::new(&mut br);
         let mut sm = StreamManager::new();
-        dmx.open(&mut sm).unwrap();
+        let mut si = SeekIndex::new();
+        dmx.open(&mut sm, &mut si).unwrap();
         loop {
             let pktres = dmx.get_frame(&mut sm);
             if let Err(e) = pktres {