diff options
author | James Almer <jamrial@gmail.com> | 2014-07-02 22:16:48 -0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-07-04 01:37:41 +0200 |
commit | 857cd1f33bcf86005529af2a77f861f884327be5 (patch) | |
tree | 519ce6e41cfa927c419131481d509c85b6f20eec /libswresample/x86 | |
parent | 5c65aed7fdfba6d5488bae4b50b9df8829587818 (diff) | |
download | ffmpeg-857cd1f33bcf86005529af2a77f861f884327be5.tar.gz |
swr: initialize only the necessary resample dsp functions
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libswresample/x86')
-rw-r--r-- | libswresample/x86/resample_x86_dsp.c | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/libswresample/x86/resample_x86_dsp.c b/libswresample/x86/resample_x86_dsp.c index e32b6ee341..00eb9e14a1 100644 --- a/libswresample/x86/resample_x86_dsp.c +++ b/libswresample/x86/resample_x86_dsp.c @@ -28,10 +28,10 @@ #include "libswresample/resample.h" #define RESAMPLE_FUNCS(type, opt) \ -int ff_resample_common_##type##_##opt(ResampleContext *c, uint8_t *dst, \ - const uint8_t *src, int sz, int upd); \ -int ff_resample_linear_##type##_##opt(ResampleContext *c, uint8_t *dst, \ - const uint8_t *src, int sz, int upd) +int ff_resample_common_##type##_##opt(ResampleContext *c, void *dst, \ + const void *src, int sz, int upd); \ +int ff_resample_linear_##type##_##opt(ResampleContext *c, void *dst, \ + const void *src, int sz, int upd) RESAMPLE_FUNCS(int16, mmxext); RESAMPLE_FUNCS(int16, sse2); @@ -46,36 +46,44 @@ void swri_resample_dsp_x86_init(ResampleContext *c) { int av_unused mm_flags = av_get_cpu_flags(); -#define FNIDX(fmt) (AV_SAMPLE_FMT_##fmt - AV_SAMPLE_FMT_S16P) - if (ARCH_X86_32 && HAVE_MMXEXT_EXTERNAL && mm_flags & AV_CPU_FLAG_MMX2) { - c->dsp.resample_common[FNIDX(S16P)] = ff_resample_common_int16_mmxext; - c->dsp.resample_linear[FNIDX(S16P)] = ff_resample_linear_int16_mmxext; - } - if (HAVE_SSE_EXTERNAL && mm_flags & AV_CPU_FLAG_SSE) { - c->dsp.resample_common[FNIDX(FLTP)] = ff_resample_common_float_sse; - c->dsp.resample_linear[FNIDX(FLTP)] = ff_resample_linear_float_sse; - } - if (HAVE_SSE2_EXTERNAL && mm_flags & AV_CPU_FLAG_SSE2) { - c->dsp.resample_common[FNIDX(S16P)] = ff_resample_common_int16_sse2; - c->dsp.resample_linear[FNIDX(S16P)] = ff_resample_linear_int16_sse2; - - c->dsp.resample_common[FNIDX(DBLP)] = ff_resample_common_double_sse2; - c->dsp.resample_linear[FNIDX(DBLP)] = ff_resample_linear_double_sse2; - } - if (HAVE_AVX_EXTERNAL && mm_flags & AV_CPU_FLAG_AVX) { - c->dsp.resample_common[FNIDX(FLTP)] = ff_resample_common_float_avx; - c->dsp.resample_linear[FNIDX(FLTP)] = ff_resample_linear_float_avx; - } - if (HAVE_FMA3_EXTERNAL && mm_flags & AV_CPU_FLAG_FMA3) { - c->dsp.resample_common[FNIDX(FLTP)] = ff_resample_common_float_fma3; - c->dsp.resample_linear[FNIDX(FLTP)] = ff_resample_linear_float_fma3; - } - if (HAVE_FMA4_EXTERNAL && mm_flags & AV_CPU_FLAG_FMA4) { - c->dsp.resample_common[FNIDX(FLTP)] = ff_resample_common_float_fma4; - c->dsp.resample_linear[FNIDX(FLTP)] = ff_resample_linear_float_fma4; - } - if (HAVE_XOP_EXTERNAL && mm_flags & AV_CPU_FLAG_XOP) { - c->dsp.resample_common[FNIDX(S16P)] = ff_resample_common_int16_xop; - c->dsp.resample_linear[FNIDX(S16P)] = ff_resample_linear_int16_xop; + switch(c->format){ + case AV_SAMPLE_FMT_S16P: + if (ARCH_X86_32 && HAVE_MMXEXT_EXTERNAL && mm_flags & AV_CPU_FLAG_MMX2) { + c->dsp.resample = c->linear ? ff_resample_linear_int16_mmxext + : ff_resample_common_int16_mmxext; + } + if (HAVE_SSE2_EXTERNAL && mm_flags & AV_CPU_FLAG_SSE2) { + c->dsp.resample = c->linear ? ff_resample_linear_int16_sse2 + : ff_resample_common_int16_sse2; + } + if (HAVE_XOP_EXTERNAL && mm_flags & AV_CPU_FLAG_XOP) { + c->dsp.resample = c->linear ? ff_resample_linear_int16_xop + : ff_resample_common_int16_xop; + } + break; + case AV_SAMPLE_FMT_FLTP: + if (HAVE_SSE_EXTERNAL && mm_flags & AV_CPU_FLAG_SSE) { + c->dsp.resample = c->linear ? ff_resample_linear_float_sse + : ff_resample_common_float_sse; + } + if (HAVE_AVX_EXTERNAL && mm_flags & AV_CPU_FLAG_AVX) { + c->dsp.resample = c->linear ? ff_resample_linear_float_avx + : ff_resample_common_float_avx; + } + if (HAVE_FMA3_EXTERNAL && mm_flags & AV_CPU_FLAG_FMA3) { + c->dsp.resample = c->linear ? ff_resample_linear_float_fma3 + : ff_resample_common_float_fma3; + } + if (HAVE_FMA4_EXTERNAL && mm_flags & AV_CPU_FLAG_FMA4) { + c->dsp.resample = c->linear ? ff_resample_linear_float_fma4 + : ff_resample_common_float_fma4; + } + break; + case AV_SAMPLE_FMT_DBLP: + if (HAVE_SSE2_EXTERNAL && mm_flags & AV_CPU_FLAG_SSE2) { + c->dsp.resample = c->linear ? ff_resample_linear_double_sse2 + : ff_resample_common_double_sse2; + } + break; } } |