diff options
author | Ganesh Ajjanagadde | 2015-11-07 10:16:27 -0500 |
---|---|---|
committer | Ganesh Ajjanagadde | 2015-11-08 21:11:07 -0500 |
commit | 1bed09a30ef95cc85513688f3b3c18c3fd332fd8 (patch) | |
tree | 29675ca46bf040a7b5fa1dd0bb5368c0fc371ab0 /libswresample | |
parent | 9ac61e73d0843ec4b83f4e3d47eded73234e406e (diff) |
swresample: allow double precision beta value for the Kaiser window
Kaiser windows inherently don't require beta to be an integer. This was
an arbitrary restriction. Moreover, soxr does not require it, and in
fact often estimates beta to a non-integral value.
Thus, this patch allows greater flexibility for swresample clients.
Micro version is updated.
Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
Diffstat (limited to 'libswresample')
-rw-r--r-- | libswresample/options.c | 2 | ||||
-rw-r--r-- | libswresample/resample.c | 4 | ||||
-rw-r--r-- | libswresample/resample.h | 2 | ||||
-rw-r--r-- | libswresample/soxr_resample.c | 2 | ||||
-rw-r--r-- | libswresample/swresample_internal.h | 4 | ||||
-rw-r--r-- | libswresample/version.h | 2 |
6 files changed, 8 insertions, 8 deletions
diff --git a/libswresample/options.c b/libswresample/options.c index 2bf8ab1dce..654102a302 100644 --- a/libswresample/options.c +++ b/libswresample/options.c @@ -120,7 +120,7 @@ static const AVOption options[]={ { "blackman_nuttall", "select Blackman Nuttall windowed sinc", 0 , AV_OPT_TYPE_CONST, { .i64 = SWR_FILTER_TYPE_BLACKMAN_NUTTALL }, INT_MIN, INT_MAX, PARAM, "filter_type" }, { "kaiser" , "select Kaiser windowed sinc" , 0 , AV_OPT_TYPE_CONST, { .i64 = SWR_FILTER_TYPE_KAISER }, INT_MIN, INT_MAX, PARAM, "filter_type" }, -{ "kaiser_beta" , "set swr Kaiser window beta" , OFFSET(kaiser_beta) , AV_OPT_TYPE_INT , {.i64=9 }, 2 , 16 , PARAM }, +{ "kaiser_beta" , "set swr Kaiser window beta" , OFFSET(kaiser_beta) , AV_OPT_TYPE_DOUBLE , {.dbl=9 }, 2 , 16 , PARAM }, { "output_sample_bits" , "set swr number of output sample bits", OFFSET(dither.output_sample_bits), AV_OPT_TYPE_INT , {.i64=0 }, 0 , 64 , PARAM }, {0} diff --git a/libswresample/resample.c b/libswresample/resample.c index 6f2ca982ea..82f004c802 100644 --- a/libswresample/resample.c +++ b/libswresample/resample.c @@ -71,7 +71,7 @@ static double bessel(double x){ * @return 0 on success, negative on error */ static int build_filter(ResampleContext *c, void *filter, double factor, int tap_count, int alloc, int phase_count, int scale, - int filter_type, int kaiser_beta){ + int filter_type, double kaiser_beta){ int ph, i; double x, y, w, t; double *tab = av_malloc_array(tap_count+1, sizeof(*tab)); @@ -212,7 +212,7 @@ static int build_filter(ResampleContext *c, void *filter, double factor, int tap } static ResampleContext *resample_init(ResampleContext *c, int out_rate, int in_rate, int filter_size, int phase_shift, int linear, - double cutoff0, enum AVSampleFormat format, enum SwrFilterType filter_type, int kaiser_beta, + double cutoff0, enum AVSampleFormat format, enum SwrFilterType filter_type, double kaiser_beta, double precision, int cheby) { double cutoff = cutoff0? cutoff0 : 0.97; diff --git a/libswresample/resample.h b/libswresample/resample.h index 99a89b7945..a126b11635 100644 --- a/libswresample/resample.h +++ b/libswresample/resample.h @@ -44,7 +44,7 @@ typedef struct ResampleContext { int phase_mask; int linear; enum SwrFilterType filter_type; - int kaiser_beta; + double kaiser_beta; double factor; enum AVSampleFormat format; int felem_size; diff --git a/libswresample/soxr_resample.c b/libswresample/soxr_resample.c index 535e9cee07..807f508405 100644 --- a/libswresample/soxr_resample.c +++ b/libswresample/soxr_resample.c @@ -30,7 +30,7 @@ #include <soxr.h> static struct ResampleContext *create(struct ResampleContext *c, int out_rate, int in_rate, int filter_size, int phase_shift, int linear, - double cutoff, enum AVSampleFormat format, enum SwrFilterType filter_type, int kaiser_beta, double precision, int cheby){ + double cutoff, enum AVSampleFormat format, enum SwrFilterType filter_type, double kaiser_beta, double precision, int cheby){ soxr_error_t error; soxr_datatype_t type = diff --git a/libswresample/swresample_internal.h b/libswresample/swresample_internal.h index bf0cec7979..5c46ddaf38 100644 --- a/libswresample/swresample_internal.h +++ b/libswresample/swresample_internal.h @@ -69,7 +69,7 @@ struct DitherContext { }; typedef struct ResampleContext * (* resample_init_func)(struct ResampleContext *c, int out_rate, int in_rate, int filter_size, int phase_shift, int linear, - double cutoff, enum AVSampleFormat format, enum SwrFilterType filter_type, int kaiser_beta, double precision, int cheby); + double cutoff, enum AVSampleFormat format, enum SwrFilterType filter_type, double kaiser_beta, double precision, int cheby); typedef void (* resample_free_func)(struct ResampleContext **c); typedef int (* multiple_resample_func)(struct ResampleContext *c, AudioData *dst, int dst_size, AudioData *src, int src_size, int *consumed); typedef int (* resample_flush_func)(struct SwrContext *c); @@ -128,7 +128,7 @@ struct SwrContext { int linear_interp; /**< if 1 then the resampling FIR filter will be linearly interpolated */ double cutoff; /**< resampling cutoff frequency (swr: 6dB point; soxr: 0dB point). 1.0 corresponds to half the output sample rate */ int filter_type; /**< swr resampling filter type */ - int kaiser_beta; /**< swr beta value for Kaiser window (only applicable if filter_type == AV_FILTER_TYPE_KAISER) */ + double kaiser_beta; /**< swr beta value for Kaiser window (only applicable if filter_type == AV_FILTER_TYPE_KAISER) */ double precision; /**< soxr resampling precision (in bits) */ int cheby; /**< soxr: if 1 then passband rolloff will be none (Chebyshev) & irrational ratio approximation precision will be higher */ diff --git a/libswresample/version.h b/libswresample/version.h index 12b32826db..8f6ecb418a 100644 --- a/libswresample/version.h +++ b/libswresample/version.h @@ -30,7 +30,7 @@ #define LIBSWRESAMPLE_VERSION_MAJOR 2 #define LIBSWRESAMPLE_VERSION_MINOR 0 -#define LIBSWRESAMPLE_VERSION_MICRO 100 +#define LIBSWRESAMPLE_VERSION_MICRO 101 #define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ LIBSWRESAMPLE_VERSION_MINOR, \ |