lavr: add x86-optimized functions for mixing 2 to 1 s16p with float coeffs
[ffmpeg.git] / libavresample / x86 / audio_mix_init.c
index 8f8930f8364e458b4330d2e1f8026ba6c20722bd..947c3146ca86b375c4120c9fda9795db5b80e40c 100644 (file)
@@ -27,6 +27,11 @@ extern void ff_mix_2_to_1_fltp_flt_sse(float **src, float **matrix, int len,
 extern void ff_mix_2_to_1_fltp_flt_avx(float **src, float **matrix, int len,
                                        int out_ch, int in_ch);
 
+extern void ff_mix_2_to_1_s16p_flt_sse2(int16_t **src, float **matrix, int len,
+                                        int out_ch, int in_ch);
+extern void ff_mix_2_to_1_s16p_flt_sse4(int16_t **src, float **matrix, int len,
+                                        int out_ch, int in_ch);
+
 av_cold void ff_audio_mix_init_x86(AudioMix *am)
 {
 #if HAVE_YASM
@@ -36,6 +41,14 @@ av_cold void ff_audio_mix_init_x86(AudioMix *am)
         ff_audio_mix_set_func(am, AV_SAMPLE_FMT_FLTP, AV_MIX_COEFF_TYPE_FLT,
                               2, 1, 16, 8, "SSE", ff_mix_2_to_1_fltp_flt_sse);
     }
+    if (mm_flags & AV_CPU_FLAG_SSE2 && HAVE_SSE) {
+        ff_audio_mix_set_func(am, AV_SAMPLE_FMT_S16P, AV_MIX_COEFF_TYPE_FLT,
+                              2, 1, 16, 8, "SSE2", ff_mix_2_to_1_s16p_flt_sse2);
+    }
+    if (mm_flags & AV_CPU_FLAG_SSE4 && HAVE_SSE) {
+        ff_audio_mix_set_func(am, AV_SAMPLE_FMT_S16P, AV_MIX_COEFF_TYPE_FLT,
+                              2, 1, 16, 8, "SSE4", ff_mix_2_to_1_s16p_flt_sse4);
+    }
     if (mm_flags & AV_CPU_FLAG_AVX && HAVE_AVX) {
         ff_audio_mix_set_func(am, AV_SAMPLE_FMT_FLTP, AV_MIX_COEFF_TYPE_FLT,
                               2, 1, 32, 16, "AVX", ff_mix_2_to_1_fltp_flt_avx);