mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
ffplay: add configure_filtergraph() helper
Will help factorization with the pending -af patch, and add some checks missing in the original code.
This commit is contained in:
parent
720ec62012
commit
79a7451d06
62
ffplay.c
62
ffplay.c
@ -1547,6 +1547,44 @@ static int get_video_frame(VideoState *is, AVFrame *frame, int64_t *pts, AVPacke
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_AVFILTER
|
#if CONFIG_AVFILTER
|
||||||
|
static int configure_filtergraph(AVFilterGraph *graph, const char *filtergraph,
|
||||||
|
AVFilterContext *source_ctx, AVFilterContext *sink_ctx)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
AVFilterInOut *outputs = NULL, *inputs = NULL;
|
||||||
|
|
||||||
|
if (filtergraph) {
|
||||||
|
outputs = avfilter_inout_alloc();
|
||||||
|
inputs = avfilter_inout_alloc();
|
||||||
|
if (!outputs || !inputs) {
|
||||||
|
ret = AVERROR(ENOMEM);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
outputs->name = av_strdup("in");
|
||||||
|
outputs->filter_ctx = source_ctx;
|
||||||
|
outputs->pad_idx = 0;
|
||||||
|
outputs->next = NULL;
|
||||||
|
|
||||||
|
inputs->name = av_strdup("out");
|
||||||
|
inputs->filter_ctx = sink_ctx;
|
||||||
|
inputs->pad_idx = 0;
|
||||||
|
inputs->next = NULL;
|
||||||
|
|
||||||
|
if ((ret = avfilter_graph_parse(graph, filtergraph, &inputs, &outputs, NULL)) < 0)
|
||||||
|
goto fail;
|
||||||
|
} else {
|
||||||
|
if ((ret = avfilter_link(source_ctx, 0, sink_ctx, 0)) < 0)
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
return avfilter_graph_config(graph, NULL);
|
||||||
|
fail:
|
||||||
|
avfilter_inout_free(&outputs);
|
||||||
|
avfilter_inout_free(&inputs);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const char *vfilters)
|
static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const char *vfilters)
|
||||||
{
|
{
|
||||||
static const enum PixelFormat pix_fmts[] = { PIX_FMT_YUV420P, PIX_FMT_NONE };
|
static const enum PixelFormat pix_fmts[] = { PIX_FMT_YUV420P, PIX_FMT_NONE };
|
||||||
@ -1587,29 +1625,7 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
|
|||||||
if ((ret = avfilter_link(filt_format, 0, filt_out, 0)) < 0)
|
if ((ret = avfilter_link(filt_format, 0, filt_out, 0)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
if ((ret = configure_filtergraph(graph, vfilters, filt_src, filt_format)) < 0)
|
||||||
if (vfilters) {
|
|
||||||
AVFilterInOut *outputs = avfilter_inout_alloc();
|
|
||||||
AVFilterInOut *inputs = avfilter_inout_alloc();
|
|
||||||
|
|
||||||
outputs->name = av_strdup("in");
|
|
||||||
outputs->filter_ctx = filt_src;
|
|
||||||
outputs->pad_idx = 0;
|
|
||||||
outputs->next = NULL;
|
|
||||||
|
|
||||||
inputs->name = av_strdup("out");
|
|
||||||
inputs->filter_ctx = filt_format;
|
|
||||||
inputs->pad_idx = 0;
|
|
||||||
inputs->next = NULL;
|
|
||||||
|
|
||||||
if ((ret = avfilter_graph_parse(graph, vfilters, &inputs, &outputs, NULL)) < 0)
|
|
||||||
return ret;
|
|
||||||
} else {
|
|
||||||
if ((ret = avfilter_link(filt_src, 0, filt_format, 0)) < 0)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ret = avfilter_graph_config(graph, NULL)) < 0)
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
is->in_video_filter = filt_src;
|
is->in_video_filter = filt_src;
|
||||||
|
Loading…
Reference in New Issue
Block a user