---
libavresample/x86/audio_convert.asm | 28 ++++++++++++++++++++++++++++
libavresample/x86/audio_convert_init.c | 9 +++++++++
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/libavresample/x86/audio_convert.asm
b/libavresample/x86/audio_convert.asm
index 7b3cc22..c14f4ef 100644
--- a/libavresample/x86/audio_convert.asm
+++ b/libavresample/x86/audio_convert.asm
@@ -233,6 +233,34 @@ INIT_YMM avx
CONV_FLT_TO_S32
%endif
+;------------------------------------------------------------------------------
+; void ff_conv_s16p_to_s16_2ch(int16_t *dst, int16_t *const *src, int len,
+; int channels);
+;------------------------------------------------------------------------------
+
+INIT_XMM sse2
+cglobal conv_s16p_to_s16_2ch, 3,4,5, dst, src, len, src1
+ mov src1q, [srcq+gprsize]
+ mov srcq, [srcq ]
+ sub src1q, srcq
+ ALIGN 16
+.loop
+ mova m0, [srcq ]
+ mova m1, [srcq+src1q ]
+ mova m2, [srcq +mmsize]
+ mova m3, [srcq+src1q+mmsize]
+ SBUTTERFLY2 wd, 0, 1, 4
+ SBUTTERFLY2 wd, 2, 3, 4
+ mova [dstq ], m0
+ mova [dstq+1*mmsize], m1
+ mova [dstq+2*mmsize], m2
+ mova [dstq+3*mmsize], m3
+ add srcq, mmsize*2
+ add dstq, mmsize*4
+ sub lend, mmsize
+ jg .loop
+ REP_RET
+
;-----------------------------------------------------------------------------
; void ff_conv_fltp_to_flt_6ch(float *dst, float *const *src, int len,
; int channels);
diff --git a/libavresample/x86/audio_convert_init.c
b/libavresample/x86/audio_convert_init.c
index 2de4970..8c75f74 100644
--- a/libavresample/x86/audio_convert_init.c
+++ b/libavresample/x86/audio_convert_init.c
@@ -22,6 +22,8 @@
#include "libavutil/cpu.h"
#include "libavresample/audio_convert.h"
+/* flat conversions */
+
extern void ff_conv_s16_to_s32_sse2(int16_t *dst, const int32_t *src, int len);
extern void ff_conv_s16_to_flt_sse2(float *dst, const int16_t *src, int len);
@@ -38,6 +40,11 @@ extern void ff_conv_flt_to_s16_sse2(int16_t *dst, const
float *src, int len);
extern void ff_conv_flt_to_s32_sse2(int32_t *dst, const float *src, int len);
extern void ff_conv_flt_to_s32_avx (int32_t *dst, const float *src, int len);
+/* interleave conversions */
+
+extern void ff_conv_s16p_to_s16_2ch_sse2(int16_t *dst, int16_t *const *src,
+ int len, int channels);
+
extern void ff_conv_fltp_to_flt_6ch_mmx (float *dst, float *const *src, int
len,
int channels);
extern void ff_conv_fltp_to_flt_6ch_sse4(float *dst, float *const *src, int
len,
@@ -71,6 +78,8 @@ av_cold void ff_audio_convert_init_x86(AudioConvert *ac)
0, 16, 16, "SSE2", ff_conv_flt_to_s16_sse2);
ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT,
0, 16, 16, "SSE2", ff_conv_flt_to_s32_sse2);
+ ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P,
+ 2, 16, 16, "SSE2",
ff_conv_s16p_to_s16_2ch_sse2);
}
if (mm_flags & AV_CPU_FLAG_SSE4 && HAVE_SSE) {
ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16,
--
1.7.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel