diff --git a/doc/filters.texi b/doc/filters.texi index ac4c9b44d8..aac51bed69 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -4506,6 +4506,11 @@ Descriptions with unrecognised channel names are ignored. @item lfegain Set custom gain for LFE channels. Value is in dB. Default is 0. + +@item framesize +Set custom frame size in number of samples. Default is 1024. +Allowed range is from 1024 to 96000. Only used if option @samp{type} +is set to @var{freq}. @end table @subsection Examples diff --git a/libavfilter/af_sofalizer.c b/libavfilter/af_sofalizer.c index 773093d9ed..94e8c8a53e 100644 --- a/libavfilter/af_sofalizer.c +++ b/libavfilter/af_sofalizer.c @@ -92,6 +92,7 @@ typedef struct SOFAlizerContext { float elevation; /* elevation of virtual loudspeakers (in deg.) */ float radius; /* distance virtual loudspeakers to listener (in metres) */ int type; /* processing type */ + int framesize; /* size of buffer */ VirtualSpeaker vspkrpos[64]; @@ -662,7 +663,7 @@ static int load_data(AVFilterContext *ctx, int azim, int elev, float radius, int /* buffer length is longest IR plus max. delay -> next power of 2 (32 - count leading zeros gives required exponent) */ s->buffer_length = 1 << (32 - ff_clz(n_max)); - s->n_fft = n_fft = 1 << (32 - ff_clz(n_max + sample_rate)); + s->n_fft = n_fft = 1 << (32 - ff_clz(n_max + s->framesize)); if (s->type == FREQUENCY_DOMAIN) { av_fft_end(s->fft[0]); @@ -823,7 +824,7 @@ static int config_input(AVFilterLink *inlink) if (s->type == FREQUENCY_DOMAIN) { inlink->partial_buf_size = inlink->min_samples = - inlink->max_samples = inlink->sample_rate; + inlink->max_samples = s->framesize; } /* gain -3 dB per channel, -6 dB to get LFE on a similar level */ @@ -881,6 +882,7 @@ static const AVOption sofalizer_options[] = { { "freq", "frequency domain", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, .flags = FLAGS, "type" }, { "speakers", "set speaker custom positions", OFFSET(speakers_pos), AV_OPT_TYPE_STRING, {.str=0}, 0, 0, .flags = FLAGS }, { "lfegain", "set lfe gain", OFFSET(lfe_gain), AV_OPT_TYPE_FLOAT, {.dbl=0}, -9, 9, .flags = FLAGS }, + { "framesize", "set frame size", OFFSET(framesize), AV_OPT_TYPE_INT, {.i64=1024},1024,96000, .flags = FLAGS }, { NULL } };