You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +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 poisson | ||||
| @item bohman | ||||
| @item kaiser | ||||
| @end table | ||||
| Default is @code{hann}. | ||||
|  | ||||
| @@ -2960,6 +2961,7 @@ It accepts the following values: | ||||
| @item parzen | ||||
| @item poisson | ||||
| @item bohman | ||||
| @item kaiser | ||||
| @end table | ||||
| Default is @code{hann}. | ||||
|  | ||||
| @@ -6743,6 +6745,7 @@ It accepts the following values: | ||||
| @item parzen | ||||
| @item poisson | ||||
| @item bohman | ||||
| @item kaiser | ||||
| @end table | ||||
| Default is @code{hann}. | ||||
|  | ||||
| @@ -29255,6 +29258,7 @@ It accepts the following values: | ||||
| @item parzen | ||||
| @item poisson | ||||
| @item bohman | ||||
| @item kaiser | ||||
| @end table | ||||
| Default is @code{hanning}. | ||||
|  | ||||
| @@ -29341,6 +29345,7 @@ It accepts the following values: | ||||
| @item parzen | ||||
| @item poisson | ||||
| @item bohman | ||||
| @item kaiser | ||||
| @end table | ||||
|  | ||||
| Default value is @code{hann}. | ||||
| @@ -29505,6 +29510,7 @@ It accepts the following values: | ||||
| @item parzen | ||||
| @item poisson | ||||
| @item bohman | ||||
| @item kaiser | ||||
| @end table | ||||
|  | ||||
| Default value is @code{hann}. | ||||
| @@ -29702,6 +29708,7 @@ It accepts the following values: | ||||
| @item parzen | ||||
| @item poisson | ||||
| @item bohman | ||||
| @item kaiser | ||||
| @end table | ||||
| 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_BHANN, WFUNC_LANCZOS, WFUNC_GAUSS, WFUNC_TUKEY, | ||||
|                       WFUNC_DOLPH, WFUNC_CAUCHY, WFUNC_PARZEN, WFUNC_POISSON, | ||||
|                       WFUNC_BOHMAN, | ||||
|                       WFUNC_BOHMAN, WFUNC_KAISER, | ||||
|                       NB_WFUNC }; | ||||
|  | ||||
| #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" }, \ | ||||
|         { "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" }, \ | ||||
|         { "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, | ||||
|                                         float *overlap) | ||||
| @@ -216,6 +231,14 @@ static inline void generate_window_func(float *lut, int N, int win_func, | ||||
|         } | ||||
|         *overlap = 0.75; | ||||
|         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: | ||||
|         av_assert0(0); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user