- AVFilterFormats *pix_fmts = NULL;
- int fmt, ret;
-
- for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) {
- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt);
- if (!(desc->flags & AV_PIX_FMT_FLAG_PAL ||
- desc->flags & AV_PIX_FMT_FLAG_HWACCEL ||
- desc->flags & AV_PIX_FMT_FLAG_BITSTREAM) &&
- (ret = ff_add_format(&pix_fmts, fmt)) < 0)
- return ret;
+ AVFilterFormats *formats = NULL;
+ int ret;
+
+ ret = ff_formats_pixdesc_filter(&formats, 0,
+ AV_PIX_FMT_FLAG_BITSTREAM |
+ AV_PIX_FMT_FLAG_PAL |
+ AV_PIX_FMT_FLAG_HWACCEL);
+ if (ret < 0)
+ return ret;
+ return ff_set_common_formats(ctx, formats);
+}
+
+static int parse_weights(AVFilterContext *ctx)
+{
+ MixContext *s = ctx->priv;
+ char *p, *arg, *saveptr = NULL;
+ int i, last = 0;
+
+ s->wfactor = 0.f;
+ p = s->weights_str;
+ for (i = 0; i < s->nb_inputs; i++) {
+ if (!(arg = av_strtok(p, " |", &saveptr)))
+ break;
+
+ p = NULL;
+ if (av_sscanf(arg, "%f", &s->weights[i]) != 1) {
+ av_log(ctx, AV_LOG_ERROR, "Invalid syntax for weights[%d].\n", i);
+ return AVERROR(EINVAL);
+ }
+ s->wfactor += s->weights[i];
+ last = i;