X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-itu%2Fsrc%2Fcodecs%2Fh264%2Fdsp%2Fmc%2Frelease.rs;h=e4e7e16876a9f049ab7e2e341e31230a3d9f391b;hb=d3c13e0e409c56364a661889bd227e87ff05ad13;hp=87b1bc5efe7a2920b042879c05933968b0b2c088;hpb=2f9923e6d1505270e2647ba3c3251dd6cfbc7c09;p=nihav.git diff --git a/nihav-itu/src/codecs/h264/dsp/mc/release.rs b/nihav-itu/src/codecs/h264/dsp/mc/release.rs index 87b1bc5..e4e7e16 100644 --- a/nihav-itu/src/codecs/h264/dsp/mc/release.rs +++ b/nihav-itu/src/codecs/h264/dsp/mc/release.rs @@ -1,5 +1,3 @@ -use nihav_codec_support::codecs::blockdsp::*; - use super::clip_u8; const TMP_BUF_STRIDE: usize = 32; @@ -206,7 +204,7 @@ fn h264_mc33(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usiz } -pub fn chroma_interp(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, dx: u16, dy: u16, w: usize, h: usize) { +fn chroma_interp(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, dx: u16, dy: u16, w: usize, h: usize) { let a0 = 8 - dx; let a1 = dx; let b0 = 8 - dy; @@ -276,9 +274,68 @@ pub fn chroma_interp(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, } } -pub const H264_LUMA_INTERP: &[BlkInterpFunc] = &[ - h264_mc00, h264_mc01, h264_mc02, h264_mc03, - h264_mc10, h264_mc11, h264_mc12, h264_mc13, - h264_mc20, h264_mc21, h264_mc22, h264_mc23, - h264_mc30, h264_mc31, h264_mc32, h264_mc33 +pub fn chroma_interp_8(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, dx: u16, dy: u16, h: usize) { + chroma_interp(dst, dstride, src, sstride, dx, dy, 8, h); +} + +pub fn chroma_interp_4(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, dx: u16, dy: u16, h: usize) { + chroma_interp(dst, dstride, src, sstride, dx, dy, 4, h); +} + +pub fn chroma_interp_2(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, dx: u16, dy: u16, h: usize) { + chroma_interp(dst, dstride, src, sstride, dx, dy, 2, h); +} + +macro_rules! luma_mc { + ($orig:ident, $func4:ident, $func8:ident, $func16:ident) => { + fn $func4(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, h: usize) { + $orig(dst, dstride, src, sstride, 4, h); + } + fn $func8(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, h: usize) { + $orig(dst, dstride, src, sstride, 8, h); + } + fn $func16(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, h: usize) { + $orig(dst, dstride, src, sstride, 16, h); + } + } +} + +luma_mc!(h264_mc00, h264_mc00_4, h264_mc00_8, h264_mc00_16); +luma_mc!(h264_mc01, h264_mc01_4, h264_mc01_8, h264_mc01_16); +luma_mc!(h264_mc02, h264_mc02_4, h264_mc02_8, h264_mc02_16); +luma_mc!(h264_mc03, h264_mc03_4, h264_mc03_8, h264_mc03_16); +luma_mc!(h264_mc10, h264_mc10_4, h264_mc10_8, h264_mc10_16); +luma_mc!(h264_mc11, h264_mc11_4, h264_mc11_8, h264_mc11_16); +luma_mc!(h264_mc12, h264_mc12_4, h264_mc12_8, h264_mc12_16); +luma_mc!(h264_mc13, h264_mc13_4, h264_mc13_8, h264_mc13_16); +luma_mc!(h264_mc20, h264_mc20_4, h264_mc20_8, h264_mc20_16); +luma_mc!(h264_mc21, h264_mc21_4, h264_mc21_8, h264_mc21_16); +luma_mc!(h264_mc22, h264_mc22_4, h264_mc22_8, h264_mc22_16); +luma_mc!(h264_mc23, h264_mc23_4, h264_mc23_8, h264_mc23_16); +luma_mc!(h264_mc30, h264_mc30_4, h264_mc30_8, h264_mc30_16); +luma_mc!(h264_mc31, h264_mc31_4, h264_mc31_8, h264_mc31_16); +luma_mc!(h264_mc32, h264_mc32_4, h264_mc32_8, h264_mc32_16); +luma_mc!(h264_mc33, h264_mc33_4, h264_mc33_8, h264_mc33_16); + +pub const H264_LUMA_INTERP: &[[super::MCFunc; 16]; 3] = &[ + [ + h264_mc00_4, h264_mc01_4, h264_mc02_4, h264_mc03_4, + h264_mc10_4, h264_mc11_4, h264_mc12_4, h264_mc13_4, + h264_mc20_4, h264_mc21_4, h264_mc22_4, h264_mc23_4, + h264_mc30_4, h264_mc31_4, h264_mc32_4, h264_mc33_4 + ], [ + h264_mc00_8, h264_mc01_8, h264_mc02_8, h264_mc03_8, + h264_mc10_8, h264_mc11_8, h264_mc12_8, h264_mc13_8, + h264_mc20_8, h264_mc21_8, h264_mc22_8, h264_mc23_8, + h264_mc30_8, h264_mc31_8, h264_mc32_8, h264_mc33_8 + ], [ + h264_mc00_16, h264_mc01_16, h264_mc02_16, h264_mc03_16, + h264_mc10_16, h264_mc11_16, h264_mc12_16, h264_mc13_16, + h264_mc20_16, h264_mc21_16, h264_mc22_16, h264_mc23_16, + h264_mc30_16, h264_mc31_16, h264_mc32_16, h264_mc33_16 + ] ]; + +impl super::RegisterSIMD for super::H264MC { + fn register_simd(&mut self) {} +}