Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMuhammad Faiz <mfcc64@gmail.com>2016-06-12 01:19:20 +0300
committerMuhammad Faiz <mfcc64@gmail.com>2016-06-13 08:36:01 +0300
commitb8c6e5a6618337a82ea9d0bafb471eeecc51b919 (patch)
tree2e3f169f004747e59cde3043312446deec719711 /libswresample/resample_template.c
parent5ca44ebd99937b0038c25784570fa80d158b21fb (diff)
swresample: add exact_rational option
give high quality resampling as good as with linear_interp=on as fast as without linear_interp=on tested visually with ffplay ffplay -f lavfi "aevalsrc='sin(10000*t*t)', aresample=osr=48000, showcqt=gamma=5" ffplay -f lavfi "aevalsrc='sin(10000*t*t)', aresample=osr=48000:linear_interp=on, showcqt=gamma=5" ffplay -f lavfi "aevalsrc='sin(10000*t*t)', aresample=osr=48000:exact_rational=on, showcqt=gamma=5" slightly speed improvement for fair comparison with -cpuflags 0 audio.wav is ~ 1 hour 44100 stereo 16bit wav file ffmpeg -i audio.wav -af aresample=osr=48000 -f null - old new real 13.498s 13.121s user 13.364s 12.987s sys 0.131s 0.129s linear_interp=on old new real 23.035s 23.050s user 22.907s 22.917s sys 0.119s 0.125s exact_rational=on real 12.418s user 12.298s sys 0.114s possibility to decrease memory usage if soft compensation is ignored Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
Diffstat (limited to 'libswresample/resample_template.c')
-rw-r--r--libswresample/resample_template.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/libswresample/resample_template.c b/libswresample/resample_template.c
index d71efd63c0..1636f4e95d 100644
--- a/libswresample/resample_template.c
+++ b/libswresample/resample_template.c
@@ -92,9 +92,13 @@ static int RENAME(resample_common)(ResampleContext *c,
int dst_index;
int index= c->index;
int frac= c->frac;
- int sample_index = index >> c->phase_shift;
+ int sample_index = 0;
+
+ while (index >= c->phase_count) {
+ sample_index++;
+ index -= c->phase_count;
+ }
- index &= c->phase_mask;
for (dst_index = 0; dst_index < n; dst_index++) {
FELEM *filter = ((FELEM *) c->filter_bank) + c->filter_alloc * index;
@@ -111,8 +115,11 @@ static int RENAME(resample_common)(ResampleContext *c,
frac -= c->src_incr;
index++;
}
- sample_index += index >> c->phase_shift;
- index &= c->phase_mask;
+
+ while (index >= c->phase_count) {
+ sample_index++;
+ index -= c->phase_count;
+ }
}
if(update_ctx){
@@ -132,12 +139,16 @@ static int RENAME(resample_linear)(ResampleContext *c,
int dst_index;
int index= c->index;
int frac= c->frac;
- int sample_index = index >> c->phase_shift;
+ int sample_index = 0;
#if FILTER_SHIFT == 0
double inv_src_incr = 1.0 / c->src_incr;
#endif
- index &= c->phase_mask;
+ while (index >= c->phase_count) {
+ sample_index++;
+ index -= c->phase_count;
+ }
+
for (dst_index = 0; dst_index < n; dst_index++) {
FELEM *filter = ((FELEM *) c->filter_bank) + c->filter_alloc * index;
FELEM2 val=0, v2 = 0;
@@ -164,8 +175,11 @@ static int RENAME(resample_linear)(ResampleContext *c,
frac -= c->src_incr;
index++;
}
- sample_index += index >> c->phase_shift;
- index &= c->phase_mask;
+
+ while (index >= c->phase_count) {
+ sample_index++;
+ index -= c->phase_count;
+ }
}
if(update_ctx){