ffplay: factorize code from video_thread() into configure_video_filters()
Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:

committed by
Mans Rullgard

parent
b9a639ddd6
commit
75ea596de1
51
ffplay.c
51
ffplay.c
@@ -1782,30 +1782,20 @@ static AVFilter input_filter =
|
|||||||
{ .name = NULL }},
|
{ .name = NULL }},
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CONFIG_AVFILTER */
|
static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const char *vfilters)
|
||||||
|
|
||||||
static int video_thread(void *arg)
|
|
||||||
{
|
{
|
||||||
VideoState *is = arg;
|
|
||||||
AVFrame *frame= avcodec_alloc_frame();
|
|
||||||
int64_t pts_int;
|
|
||||||
double pts;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
#if CONFIG_AVFILTER
|
|
||||||
int64_t pos;
|
|
||||||
char sws_flags_str[128];
|
char sws_flags_str[128];
|
||||||
|
int ret;
|
||||||
FFSinkContext ffsink_ctx = { .pix_fmt = PIX_FMT_YUV420P };
|
FFSinkContext ffsink_ctx = { .pix_fmt = PIX_FMT_YUV420P };
|
||||||
AVFilterContext *filt_src = NULL, *filt_out = NULL;
|
AVFilterContext *filt_src = NULL, *filt_out = NULL;
|
||||||
AVFilterGraph *graph = avfilter_graph_alloc();
|
|
||||||
snprintf(sws_flags_str, sizeof(sws_flags_str), "flags=%d", sws_flags);
|
snprintf(sws_flags_str, sizeof(sws_flags_str), "flags=%d", sws_flags);
|
||||||
graph->scale_sws_opts = av_strdup(sws_flags_str);
|
graph->scale_sws_opts = av_strdup(sws_flags_str);
|
||||||
|
|
||||||
if (avfilter_graph_create_filter(&filt_src, &input_filter, "src",
|
if ((ret = avfilter_graph_create_filter(&filt_src, &input_filter, "src",
|
||||||
NULL, is, graph) < 0)
|
NULL, is, graph)) < 0)
|
||||||
goto the_end;
|
goto the_end;
|
||||||
if (avfilter_graph_create_filter(&filt_out, &ffsink, "out",
|
if ((ret = avfilter_graph_create_filter(&filt_out, &ffsink, "out",
|
||||||
NULL, &ffsink_ctx, graph) < 0)
|
NULL, &ffsink_ctx, graph)) < 0)
|
||||||
goto the_end;
|
goto the_end;
|
||||||
|
|
||||||
if(vfilters) {
|
if(vfilters) {
|
||||||
@@ -1822,17 +1812,40 @@ static int video_thread(void *arg)
|
|||||||
inputs->pad_idx = 0;
|
inputs->pad_idx = 0;
|
||||||
inputs->next = NULL;
|
inputs->next = NULL;
|
||||||
|
|
||||||
if (avfilter_graph_parse(graph, vfilters, inputs, outputs, NULL) < 0)
|
if ((ret = avfilter_graph_parse(graph, vfilters, inputs, outputs, NULL)) < 0)
|
||||||
goto the_end;
|
goto the_end;
|
||||||
av_freep(&vfilters);
|
av_freep(&vfilters);
|
||||||
} else {
|
} else {
|
||||||
if(avfilter_link(filt_src, 0, filt_out, 0) < 0) goto the_end;
|
if ((ret = avfilter_link(filt_src, 0, filt_out, 0)) < 0)
|
||||||
|
goto the_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (avfilter_graph_config(graph, NULL) < 0)
|
if ((ret = avfilter_graph_config(graph, NULL)) < 0)
|
||||||
goto the_end;
|
goto the_end;
|
||||||
|
|
||||||
is->out_video_filter = filt_out;
|
is->out_video_filter = filt_out;
|
||||||
|
the_end:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_AVFILTER */
|
||||||
|
|
||||||
|
static int video_thread(void *arg)
|
||||||
|
{
|
||||||
|
VideoState *is = arg;
|
||||||
|
AVFrame *frame= avcodec_alloc_frame();
|
||||||
|
int64_t pts_int;
|
||||||
|
double pts;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
#if CONFIG_AVFILTER
|
||||||
|
AVFilterGraph *graph = avfilter_graph_alloc();
|
||||||
|
AVFilterContext *filt_out = NULL;
|
||||||
|
int64_t pos;
|
||||||
|
|
||||||
|
if ((ret = configure_video_filters(graph, is, vfilters)) < 0)
|
||||||
|
goto the_end;
|
||||||
|
filt_out = is->out_video_filter;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
|
Reference in New Issue
Block a user