From 06f94149c61fd6beff6fcd0fd7ccc34b77c948dc Mon Sep 17 00:00:00 2001 From: Muhammad Faiz Date: Thu, 24 Nov 2016 15:02:07 +0700 Subject: 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 Signed-off-by: Muhammad Faiz --- libswresample/x86/resample_init.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'libswresample/x86') 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; } -- cgit v1.2.3