X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fcodecs%2Findeo%2Findeo3.rs;h=abbff6763bfcef38b61c1e64508722855ee5fcd6;hb=9037cf6b83ce135243522ec154cd7ffb35f8c816;hp=5851b54af20afa986118a9c071a5bd48042cef39;hpb=88c58b1b958a5478dca6595e2efc3a1a6b5f7e19;p=nihav.git diff --git a/src/codecs/indeo/indeo3.rs b/src/codecs/indeo/indeo3.rs index 5851b54..abbff67 100644 --- a/src/codecs/indeo/indeo3.rs +++ b/src/codecs/indeo/indeo3.rs @@ -122,16 +122,16 @@ impl Buffers { #[allow(unused_variables)] fn apply_delta4x4(bufs: &mut Buffers, off: usize, stride: usize, deltas: &[u8], topline: bool, first_line: bool) { - let mut dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 4)] } - else { &mut bufs.buf2[off..(off + 4)] }; + let dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 4)] } + else { &mut bufs.buf2[off..(off + 4)] }; for i in 0..4 { dst[i] = dst[i].wrapping_add(deltas[i]) & 0x7F; } } #[allow(unused_variables)] fn apply_delta4x8(bufs: &mut Buffers, off: usize, stride: usize, deltas: &[u8], topline: bool, first_line: bool) { - let mut dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 4 + stride)] } - else { &mut bufs.buf2[off..(off + 4 + stride)] }; + let dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 4 + stride)] } + else { &mut bufs.buf2[off..(off + 4 + stride)] }; for i in 0..4 { dst[i + stride] = dst[i].wrapping_add(deltas[i]) & 0x7F; } if !topline { for i in 0..4 { dst[i] = (dst[i + stride] + dst[i]) >> 1; } @@ -143,8 +143,8 @@ fn apply_delta4x8(bufs: &mut Buffers, off: usize, stride: usize, #[allow(unused_variables)] fn apply_delta4x8m11(bufs: &mut Buffers, off: usize, stride: usize, deltas: &[u8], topline: bool, first_line: bool) { - let mut dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 4 + stride)] } - else { &mut bufs.buf2[off..(off + 4 + stride)] }; + let dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 4 + stride)] } + else { &mut bufs.buf2[off..(off + 4 + stride)] }; for i in 0..4 { dst[i] = dst[i] .wrapping_add(deltas[i]) & 0x7F; } for i in 0..4 { dst[i + stride] = dst[i + stride].wrapping_add(deltas[i]) & 0x7F; } } @@ -152,16 +152,16 @@ fn apply_delta4x8m11(bufs: &mut Buffers, off: usize, stride: usize, #[allow(unused_variables)] fn apply_delta8x8p(bufs: &mut Buffers, off: usize, stride: usize, deltas: &[u8], topline: bool, first_line: bool) { - let mut dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 8 + stride)] } - else { &mut bufs.buf2[off..(off + 8 + stride)] }; + let dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 8 + stride)] } + else { &mut bufs.buf2[off..(off + 8 + stride)] }; for i in 0..8 { dst[i] = dst[i] .wrapping_add(deltas[i >> 1]) & 0x7F; } for i in 0..8 { dst[i + stride] = dst[i + stride].wrapping_add(deltas[i >> 1]) & 0x7F; } } fn apply_delta8x8i(bufs: &mut Buffers, off: usize, stride: usize, deltas: &[u8], topline: bool, firstline: bool) { - let mut dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 8 + stride)] } - else { &mut bufs.buf2[off..(off + 8 + stride)] }; + let dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 8 + stride)] } + else { &mut bufs.buf2[off..(off + 8 + stride)] }; if !firstline { for i in 0..8 { dst[i + stride] = dst[i ].wrapping_add(deltas[i >> 1]) & 0x7F; } } else { @@ -183,8 +183,8 @@ fn copy_line_top(bufs: &mut Buffers, off: usize, stride: usize, bw: usize, topli } else { for i in 0..bw { buf[i] = DEFAULT_PIXEL; } } - let mut dst = if bufs.fbuf { &mut bufs.buf1[off..(off + bw)] } - else { &mut bufs.buf2[off..(off + bw)] }; + let dst = if bufs.fbuf { &mut bufs.buf1[off..(off + bw)] } + else { &mut bufs.buf2[off..(off + bw)] }; for i in 0..bw { dst[i] = buf[i]; } } @@ -206,8 +206,8 @@ fn copy_line_top8x8(bufs: &mut Buffers, off: usize, stride: usize, topline: bool } else { for i in 0..8 { buf[i] = DEFAULT_PIXEL; } } - let mut dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 8)] } - else { &mut bufs.buf2[off..(off + 8)] }; + let dst = if bufs.fbuf { &mut bufs.buf1[off..(off + 8)] } + else { &mut bufs.buf2[off..(off + 8)] }; for i in 0..8 {dst[i] = buf[i]; } } @@ -777,60 +777,18 @@ impl NADecoder for Indeo3Decoder { } } +pub fn get_decoder() -> Box { + Box::new(Indeo3Decoder::new()) +} + #[cfg(test)] mod test { - use codecs::*; - use demuxers::*; - use io::byteio::*; - use std::fs::File; - + use test::dec_video::test_file_decoding; #[test] fn test_indeo3() { - let avi_dmx = find_demuxer("avi").unwrap(); - let mut file = File::open("assets/iv32_example.avi").unwrap(); - let mut fr = FileReader::new_read(&mut file); - let mut br = ByteReader::new(&mut fr); - let mut dmx = avi_dmx.new_demuxer(&mut br); - dmx.open().unwrap(); - - let mut decs: Vec>> = Vec::new(); - for i in 0..dmx.get_num_streams() { - let s = dmx.get_stream(i).unwrap(); - let info = s.get_info(); - let decfunc = find_decoder(info.get_name()); - if let Some(df) = decfunc { - let mut dec = (df)(); - dec.init(info).unwrap(); - decs.push(Some(dec)); - } else { - decs.push(None); -panic!("decoder {} not found", info.get_name()); - } - } - - loop { - let pktres = dmx.get_frame(); - if let Err(e) = pktres { - if e == DemuxerError::EOF { break; } - } - let pkt = pktres.unwrap(); - let streamno = pkt.get_stream().get_id() as usize; - if let Some(ref mut dec) = decs[streamno] { -// let frm = -dec.decode(&pkt).unwrap(); -// if pkt.get_stream().get_info().is_video() { -// write_pgmyuv("iv3", streamno, pkt.get_pts().unwrap(), frm); -// } else { -// write_sound("iv3", streamno, frm, pkt.get_pts().unwrap() == 0); -// } - } - if pkt.get_pts().unwrap() > 10 { break; } - } + test_file_decoding("avi", "assets/iv32_example.avi", Some(10), true, false, None); } } -pub fn get_decoder() -> Box { - Box::new(Indeo3Decoder::new()) -} const DT_1_1: IviDeltaCB = IviDeltaCB{ quad_radix: 7, data: &[ 0, 0, 2, 2, -2, -2, -1, 3,