fftools/ffmpeg_filter: always pass graph description to fg_create()

Currently NULL would be passed for simple filtergraphs, which would
make the filter code extract the graph description from the output
stream when needed. This is unnecessarily convoluted.
This commit is contained in:
Anton Khirnov 2023-05-21 19:16:39 +02:00
parent badf959ed6
commit da7ae627e1
4 changed files with 14 additions and 15 deletions

View File

@ -590,7 +590,6 @@ typedef struct OutputStream {
FILE *logfile;
OutputFilter *filter;
char *avfilter;
AVDictionary *encoder_opts;
AVDictionary *sws_dict;
@ -737,7 +736,8 @@ int parse_and_set_vsync(const char *arg, int *vsync_var, int file_idx, int st_id
int configure_filtergraph(FilterGraph *fg);
void check_filter_outputs(void);
int filtergraph_is_simple(FilterGraph *fg);
int init_simple_filtergraph(InputStream *ist, OutputStream *ost);
int init_simple_filtergraph(InputStream *ist, OutputStream *ost,
char *graph_desc);
int init_complex_filtergraph(FilterGraph *fg);
void sub2video_update(InputStream *ist, int64_t heartbeat_pts, AVSubtitle *sub);

View File

@ -352,7 +352,8 @@ FilterGraph *fg_create(char *graph_desc)
return fg;
}
int init_simple_filtergraph(InputStream *ist, OutputStream *ost)
int init_simple_filtergraph(InputStream *ist, OutputStream *ost,
char *graph_desc)
{
FilterGraph *fg;
FilterGraphPriv *fgp;
@ -360,7 +361,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost)
InputFilter *ifilter;
int ret;
fg = fg_create(NULL);
fg = fg_create(graph_desc);
if (!fg)
report_and_exit(AVERROR(ENOMEM));
fgp = fgp_from_fg(fg);
@ -1263,8 +1264,7 @@ int configure_filtergraph(FilterGraph *fg)
AVBufferRef *hw_device;
AVFilterInOut *inputs, *outputs, *cur;
int ret, i, simple = filtergraph_is_simple(fg);
const char *graph_desc = simple ? fg->outputs[0]->ost->avfilter :
fgp->graph_desc;
const char *graph_desc = fgp->graph_desc;
cleanup_filtergraph(fg);
if (!(fg->graph = avfilter_graph_alloc()))

View File

@ -853,7 +853,6 @@ static void ost_free(OutputStream **post)
av_freep(&ost->kf.pts);
av_expr_free(ost->kf.pexpr);
av_freep(&ost->avfilter);
av_freep(&ost->logfile_prefix);
av_freep(&ost->apad);

View File

@ -432,7 +432,7 @@ static MuxStream *mux_stream_alloc(Muxer *mux, enum AVMediaType type)
}
static int ost_get_filters(const OptionsContext *o, AVFormatContext *oc,
OutputStream *ost)
OutputStream *ost, char **dst)
{
const char *filters = NULL, *filters_script = NULL;
@ -470,12 +470,12 @@ static int ost_get_filters(const OptionsContext *o, AVFormatContext *oc,
}
if (filters_script)
ost->avfilter = file_read(filters_script);
*dst = file_read(filters_script);
else if (filters)
ost->avfilter = av_strdup(filters);
*dst = av_strdup(filters);
else
ost->avfilter = av_strdup(ost->type == AVMEDIA_TYPE_VIDEO ? "null" : "anull");
return ost->avfilter ? 0 : AVERROR(ENOMEM);
*dst = av_strdup(ost->type == AVMEDIA_TYPE_VIDEO ? "null" : "anull");
return *dst ? 0 : AVERROR(ENOMEM);
}
static void parse_matrix_coeffs(void *logctx, uint16_t *dest, const char *str)
@ -995,7 +995,7 @@ static OutputStream *ost_add(Muxer *mux, const OptionsContext *o,
AVStream *st = avformat_new_stream(oc, NULL);
int ret = 0;
const char *bsfs = NULL, *time_base = NULL;
char *next, *codec_tag = NULL;
char *filters = NULL, *next, *codec_tag = NULL;
double qscale = -1;
int i;
@ -1250,7 +1250,7 @@ static OutputStream *ost_add(Muxer *mux, const OptionsContext *o,
}
if (type == AVMEDIA_TYPE_VIDEO || type == AVMEDIA_TYPE_AUDIO) {
ret = ost_get_filters(o, oc, ost);
ret = ost_get_filters(o, oc, ost, &filters);
if (ret < 0)
exit_program(1);
}
@ -1262,7 +1262,7 @@ static OutputStream *ost_add(Muxer *mux, const OptionsContext *o,
ofilter->ost = ost;
avfilter_inout_free(&ofilter->out_tmp);
} else {
ret = init_simple_filtergraph(ost->ist, ost);
ret = init_simple_filtergraph(ost->ist, ost, filters);
if (ret < 0) {
av_log(ost, AV_LOG_ERROR,
"Error initializing a simple filtergraph\n");