From: Kostya Shishkov Date: Wed, 27 Mar 2024 15:19:18 +0000 (+0100) Subject: hwdec-vaapi: detect AVX presence for the optimised version of copy_luma X-Git-Url: https://git.nihav.org/?p=nihav-player.git;a=commitdiff_plain;h=9fa2a6f7efda3e404554b00363ff515a8f29986e hwdec-vaapi: detect AVX presence for the optimised version of copy_luma --- diff --git a/hwdec-vaapi/src/lib.rs b/hwdec-vaapi/src/lib.rs index 40e14f4..cdc8b08 100644 --- a/hwdec-vaapi/src/lib.rs +++ b/hwdec-vaapi/src/lib.rs @@ -283,8 +283,7 @@ pub struct VaapiH264Decoder { tb_den: u32, } -#[cfg(not(target_arch="x86_64"))] -fn copy_luma(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { +fn copy_luma_default(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { for (dline, sline) in dst.chunks_mut(dstride) .zip(src.chunks(sstride)) .take(h) { @@ -292,6 +291,10 @@ fn copy_luma(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usiz } } #[cfg(not(target_arch="x86_64"))] +fn copy_luma(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { + copy_luma_default(dst, dstride, src, sstride, w, h); +} +#[cfg(not(target_arch="x86_64"))] fn deint_chroma(frm: NASimpleVideoFrame, src: &[u8], sstride: usize) { let mut uoff = frm.offset[1]; let mut voff = frm.offset[2]; @@ -309,6 +312,10 @@ fn deint_chroma(frm: NASimpleVideoFrame, src: &[u8], sstride: usize) { use std::arch::asm; #[cfg(target_arch="x86_64")] fn copy_luma(dst: &mut [u8], dstride: usize, src: &[u8], sstride: usize, w: usize, h: usize) { + if !is_x86_feature_detected!("avx") { + copy_luma_default(dst, dstride, src, sstride, w, h); + return; + } if dst.as_ptr().align_offset(32) == 0 && src.as_ptr().align_offset(32) == 0 && (w % 64) == 0 && ((dstride | sstride) % 32) == 0 { unsafe {