X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_scale.c;h=d95a8ad48a638902861a25244f24a5a6696fc78d;hb=bd96c54fe4819b3ca9a975e2083d67f4443c559b;hp=d46c767e70fdd35d79cb787ee98138c6820d46be;hpb=0dc0837960eaaff27d2104ae6b89e29790b38d6a;p=ffmpeg diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index d46c767e70f..d95a8ad48a6 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -155,7 +155,7 @@ typedef struct ScaleContext { } ScaleContext; -AVFilter ff_vf_scale2ref; +const AVFilter ff_vf_scale2ref; static int config_props(AVFilterLink *outlink); @@ -184,8 +184,7 @@ static int check_exprs(AVFilterContext *ctx) 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 && @@ -359,7 +358,7 @@ static int query_formats(AVFilterContext *ctx) 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]) { @@ -373,7 +372,7 @@ static int query_formats(AVFilterContext *ctx) 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; } @@ -511,8 +510,7 @@ static int config_props(AVFilterLink *outlink) 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); @@ -636,8 +634,8 @@ static int scale_slice(AVFilterLink *link, AVFrame *out_buf, AVFrame *cur_pic, s 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]; @@ -648,8 +646,6 @@ static int scale_slice(AVFilterLink *link, AVFrame *out_buf, AVFrame *cur_pic, s 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; @@ -883,9 +879,11 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar return ret; } -static const AVClass *child_class_next(const AVClass *prev) +static const AVClass *child_class_iterate(void **iter) { - return prev ? NULL : sws_get_class(); + const AVClass *c = *iter ? NULL : sws_get_class(); + *iter = (void*)(uintptr_t)c; + return c; } #define OFFSET(x) offsetof(ScaleContext, x) @@ -945,7 +943,7 @@ static const AVClass scale_class = { .option = scale_options, .version = LIBAVUTIL_VERSION_INT, .category = AV_CLASS_CATEGORY_FILTER, - .child_class_next = child_class_next, + .child_class_iterate = child_class_iterate, }; static const AVFilterPad avfilter_vf_scale_inputs[] = { @@ -966,7 +964,7 @@ static const AVFilterPad avfilter_vf_scale_outputs[] = { { NULL } }; -AVFilter ff_vf_scale = { +const AVFilter ff_vf_scale = { .name = "scale", .description = NULL_IF_CONFIG_SMALL("Scale the input video size and/or convert the image format."), .init_dict = init_dict, @@ -985,7 +983,7 @@ static const AVClass scale2ref_class = { .option = scale_options, .version = LIBAVUTIL_VERSION_INT, .category = AV_CLASS_CATEGORY_FILTER, - .child_class_next = child_class_next, + .child_class_iterate = child_class_iterate, }; static const AVFilterPad avfilter_vf_scale2ref_inputs[] = { @@ -1018,7 +1016,7 @@ static const AVFilterPad avfilter_vf_scale2ref_outputs[] = { { NULL } }; -AVFilter ff_vf_scale2ref = { +const AVFilter ff_vf_scale2ref = { .name = "scale2ref", .description = NULL_IF_CONFIG_SMALL("Scale the input video size and/or convert the image format to the given reference."), .init_dict = init_dict,