ffplay: add support for setting the number of filter threads
authorMarton Balint <cus@passwd.hu>
Sat, 2 Feb 2019 19:30:16 +0000 (20:30 +0100)
committerMarton Balint <cus@passwd.hu>
Thu, 7 Feb 2019 22:38:53 +0000 (23:38 +0100)
Signed-off-by: Marton Balint <cus@passwd.hu>
doc/ffplay.texi
fftools/ffplay.c

index 99e1d7468a1997cdd1490beb672289c32c9dd1ea..c305465078817e6431c120c749bbdee7964e9741 100644 (file)
@@ -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
 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
 
 @section While playing
index f84052a89b8deaa5024791ad803f2766535a511a..8f050e16e64b6f15e09619f37ddad1fbf88f2bbc 100644 (file)
@@ -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, },
 };