annotate ffmpeg/libavresample/x86/audio_convert_init.c @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>
yading@11 3 *
yading@11 4 * This file is part of Libav.
yading@11 5 *
yading@11 6 * Libav is free software; you can redistribute it and/or
yading@11 7 * modify it under the terms of the GNU Lesser General Public
yading@11 8 * License as published by the Free Software Foundation; either
yading@11 9 * version 2.1 of the License, or (at your option) any later version.
yading@11 10 *
yading@11 11 * Libav is distributed in the hope that it will be useful,
yading@11 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 14 * Lesser General Public License for more details.
yading@11 15 *
yading@11 16 * You should have received a copy of the GNU Lesser General Public
yading@11 17 * License along with Libav; if not, write to the Free Software
yading@11 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 19 */
yading@11 20
yading@11 21 #include "config.h"
yading@11 22 #include "libavutil/cpu.h"
yading@11 23 #include "libavutil/x86/cpu.h"
yading@11 24 #include "libavresample/audio_convert.h"
yading@11 25
yading@11 26 /* flat conversions */
yading@11 27
yading@11 28 void ff_conv_s16_to_s32_sse2(int16_t *dst, const int32_t *src, int len);
yading@11 29
yading@11 30 void ff_conv_s16_to_flt_sse2(float *dst, const int16_t *src, int len);
yading@11 31 void ff_conv_s16_to_flt_sse4(float *dst, const int16_t *src, int len);
yading@11 32
yading@11 33 void ff_conv_s32_to_s16_mmx (int16_t *dst, const int32_t *src, int len);
yading@11 34 void ff_conv_s32_to_s16_sse2(int16_t *dst, const int32_t *src, int len);
yading@11 35
yading@11 36 void ff_conv_s32_to_flt_sse2(float *dst, const int32_t *src, int len);
yading@11 37 void ff_conv_s32_to_flt_avx (float *dst, const int32_t *src, int len);
yading@11 38
yading@11 39 void ff_conv_flt_to_s16_sse2(int16_t *dst, const float *src, int len);
yading@11 40
yading@11 41 void ff_conv_flt_to_s32_sse2(int32_t *dst, const float *src, int len);
yading@11 42 void ff_conv_flt_to_s32_avx (int32_t *dst, const float *src, int len);
yading@11 43
yading@11 44 /* interleave conversions */
yading@11 45
yading@11 46 void ff_conv_s16p_to_s16_2ch_sse2(int16_t *dst, int16_t *const *src,
yading@11 47 int len, int channels);
yading@11 48 void ff_conv_s16p_to_s16_2ch_avx (int16_t *dst, int16_t *const *src,
yading@11 49 int len, int channels);
yading@11 50
yading@11 51 void ff_conv_s16p_to_s16_6ch_sse2(int16_t *dst, int16_t *const *src,
yading@11 52 int len, int channels);
yading@11 53 void ff_conv_s16p_to_s16_6ch_sse2slow(int16_t *dst, int16_t *const *src,
yading@11 54 int len, int channels);
yading@11 55 void ff_conv_s16p_to_s16_6ch_avx (int16_t *dst, int16_t *const *src,
yading@11 56 int len, int channels);
yading@11 57
yading@11 58 void ff_conv_s16p_to_flt_2ch_sse2(float *dst, int16_t *const *src,
yading@11 59 int len, int channels);
yading@11 60 void ff_conv_s16p_to_flt_2ch_avx (float *dst, int16_t *const *src,
yading@11 61 int len, int channels);
yading@11 62
yading@11 63 void ff_conv_s16p_to_flt_6ch_sse2 (float *dst, int16_t *const *src,
yading@11 64 int len, int channels);
yading@11 65 void ff_conv_s16p_to_flt_6ch_ssse3(float *dst, int16_t *const *src,
yading@11 66 int len, int channels);
yading@11 67 void ff_conv_s16p_to_flt_6ch_avx (float *dst, int16_t *const *src,
yading@11 68 int len, int channels);
yading@11 69
yading@11 70 void ff_conv_fltp_to_s16_2ch_sse2 (int16_t *dst, float *const *src,
yading@11 71 int len, int channels);
yading@11 72 void ff_conv_fltp_to_s16_2ch_ssse3(int16_t *dst, float *const *src,
yading@11 73 int len, int channels);
yading@11 74
yading@11 75 void ff_conv_fltp_to_s16_6ch_sse (int16_t *dst, float *const *src,
yading@11 76 int len, int channels);
yading@11 77 void ff_conv_fltp_to_s16_6ch_sse2(int16_t *dst, float *const *src,
yading@11 78 int len, int channels);
yading@11 79 void ff_conv_fltp_to_s16_6ch_avx (int16_t *dst, float *const *src,
yading@11 80 int len, int channels);
yading@11 81
yading@11 82 void ff_conv_fltp_to_flt_2ch_sse(float *dst, float *const *src, int len,
yading@11 83 int channels);
yading@11 84 void ff_conv_fltp_to_flt_2ch_avx(float *dst, float *const *src, int len,
yading@11 85 int channels);
yading@11 86
yading@11 87 void ff_conv_fltp_to_flt_6ch_mmx (float *dst, float *const *src, int len,
yading@11 88 int channels);
yading@11 89 void ff_conv_fltp_to_flt_6ch_sse4(float *dst, float *const *src, int len,
yading@11 90 int channels);
yading@11 91 void ff_conv_fltp_to_flt_6ch_avx (float *dst, float *const *src, int len,
yading@11 92 int channels);
yading@11 93
yading@11 94 /* deinterleave conversions */
yading@11 95
yading@11 96 void ff_conv_s16_to_s16p_2ch_sse2(int16_t *const *dst, int16_t *src,
yading@11 97 int len, int channels);
yading@11 98 void ff_conv_s16_to_s16p_2ch_ssse3(int16_t *const *dst, int16_t *src,
yading@11 99 int len, int channels);
yading@11 100 void ff_conv_s16_to_s16p_2ch_avx (int16_t *const *dst, int16_t *src,
yading@11 101 int len, int channels);
yading@11 102
yading@11 103 void ff_conv_s16_to_s16p_6ch_sse2 (int16_t *const *dst, int16_t *src,
yading@11 104 int len, int channels);
yading@11 105 void ff_conv_s16_to_s16p_6ch_ssse3(int16_t *const *dst, int16_t *src,
yading@11 106 int len, int channels);
yading@11 107 void ff_conv_s16_to_s16p_6ch_avx (int16_t *const *dst, int16_t *src,
yading@11 108 int len, int channels);
yading@11 109
yading@11 110 void ff_conv_s16_to_fltp_2ch_sse2(float *const *dst, int16_t *src,
yading@11 111 int len, int channels);
yading@11 112 void ff_conv_s16_to_fltp_2ch_avx (float *const *dst, int16_t *src,
yading@11 113 int len, int channels);
yading@11 114
yading@11 115 void ff_conv_s16_to_fltp_6ch_sse2 (float *const *dst, int16_t *src,
yading@11 116 int len, int channels);
yading@11 117 void ff_conv_s16_to_fltp_6ch_ssse3(float *const *dst, int16_t *src,
yading@11 118 int len, int channels);
yading@11 119 void ff_conv_s16_to_fltp_6ch_sse4 (float *const *dst, int16_t *src,
yading@11 120 int len, int channels);
yading@11 121 void ff_conv_s16_to_fltp_6ch_avx (float *const *dst, int16_t *src,
yading@11 122 int len, int channels);
yading@11 123
yading@11 124 void ff_conv_flt_to_s16p_2ch_sse2(int16_t *const *dst, float *src,
yading@11 125 int len, int channels);
yading@11 126 void ff_conv_flt_to_s16p_2ch_avx (int16_t *const *dst, float *src,
yading@11 127 int len, int channels);
yading@11 128
yading@11 129 void ff_conv_flt_to_s16p_6ch_sse2 (int16_t *const *dst, float *src,
yading@11 130 int len, int channels);
yading@11 131 void ff_conv_flt_to_s16p_6ch_ssse3(int16_t *const *dst, float *src,
yading@11 132 int len, int channels);
yading@11 133 void ff_conv_flt_to_s16p_6ch_avx (int16_t *const *dst, float *src,
yading@11 134 int len, int channels);
yading@11 135
yading@11 136 void ff_conv_flt_to_fltp_2ch_sse(float *const *dst, float *src, int len,
yading@11 137 int channels);
yading@11 138 void ff_conv_flt_to_fltp_2ch_avx(float *const *dst, float *src, int len,
yading@11 139 int channels);
yading@11 140
yading@11 141 void ff_conv_flt_to_fltp_6ch_sse2(float *const *dst, float *src, int len,
yading@11 142 int channels);
yading@11 143 void ff_conv_flt_to_fltp_6ch_avx (float *const *dst, float *src, int len,
yading@11 144 int channels);
yading@11 145
yading@11 146 av_cold void ff_audio_convert_init_x86(AudioConvert *ac)
yading@11 147 {
yading@11 148 int mm_flags = av_get_cpu_flags();
yading@11 149
yading@11 150 if (EXTERNAL_MMX(mm_flags)) {
yading@11 151 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32,
yading@11 152 0, 1, 8, "MMX", ff_conv_s32_to_s16_mmx);
yading@11 153 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
yading@11 154 6, 1, 4, "MMX", ff_conv_fltp_to_flt_6ch_mmx);
yading@11 155 }
yading@11 156 if (EXTERNAL_SSE(mm_flags)) {
yading@11 157 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP,
yading@11 158 6, 1, 2, "SSE", ff_conv_fltp_to_s16_6ch_sse);
yading@11 159 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
yading@11 160 2, 16, 8, "SSE", ff_conv_fltp_to_flt_2ch_sse);
yading@11 161 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_FLT,
yading@11 162 2, 16, 4, "SSE", ff_conv_flt_to_fltp_2ch_sse);
yading@11 163 }
yading@11 164 if (EXTERNAL_SSE2(mm_flags)) {
yading@11 165 if (!(mm_flags & AV_CPU_FLAG_SSE2SLOW)) {
yading@11 166 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32,
yading@11 167 0, 16, 16, "SSE2", ff_conv_s32_to_s16_sse2);
yading@11 168 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P,
yading@11 169 6, 16, 8, "SSE2", ff_conv_s16p_to_s16_6ch_sse2);
yading@11 170 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP,
yading@11 171 6, 16, 4, "SSE2", ff_conv_fltp_to_s16_6ch_sse2);
yading@11 172 } else {
yading@11 173 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P,
yading@11 174 6, 1, 4, "SSE2SLOW", ff_conv_s16p_to_s16_6ch_sse2slow);
yading@11 175 }
yading@11 176 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16,
yading@11 177 0, 16, 8, "SSE2", ff_conv_s16_to_s32_sse2);
yading@11 178 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16,
yading@11 179 0, 16, 8, "SSE2", ff_conv_s16_to_flt_sse2);
yading@11 180 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32,
yading@11 181 0, 16, 8, "SSE2", ff_conv_s32_to_flt_sse2);
yading@11 182 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT,
yading@11 183 0, 16, 16, "SSE2", ff_conv_flt_to_s16_sse2);
yading@11 184 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT,
yading@11 185 0, 16, 16, "SSE2", ff_conv_flt_to_s32_sse2);
yading@11 186 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P,
yading@11 187 2, 16, 16, "SSE2", ff_conv_s16p_to_s16_2ch_sse2);
yading@11 188 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16P,
yading@11 189 2, 16, 8, "SSE2", ff_conv_s16p_to_flt_2ch_sse2);
yading@11 190 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16P,
yading@11 191 6, 16, 4, "SSE2", ff_conv_s16p_to_flt_6ch_sse2);
yading@11 192 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP,
yading@11 193 2, 16, 4, "SSE2", ff_conv_fltp_to_s16_2ch_sse2);
yading@11 194 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16,
yading@11 195 2, 16, 8, "SSE2", ff_conv_s16_to_s16p_2ch_sse2);
yading@11 196 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16,
yading@11 197 6, 16, 4, "SSE2", ff_conv_s16_to_s16p_6ch_sse2);
yading@11 198 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16,
yading@11 199 2, 16, 8, "SSE2", ff_conv_s16_to_fltp_2ch_sse2);
yading@11 200 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16,
yading@11 201 6, 16, 4, "SSE2", ff_conv_s16_to_fltp_6ch_sse2);
yading@11 202 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_FLT,
yading@11 203 2, 16, 8, "SSE2", ff_conv_flt_to_s16p_2ch_sse2);
yading@11 204 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_FLT,
yading@11 205 6, 16, 4, "SSE2", ff_conv_flt_to_s16p_6ch_sse2);
yading@11 206 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_FLT,
yading@11 207 6, 16, 4, "SSE2", ff_conv_flt_to_fltp_6ch_sse2);
yading@11 208 }
yading@11 209 if (EXTERNAL_SSSE3(mm_flags)) {
yading@11 210 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16P,
yading@11 211 6, 16, 4, "SSSE3", ff_conv_s16p_to_flt_6ch_ssse3);
yading@11 212 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP,
yading@11 213 2, 16, 4, "SSSE3", ff_conv_fltp_to_s16_2ch_ssse3);
yading@11 214 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16,
yading@11 215 2, 16, 8, "SSSE3", ff_conv_s16_to_s16p_2ch_ssse3);
yading@11 216 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16,
yading@11 217 6, 16, 4, "SSSE3", ff_conv_s16_to_s16p_6ch_ssse3);
yading@11 218 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16,
yading@11 219 6, 16, 4, "SSSE3", ff_conv_s16_to_fltp_6ch_ssse3);
yading@11 220 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_FLT,
yading@11 221 6, 16, 4, "SSSE3", ff_conv_flt_to_s16p_6ch_ssse3);
yading@11 222 }
yading@11 223 if (EXTERNAL_SSE4(mm_flags)) {
yading@11 224 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16,
yading@11 225 0, 16, 8, "SSE4", ff_conv_s16_to_flt_sse4);
yading@11 226 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
yading@11 227 6, 16, 4, "SSE4", ff_conv_fltp_to_flt_6ch_sse4);
yading@11 228 }
yading@11 229 if (EXTERNAL_AVX(mm_flags)) {
yading@11 230 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32,
yading@11 231 0, 32, 16, "AVX", ff_conv_s32_to_flt_avx);
yading@11 232 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT,
yading@11 233 0, 32, 32, "AVX", ff_conv_flt_to_s32_avx);
yading@11 234 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P,
yading@11 235 2, 16, 16, "AVX", ff_conv_s16p_to_s16_2ch_avx);
yading@11 236 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P,
yading@11 237 6, 16, 8, "AVX", ff_conv_s16p_to_s16_6ch_avx);
yading@11 238 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16P,
yading@11 239 2, 16, 8, "AVX", ff_conv_s16p_to_flt_2ch_avx);
yading@11 240 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16P,
yading@11 241 6, 16, 4, "AVX", ff_conv_s16p_to_flt_6ch_avx);
yading@11 242 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP,
yading@11 243 6, 16, 4, "AVX", ff_conv_fltp_to_s16_6ch_avx);
yading@11 244 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
yading@11 245 6, 16, 4, "AVX", ff_conv_fltp_to_flt_6ch_avx);
yading@11 246 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16,
yading@11 247 2, 16, 8, "AVX", ff_conv_s16_to_s16p_2ch_avx);
yading@11 248 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16,
yading@11 249 6, 16, 4, "AVX", ff_conv_s16_to_s16p_6ch_avx);
yading@11 250 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16,
yading@11 251 2, 16, 8, "AVX", ff_conv_s16_to_fltp_2ch_avx);
yading@11 252 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16,
yading@11 253 6, 16, 4, "AVX", ff_conv_s16_to_fltp_6ch_avx);
yading@11 254 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_FLT,
yading@11 255 2, 16, 8, "AVX", ff_conv_flt_to_s16p_2ch_avx);
yading@11 256 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_FLT,
yading@11 257 6, 16, 4, "AVX", ff_conv_flt_to_s16p_6ch_avx);
yading@11 258 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_FLT,
yading@11 259 2, 16, 4, "AVX", ff_conv_flt_to_fltp_2ch_avx);
yading@11 260 ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_FLT,
yading@11 261 6, 16, 4, "AVX", ff_conv_flt_to_fltp_6ch_avx);
yading@11 262 }
yading@11 263 }