PR #23040 opened by traskinplaskin URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23040 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23040.patch
Do not clear the generic same-format memcpy converter in architecture-specific audio conversion init paths when no replacement converter is selected. This keeps same-format audio conversion on the bulk-copy path instead of falling back to scalar per-sample conversion. >From c350966a94804381166db4fa6c36fe1707586bf3 Mon Sep 17 00:00:00 2001 From: traskinplaskin <[email protected]> Date: Thu, 7 May 2026 12:48:22 +0000 Subject: [PATCH] Apply patch --- libswresample/aarch64/audio_convert_init.c | 13 +++++++------ libswresample/arm/audio_convert_init.c | 13 +++++++------ libswresample/x86/audio_convert_init.c | 4 ---- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/libswresample/aarch64/audio_convert_init.c b/libswresample/aarch64/audio_convert_init.c index 60e24adb1c..70c9163c49 100644 --- a/libswresample/aarch64/audio_convert_init.c +++ b/libswresample/aarch64/audio_convert_init.c @@ -51,17 +51,18 @@ av_cold void swri_audio_convert_init_aarch64(struct AudioConvert *ac, int channels) { int cpu_flags = av_get_cpu_flags(); - - ac->simd_f= NULL; + simd_func_type *simd_f = NULL; if (have_neon(cpu_flags)) { if(out_fmt == AV_SAMPLE_FMT_S16 && in_fmt == AV_SAMPLE_FMT_FLT || out_fmt == AV_SAMPLE_FMT_S16P && in_fmt == AV_SAMPLE_FMT_FLTP) - ac->simd_f = conv_flt_to_s16_neon; + simd_f = conv_flt_to_s16_neon; if(out_fmt == AV_SAMPLE_FMT_S16 && in_fmt == AV_SAMPLE_FMT_FLTP && channels == 2) - ac->simd_f = conv_fltp_to_s16_2ch_neon; + simd_f = conv_fltp_to_s16_2ch_neon; if(out_fmt == AV_SAMPLE_FMT_S16 && in_fmt == AV_SAMPLE_FMT_FLTP && channels > 2) - ac->simd_f = conv_fltp_to_s16_nch_neon; - if(ac->simd_f) + simd_f = conv_fltp_to_s16_nch_neon; + if (simd_f) { + ac->simd_f = simd_f; ac->in_simd_align_mask = ac->out_simd_align_mask = 15; + } } } diff --git a/libswresample/arm/audio_convert_init.c b/libswresample/arm/audio_convert_init.c index ec9e62ede7..6c20310513 100644 --- a/libswresample/arm/audio_convert_init.c +++ b/libswresample/arm/audio_convert_init.c @@ -51,17 +51,18 @@ av_cold void swri_audio_convert_init_arm(struct AudioConvert *ac, int channels) { int cpu_flags = av_get_cpu_flags(); - - ac->simd_f= NULL; + simd_func_type *simd_f = NULL; if (have_neon(cpu_flags)) { if(out_fmt == AV_SAMPLE_FMT_S16 && in_fmt == AV_SAMPLE_FMT_FLT || out_fmt == AV_SAMPLE_FMT_S16P && in_fmt == AV_SAMPLE_FMT_FLTP) - ac->simd_f = conv_flt_to_s16_neon; + simd_f = conv_flt_to_s16_neon; if(out_fmt == AV_SAMPLE_FMT_S16 && in_fmt == AV_SAMPLE_FMT_FLTP && channels == 2) - ac->simd_f = conv_fltp_to_s16_2ch_neon; + simd_f = conv_fltp_to_s16_2ch_neon; if(out_fmt == AV_SAMPLE_FMT_S16 && in_fmt == AV_SAMPLE_FMT_FLTP && channels > 2) - ac->simd_f = conv_fltp_to_s16_nch_neon; - if(ac->simd_f) + simd_f = conv_fltp_to_s16_nch_neon; + if (simd_f) { + ac->simd_f = simd_f; ac->in_simd_align_mask = ac->out_simd_align_mask = 15; + } } } diff --git a/libswresample/x86/audio_convert_init.c b/libswresample/x86/audio_convert_init.c index f6d36f9ca6..4e692b0123 100644 --- a/libswresample/x86/audio_convert_init.c +++ b/libswresample/x86/audio_convert_init.c @@ -40,10 +40,6 @@ av_cold void swri_audio_convert_init_x86(struct AudioConvert *ac, int channels){ int mm_flags = av_get_cpu_flags(); - ac->simd_f= NULL; - -//FIXME add memcpy case - #define MULTI_CAPS_FUNC(flag, cap) \ if (EXTERNAL_##flag(mm_flags)) {\ if( out_fmt == AV_SAMPLE_FMT_S32 && in_fmt == AV_SAMPLE_FMT_S16 || out_fmt == AV_SAMPLE_FMT_S32P && in_fmt == AV_SAMPLE_FMT_S16P)\ -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
