diff options
author | Muhammad Faiz | 2016-11-24 15:02:07 +0700 |
---|---|---|
committer | Muhammad Faiz | 2016-11-25 03:22:04 +0700 |
commit | 06f94149c61fd6beff6fcd0fd7ccc34b77c948dc (patch) | |
tree | c4dbe9dd1b10334394dd98a8f63f7e986b82ba23 /libswresample/resample_dsp.c | |
parent | ebb4c783d025122a20aa6fb21ddf73b861da18ef (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_dsp.c')
-rw-r--r-- | libswresample/resample_dsp.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libswresample/resample_dsp.c b/libswresample/resample_dsp.c index 41369f3f8a..6ffbb87766 100644 --- a/libswresample/resample_dsp.c +++ b/libswresample/resample_dsp.c @@ -48,19 +48,23 @@ void swri_resample_dsp_init(ResampleContext *c) switch(c->format){ case AV_SAMPLE_FMT_S16P: c->dsp.resample_one = resample_one_int16; - c->dsp.resample = c->linear ? resample_linear_int16 : resample_common_int16; + c->dsp.resample_common = resample_common_int16; + c->dsp.resample_linear = resample_linear_int16; break; case AV_SAMPLE_FMT_S32P: c->dsp.resample_one = resample_one_int32; - c->dsp.resample = c->linear ? resample_linear_int32 : resample_common_int32; + c->dsp.resample_common = resample_common_int32; + c->dsp.resample_linear = resample_linear_int32; break; case AV_SAMPLE_FMT_FLTP: c->dsp.resample_one = resample_one_float; - c->dsp.resample = c->linear ? resample_linear_float : resample_common_float; + c->dsp.resample_common = resample_common_float; + c->dsp.resample_linear = resample_linear_float; break; case AV_SAMPLE_FMT_DBLP: c->dsp.resample_one = resample_one_double; - c->dsp.resample = c->linear ? resample_linear_double : resample_common_double; + c->dsp.resample_common = resample_common_double; + c->dsp.resample_linear = resample_linear_double; break; } |