forked from FFmpeg/FFmpeg
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:
parent
badf959ed6
commit
da7ae627e1
4 changed files with 14 additions and 15 deletions
|
@ -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…
Add table
Reference in a new issue