X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fdemuxers%2Fy4m.rs;h=3571ea97aeb4944d47c4f5b58b1cb657906082d9;hb=e6aaad5c5273cd814b5748b7faf3751835a37217;hp=093d4441e79bf151e854c143fc509ad73520a6cb;hpb=dbb2cbc9c1274135470608275c1893a201cba731;p=nihav.git diff --git a/nihav-commonfmt/src/demuxers/y4m.rs b/nihav-commonfmt/src/demuxers/y4m.rs index 093d444..3571ea9 100644 --- a/nihav-commonfmt/src/demuxers/y4m.rs +++ b/nihav-commonfmt/src/demuxers/y4m.rs @@ -20,7 +20,7 @@ impl<'a> DemuxCore<'a> for Y4MDemuxer<'a> { let vhdr = NAVideoInfo::new(self.width, self.height, false, format); let vci = NACodecTypeInfo::Video(vhdr); let vinfo = NACodecInfo::new("rawvideo", vci, None); - if let None = strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, self.fps_num, self.fps_den, 0)) { + if strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, self.fps_num, self.fps_den, 0)).is_none() { return Err(DemuxerError::MemoryError); } @@ -37,8 +37,7 @@ impl<'a> DemuxCore<'a> for Y4MDemuxer<'a> { }; validate!(&marker == b"FRAME\n"); let stream = strmgr.get_stream(0).unwrap(); - let (tb_num, tb_den) = stream.get_timebase(); - let ts = NATimeInfo::new(Some(self.frameno), None, None, tb_num, tb_den); + let ts = stream.make_ts(Some(self.frameno), None, None); let pkt = self.src.read_packet(stream, ts, true, self.frame_size)?; self.frameno += 1; Ok(pkt) @@ -86,12 +85,12 @@ impl<'a> Y4MDemuxer<'a> { } } fn parse_header(&mut self) -> DemuxerResult { - let mut format = RGB24_FORMAT; + let mut format = YUV420_FORMAT; let mut magic = [0u8; 10]; self.src.read_buf(&mut magic)?; validate!(&magic == b"YUV4MPEG2 "); - while let Ok((last, tok)) = read_token(&mut self.src) { + while let Ok((last, tok)) = read_token(self.src) { let (id, val) = tok.split_at(1); validate!(id.len() == 1); match id.bytes().next().unwrap() { @@ -150,12 +149,10 @@ impl<'a> Y4MDemuxer<'a> { break; } } - validate!(self.width > 0 && self.height > 0 && format.model.is_yuv()); + validate!(self.width > 0 && self.height > 0); self.frame_size = 0; - for chromaton in format.comp_info.iter() { - if let Some(ref chr) = chromaton { - self.frame_size += chr.get_data_size(self.width, self.height); - } + for chr in format.comp_info.iter().flatten() { + self.frame_size += chr.get_data_size(self.width, self.height); } validate!(self.frame_size > 0); @@ -194,6 +191,7 @@ mod test { #[test] fn test_y4m_demux() { + // sample: self-created with avconv let mut file = File::open("assets/Misc/test.y4m").unwrap(); let mut fr = FileReader::new_read(&mut file); let mut br = ByteReader::new(&mut fr);