diff --git a/doc/resampler.texi b/doc/resampler.texi index 155230fa6f..cb7d536cfb 100644 --- a/doc/resampler.texi +++ b/doc/resampler.texi @@ -220,7 +220,7 @@ select Kaiser windowed sinc @end table @item kaiser_beta -For swr only, set Kaiser window beta value. Must be an integer in the +For swr only, set Kaiser window beta value. Must be a double float value in the interval [2,16], default value is 9. @item output_sample_bits 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 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, \