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]

Reply via email to