[FFmpeg-devel,2/2] swresample: enable exact_rational and linear_interp by default

Submitted by Muhammad Faiz on Nov. 25, 2016, 10:17 a.m.

Details

Message ID CAJsO9v5zEZYU4JqO9XdAvvMy2WQ-U-HnU_5hPJopi_ewkhuCeA@mail.gmail.com
State New
Headers show

Commit Message

Muhammad Faiz Nov. 25, 2016, 10:17 a.m.
have problem with git send-email, so I attach the patch

Patch hide | download patch | download mbox

From 4b77fcc028b080ccf7887f6b3fb5830960acf8c1 Mon Sep 17 00:00:00 2001
From: Muhammad Faiz <mfcc64@gmail.com>
Date: Fri, 25 Nov 2016 16:48:22 +0700
Subject: [PATCH 2/2] swresample: enable exact_rational and linear_interp by
 default

exact_rational gives better quality without sacrifice speed.
linear_interp gives better quality with slower speed.

when both are enabled, resampler will automatically disable
linear_interp when it is not required (from commit 06f94149c6)

there are two conditions that makes resampler cannot disable linear_interp:
first, when exact_rational requires phase_count larger than 1 << phase_shit.
in this case, exact_rational is silently ignored.
second, when soft compensation happens. in this case, resampler modify
c->dst_incr that may be indivisible by c->src_incr.
at that both cases, the quality is preserved but speed is slower.

modify resampler fate command line option, also add more sample rates
for the default.
also modify fate refs that depend on swresample.

Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
---
 doc/resampler.texi           |   4 +-
 libswresample/options.c      |   4 +-
 libswresample/version.h      |   2 +-
 tests/fate/libswresample.mak | 191 ++++++++++++++++++++++++++++++++++++++++---
 tests/ref/acodec/s302m       |   6 +-
 tests/ref/lavf/dv_fmt        |   8 +-
 tests/ref/lavf/gxf           |   8 +-
 tests/ref/lavf/mxf           |  12 +--
 8 files changed, 203 insertions(+), 32 deletions(-)

diff --git a/doc/resampler.texi b/doc/resampler.texi
index d72677c..23530f8 100644
--- a/doc/resampler.texi
+++ b/doc/resampler.texi
@@ -132,12 +132,12 @@  For swr only, set resampling phase shift, default value is 10, and must be in
 the interval [0,30].
 
 @item linear_interp
-Use linear interpolation if set to 1, default value is 0.
+Use linear interpolation if set to 1 (the default).
 
 @item exact_rational
 For swr only, when enabled, try to use exact phase_count based on input and
 output sample rate. However, if it is larger than @code{1 << phase_shift},
-the phase_count will be @code{1 << phase_shift} as fallback. Default is disabled.
+the phase_count will be @code{1 << phase_shift} as fallback. Default is enabled.
 
 @item cutoff
 Set cutoff frequency (swr: 6dB point; soxr: 0dB point) ratio; must be a float
