ColorContext *color = ctx->priv;
uint8_t rgba_color[4];
int is_packed_rgba;
- const AVPixFmtDescriptor *pix_desc = &av_pix_fmt_descriptors[inlink->format];
+ const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(inlink->format);
color->hsub = pix_desc->log2_chroma_w;
color->vsub = pix_desc->log2_chroma_h;
{
ColorContext *color = link->src->priv;
AVFilterBufferRef *picref = ff_get_video_buffer(link, AV_PERM_WRITE, color->w, color->h);
- AVFilterBufferRef *buf_out;
- int ret;
if (!picref)
return AVERROR(ENOMEM);
picref->pts = color->pts++;
picref->pos = -1;
- buf_out = avfilter_ref_buffer(picref, ~0);
- if (!buf_out) {
- ret = AVERROR(ENOMEM);
- goto fail;
- }
-
- ret = ff_start_frame(link, buf_out);
- if (ret < 0)
- goto fail;
-
ff_draw_rectangle(picref->data, picref->linesize,
color->line, color->line_step, color->hsub, color->vsub,
0, 0, color->w, color->h);
- ret = ff_draw_slice(link, 0, color->h, 1);
- if (ret < 0)
- goto fail;
-
- ret = ff_end_frame(link);
-
-fail:
- avfilter_unref_buffer(picref);
-
- return ret;
+ return ff_filter_frame(link, picref);
}
+static const AVFilterPad avfilter_vsrc_color_outputs[] = {
+ {
+ .name = "default",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .request_frame = color_request_frame,
+ .config_props = color_config_props
+ },
+ { NULL }
+};
+
AVFilter avfilter_vsrc_color = {
.name = "color",
.description = NULL_IF_CONFIG_SMALL("Provide an uniformly colored input, syntax is: [color[:size[:rate]]]"),
.inputs = NULL,
- .outputs = (const AVFilterPad[]) {{ .name = "default",
- .type = AVMEDIA_TYPE_VIDEO,
- .request_frame = color_request_frame,
- .config_props = color_config_props },
- { .name = NULL}},
+ .outputs = avfilter_vsrc_color_outputs,
};