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.
pull/389/head
Anton Khirnov 2 years ago
parent badf959ed6
commit da7ae627e1
  1. 4
      fftools/ffmpeg.h
  2. 8
      fftools/ffmpeg_filter.c
  3. 1
      fftools/ffmpeg_mux.c
  4. 16
      fftools/ffmpeg_mux_init.c

@ -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);

@ -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()))

@ -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);

@ -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");

Loading…
Cancel
Save