summaryrefslogtreecommitdiff
path: root/libswresample/resample.c
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/resample.c
parentebb4c783d025122a20aa6fb21ddf73b861da18ef (diff)
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/resample.c')
-rw-r--r--libswresample/resample.c7
1 files changed, 6 insertions, 1 deletions
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;
}