You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
ffplay: add support for setting the number of filter threads
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
@@ -195,6 +195,12 @@ input as soon as possible. Enabled by default for realtime streams, where data
|
|||||||
may be dropped if not read in time. Use this option to enable infinite buffers
|
may be dropped if not read in time. Use this option to enable infinite buffers
|
||||||
for all inputs, use @option{-noinfbuf} to disable it.
|
for all inputs, use @option{-noinfbuf} to disable it.
|
||||||
|
|
||||||
|
@item -filter_threads @var{nb_threads}
|
||||||
|
Defines how many threads are used to process a filter pipeline. Each pipeline
|
||||||
|
will produce a thread pool with this many threads available for parallel
|
||||||
|
processing. The default is 0 which means that the thread count will be
|
||||||
|
determined by the number of available CPUs.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@section While playing
|
@section While playing
|
||||||
|
@@ -353,6 +353,7 @@ static char *afilters = NULL;
|
|||||||
#endif
|
#endif
|
||||||
static int autorotate = 1;
|
static int autorotate = 1;
|
||||||
static int find_stream_info = 1;
|
static int find_stream_info = 1;
|
||||||
|
static int filter_nbthreads = 0;
|
||||||
|
|
||||||
/* current context */
|
/* current context */
|
||||||
static int is_full_screen;
|
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);
|
avfilter_graph_free(&is->agraph);
|
||||||
if (!(is->agraph = avfilter_graph_alloc()))
|
if (!(is->agraph = avfilter_graph_alloc()))
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
is->agraph->nb_threads = filter_nbthreads;
|
||||||
|
|
||||||
while ((e = av_dict_get(swr_opts, "", e, AV_DICT_IGNORE_SUFFIX)))
|
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);
|
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);
|
ret = AVERROR(ENOMEM);
|
||||||
goto the_end;
|
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) {
|
if ((ret = configure_video_filters(graph, is, vfilters_list ? vfilters_list[is->vfilter_idx] : NULL, frame)) < 0) {
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
event.type = FF_QUIT_EVENT;
|
event.type = FF_QUIT_EVENT;
|
||||||
@@ -3611,6 +3614,7 @@ static const OptionDef options[] = {
|
|||||||
{ "autorotate", OPT_BOOL, { &autorotate }, "automatically rotate video", "" },
|
{ "autorotate", OPT_BOOL, { &autorotate }, "automatically rotate video", "" },
|
||||||
{ "find_stream_info", OPT_BOOL | OPT_INPUT | OPT_EXPERT, { &find_stream_info },
|
{ "find_stream_info", OPT_BOOL | OPT_INPUT | OPT_EXPERT, { &find_stream_info },
|
||||||
"read and decode the streams to fill missing information with heuristics" },
|
"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, },
|
{ NULL, },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user