You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
avfilter/window_func: add kaiser window
This commit is contained in:
@@ -1534,6 +1534,7 @@ It accepts the following values:
|
|||||||
@item parzen
|
@item parzen
|
||||||
@item poisson
|
@item poisson
|
||||||
@item bohman
|
@item bohman
|
||||||
|
@item kaiser
|
||||||
@end table
|
@end table
|
||||||
Default is @code{hann}.
|
Default is @code{hann}.
|
||||||
|
|
||||||
@@ -2960,6 +2961,7 @@ It accepts the following values:
|
|||||||
@item parzen
|
@item parzen
|
||||||
@item poisson
|
@item poisson
|
||||||
@item bohman
|
@item bohman
|
||||||
|
@item kaiser
|
||||||
@end table
|
@end table
|
||||||
Default is @code{hann}.
|
Default is @code{hann}.
|
||||||
|
|
||||||
@@ -6743,6 +6745,7 @@ It accepts the following values:
|
|||||||
@item parzen
|
@item parzen
|
||||||
@item poisson
|
@item poisson
|
||||||
@item bohman
|
@item bohman
|
||||||
|
@item kaiser
|
||||||
@end table
|
@end table
|
||||||
Default is @code{hann}.
|
Default is @code{hann}.
|
||||||
|
|
||||||
@@ -29255,6 +29258,7 @@ It accepts the following values:
|
|||||||
@item parzen
|
@item parzen
|
||||||
@item poisson
|
@item poisson
|
||||||
@item bohman
|
@item bohman
|
||||||
|
@item kaiser
|
||||||
@end table
|
@end table
|
||||||
Default is @code{hanning}.
|
Default is @code{hanning}.
|
||||||
|
|
||||||
@@ -29341,6 +29345,7 @@ It accepts the following values:
|
|||||||
@item parzen
|
@item parzen
|
||||||
@item poisson
|
@item poisson
|
||||||
@item bohman
|
@item bohman
|
||||||
|
@item kaiser
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
Default value is @code{hann}.
|
Default value is @code{hann}.
|
||||||
@@ -29505,6 +29510,7 @@ It accepts the following values:
|
|||||||
@item parzen
|
@item parzen
|
||||||
@item poisson
|
@item poisson
|
||||||
@item bohman
|
@item bohman
|
||||||
|
@item kaiser
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
Default value is @code{hann}.
|
Default value is @code{hann}.
|
||||||
@@ -29702,6 +29708,7 @@ It accepts the following values:
|
|||||||
@item parzen
|
@item parzen
|
||||||
@item poisson
|
@item poisson
|
||||||
@item bohman
|
@item bohman
|
||||||
|
@item kaiser
|
||||||
@end table
|
@end table
|
||||||
Default value is @code{hann}.
|
Default value is @code{hann}.
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@ enum WindowFunc { WFUNC_RECT, WFUNC_HANNING, WFUNC_HAMMING, WFUNC_BLACKMAN,
|
|||||||
WFUNC_BHARRIS, WFUNC_BNUTTALL, WFUNC_SINE, WFUNC_NUTTALL,
|
WFUNC_BHARRIS, WFUNC_BNUTTALL, WFUNC_SINE, WFUNC_NUTTALL,
|
||||||
WFUNC_BHANN, WFUNC_LANCZOS, WFUNC_GAUSS, WFUNC_TUKEY,
|
WFUNC_BHANN, WFUNC_LANCZOS, WFUNC_GAUSS, WFUNC_TUKEY,
|
||||||
WFUNC_DOLPH, WFUNC_CAUCHY, WFUNC_PARZEN, WFUNC_POISSON,
|
WFUNC_DOLPH, WFUNC_CAUCHY, WFUNC_PARZEN, WFUNC_POISSON,
|
||||||
WFUNC_BOHMAN,
|
WFUNC_BOHMAN, WFUNC_KAISER,
|
||||||
NB_WFUNC };
|
NB_WFUNC };
|
||||||
|
|
||||||
#define WIN_FUNC_OPTION(win_func_opt_name, win_func_offset, flag, default_window_func) \
|
#define WIN_FUNC_OPTION(win_func_opt_name, win_func_offset, flag, default_window_func) \
|
||||||
@@ -56,7 +56,22 @@ enum WindowFunc { WFUNC_RECT, WFUNC_HANNING, WFUNC_HAMMING, WFUNC_BLACKMAN,
|
|||||||
{ "cauchy", "Cauchy", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_CAUCHY}, 0, 0, flag, "win_func" }, \
|
{ "cauchy", "Cauchy", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_CAUCHY}, 0, 0, flag, "win_func" }, \
|
||||||
{ "parzen", "Parzen", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_PARZEN}, 0, 0, flag, "win_func" }, \
|
{ "parzen", "Parzen", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_PARZEN}, 0, 0, flag, "win_func" }, \
|
||||||
{ "poisson", "Poisson", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_POISSON}, 0, 0, flag, "win_func" }, \
|
{ "poisson", "Poisson", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_POISSON}, 0, 0, flag, "win_func" }, \
|
||||||
{ "bohman", "Bohman", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_BOHMAN}, 0, 0, flag, "win_func" }
|
{ "bohman", "Bohman", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_BOHMAN}, 0, 0, flag, "win_func" }, \
|
||||||
|
{ "kaiser", "Kaiser", 0, AV_OPT_TYPE_CONST, {.i64=WFUNC_KAISER}, 0, 0, flag, "win_func" }
|
||||||
|
|
||||||
|
static inline double get_i0(double x)
|
||||||
|
{
|
||||||
|
double y = 1.0, prev = 1.0, i = 1.0;
|
||||||
|
|
||||||
|
while (fabs(prev) > 1e-20) {
|
||||||
|
double summand = prev * x * x / (4 * i * i);
|
||||||
|
y += summand;
|
||||||
|
prev = summand;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void generate_window_func(float *lut, int N, int win_func,
|
static inline void generate_window_func(float *lut, int N, int win_func,
|
||||||
float *overlap)
|
float *overlap)
|
||||||
@@ -216,6 +231,14 @@ static inline void generate_window_func(float *lut, int N, int win_func,
|
|||||||
}
|
}
|
||||||
*overlap = 0.75;
|
*overlap = 0.75;
|
||||||
break;
|
break;
|
||||||
|
case WFUNC_KAISER:
|
||||||
|
for (n = 0; n < N; n++) {
|
||||||
|
double x = 2.0 / (double)(N - 1);
|
||||||
|
|
||||||
|
lut[n] = get_i0(12. * sqrt(1. - SQR(n * x - 1.))) / get_i0(12.);
|
||||||
|
}
|
||||||
|
*overlap = 0.75;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
av_assert0(0);
|
av_assert0(0);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user