diff --git a/libswresample/options.c b/libswresample/options.c
index 4abf5e0..00d4f7c 100644
--- a/libswresample/options.c
+++ b/libswresample/options.c
@@ -84,8 +84,8 @@  static const AVOption options[]={
 
 {"filter_size"          , "set swr resampling filter size", OFFSET(filter_size)  , AV_OPT_TYPE_INT  , {.i64=32                    }, 0      , INT_MAX   , PARAM },
 {"phase_shift"          , "set swr resampling phase shift", OFFSET(phase_shift)  , AV_OPT_TYPE_INT  , {.i64=10                    }, 0      , 24        , PARAM },
-{"linear_interp"        , "enable linear interpolation" , OFFSET(linear_interp)  , AV_OPT_TYPE_BOOL , {.i64=0                     }, 0      , 1         , PARAM },
-{"exact_rational"       , "enable exact rational"       , OFFSET(exact_rational) , AV_OPT_TYPE_BOOL , {.i64=0                     }, 0      , 1         , PARAM },
+{"linear_interp"        , "enable linear interpolation" , OFFSET(linear_interp)  , AV_OPT_TYPE_BOOL , {.i64=1                     }, 0      , 1         , PARAM },
+{"exact_rational"       , "enable exact rational"       , OFFSET(exact_rational) , AV_OPT_TYPE_BOOL , {.i64=1                     }, 0      , 1         , PARAM },
 {"cutoff"               , "set cutoff frequency ratio"  , OFFSET(cutoff)         , AV_OPT_TYPE_DOUBLE,{.dbl=0.                    }, 0      , 1         , PARAM },
 
 /* duplicate option in order to work with avconv */
diff --git a/libswresample/version.h b/libswresample/version.h
index 37d44dd..3a5c771 100644
--- a/libswresample/version.h
+++ b/libswresample/version.h
@@ -30,7 +30,7 @@ 
 
 #define LIBSWRESAMPLE_VERSION_MAJOR   2
 #define LIBSWRESAMPLE_VERSION_MINOR   4
-#define LIBSWRESAMPLE_VERSION_MICRO 100
+#define LIBSWRESAMPLE_VERSION_MICRO 101
 
 #define LIBSWRESAMPLE_VERSION_INT  AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \
                                                   LIBSWRESAMPLE_VERSION_MINOR, \
diff --git a/tests/fate/libswresample.mak b/tests/fate/libswresample.mak
index cc50693..b875767 100644
--- a/tests/fate/libswresample.mak
+++ b/tests/fate/libswresample.mak
@@ -11,10 +11,12 @@  SAMPLERATES_LITE = 8000 44100 48000
 
 SAMPLERATES_NN = 8000 44100
 
+#note that without EXACT suffix means exact_rational=off, without LIN suffix means linear_interp=off
+#now this ARESAMPLE is not default behavior, the default is exact_rational=on:linear_interp=on
 define ARESAMPLE
 FATE_SWR_RESAMPLE += fate-swr-resample-$(3)-$(1)-$(2)
 fate-swr-resample-$(3)-$(1)-$(2): tests/data/asynth-$(1)-1.wav
-fate-swr-resample-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,aresample=$(2):internal_sample_fmt=$(3),aformat=$(3),aresample=$(1):internal_sample_fmt=$(3) -f wav -acodec pcm_s16le -
+fate-swr-resample-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,aresample=$(2):internal_sample_fmt=$(3):exact_rational=off:linear_interp=off,aformat=$(3),aresample=$(1):internal_sample_fmt=$(3):exact_rational=off:linear_interp=off -f wav -acodec pcm_s16le -
 
 fate-swr-resample-$(3)-$(1)-$(2): CMP = stddev
 fate-swr-resample-$(3)-$(1)-$(2): CMP_UNIT = $(5)
@@ -270,7 +272,7 @@  fate-swr-resample-s32p-96000-8000: SIZE_TOLERANCE = 1152000 - 20496
 define ARESAMPLE_LIN
 FATE_SWR_RESAMPLE += fate-swr-resample_lin-$(3)-$(1)-$(2)
 fate-swr-resample_lin-$(3)-$(1)-$(2): tests/data/asynth-$(1)-1.wav
-fate-swr-resample_lin-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,aresample=$(2):linear_interp=1:internal_sample_fmt=$(3),aformat=$(3),aresample=$(1):linear_interp=1:internal_sample_fmt=$(3) -f wav -acodec pcm_s16le -
+fate-swr-resample_lin-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,aresample=$(2):linear_interp=1:exact_rational=0:internal_sample_fmt=$(3),aformat=$(3),aresample=$(1):linear_interp=1:exact_rational=0:internal_sample_fmt=$(3) -f wav -acodec pcm_s16le -
 
 fate-swr-resample_lin-$(3)-$(1)-$(2): CMP = stddev
 fate-swr-resample_lin-$(3)-$(1)-$(2): CMP_UNIT = $(5)
@@ -335,7 +337,7 @@  fate-swr-resample_lin-dblp-48000-44100: SIZE_TOLERANCE = 576000 - 20480
 define ARESAMPLE_NN
 FATE_SWR_RESAMPLE += fate-swr-resample_nn-$(3)-$(1)-$(2)
 fate-swr-resample_nn-$(3)-$(1)-$(2): tests/data/asynth-$(1)-1.wav
-fate-swr-resample_nn-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,aresample=$(2):filter_size=1:phase_shift=0:internal_sample_fmt=$(3),aformat=$(3),aresample=$(1):internal_sample_fmt=$(3) -f wav -acodec pcm_s16le -
+fate-swr-resample_nn-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,aresample=$(2):filter_size=1:phase_shift=0:linear_interp=0:exact_rational=0:internal_sample_fmt=$(3),aformat=$(3),aresample=$(1):exact_rational=0:linear_interp=0:internal_sample_fmt=$(3) -f wav -acodec pcm_s16le -
 
 fate-swr-resample_nn-$(3)-$(1)-$(2): CMP = stddev
 fate-swr-resample_nn-$(3)-$(1)-$(2): CMP_UNIT = $(5)
@@ -358,7 +360,7 @@  fate-swr-resample_nn-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20480
 define ARESAMPLE_ASYNC
 FATE_SWR_RESAMPLE += fate-swr-resample_async-$(3)-$(1)-$(2)
 fate-swr-resample_async-$(3)-$(1)-$(2): tests/data/asynth-$(1)-1.wav
-fate-swr-resample_async-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,asetpts=PTS+random\(0\)*200-100,aresample=$(2):async=50:min_hard_comp=0.100000:first_pts=0:internal_sample_fmt=$(3),aformat=$(3),aresample=$(1):internal_sample_fmt=$(3) -f wav -acodec pcm_s16le -
+fate-swr-resample_async-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,asetpts=PTS+random\(0\)*200-100,aresample=$(2):async=50:min_hard_comp=0.100000:first_pts=0:exact_rational=0:linear_interp=0:internal_sample_fmt=$(3),aformat=$(3),aresample=$(1):exact_rational=0:linear_interp=0:internal_sample_fmt=$(3) -f wav -acodec pcm_s16le -
 
 fate-swr-resample_async-$(3)-$(1)-$(2): CMP = stddev
 fate-swr-resample_async-$(3)-$(1)-$(2): CMP_UNIT = $(5)
@@ -381,7 +383,7 @@  fate-swr-resample_async-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20344
 define ARESAMPLE_EXACT
 FATE_SWR_RESAMPLE += fate-swr-resample_exact-$(3)-$(1)-$(2)
 fate-swr-resample_exact-$(3)-$(1)-$(2): tests/data/asynth-$(1)-1.wav
-fate-swr-resample_exact-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,aresample=$(2):internal_sample_fmt=$(3):exact_rational=on,aformat=$(3),aresample=$(1):internal_sample_fmt=$(3):exact_rational=on -f wav -acodec pcm_s16le -
+fate-swr-resample_exact-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,aresample=$(2):internal_sample_fmt=$(3):exact_rational=on:linear_interp=off,aformat=$(3),aresample=$(1):internal_sample_fmt=$(3):exact_rational=on:linear_interp=off -f wav -acodec pcm_s16le -
 
 fate-swr-resample_exact-$(3)-$(1)-$(2): CMP = stddev
 fate-swr-resample_exact-$(3)-$(1)-$(2): CMP_UNIT = $(5)
@@ -632,7 +634,7 @@  fate-swr-resample_exact-s32p-96000-8000: SIZE_TOLERANCE = 1152000 - 20496
 define ARESAMPLE_EXACT_ASYNC
 FATE_SWR_RESAMPLE += fate-swr-resample_exact_async-$(3)-$(1)-$(2)
 fate-swr-resample_exact_async-$(3)-$(1)-$(2): tests/data/asynth-$(1)-1.wav
-fate-swr-resample_exact_async-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,asetpts=PTS+random\(0\)*200-100,aresample=$(2):async=50:min_hard_comp=0.100000:first_pts=0:internal_sample_fmt=$(3):exact_rational=on,aformat=$(3),aresample=$(1):internal_sample_fmt=$(3):exact_rational=on -f wav -acodec pcm_s16le -
+fate-swr-resample_exact_async-$(3)-$(1)-$(2): CMD = ffmpeg -i $(TARGET_PATH)/tests/data/asynth-$(1)-1.wav -af atrim=end_sample=10240,asetpts=PTS+random\(0\)*200-100,aresample=$(2):async=50:min_hard_comp=0.100000:first_pts=0:internal_sample_fmt=$(3):exact_rational=on:linear_interp=off,aformat=$(3),aresample=$(1):internal_sample_fmt=$(3):exact_rational=on:linear_interp=off -f wav -acodec pcm_s16le -
 
 fate-swr-resample_exact_async-$(3)-$(1)-$(2): CMP = stddev
 fate-swr-resample_exact_async-$(3)-$(1)-$(2): CMP_UNIT = $(5)
@@ -712,6 +714,7 @@  fate-swr-resample_exact_async-s32p-8000-44100: SIZE_TOLERANCE = 96000 - 20344
 fate-swr-resample_exact_async-s32p-8000-48000: CMP_TARGET = 11326.82
 fate-swr-resample_exact_async-s32p-8000-48000: SIZE_TOLERANCE = 96000 - 20344
 
+#the default
 define ARESAMPLE_EXACT_LIN
 FATE_SWR_RESAMPLE += fate-swr-resample_exact_lin-$(3)-$(1)-$(2)
 fate-swr-resample_exact_lin-$(3)-$(1)-$(2): tests/data/asynth-$(1)-1.wav
@@ -723,78 +726,246 @@  fate-swr-resample_exact_lin-$(3)-$(1)-$(2): FUZZ = 0.1
 fate-swr-resample_exact_lin-$(3)-$(1)-$(2): REF = tests/data/asynth-$(1)-1.wav
 endef
 
+fate-swr-resample_exact_lin-dblp-2626-44100: CMP_TARGET = 1352.61
+fate-swr-resample_exact_lin-dblp-2626-44100: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-dblp-2626-48000: CMP_TARGET = 1352.61
+fate-swr-resample_exact_lin-dblp-2626-48000: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-dblp-2626-8000: CMP_TARGET = 1353.00
+fate-swr-resample_exact_lin-dblp-2626-8000: SIZE_TOLERANCE = 31512 - 20482
+
+fate-swr-resample_exact_lin-dblp-2626-96000: CMP_TARGET = 1352.62
+fate-swr-resample_exact_lin-dblp-2626-96000: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-dblp-44100-2626: CMP_TARGET = 185.49
+fate-swr-resample_exact_lin-dblp-44100-2626: SIZE_TOLERANCE = 529200 - 20490
+
 fate-swr-resample_exact_lin-dblp-44100-48000: CMP_TARGET = 9.65
 fate-swr-resample_exact_lin-dblp-44100-48000: SIZE_TOLERANCE = 529200 - 20482
 
 fate-swr-resample_exact_lin-dblp-44100-8000: CMP_TARGET = 75.38
 fate-swr-resample_exact_lin-dblp-44100-8000: SIZE_TOLERANCE = 529200 - 20486
 
+fate-swr-resample_exact_lin-dblp-44100-96000: CMP_TARGET = 11.45
+fate-swr-resample_exact_lin-dblp-44100-96000: SIZE_TOLERANCE = 529200 - 20482
+
+fate-swr-resample_exact_lin-dblp-48000-2626: CMP_TARGET = 456.50
+fate-swr-resample_exact_lin-dblp-48000-2626: SIZE_TOLERANCE = 576000 - 20510
+
 fate-swr-resample_exact_lin-dblp-48000-44100: CMP_TARGET = 0.26
 fate-swr-resample_exact_lin-dblp-48000-44100: SIZE_TOLERANCE = 576000 - 20480
 
 fate-swr-resample_exact_lin-dblp-48000-8000: CMP_TARGET = 62.36
 fate-swr-resample_exact_lin-dblp-48000-8000: SIZE_TOLERANCE = 576000 - 20484
 
+fate-swr-resample_exact_lin-dblp-48000-96000: CMP_TARGET = 0.47
+fate-swr-resample_exact_lin-dblp-48000-96000: SIZE_TOLERANCE = 576000 - 20480
+
+fate-swr-resample_exact_lin-dblp-8000-2626: CMP_TARGET = 2505.98
+fate-swr-resample_exact_lin-dblp-8000-2626: SIZE_TOLERANCE = 96000 - 20486
+
 fate-swr-resample_exact_lin-dblp-8000-44100: CMP_TARGET = 14.59
 fate-swr-resample_exact_lin-dblp-8000-44100: SIZE_TOLERANCE = 96000 - 20480
 
 fate-swr-resample_exact_lin-dblp-8000-48000: CMP_TARGET = 14.50
 fate-swr-resample_exact_lin-dblp-8000-48000: SIZE_TOLERANCE = 96000 - 20480
 
+fate-swr-resample_exact_lin-dblp-8000-96000: CMP_TARGET = 13.62
+fate-swr-resample_exact_lin-dblp-8000-96000: SIZE_TOLERANCE = 96000 - 20480
+
+fate-swr-resample_exact_lin-dblp-96000-2626: CMP_TARGET = 675.03
+fate-swr-resample_exact_lin-dblp-96000-2626: SIZE_TOLERANCE = 1152000 - 20474
+
+fate-swr-resample_exact_lin-dblp-96000-44100: CMP_TARGET = 1.26
+fate-swr-resample_exact_lin-dblp-96000-44100: SIZE_TOLERANCE = 1152000 - 20480
+
+fate-swr-resample_exact_lin-dblp-96000-48000: CMP_TARGET = 1.00
+fate-swr-resample_exact_lin-dblp-96000-48000: SIZE_TOLERANCE = 1152000 - 20480
+
+fate-swr-resample_exact_lin-dblp-96000-8000: CMP_TARGET = 58.52
+fate-swr-resample_exact_lin-dblp-96000-8000: SIZE_TOLERANCE = 1152000 - 20496
+
+fate-swr-resample_exact_lin-fltp-2626-44100: CMP_TARGET = 1352.61
+fate-swr-resample_exact_lin-fltp-2626-44100: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-fltp-2626-48000: CMP_TARGET = 1352.61
+fate-swr-resample_exact_lin-fltp-2626-48000: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-fltp-2626-8000: CMP_TARGET = 1353.00
+fate-swr-resample_exact_lin-fltp-2626-8000: SIZE_TOLERANCE = 31512 - 20482
+
+fate-swr-resample_exact_lin-fltp-2626-96000: CMP_TARGET = 1352.62
+fate-swr-resample_exact_lin-fltp-2626-96000: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-fltp-44100-2626: CMP_TARGET = 185.49
+fate-swr-resample_exact_lin-fltp-44100-2626: SIZE_TOLERANCE = 529200 - 20490
+
 fate-swr-resample_exact_lin-fltp-44100-48000: CMP_TARGET = 9.65
 fate-swr-resample_exact_lin-fltp-44100-48000: SIZE_TOLERANCE = 529200 - 20482
 
 fate-swr-resample_exact_lin-fltp-44100-8000: CMP_TARGET = 75.38
 fate-swr-resample_exact_lin-fltp-44100-8000: SIZE_TOLERANCE = 529200 - 20486
 
+fate-swr-resample_exact_lin-fltp-44100-96000: CMP_TARGET = 11.45
+fate-swr-resample_exact_lin-fltp-44100-96000: SIZE_TOLERANCE = 529200 - 20482
+
+fate-swr-resample_exact_lin-fltp-48000-2626: CMP_TARGET = 456.50
+fate-swr-resample_exact_lin-fltp-48000-2626: SIZE_TOLERANCE = 576000 - 20510
+
 fate-swr-resample_exact_lin-fltp-48000-44100: CMP_TARGET = 0.26
 fate-swr-resample_exact_lin-fltp-48000-44100: SIZE_TOLERANCE = 576000 - 20480
 
 fate-swr-resample_exact_lin-fltp-48000-8000: CMP_TARGET = 62.36
 fate-swr-resample_exact_lin-fltp-48000-8000: SIZE_TOLERANCE = 576000 - 20484
 
+fate-swr-resample_exact_lin-fltp-48000-96000: CMP_TARGET = 0.47
+fate-swr-resample_exact_lin-fltp-48000-96000: SIZE_TOLERANCE = 576000 - 20480
+
+fate-swr-resample_exact_lin-fltp-8000-2626: CMP_TARGET = 2505.98
+fate-swr-resample_exact_lin-fltp-8000-2626: SIZE_TOLERANCE = 96000 - 20486
+
 fate-swr-resample_exact_lin-fltp-8000-44100: CMP_TARGET = 14.59
 fate-swr-resample_exact_lin-fltp-8000-44100: SIZE_TOLERANCE = 96000 - 20480
 
 fate-swr-resample_exact_lin-fltp-8000-48000: CMP_TARGET = 14.50
 fate-swr-resample_exact_lin-fltp-8000-48000: SIZE_TOLERANCE = 96000 - 20480
 
+fate-swr-resample_exact_lin-fltp-8000-96000: CMP_TARGET = 13.62
+fate-swr-resample_exact_lin-fltp-8000-96000: SIZE_TOLERANCE = 96000 - 20480
+
+fate-swr-resample_exact_lin-fltp-96000-2626: CMP_TARGET = 675.03
+fate-swr-resample_exact_lin-fltp-96000-2626: SIZE_TOLERANCE = 1152000 - 20474
+
+fate-swr-resample_exact_lin-fltp-96000-44100: CMP_TARGET = 1.26
+fate-swr-resample_exact_lin-fltp-96000-44100: SIZE_TOLERANCE = 1152000 - 20480
+
+fate-swr-resample_exact_lin-fltp-96000-48000: CMP_TARGET = 1.00
+fate-swr-resample_exact_lin-fltp-96000-48000: SIZE_TOLERANCE = 1152000 - 20480
+
+fate-swr-resample_exact_lin-fltp-96000-8000: CMP_TARGET = 58.52
+fate-swr-resample_exact_lin-fltp-96000-8000: SIZE_TOLERANCE = 1152000 - 20496
+
+fate-swr-resample_exact_lin-s16p-2626-44100: CMP_TARGET = 1392.97
+fate-swr-resample_exact_lin-s16p-2626-44100: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-s16p-2626-48000: CMP_TARGET = 1392.96
+fate-swr-resample_exact_lin-s16p-2626-48000: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-s16p-2626-8000: CMP_TARGET = 1393.82
+fate-swr-resample_exact_lin-s16p-2626-8000: SIZE_TOLERANCE = 31512 - 20482
+
+fate-swr-resample_exact_lin-s16p-2626-96000: CMP_TARGET = 1393.06
+fate-swr-resample_exact_lin-s16p-2626-96000: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-s16p-44100-2626: CMP_TARGET = 185.52
+fate-swr-resample_exact_lin-s16p-44100-2626: SIZE_TOLERANCE = 529200 - 20490
+
 fate-swr-resample_exact_lin-s16p-44100-48000: CMP_TARGET = 9.67
 fate-swr-resample_exact_lin-s16p-44100-48000: SIZE_TOLERANCE = 529200 - 20482
 
 fate-swr-resample_exact_lin-s16p-44100-8000: CMP_TARGET = 75.43
 fate-swr-resample_exact_lin-s16p-44100-8000: SIZE_TOLERANCE = 529200 - 20486
 
+fate-swr-resample_exact_lin-s16p-44100-96000: CMP_TARGET = 11.46
+fate-swr-resample_exact_lin-s16p-44100-96000: SIZE_TOLERANCE = 529200 - 20482
+
+fate-swr-resample_exact_lin-s16p-48000-2626: CMP_TARGET = 456.56
+fate-swr-resample_exact_lin-s16p-48000-2626: SIZE_TOLERANCE = 576000 - 20510
+
 fate-swr-resample_exact_lin-s16p-48000-44100: CMP_TARGET = 0.72
 fate-swr-resample_exact_lin-s16p-48000-44100: SIZE_TOLERANCE = 576000 - 20480
 
 fate-swr-resample_exact_lin-s16p-48000-8000: CMP_TARGET = 62.39
 fate-swr-resample_exact_lin-s16p-48000-8000: SIZE_TOLERANCE = 576000 - 20484
 
+fate-swr-resample_exact_lin-s16p-48000-96000: CMP_TARGET = 0.50
+fate-swr-resample_exact_lin-s16p-48000-96000: SIZE_TOLERANCE = 576000 - 20480
+
+fate-swr-resample_exact_lin-s16p-8000-2626: CMP_TARGET = 2505.97
+fate-swr-resample_exact_lin-s16p-8000-2626: SIZE_TOLERANCE = 96000 - 20486
+
 fate-swr-resample_exact_lin-s16p-8000-44100: CMP_TARGET = 14.63
 fate-swr-resample_exact_lin-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20480
 
 fate-swr-resample_exact_lin-s16p-8000-48000: CMP_TARGET = 14.54
 fate-swr-resample_exact_lin-s16p-8000-48000: SIZE_TOLERANCE = 96000 - 20480
 
+fate-swr-resample_exact_lin-s16p-8000-96000: CMP_TARGET = 13.65
+fate-swr-resample_exact_lin-s16p-8000-96000: SIZE_TOLERANCE = 96000 - 20480
+
+fate-swr-resample_exact_lin-s16p-96000-2626: CMP_TARGET = 675.10
+fate-swr-resample_exact_lin-s16p-96000-2626: SIZE_TOLERANCE = 1152000 - 20474
+
+fate-swr-resample_exact_lin-s16p-96000-44100: CMP_TARGET = 1.45
+fate-swr-resample_exact_lin-s16p-96000-44100: SIZE_TOLERANCE = 1152000 - 20480
+
+fate-swr-resample_exact_lin-s16p-96000-48000: CMP_TARGET = 1.03
+fate-swr-resample_exact_lin-s16p-96000-48000: SIZE_TOLERANCE = 1152000 - 20480
+
+fate-swr-resample_exact_lin-s16p-96000-8000: CMP_TARGET = 58.56
+fate-swr-resample_exact_lin-s16p-96000-8000: SIZE_TOLERANCE = 1152000 - 20496
+
+fate-swr-resample_exact_lin-s32p-2626-44100: CMP_TARGET = 1392.96
+fate-swr-resample_exact_lin-s32p-2626-44100: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-s32p-2626-48000: CMP_TARGET = 1392.96
+fate-swr-resample_exact_lin-s32p-2626-48000: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-s32p-2626-8000: CMP_TARGET = 1393.81
+fate-swr-resample_exact_lin-s32p-2626-8000: SIZE_TOLERANCE = 31512 - 20482
+
+fate-swr-resample_exact_lin-s32p-2626-96000: CMP_TARGET = 1392.97
+fate-swr-resample_exact_lin-s32p-2626-96000: SIZE_TOLERANCE = 31512 - 20480
+
+fate-swr-resample_exact_lin-s32p-44100-2626: CMP_TARGET = 185.49
+fate-swr-resample_exact_lin-s32p-44100-2626: SIZE_TOLERANCE = 529200 - 20490
+
 fate-swr-resample_exact_lin-s32p-44100-48000: CMP_TARGET = 9.65
 fate-swr-resample_exact_lin-s32p-44100-48000: SIZE_TOLERANCE = 529200 - 20482
 
 fate-swr-resample_exact_lin-s32p-44100-8000: CMP_TARGET = 75.38
 fate-swr-resample_exact_lin-s32p-44100-8000: SIZE_TOLERANCE = 529200 - 20486
 
+fate-swr-resample_exact_lin-s32p-44100-96000: CMP_TARGET = 11.45
+fate-swr-resample_exact_lin-s32p-44100-96000: SIZE_TOLERANCE = 529200 - 20482
+
+fate-swr-resample_exact_lin-s32p-48000-2626: CMP_TARGET = 456.50
+fate-swr-resample_exact_lin-s32p-48000-2626: SIZE_TOLERANCE = 576000 - 20510
+
 fate-swr-resample_exact_lin-s32p-48000-44100: CMP_TARGET = 0.26
 fate-swr-resample_exact_lin-s32p-48000-44100: SIZE_TOLERANCE = 576000 - 20480
 
 fate-swr-resample_exact_lin-s32p-48000-8000: CMP_TARGET = 62.36
 fate-swr-resample_exact_lin-s32p-48000-8000: SIZE_TOLERANCE = 576000 - 20484
 
+fate-swr-resample_exact_lin-s32p-48000-96000: CMP_TARGET = 0.47
+fate-swr-resample_exact_lin-s32p-48000-96000: SIZE_TOLERANCE = 576000 - 20480
+
+fate-swr-resample_exact_lin-s32p-8000-2626: CMP_TARGET = 2505.98
+fate-swr-resample_exact_lin-s32p-8000-2626: SIZE_TOLERANCE = 96000 - 20486
+
 fate-swr-resample_exact_lin-s32p-8000-44100: CMP_TARGET = 14.59
 fate-swr-resample_exact_lin-s32p-8000-44100: SIZE_TOLERANCE = 96000 - 20480
 
 fate-swr-resample_exact_lin-s32p-8000-48000: CMP_TARGET = 14.50
 fate-swr-resample_exact_lin-s32p-8000-48000: SIZE_TOLERANCE = 96000 - 20480
 
+fate-swr-resample_exact_lin-s32p-8000-96000: CMP_TARGET = 13.62
+fate-swr-resample_exact_lin-s32p-8000-96000: SIZE_TOLERANCE = 96000 - 20480
+
+fate-swr-resample_exact_lin-s32p-96000-2626: CMP_TARGET = 675.03
+fate-swr-resample_exact_lin-s32p-96000-2626: SIZE_TOLERANCE = 1152000 - 20474
+
+fate-swr-resample_exact_lin-s32p-96000-44100: CMP_TARGET = 1.26
+fate-swr-resample_exact_lin-s32p-96000-44100: SIZE_TOLERANCE = 1152000 - 20480
+
+fate-swr-resample_exact_lin-s32p-96000-48000: CMP_TARGET = 1.00
+fate-swr-resample_exact_lin-s32p-96000-48000: SIZE_TOLERANCE = 1152000 - 20480
+
+fate-swr-resample_exact_lin-s32p-96000-8000: CMP_TARGET = 58.52
+fate-swr-resample_exact_lin-s32p-96000-8000: SIZE_TOLERANCE = 1152000 - 20496
+
 define ARESAMPLE_EXACT_LIN_ASYNC
 FATE_SWR_RESAMPLE += fate-swr-resample_exact_lin_async-$(3)-$(1)-$(2)
 fate-swr-resample_exact_lin_async-$(3)-$(1)-$(2): tests/data/asynth-$(1)-1.wav
@@ -903,10 +1074,10 @@  $(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_ASYNC,s32p,s32le,s16)
 $(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_ASYNC,fltp,f32le,s16)
 $(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_ASYNC,dblp,f64le,s16)
 
-$(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_LIN,s16p,s16le,s16)
-$(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_LIN,s32p,s32le,s16)
-$(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_LIN,fltp,f32le,s16)
-$(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_LIN,dblp,f64le,s16)
+$(call CROSS_TEST,$(SAMPLERATES),ARESAMPLE_EXACT_LIN,s16p,s16le,s16)
+$(call CROSS_TEST,$(SAMPLERATES),ARESAMPLE_EXACT_LIN,s32p,s32le,s16)
+$(call CROSS_TEST,$(SAMPLERATES),ARESAMPLE_EXACT_LIN,fltp,f32le,s16)
+$(call CROSS_TEST,$(SAMPLERATES),ARESAMPLE_EXACT_LIN,dblp,f64le,s16)
 
 $(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_LIN_ASYNC,s16p,s16le,s16)
 $(call CROSS_TEST,$(SAMPLERATES_LITE),ARESAMPLE_EXACT_LIN_ASYNC,s32p,s32le,s16)
diff --git a/tests/ref/acodec/s302m b/tests/ref/acodec/s302m
index 5eca9e3..2da15af 100644
--- a/tests/ref/acodec/s302m
+++ b/tests/ref/acodec/s302m
@@ -1,4 +1,4 @@ 
-f6908214498489799b50e332ac42ebf3 *tests/data/fate/acodec-s302m.mpegts
+8402fe08dde64e332e8246c97a93a846 *tests/data/fate/acodec-s302m.mpegts
 1589164 tests/data/fate/acodec-s302m.mpegts
-f9b6528eee1aea04640ee83400c78689 *tests/data/fate/acodec-s302m.out.wav
-stddev:  986.97 PSNR: 36.44 MAXDIFF:18642 bytes:  1058400/  1056708
+5dee513a03686d7527a85b845e3d374c *tests/data/fate/acodec-s302m.out.wav
+stddev:  986.93 PSNR: 36.44 MAXDIFF:18571 bytes:  1058400/  1056708
diff --git a/tests/ref/lavf/dv_fmt b/tests/ref/lavf/dv_fmt
index b152c84..6edf03c 100644
--- a/tests/ref/lavf/dv_fmt
+++ b/tests/ref/lavf/dv_fmt
@@ -1,9 +1,9 @@ 
-11be3e5caa2892236b3475c3f7807b76 *./tests/data/lavf/lavf.dv
+2f443a06a1aada36a5ea5e6dd610491c *./tests/data/lavf/lavf.dv
 3600000 ./tests/data/lavf/lavf.dv
-./tests/data/lavf/lavf.dv CRC=0x0b2cd3ec
-e9949bc767924e1e7d28856029fee024 *./tests/data/lavf/lavf.dv
+./tests/data/lavf/lavf.dv CRC=0x38c7d454
+bd1559345544052daf229884ccd7040a *./tests/data/lavf/lavf.dv
 3480000 ./tests/data/lavf/lavf.dv
-./tests/data/lavf/lavf.dv CRC=0xfab17c4a
+./tests/data/lavf/lavf.dv CRC=0x74f07c7e
 87d3b20f656235671383a7eaa2f66330 *./tests/data/lavf/lavf.dv
 3600000 ./tests/data/lavf/lavf.dv
 ./tests/data/lavf/lavf.dv CRC=0xf3e6873c
diff --git a/tests/ref/lavf/gxf b/tests/ref/lavf/gxf
index d356f20..c98fc2b 100644
--- a/tests/ref/lavf/gxf
+++ b/tests/ref/lavf/gxf
@@ -1,9 +1,9 @@ 
-7993da95d8bfe04832e27892c163e562 *./tests/data/lavf/lavf.gxf
+35251f30f64437df01fa7bb1d4e720b2 *./tests/data/lavf/lavf.gxf
 795876 ./tests/data/lavf/lavf.gxf
-./tests/data/lavf/lavf.gxf CRC=0xda7cebbc
-9e873074b5c3ef1d80d233a38e7de156 *./tests/data/lavf/lavf.gxf
+./tests/data/lavf/lavf.gxf CRC=0x44acf1d7
+404e44c67a9414835ea880fbc9a4b4bb *./tests/data/lavf/lavf.gxf
 794656 ./tests/data/lavf/lavf.gxf
-./tests/data/lavf/lavf.gxf CRC=0x7f0c9089
+./tests/data/lavf/lavf.gxf CRC=0x9bae96a4
 0638c4d073ac224608baaba16732b68f *./tests/data/lavf/lavf.gxf
 795876 ./tests/data/lavf/lavf.gxf
 ./tests/data/lavf/lavf.gxf CRC=0x5ade0285
diff --git a/tests/ref/lavf/mxf b/tests/ref/lavf/mxf
index e1c0c79..8b9516d 100644
--- a/tests/ref/lavf/mxf
+++ b/tests/ref/lavf/mxf
@@ -1,9 +1,9 @@ 
-f9b570c7b4fbbc2b71f2236b32e7cbb6 *./tests/data/lavf/lavf.mxf
+db3830320071450c44c9b037fe55983c *./tests/data/lavf/lavf.mxf
 525369 ./tests/data/lavf/lavf.mxf
-./tests/data/lavf/lavf.mxf CRC=0xdbfff6f1
-8f6a9a6b409f0f5a0bf003f8dea26314 *./tests/data/lavf/lavf.mxf
+./tests/data/lavf/lavf.mxf CRC=0x129dfd0c
+b89cc1bb39932ecf37c3f41d37a19dd8 *./tests/data/lavf/lavf.mxf
 560697 ./tests/data/lavf/lavf.mxf
-./tests/data/lavf/lavf.mxf CRC=0x11a6178e
-10ac0f158fc0af356439b818de7601e3 *./tests/data/lavf/lavf.mxf
+./tests/data/lavf/lavf.mxf CRC=0xc39a1da9
+90378bafb9e45ea144d752876eb3f7a3 *./tests/data/lavf/lavf.mxf
 525369 ./tests/data/lavf/lavf.mxf
-./tests/data/lavf/lavf.mxf CRC=0xdbfff6f1
+./tests/data/lavf/lavf.mxf CRC=0x129dfd0c
-- 
2.5.0