X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-duck%2Fsrc%2Fcodecs%2Fvpcommon.rs;h=bd7d1cf49066df5e99ea8d61ac501686c378e3b3;hb=3cc76ad5da2772a179d6933695e84ec9212f84c2;hp=562a9a2601dcbaf0c4d09983e4312b39390baf74;hpb=587a6d789be865f24bd31ef65aabf1b9d5809965;p=nihav.git diff --git a/nihav-duck/src/codecs/vpcommon.rs b/nihav-duck/src/codecs/vpcommon.rs index 562a9a2..bd7d1cf 100644 --- a/nihav-duck/src/codecs/vpcommon.rs +++ b/nihav-duck/src/codecs/vpcommon.rs @@ -68,6 +68,9 @@ impl VPShuffler { None } } + pub fn has_refs(&self) -> bool { + self.lastframe.is_some() + } } pub const VP56_COEF_BASE: [i16; 6] = [ 5, 7, 11, 19, 35, 67 ]; @@ -429,21 +432,33 @@ fn vp3_interp10(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, bw: } } -fn vp3_interp11(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, bw: usize, bh: usize) +fn vp3_interp1x(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, bw: usize, bh: usize) { let mut didx = 0; let mut sidx = 0; for _ in 0..bh { for x in 0..bw { dst[didx + x] = (((src[sidx + x] as u16) + - (src[sidx + x + 1] as u16) + - (src[sidx + x + sstride] as u16) + - (src[sidx + x + sstride + 1] as u16)) >> 2) as u8; + (src[sidx + x + sstride + 1] as u16)) >> 1) as u8; + } + didx += dstride; + sidx += sstride; + } +} + +fn vp3_interp1y(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, bw: usize, bh: usize) +{ + let mut didx = 0; + let mut sidx = 0; + for _ in 0..bh { + for x in 0..bw { + dst[didx + x] = (((src[sidx + x + 1] as u16) + + (src[sidx + x + sstride] as u16)) >> 1) as u8; } didx += dstride; sidx += sstride; } } -pub const VP3_INTERP_FUNCS: &[blockdsp::BlkInterpFunc] = &[ vp3_interp00, vp3_interp01, vp3_interp10, vp3_interp11 ]; +pub const VP3_INTERP_FUNCS: &[blockdsp::BlkInterpFunc] = &[ vp3_interp00, vp3_interp01, vp3_interp10, vp3_interp1x, vp3_interp1y ];