X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fcodecs%2Frawvideo.rs;h=52dcc52e1f24893c29accc72676e37304c7db075;hb=886cde4847280b96e10d240c2f2d76abec121dc8;hp=fd1c0c3c65590acafc380f7eeddb431b00383ebb;hpb=a715e99fd5a8b724cf31877c74bbd8191d7fd256;p=nihav.git diff --git a/nihav-commonfmt/src/codecs/rawvideo.rs b/nihav-commonfmt/src/codecs/rawvideo.rs index fd1c0c3..52dcc52 100644 --- a/nihav-commonfmt/src/codecs/rawvideo.rs +++ b/nihav-commonfmt/src/codecs/rawvideo.rs @@ -57,11 +57,15 @@ impl NADecoder for RawDecoder { } validate!(off == src.len()); - NABufferType::Video(NAVideoBuffer::from_raw_parts(vinfo.clone(), src.clone(), offs, strides).into_ref()) + NABufferType::Video(NAVideoBuffer::from_raw_parts(*vinfo, src, offs, strides).into_ref()) } else { - let offs = vec![0; ncomp]; - let strides = vec![0; ncomp]; - NABufferType::VideoPacked(NAVideoBuffer::from_raw_parts(vinfo.clone(), src.clone(), offs, strides).into_ref()) + let esize = vinfo.format.elem_size as usize; + let ychr = vinfo.format.get_chromaton(0).unwrap(); + let ystep = if ychr.next_elem != 0 { ychr.next_elem as usize } else { esize }; + let stride = (width * esize + ystep - 1) / ystep; + let offs = vec![0]; + let strides = vec![stride]; + NABufferType::VideoPacked(NAVideoBuffer::from_raw_parts(*vinfo, src, offs, strides).into_ref()) }; let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), buf); @@ -99,6 +103,7 @@ mod test { generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); generic_register_all_decoders(&mut dec_reg); + // sample: self-created with avconv test_decoding("yuv4mpeg", "rawvideo", "assets/Misc/test.y4m", None, &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![ [0xd58326b0, 0xdbfc1dcc, 0x6d66a04c, 0x08a21bbb],