static int filter_frame(AVFilterLink *inlink, AVFrame *in) { AVFilterContext *ctx = inlink->dst; VectorscopeContext *s = ctx->priv; AVFilterLink *outlink = ctx->outputs[0]; AVFrame *out; switch (av_frame_get_colorspace(in)) { case AVCOL_SPC_SMPTE170M: case AVCOL_SPC_BT470BG: s->cs = (s->depth - 8) * 2 + 0; break; case AVCOL_SPC_BT709: default: s->cs = (s->depth - 8) * 2 + 1; } out = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!out) { av_frame_free(&in); return AVERROR(ENOMEM); } out->pts = in->pts; s->vectorscope(s, in, out, s->pd); s->graticulef(s, out, s->x, s->y, s->pd, s->cs); av_frame_free(&in); return ff_filter_frame(outlink, out); }
static int filter_frame(AVFilterLink *inlink, AVFrame *in) { AVFilterContext *ctx = inlink->dst; VectorscopeContext *s = ctx->priv; AVFilterLink *outlink = ctx->outputs[0]; AVFrame *out; out = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!out) { av_frame_free(&in); return AVERROR(ENOMEM); } out->pts = in->pts; s->vectorscope(s, in, out, s->pd); av_frame_free(&in); return ff_filter_frame(outlink, out); }