*/
#include <stdio.h>
+#include "libavutil/audioconvert.h"
#include "libavutil/avstring.h"
#include "libavutil/opt.h"
#include "libswresample/swresample.h"
#include "audio.h"
#include "avfilter.h"
#include "formats.h"
+#include "internal.h"
#define MAX_CHANNELS 63
*arg += len;
}
-static av_cold int init(AVFilterContext *ctx, const char *args0, void *opaque)
+static av_cold int init(AVFilterContext *ctx, const char *args0)
{
PanContext *const pan = ctx->priv;
char *arg, *arg0, *tokenizer, *args = av_strdup(args0);
- int out_ch_id, in_ch_id, len, named;
+ int out_ch_id, in_ch_id, len, named, ret;
int nb_in_channels[2] = { 0, 0 }; // number of unnamed and named input channels
double gain;
if (!args)
return AVERROR(ENOMEM);
arg = av_strtok(args, ":", &tokenizer);
- pan->out_channel_layout = av_get_channel_layout(arg);
- if (!pan->out_channel_layout) {
- av_log(ctx, AV_LOG_ERROR, "Unknown channel layout \"%s\"\n", arg);
- return AVERROR(EINVAL);
- }
+ ret = ff_parse_channel_layout(&pan->out_channel_layout, arg, ctx);
+ if (ret < 0)
+ return ret;
pan->nb_output_channels = av_get_channel_layout_nb_channels(pan->out_channel_layout);
/* parse channel specifications */
pan->pure_gains = are_gains_pure(pan);
/* libswr supports any sample and packing formats */
- avfilter_set_common_sample_formats(ctx, avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO));
+ ff_set_common_formats(ctx, ff_all_formats(AVMEDIA_TYPE_AUDIO));
formats = ff_all_samplerates();
if (!formats)
j ? " + " : "", pan->gain[i][j], j);
cur += FFMIN(buf + sizeof(buf) - cur, r);
}
- av_log(ctx, AV_LOG_INFO, "o%d = %s\n", i, buf);
+ av_log(ctx, AV_LOG_VERBOSE, "o%d = %s\n", i, buf);
}
// add channel mapping summary if possible
if (pan->pure_gains) {
return 0;
}
-static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
+static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{
+ int ret;
int n = insamples->audio->nb_samples;
AVFilterLink *const outlink = inlink->dst->outputs[0];
AVFilterBufferRef *outsamples = ff_get_audio_buffer(outlink, AV_PERM_WRITE, n);
avfilter_copy_buffer_ref_props(outsamples, insamples);
outsamples->audio->channel_layout = outlink->channel_layout;
- ff_filter_samples(outlink, outsamples);
+ ret = ff_filter_samples(outlink, outsamples);
avfilter_unref_buffer(insamples);
+ return ret;
}
static av_cold void uninit(AVFilterContext *ctx)