Showing the changes to libavfilter (1 of 2 files). Show all
Unified · Split
| @@ -45,6 +45,7 @@ enum FrequencyScale { · 44 unmodified lines | |||
| 45 | FSCALE_SQRT, | 45 | FSCALE_SQRT, |
| 46 | FSCALE_CBRT, | 46 | FSCALE_CBRT, |
| 47 | FSCALE_QDRT, | 47 | FSCALE_QDRT, |
| 48 | FSCALE_FM, | ||
| 48 | NB_FSCALE | 49 | NB_FSCALE |
| 49 | }; | 50 | }; |
| 50 | 51 | ||
| @@ -144,6 +145,7 @@ static const AVOption showcwt_options[] = { · 93 unmodified lines | |||
| 144 | { "sqrt", "sqrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_SQRT}, 0, 0, FLAGS, "scale" }, | 145 | { "sqrt", "sqrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_SQRT}, 0, 0, FLAGS, "scale" }, |
| 145 | { "cbrt", "cbrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_CBRT}, 0, 0, FLAGS, "scale" }, | 146 | { "cbrt", "cbrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_CBRT}, 0, 0, FLAGS, "scale" }, |
| 146 | { "qdrt", "qdrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_QDRT}, 0, 0, FLAGS, "scale" }, | 147 | { "qdrt", "qdrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_QDRT}, 0, 0, FLAGS, "scale" }, |
| 148 | { "fm", "fm", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_FM}, 0, 0, FLAGS, "scale" }, | ||
| 147 | { "iscale", "set intensity scale", OFFSET(intensity_scale),AV_OPT_TYPE_INT, {.i64=0}, 0, NB_ISCALE-1, FLAGS, "iscale" }, | 149 | { "iscale", "set intensity scale", OFFSET(intensity_scale),AV_OPT_TYPE_INT, {.i64=0}, 0, NB_ISCALE-1, FLAGS, "iscale" }, |
| 148 | { "linear", "linear", 0, AV_OPT_TYPE_CONST,{.i64=ISCALE_LINEAR}, 0, 0, FLAGS, "iscale" }, | 150 | { "linear", "linear", 0, AV_OPT_TYPE_CONST,{.i64=ISCALE_LINEAR}, 0, 0, FLAGS, "iscale" }, |
| 149 | { "log", "logarithmic", 0, AV_OPT_TYPE_CONST,{.i64=ISCALE_LOG}, 0, 0, FLAGS, "iscale" }, | 151 | { "log", "logarithmic", 0, AV_OPT_TYPE_CONST,{.i64=ISCALE_LOG}, 0, 0, FLAGS, "iscale" }, |
| @@ -292,6 +294,10 @@ static float frequency_band(float *frequency_band, · 142 unmodified lines | |||
| 292 | frequency = frequency * frequency * frequency * frequency; | 294 | frequency = frequency * frequency * frequency * frequency; |
| 293 | frequency_derivative *= 4.f * powf(frequency, 3.f / 4.f); | 295 | frequency_derivative *= 4.f * powf(frequency, 3.f / 4.f); |
| 294 | break; | 296 | break; |
| 297 | case FSCALE_FM: | ||
| 298 | frequency = 2.f * powf(frequency, 3.f / 2.f) / 3.f; | ||
| 299 | frequency_derivative *= sqrtf(frequency); | ||
| 300 | break; | ||
| 295 | } | 301 | } |
| 296 | 302 | ||
| 297 | frequency_band[y*2 ] = frequency; | 303 | frequency_band[y*2 ] = frequency; |
| @@ -788,7 +794,8 @@ static int config_output(AVFilterLink *outlink) · 490 unmodified lines | |||
| 788 | AVFilterContext *ctx = outlink->src; | 794 | AVFilterContext *ctx = outlink->src; |
| 789 | AVFilterLink *inlink = ctx->inputs[0]; | 795 | AVFilterLink *inlink = ctx->inputs[0]; |
| 790 | ShowCWTContext *s = ctx->priv; | 796 | ShowCWTContext *s = ctx->priv; |
| 791 | float maximum_frequency = fminf(s->maximum_frequency, inlink->sample_rate * 0.5f); | 797 | const float limit_frequency = inlink->sample_rate * 0.5f; |
| 798 | float maximum_frequency = fminf(s->maximum_frequency, limit_frequency); | ||
| 792 | float minimum_frequency = s->minimum_frequency; | 799 | float minimum_frequency = s->minimum_frequency; |
| 793 | float scale = 1.f, factor; | 800 | float scale = 1.f, factor; |
| 794 | int ret; | 801 | int ret; |
| @@ -847,6 +854,10 @@ static int config_output(AVFilterLink *outlink) · 52 unmodified lines | |||
| 847 | minimum_frequency = powf(minimum_frequency, 0.25f); | 854 | minimum_frequency = powf(minimum_frequency, 0.25f); |
| 848 | maximum_frequency = powf(maximum_frequency, 0.25f); | 855 | maximum_frequency = powf(maximum_frequency, 0.25f); |
| 849 | break; | 856 | break; |
| 857 | case FSCALE_FM: | ||
| 858 | minimum_frequency = powf(9.f * (minimum_frequency * minimum_frequency) / 4.f, 1.f / 3.f); | ||
| 859 | maximum_frequency = powf(9.f * (maximum_frequency * maximum_frequency) / 4.f, 1.f / 3.f); | ||
| 860 | break; | ||
| 850 | } | 861 | } |
| 851 | 862 | ||
| 852 | s->frequency_band = av_calloc(s->frequency_band_count, | 863 | s->frequency_band = av_calloc(s->frequency_band_count, |