if ((vars_w[VAR_OUT_H] || vars_w[VAR_OH]) &&
(vars_h[VAR_OUT_W] || vars_h[VAR_OW])) {
- av_log(ctx, AV_LOG_ERROR, "Circular expressions invalid for width '%s' and height '%s'.\n", scale->w_expr, scale->h_expr);
- return AVERROR(EINVAL);
+ av_log(ctx, AV_LOG_WARNING, "Circular references detected for width '%s' and height '%s' - possibly invalid.\n", scale->w_expr, scale->h_expr);
}
if (ctx->filter != &ff_vf_scale2ref &&
return ret;
}
}
- if ((ret = ff_formats_ref(formats, &ctx->inputs[0]->out_formats)) < 0)
+ if ((ret = ff_formats_ref(formats, &ctx->inputs[0]->outcfg.formats)) < 0)
return ret;
}
if (ctx->outputs[0]) {
return ret;
}
}
- if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->in_formats)) < 0)
+ if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->incfg.formats)) < 0)
return ret;
}
scale->input_is_pal = desc->flags & AV_PIX_FMT_FLAG_PAL;
if (outfmt == AV_PIX_FMT_PAL8) outfmt = AV_PIX_FMT_BGR8;
- scale->output_is_pal = av_pix_fmt_desc_get(outfmt)->flags & AV_PIX_FMT_FLAG_PAL ||
- av_pix_fmt_desc_get(outfmt)->flags & FF_PSEUDOPAL;
+ scale->output_is_pal = av_pix_fmt_desc_get(outfmt)->flags & AV_PIX_FMT_FLAG_PAL;
if (scale->sws)
sws_freeContext(scale->sws);
int vsub= ((i+1)&2) ? scale->vsub : 0;
in_stride[i] = cur_pic->linesize[i] * mul;
out_stride[i] = out_buf->linesize[i] * mul;
- in[i] = cur_pic->data[i] + ((y>>vsub)+field) * cur_pic->linesize[i];
- out[i] = out_buf->data[i] + field * out_buf->linesize[i];
+ in[i] = FF_PTR_ADD(cur_pic->data[i], ((y>>vsub)+field) * cur_pic->linesize[i]);
+ out[i] = FF_PTR_ADD(out_buf->data[i], field * out_buf->linesize[i]);
}
if (scale->input_is_pal)
in[1] = cur_pic->data[1];
out,out_stride);
}
-#define TS2T(ts, tb) ((ts) == AV_NOPTS_VALUE ? NAN : (double)(ts) * av_q2d(tb))
-
static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out)
{
AVFilterContext *ctx = link->dst;
return ret;
}
+#if FF_API_CHILD_CLASS_NEXT
static const AVClass *child_class_next(const AVClass *prev)
{
return prev ? NULL : sws_get_class();
}
+#endif
+
+static const AVClass *child_class_iterate(void **iter)
+{
+ const AVClass *c = *iter ? NULL : sws_get_class();
+ *iter = (void*)(uintptr_t)c;
+ return c;
+}
#define OFFSET(x) offsetof(ScaleContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
.option = scale_options,
.version = LIBAVUTIL_VERSION_INT,
.category = AV_CLASS_CATEGORY_FILTER,
+#if FF_API_CHILD_CLASS_NEXT
.child_class_next = child_class_next,
+#endif
+ .child_class_iterate = child_class_iterate,
};
static const AVFilterPad avfilter_vf_scale_inputs[] = {
.option = scale_options,
.version = LIBAVUTIL_VERSION_INT,
.category = AV_CLASS_CATEGORY_FILTER,
+#if FF_API_CHILD_CLASS_NEXT
.child_class_next = child_class_next,
+#endif
+ .child_class_iterate = child_class_iterate,
};
static const AVFilterPad avfilter_vf_scale2ref_inputs[] = {