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/resample.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'libswresample/resample.c') diff --git a/libswresample/resample.c b/libswresample/resample.c index 8635bf1bed..e65a57a877 100644 --- a/libswresample/resample.c +++ b/libswresample/resample.c @@ -496,7 +496,12 @@ static int swri_resample(ResampleContext *c, dst_size = FFMIN(dst_size, delta_n); if (dst_size > 0) { - *consumed = c->dsp.resample(c, dst, src, dst_size, update_ctx); + /* resample_linear and resample_common should have same behavior + * when frac and dst_incr_mod are zero */ + if (c->linear && (c->frac || c->dst_incr_mod)) + *consumed = c->dsp.resample_linear(c, dst, src, dst_size, update_ctx); + else + *consumed = c->dsp.resample_common(c, dst, src, dst_size, update_ctx); } else { *consumed = 0; } -- cgit v1.2.3