aboutsummaryrefslogtreecommitdiffstats
path: root/libswresample/x86
diff options
context:
space:
mode:
authorMuhammad Faiz <mfcc64@gmail.com>2016-11-24 15:02:07 +0700
committerMuhammad Faiz <mfcc64@gmail.com>2016-11-25 03:22:04 +0700
commit06f94149c61fd6beff6fcd0fd7ccc34b77c948dc (patch)
treec4dbe9dd1b10334394dd98a8f63f7e986b82ba23 /libswresample/x86
parentebb4c783d025122a20aa6fb21ddf73b861da18ef (diff)
downloadffmpeg-06f94149c61fd6beff6fcd0fd7ccc34b77c948dc.tar.gz
swresample/resample: optimize exact_rational=on:linear_interp=on case
separate dsp.resample to dsp.resample_common and dsp.resample_linear and choose to call faster resample_common even when linear_interp=on when c->frac and c->dst_incr_mod are both zero speed up resampling when exact_rational and linear_interp are both enabled because exact_rational force c->frac and c->dst_incr_mod to be zero when soft compensation does not happen benchmark on exact_rational=on:linear_interp=on old new real 8.432s 5.097s user 7.679s 4.989s sys 0.125s 0.107s Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
Diffstat (limited to 'libswresample/x86')
-rw-r--r--libswresample/x86/resample_init.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/libswresample/x86/resample_init.c b/libswresample/x86/resample_init.c
index 9d7d5cf89e..e515762b98 100644
--- a/libswresample/x86/resample_init.c
+++ b/libswresample/x86/resample_init.c
@@ -50,40 +50,40 @@ av_cold void swri_resample_dsp_x86_init(ResampleContext *c)
switch(c->format){
case AV_SAMPLE_FMT_S16P:
if (ARCH_X86_32 && EXTERNAL_MMXEXT(mm_flags)) {
- c->dsp.resample = c->linear ? ff_resample_linear_int16_mmxext
- : ff_resample_common_int16_mmxext;
+ c->dsp.resample_linear = ff_resample_linear_int16_mmxext;
+ c->dsp.resample_common = ff_resample_common_int16_mmxext;
}
if (EXTERNAL_SSE2(mm_flags)) {
- c->dsp.resample = c->linear ? ff_resample_linear_int16_sse2
- : ff_resample_common_int16_sse2;
+ c->dsp.resample_linear = ff_resample_linear_int16_sse2;
+ c->dsp.resample_common = ff_resample_common_int16_sse2;
}
if (EXTERNAL_XOP(mm_flags)) {
- c->dsp.resample = c->linear ? ff_resample_linear_int16_xop
- : ff_resample_common_int16_xop;
+ c->dsp.resample_linear = ff_resample_linear_int16_xop;
+ c->dsp.resample_common = ff_resample_common_int16_xop;
}
break;
case AV_SAMPLE_FMT_FLTP:
if (EXTERNAL_SSE(mm_flags)) {
- c->dsp.resample = c->linear ? ff_resample_linear_float_sse
- : ff_resample_common_float_sse;
+ c->dsp.resample_linear = ff_resample_linear_float_sse;
+ c->dsp.resample_common = ff_resample_common_float_sse;
}
if (EXTERNAL_AVX_FAST(mm_flags)) {
- c->dsp.resample = c->linear ? ff_resample_linear_float_avx
- : ff_resample_common_float_avx;
+ c->dsp.resample_linear = ff_resample_linear_float_avx;
+ c->dsp.resample_common = ff_resample_common_float_avx;
}
if (EXTERNAL_FMA3_FAST(mm_flags)) {
- c->dsp.resample = c->linear ? ff_resample_linear_float_fma3
- : ff_resample_common_float_fma3;
+ c->dsp.resample_linear = ff_resample_linear_float_fma3;
+ c->dsp.resample_common = ff_resample_common_float_fma3;
}
if (EXTERNAL_FMA4(mm_flags)) {
- c->dsp.resample = c->linear ? ff_resample_linear_float_fma4
- : ff_resample_common_float_fma4;
+ c->dsp.resample_linear = ff_resample_linear_float_fma4;
+ c->dsp.resample_common = ff_resample_common_float_fma4;
}
break;
case AV_SAMPLE_FMT_DBLP:
if (EXTERNAL_SSE2(mm_flags)) {
- c->dsp.resample = c->linear ? ff_resample_linear_double_sse2
- : ff_resample_common_double_sse2;
+ c->dsp.resample_linear = ff_resample_linear_double_sse2;
+ c->dsp.resample_common = ff_resample_common_double_sse2;
}
break;
}