From 9fa2a6f7efda3e404554b00363ff515a8f29986e Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Wed, 27 Mar 2024 16:19:18 +0100 Subject: [PATCH 1/2] hwdec-vaapi: detect AVX presence for the optimised version of copy_luma --- hwdec-vaapi/src/lib.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 { -- 2.30.2 From c84ea16daef963fe73d4b2e69b20b68524563ae0 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sat, 27 Apr 2024 13:45:28 +0200 Subject: [PATCH 2/2] use NAPacketiser::attach_stream() where appropriate --- sndplay/src/demux.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sndplay/src/demux.rs b/sndplay/src/demux.rs index c35167c..d050bce 100644 --- a/sndplay/src/demux.rs +++ b/sndplay/src/demux.rs @@ -97,7 +97,8 @@ impl<'a> DemuxerObject<'a> { let mut pkts = Vec::new(); for stream in dmx.get_streams() { if let Some(pcreate) = reg.pkt_reg.find_packetiser(stream.get_info().get_name()) { - let packetiser = (pcreate)(); + let mut packetiser = (pcreate)(); + packetiser.attach_stream(stream); pkts.push(Some(packetiser)); } else { pkts.push(None); -- 2.30.2