|
|
|
@ -353,6 +353,7 @@ static char *afilters = NULL; |
|
|
|
|
#endif |
|
|
|
|
static int autorotate = 1; |
|
|
|
|
static int find_stream_info = 1; |
|
|
|
|
static int filter_nbthreads = 0; |
|
|
|
|
|
|
|
|
|
/* current context */ |
|
|
|
|
static int is_full_screen; |
|
|
|
@ -1954,6 +1955,7 @@ static int configure_audio_filters(VideoState *is, const char *afilters, int for |
|
|
|
|
avfilter_graph_free(&is->agraph); |
|
|
|
|
if (!(is->agraph = avfilter_graph_alloc())) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
is->agraph->nb_threads = filter_nbthreads; |
|
|
|
|
|
|
|
|
|
while ((e = av_dict_get(swr_opts, "", e, AV_DICT_IGNORE_SUFFIX))) |
|
|
|
|
av_strlcatf(aresample_swr_opts, sizeof(aresample_swr_opts), "%s=%s:", e->key, e->value); |
|
|
|
@ -2162,6 +2164,7 @@ static int video_thread(void *arg) |
|
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
|
goto the_end; |
|
|
|
|
} |
|
|
|
|
graph->nb_threads = filter_nbthreads; |
|
|
|
|
if ((ret = configure_video_filters(graph, is, vfilters_list ? vfilters_list[is->vfilter_idx] : NULL, frame)) < 0) { |
|
|
|
|
SDL_Event event; |
|
|
|
|
event.type = FF_QUIT_EVENT; |
|
|
|
@ -3611,6 +3614,7 @@ static const OptionDef options[] = { |
|
|
|
|
{ "autorotate", OPT_BOOL, { &autorotate }, "automatically rotate video", "" }, |
|
|
|
|
{ "find_stream_info", OPT_BOOL | OPT_INPUT | OPT_EXPERT, { &find_stream_info }, |
|
|
|
|
"read and decode the streams to fill missing information with heuristics" }, |
|
|
|
|
{ "filter_threads", HAS_ARG | OPT_INT | OPT_EXPERT, { &filter_nbthreads }, "number of filter threads per graph" }, |
|
|
|
|
{ NULL, }, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|