mirror of https://git.ffmpeg.org/ffmpeg.git
lavfi/graphparser: be more verbose when filtergraph parsing fails
When an option could not be found, print its name and value. Note that this is not done while applying the options in avfilter_graph_segment_apply_opts() to give the caller the option of handling the missing options in some other way.
This commit is contained in:
parent
ca818ab51c
commit
4abf42ab96
|
@ -851,6 +851,32 @@ fail:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// print an error message if some options were not found
|
||||||
|
static void log_unknown_opt(const AVFilterGraphSegment *seg)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < seg->nb_chains; i++) {
|
||||||
|
const AVFilterChain *ch = seg->chains[i];
|
||||||
|
|
||||||
|
for (size_t j = 0; j < ch->nb_filters; j++) {
|
||||||
|
const AVFilterParams *p = ch->filters[j];
|
||||||
|
const AVDictionaryEntry *e;
|
||||||
|
|
||||||
|
if (!p->filter)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
e = av_dict_iterate(p->opts, NULL);
|
||||||
|
|
||||||
|
if (e) {
|
||||||
|
av_log(p->filter, AV_LOG_ERROR,
|
||||||
|
"Could not set non-existent option '%s' to value '%s'\n",
|
||||||
|
e->key, e->value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int avfilter_graph_segment_apply(AVFilterGraphSegment *seg, int flags,
|
int avfilter_graph_segment_apply(AVFilterGraphSegment *seg, int flags,
|
||||||
AVFilterInOut **inputs,
|
AVFilterInOut **inputs,
|
||||||
AVFilterInOut **outputs)
|
AVFilterInOut **outputs)
|
||||||
|
@ -868,6 +894,8 @@ int avfilter_graph_segment_apply(AVFilterGraphSegment *seg, int flags,
|
||||||
|
|
||||||
ret = avfilter_graph_segment_apply_opts(seg, 0);
|
ret = avfilter_graph_segment_apply_opts(seg, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
if (ret == AVERROR_OPTION_NOT_FOUND)
|
||||||
|
log_unknown_opt(seg);
|
||||||
av_log(seg->graph, AV_LOG_ERROR, "Error applying filter options\n");
|
av_log(seg->graph, AV_LOG_ERROR, "Error applying filter options\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -909,8 +937,11 @@ int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters,
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
ret = avfilter_graph_segment_apply_opts(seg, 0);
|
ret = avfilter_graph_segment_apply_opts(seg, 0);
|
||||||
if (ret < 0)
|
if (ret < 0) {
|
||||||
|
if (ret == AVERROR_OPTION_NOT_FOUND)
|
||||||
|
log_unknown_opt(seg);
|
||||||
goto end;
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ret = avfilter_graph_segment_init(seg, 0);
|
ret = avfilter_graph_segment_init(seg, 0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -988,6 +1019,9 @@ end:
|
||||||
avfilter_graph_segment_free(&seg);
|
avfilter_graph_segment_free(&seg);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
av_log(graph, AV_LOG_ERROR, "Error processing filtergraph: %s\n",
|
||||||
|
av_err2str(ret));
|
||||||
|
|
||||||
while (graph->nb_filters)
|
while (graph->nb_filters)
|
||||||
avfilter_free(graph->filters[0]);
|
avfilter_free(graph->filters[0]);
|
||||||
av_freep(&graph->filters);
|
av_freep(&graph->filters);
|
||||||
|
|
Loading…
Reference in New Issue