X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-itu%2Fsrc%2Fcodecs%2Fh264%2Fdsp%2Fmc%2Frelease.rs;h=7c902d6774574d6af95565a6fb7407640f83b7da;hb=932ae27bc58abef098a4be6f05fdd731d47a7653;hp=0a521d025e30fc3e2a0cc914cd2cc81bc00ab4d5;hpb=3c506c7a1c59ce83fea4fe8126ec05b098b7323d;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 0a521d0..7c902d6 100644 --- a/nihav-itu/src/codecs/h264/dsp/mc/release.rs +++ b/nihav-itu/src/codecs/h264/dsp/mc/release.rs @@ -97,24 +97,24 @@ fn h264_mc10(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usiz } fn h264_mc11(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; - let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; + let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; h264_mc02(&mut tmp, TMP_BUF_STRIDE, src, sstride, w, h); h264_mc20(&mut tmp2, TMP_BUF_STRIDE, src, sstride, w, h); mc_avg_tmp(dst, dstride, w, h, &tmp, &tmp2); } fn h264_mc12(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; - let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; + let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; h264_mc02(&mut tmp, TMP_BUF_STRIDE, src, sstride, w, h); h264_mc22(&mut tmp2, TMP_BUF_STRIDE, src, sstride, w, h); mc_avg_tmp(dst, dstride, w, h, &tmp, &tmp2); } fn h264_mc13(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; - let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; + let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; h264_mc02(&mut tmp, TMP_BUF_STRIDE, src, sstride, w, h); h264_mc20(&mut tmp2, TMP_BUF_STRIDE, &src[1..], sstride, w, h); mc_avg_tmp(dst, dstride, w, h, &tmp, &tmp2); @@ -125,15 +125,15 @@ fn h264_mc20(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usiz } fn h264_mc21(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; - let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; + let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; h264_mc22(&mut tmp, TMP_BUF_STRIDE, src, sstride, w, h); h264_mc20(&mut tmp2, TMP_BUF_STRIDE, src, sstride, w, h); mc_avg_tmp(dst, dstride, w, h, &tmp, &tmp2); } fn h264_mc22(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp: [i32; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp: [i32; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; unsafe { let mut src = src.as_ptr(); let mut dst = tmp.as_mut_ptr(); @@ -168,8 +168,8 @@ fn h264_mc22(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usiz } fn h264_mc23(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; - let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; + let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; h264_mc22(&mut tmp, TMP_BUF_STRIDE, src, sstride, w, h); h264_mc20(&mut tmp2, TMP_BUF_STRIDE, &src[1..], sstride, w, h); mc_avg_tmp(dst, dstride, w, h, &tmp, &tmp2); @@ -180,31 +180,31 @@ fn h264_mc30(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usiz } fn h264_mc31(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; - let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; + let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; h264_mc20(&mut tmp, TMP_BUF_STRIDE, src, sstride, w, h); h264_mc02(&mut tmp2, TMP_BUF_STRIDE, &src[sstride..], sstride, w, h); mc_avg_tmp(dst, dstride, w, h, &tmp, &tmp2); } fn h264_mc32(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; - let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; + let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; h264_mc22(&mut tmp, TMP_BUF_STRIDE, src, sstride, w, h); h264_mc02(&mut tmp2, TMP_BUF_STRIDE, &src[sstride..], sstride, w, h); mc_avg_tmp(dst, dstride, w, h, &tmp, &tmp2); } fn h264_mc33(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { - let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; - let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut tmp : [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; + let mut tmp2: [u8; TMP_BUF_STRIDE * 16] = unsafe { let arr = std::mem::MaybeUninit::uninit(); arr.assume_init() }; h264_mc20(&mut tmp, TMP_BUF_STRIDE, &src[1..], sstride, w, h); h264_mc02(&mut tmp2, TMP_BUF_STRIDE, &src[sstride..], sstride, w, h); mc_avg_tmp(dst, dstride, w, h, &tmp, &tmp2); } -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; @@ -274,6 +274,18 @@ pub fn chroma_interp(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, } } +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) {