---
libavresample/x86/audio_convert.asm | 45 ++++++++++++++++++++++++++++++++
libavresample/x86/audio_convert_init.c | 5 +++
2 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/libavresample/x86/audio_convert.asm
b/libavresample/x86/audio_convert.asm
index 8159188..a706b17 100644
--- a/libavresample/x86/audio_convert.asm
+++ b/libavresample/x86/audio_convert.asm
@@ -316,6 +316,51 @@ cglobal conv_s16p_to_s16_6ch, 2,8,6, dst, src, src1, src2,
src3, src4, src5, len
jg .loop
REP_RET
+;------------------------------------------------------------------------------
+; void ff_conv_s16p_to_flt_2ch(float *dst, int16_t *const *src, int len,
+; int channels);
+;------------------------------------------------------------------------------
+
+INIT_XMM sse2
+cglobal conv_s16p_to_flt_2ch, 3,4,6, dst, src0, len, src1
+ lea lenq, [2*lend]
+ mov src1q, [src0q+gprsize]
+ mov src0q, [src0q ]
+ lea dstq, [dstq+4*lenq]
+ add src0q, lenq
+ add src1q, lenq
+ neg lenq
+ mova m5, [pf_s32_inv_scale]
+ ALIGN 16
+.loop:
+ mova m2, [src0q+lenq]
+ mova m3, [src1q+lenq]
+ punpcklwd m0, m2, m3
+ punpckhwd m1, m2, m3
+ pxor m2, m2
+ pxor m3, m3
+ punpcklwd m2, m0
+ punpckhwd m3, m0
+ pxor m0, m0
+ pxor m4, m4
+ punpcklwd m0, m1
+ punpckhwd m4, m1
+ cvtdq2ps m2, m2
+ cvtdq2ps m3, m3
+ cvtdq2ps m0, m0
+ cvtdq2ps m4, m4
+ mulps m2, m5
+ mulps m3, m5
+ mulps m0, m5
+ mulps m4, m5
+ mova [dstq+4*lenq ], m2
+ mova [dstq+4*lenq+ mmsize], m3
+ mova [dstq+4*lenq+2*mmsize], m0
+ mova [dstq+4*lenq+3*mmsize], m4
+ add lenq, mmsize
+ js .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 e4708de..93e2b99 100644
--- a/libavresample/x86/audio_convert_init.c
+++ b/libavresample/x86/audio_convert_init.c
@@ -48,6 +48,9 @@ extern void ff_conv_s16p_to_s16_2ch_sse2(int16_t *dst,
int16_t *const *src,
extern void ff_conv_s16p_to_s16_6ch_sse2(int16_t *dst, int16_t *const *src,
int len, int channels);
+extern void ff_conv_s16p_to_flt_2ch_sse2(float *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,
@@ -85,6 +88,8 @@ av_cold void ff_audio_convert_init_x86(AudioConvert *ac)
2, 16, 16, "SSE2",
ff_conv_s16p_to_s16_2ch_sse2);
ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P,
6, 16, 8, "SSE2",
ff_conv_s16p_to_s16_6ch_sse2);
+ ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16P,
+ 2, 16, 8, "SSE2",
ff_conv_s16p_to_flt_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