[FFmpeg-cvslog] fftools/ffmpeg_filter: always pass graph description to fg_create()
Anton Khirnov
git at videolan.org
Wed May 31 17:25:44 EEST 2023
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun May 21 19:16:39 2023 +0200| [da7ae627e1a6e0af46790b0ff1c58214ae178093] | committer: Anton Khirnov
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.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=da7ae627e1a6e0af46790b0ff1c58214ae178093
---
fftools/ffmpeg.h | 4 ++--
fftools/ffmpeg_filter.c | 8 ++++----
fftools/ffmpeg_mux.c | 1 -
fftools/ffmpeg_mux_init.c | 16 ++++++++--------
4 files changed, 14 insertions(+), 15 deletions(-)
diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index 95334825ef..1bb9125bf2 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -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);
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index e11ae2e9bf..75317139ba 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -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()))
diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c
index 36ed482072..3da3c04d7f 100644
--- a/fftools/ffmpeg_mux.c
+++ b/fftools/ffmpeg_mux.c
@@ -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);
diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c
index 033e55d76e..1c97804ec8 100644
--- a/fftools/ffmpeg_mux_init.c
+++ b/fftools/ffmpeg_mux_init.c
@@ -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");
More information about the ffmpeg-cvslog
mailing list