diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-06-12 16:27:00 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-06-12 16:35:13 +0200 |
commit | cbeeaf25932aac5923e075ae241fcc5287f7396a (patch) | |
tree | 73cca1c32b4e7ed3d6e31f871cb93fb7dbf284a6 /libswresample/x86/swresample_x86.c | |
parent | 52afa43691116bf35b6398ef3087f3a1508ef9a6 (diff) |
swr: mix_1_1 int16 MMX
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libswresample/x86/swresample_x86.c')
-rw-r--r-- | libswresample/x86/swresample_x86.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libswresample/x86/swresample_x86.c b/libswresample/x86/swresample_x86.c index 18c601f72e..ba0f1f131a 100644 --- a/libswresample/x86/swresample_x86.c +++ b/libswresample/x86/swresample_x86.c @@ -163,6 +163,21 @@ void swri_rematrix_init_x86(struct SwrContext *s){ s->mix_2_1_simd = NULL; if (s->midbuf.fmt == AV_SAMPLE_FMT_S16P){ + if(mm_flags & AV_CPU_FLAG_MMX) { + s->mix_1_1_simd = ff_mix_1_1_a_int16_mmx; + } + s->native_simd_matrix = av_mallocz(2 * num * sizeof(int16_t)); + for(i=0; i<nb_out; i++){ + int sh = 0; + for(j=0; j<nb_in; j++) + sh = FFMAX(sh, FFABS(((int*)s->native_matrix)[i * nb_in + j])); + sh = FFMAX(av_log2(sh) - 14, 0); + for(j=0; j<nb_in; j++) { + ((int16_t*)s->native_simd_matrix)[2*(i * nb_in + j)+1] = 15 - sh; + ((int16_t*)s->native_simd_matrix)[2*(i * nb_in + j)] = + ((((int*)s->native_matrix)[i * nb_in + j]) + (1<<sh>>1)) >> sh; + } + } } else if(s->midbuf.fmt == AV_SAMPLE_FMT_FLTP){ if(mm_flags & AV_CPU_FLAG_SSE) { s->mix_1_1_simd = ff_mix_1_1_a_float_sse; |