[FFmpeg-devel] [PATCH 4/4] lavfi/af_pan: support unknown layouts on input.
Stefano Sabatini
stefasab at gmail.com
Fri Oct 25 19:11:28 CEST 2013
Subjective nit: I prefer lavfi/pan: no dot at the end
On date Friday 2013-10-25 16:20:58 +0200, Nicolas George encoded:
> Fix trac ticket #2899.
>
> Signed-off-by: Nicolas George <george at nsup.org>
> ---
> libavfilter/af_pan.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/libavfilter/af_pan.c b/libavfilter/af_pan.c
> index 9f78ff0..3d3b98d 100644
> --- a/libavfilter/af_pan.c
> +++ b/libavfilter/af_pan.c
> @@ -46,7 +46,6 @@ typedef struct PanContext {
> double gain[MAX_CHANNELS][MAX_CHANNELS];
> int64_t need_renorm;
> int need_renumber;
> - int nb_input_channels;
> int nb_output_channels;
>
> int pure_gains;
> @@ -239,7 +238,7 @@ static int query_formats(AVFilterContext *ctx)
> ff_set_common_samplerates(ctx, formats);
>
> // inlink supports any channel layout
> - layouts = ff_all_channel_layouts();
> + layouts = ff_all_channel_counts();
> ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts);
>
> // outlink supports only requested output channel layout
> @@ -259,7 +258,6 @@ static int config_props(AVFilterLink *link)
> int i, j, k, r;
> double t;
>
> - pan->nb_input_channels = av_get_channel_layout_nb_channels(link->channel_layout);
> if (pan->need_renumber) {
> // input channels were given by their name: renumber them
> for (i = j = 0; i < MAX_CHANNELS; i++) {
> @@ -273,7 +271,7 @@ static int config_props(AVFilterLink *link)
>
> // sanity check; can't be done in query_formats since the inlink
> // channel layout is unknown at that time
> - if (pan->nb_input_channels > SWR_CH_MAX ||
> + if (link->channels > SWR_CH_MAX ||
> pan->nb_output_channels > SWR_CH_MAX) {
> av_log(ctx, AV_LOG_ERROR,
> "libswresample support a maximum of %d channels. "
> @@ -288,6 +286,8 @@ static int config_props(AVFilterLink *link)
> 0, ctx);
> if (!pan->swr)
> return AVERROR(ENOMEM);
> + if (!link->channel_layout)
> + av_opt_set_int(pan->swr, "ich", link->channels, 0);
> if (!pan->out_channel_layout)
> av_opt_set_int(pan->swr, "och", pan->nb_output_channels, 0);
>
> @@ -297,7 +297,7 @@ static int config_props(AVFilterLink *link)
> // get channel map from the pure gains
> for (i = 0; i < pan->nb_output_channels; i++) {
> int ch_id = -1;
> - for (j = 0; j < pan->nb_input_channels; j++) {
> + for (j = 0; j < link->channels; j++) {
> if (pan->gain[i][j]) {
> ch_id = j;
> break;
> @@ -315,7 +315,7 @@ static int config_props(AVFilterLink *link)
> if (!((pan->need_renorm >> i) & 1))
> continue;
> t = 0;
> - for (j = 0; j < pan->nb_input_channels; j++)
> + for (j = 0; j < link->channels; j++)
> t += pan->gain[i][j];
> if (t > -1E-5 && t < 1E-5) {
> // t is almost 0 but not exactly, this is probably a mistake
> @@ -324,7 +324,7 @@ static int config_props(AVFilterLink *link)
> "Degenerate coefficients while renormalizing\n");
> continue;
> }
> - for (j = 0; j < pan->nb_input_channels; j++)
> + for (j = 0; j < link->channels; j++)
> pan->gain[i][j] /= t;
> }
> av_opt_set_int(pan->swr, "icl", link->channel_layout, 0);
> @@ -339,7 +339,7 @@ static int config_props(AVFilterLink *link)
> // summary
> for (i = 0; i < pan->nb_output_channels; i++) {
> cur = buf;
> - for (j = 0; j < pan->nb_input_channels; j++) {
> + for (j = 0; j < link->channels; j++) {
> r = snprintf(cur, buf + sizeof(buf) - cur, "%s%.3g i%d",
> j ? " + " : "", pan->gain[i][j], j);
> cur += FFMIN(buf + sizeof(buf) - cur, r);
LGTM, thanks.
--
FFmpeg = Foolish and Friendly Maxi Power Evanescent Gladiator
More information about the ffmpeg-devel
mailing list