aboutsummaryrefslogtreecommitdiffstats
path: root/libavresample/x86/audio_mix.asm
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-04-25 22:01:59 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-04-25 23:17:41 +0200
commit3ead79eaa3f77451bc93cb842ed7b38c94858045 (patch)
tree4c90cceb47c62f96eaa518cd9ad109b539e9f1ad /libavresample/x86/audio_mix.asm
parentcab15f9db4ba6e390b25dd80d7305bb51b5583c4 (diff)
parent394dbde5484507f213768019623d016196ddad5f (diff)
downloadffmpeg-3ead79eaa3f77451bc93cb842ed7b38c94858045.tar.gz
Merge remote-tracking branch 'qatar/master'
* qatar/master: FATE: use updated reference for aac-latm_stereo_to_51 avconv: use libavresample Add libavresample FATE: avoid channel mixing in lavf-dv_fmt Conflicts: Changelog Makefile cmdutils.c configure doc/APIchanges ffmpeg.c tests/lavf-regression.sh tests/ref/lavf/dv_fmt tests/ref/seek/lavf_dv Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavresample/x86/audio_mix.asm')
-rw-r--r--libavresample/x86/audio_mix.asm64
1 files changed, 64 insertions, 0 deletions
diff --git a/libavresample/x86/audio_mix.asm b/libavresample/x86/audio_mix.asm
new file mode 100644
index 0000000000..ef30f02486
--- /dev/null
+++ b/libavresample/x86/audio_mix.asm
@@ -0,0 +1,64 @@
+;******************************************************************************
+;* x86 optimized channel mixing
+;* Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>
+;*
+;* This file is part of Libav.
+;*
+;* Libav is free software; you can redistribute it and/or
+;* modify it under the terms of the GNU Lesser General Public
+;* License as published by the Free Software Foundation; either
+;* version 2.1 of the License, or (at your option) any later version.
+;*
+;* Libav is distributed in the hope that it will be useful,
+;* but WITHOUT ANY WARRANTY; without even the implied warranty of
+;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;* Lesser General Public License for more details.
+;*
+;* You should have received a copy of the GNU Lesser General Public
+;* License along with Libav; if not, write to the Free Software
+;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+;******************************************************************************
+
+%include "x86inc.asm"
+%include "x86util.asm"
+
+SECTION_TEXT
+
+;-----------------------------------------------------------------------------
+; void ff_mix_2_to_1_fltp_flt(float **src, float **matrix, int len,
+; int out_ch, int in_ch);
+;-----------------------------------------------------------------------------
+
+%macro MIX_2_TO_1_FLTP_FLT 0
+cglobal mix_2_to_1_fltp_flt, 3,4,6, src, matrix, len, src1
+ mov src1q, [srcq+gprsize]
+ mov srcq, [srcq ]
+ sub src1q, srcq
+ mov matrixq, [matrixq ]
+ VBROADCASTSS m4, [matrixq ]
+ VBROADCASTSS m5, [matrixq+4]
+ ALIGN 16
+.loop:
+ mulps m0, m4, [srcq ]
+ mulps m1, m5, [srcq+src1q ]
+ mulps m2, m4, [srcq+ mmsize]
+ mulps m3, m5, [srcq+src1q+mmsize]
+ addps m0, m0, m1
+ addps m2, m2, m3
+ mova [srcq ], m0
+ mova [srcq+mmsize], m2
+ add srcq, mmsize*2
+ sub lend, mmsize*2/4
+ jg .loop
+%if mmsize == 32
+ vzeroupper
+ RET
+%else
+ REP_RET
+%endif
+%endmacro
+
+INIT_XMM sse
+MIX_2_TO_1_FLTP_FLT
+INIT_YMM avx
+MIX_2_TO_1_FLTP_FLT