X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fdemuxers%2Favi.rs;h=8737fbf7354049537e9e2c3d45d0b9a673fa65cb;hb=3f7c7cfd270b5b75917508aee6ca5877433a984d;hp=0b8ade0d5dc4b60114ca706105ffaddfdc6e019d;hpb=ccae5343c71a92519937b9eafd9af0fe0ce3d799;p=nihav.git diff --git a/src/demuxers/avi.rs b/src/demuxers/avi.rs index 0b8ade0..8737fbf 100644 --- a/src/demuxers/avi.rs +++ b/src/demuxers/avi.rs @@ -38,7 +38,7 @@ impl StreamState { } #[allow(dead_code)] -pub struct AVIDemuxer<'a> { +struct AVIDemuxer<'a> { opened: bool, src: &'a mut ByteReader<'a>, cur_frame: Vec, @@ -68,6 +68,9 @@ impl<'a> Demux<'a> for AVIDemuxer<'a> { Ok(()) } + fn get_num_streams(&self) -> usize { self.dmx.get_num_streams() } + fn get_stream(&self, idx: usize) -> Option> { self.dmx.get_stream(idx) } + fn get_frame(&mut self) -> DemuxerResult { if !self.opened { return Err(NoSuchInput); } if self.movi_size == 0 { return Err(EOF); } @@ -103,7 +106,7 @@ impl<'a> Demux<'a> for AVIDemuxer<'a> { } impl<'a> AVIDemuxer<'a> { - pub fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut ByteReader<'a>) -> Self { AVIDemuxer { cur_frame: Vec::new(), num_streams: 0, @@ -280,7 +283,7 @@ fn parse_strf_vids(dmx: &mut AVIDemuxer, size: usize) -> DemuxerResult { let flip = height < 0; let format = if bitcount > 8 { RGB24_FORMAT } else { PAL8_FORMAT }; - let vhdr = NAVideoInfo::new(width, if flip { -height as u32 } else { height as u32}, flip, PAL8_FORMAT); + let vhdr = NAVideoInfo::new(width as usize, if flip { -height as usize } else { height as usize}, flip, PAL8_FORMAT); let vci = NACodecTypeInfo::Video(vhdr); let edata = dmx.read_extradata(size - 40)?; let cname = match register::find_codec_from_avi_fourcc(&compression) { @@ -355,6 +358,15 @@ fn parse_junk(dmx: &mut AVIDemuxer, size: usize) -> DemuxerResult { Ok(size) } +pub struct AVIDemuxerCreator { } + +impl DemuxerCreator for AVIDemuxerCreator { + fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box + 'a> { + Box::new(AVIDemuxer::new(br)) + } + fn get_name(&self) -> &'static str { "avi" } +} + #[cfg(test)] mod test { use super::*;