You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
fftools/ffmpeg_filter: return error codes from fg_create() instead of aborting
This commit is contained in:
@@ -751,7 +751,7 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost);
|
||||
* @param graph_desc Graph description; an av_malloc()ed string, filtergraph
|
||||
* takes ownership of it.
|
||||
*/
|
||||
FilterGraph *fg_create(char *graph_desc);
|
||||
int fg_create(FilterGraph **pfg, char *graph_desc);
|
||||
|
||||
void fg_free(FilterGraph **pfg);
|
||||
|
||||
|
@@ -538,16 +538,11 @@ static char *describe_filter_link(FilterGraph *fg, AVFilterInOut *inout, int in)
|
||||
AVFilterContext *ctx = inout->filter_ctx;
|
||||
AVFilterPad *pads = in ? ctx->input_pads : ctx->output_pads;
|
||||
int nb_pads = in ? ctx->nb_inputs : ctx->nb_outputs;
|
||||
char *res;
|
||||
|
||||
if (nb_pads > 1)
|
||||
res = av_strdup(ctx->filter->name);
|
||||
else
|
||||
res = av_asprintf("%s:%s", ctx->filter->name,
|
||||
avfilter_pad_get_name(pads, inout->pad_idx));
|
||||
if (!res)
|
||||
report_and_exit(AVERROR(ENOMEM));
|
||||
return res;
|
||||
return av_strdup(ctx->filter->name);
|
||||
return av_asprintf("%s:%s", ctx->filter->name,
|
||||
avfilter_pad_get_name(pads, inout->pad_idx));
|
||||
}
|
||||
|
||||
static OutputFilter *ofilter_alloc(FilterGraph *fg)
|
||||
@@ -799,7 +794,7 @@ static const AVClass fg_class = {
|
||||
.category = AV_CLASS_CATEGORY_FILTER,
|
||||
};
|
||||
|
||||
FilterGraph *fg_create(char *graph_desc)
|
||||
int fg_create(FilterGraph **pfg, char *graph_desc)
|
||||
{
|
||||
FilterGraphPriv *fgp = allocate_array_elem(&filtergraphs, sizeof(*fgp), &nb_filtergraphs);
|
||||
FilterGraph *fg = &fgp->fg;
|
||||
@@ -808,6 +803,9 @@ FilterGraph *fg_create(char *graph_desc)
|
||||
AVFilterGraph *graph;
|
||||
int ret = 0;
|
||||
|
||||
if (pfg)
|
||||
*pfg = fg;
|
||||
|
||||
fg->class = &fg_class;
|
||||
fg->index = nb_filtergraphs - 1;
|
||||
fgp->graph_desc = graph_desc;
|
||||
@@ -817,13 +815,13 @@ FilterGraph *fg_create(char *graph_desc)
|
||||
|
||||
fgp->frame = av_frame_alloc();
|
||||
if (!fgp->frame)
|
||||
report_and_exit(AVERROR(ENOMEM));
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
/* this graph is only used for determining the kinds of inputs
|
||||
* and outputs we have, and is discarded on exit from this function */
|
||||
graph = avfilter_graph_alloc();
|
||||
if (!graph)
|
||||
report_and_exit(AVERROR(ENOMEM));
|
||||
return AVERROR(ENOMEM);;
|
||||
graph->nb_threads = 1;
|
||||
|
||||
ret = graph_parse(graph, fgp->graph_desc, &inputs, &outputs, NULL);
|
||||
@@ -840,6 +838,10 @@ FilterGraph *fg_create(char *graph_desc)
|
||||
ifp->type = avfilter_pad_get_type(cur->filter_ctx->input_pads,
|
||||
cur->pad_idx);
|
||||
ifilter->name = describe_filter_link(fg, cur, 1);
|
||||
if (!ifilter->name) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
for (AVFilterInOut *cur = outputs; cur; cur = cur->next) {
|
||||
@@ -851,6 +853,10 @@ FilterGraph *fg_create(char *graph_desc)
|
||||
ofilter->type = avfilter_pad_get_type(cur->filter_ctx->output_pads,
|
||||
cur->pad_idx);
|
||||
ofilter->name = describe_filter_link(fg, cur, 0);
|
||||
if (!ofilter->name) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fg->nb_outputs) {
|
||||
@@ -865,9 +871,9 @@ fail:
|
||||
avfilter_graph_free(&graph);
|
||||
|
||||
if (ret < 0)
|
||||
report_and_exit(ret);
|
||||
return ret;
|
||||
|
||||
return fg;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int init_simple_filtergraph(InputStream *ist, OutputStream *ost,
|
||||
@@ -877,9 +883,9 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost,
|
||||
FilterGraphPriv *fgp;
|
||||
int ret;
|
||||
|
||||
fg = fg_create(graph_desc);
|
||||
if (!fg)
|
||||
report_and_exit(AVERROR(ENOMEM));
|
||||
ret = fg_create(&fg, graph_desc);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
fgp = fgp_from_fg(fg);
|
||||
|
||||
fgp->is_simple = 1;
|
||||
|
@@ -1112,9 +1112,7 @@ static int opt_filter_complex(void *optctx, const char *opt, const char *arg)
|
||||
if (!graph_desc)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
fg_create(graph_desc);
|
||||
|
||||
return 0;
|
||||
return fg_create(NULL, graph_desc);
|
||||
}
|
||||
|
||||
static int opt_filter_complex_script(void *optctx, const char *opt, const char *arg)
|
||||
@@ -1123,9 +1121,7 @@ static int opt_filter_complex_script(void *optctx, const char *opt, const char *
|
||||
if (!graph_desc)
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
fg_create(graph_desc);
|
||||
|
||||
return 0;
|
||||
return fg_create(NULL, graph_desc);
|
||||
}
|
||||
|
||||
void show_help_default(const char *opt, const char *arg)
|
||||
|
Reference in New Issue
Block a user