summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThilo Borgmann <thilo.borgmann@mail.de>2021-06-06 15:15:50 +0200
committerThilo Borgmann <thilo.borgmann@mail.de>2021-07-16 10:06:23 +0200
commitcf12a478b206cd107343827426a05aedb83816bc (patch)
tree60d6f3678a21c28ec5a2ffc80987d107cbd8a960
parent87951dcbe775b349a671b9ac2e6ac5c38aee0e79 (diff)
fftools/cmdutils.c: Add cmd line option to override detection of cpu count.
-rw-r--r--doc/fftools-common-opts.texi7
-rw-r--r--fftools/cmdutils.c27
-rw-r--r--fftools/cmdutils.h7
3 files changed, 41 insertions, 0 deletions
diff --git a/doc/fftools-common-opts.texi b/doc/fftools-common-opts.texi
index 5260ecb8f3..7643dd8396 100644
--- a/doc/fftools-common-opts.texi
+++ b/doc/fftools-common-opts.texi
@@ -353,6 +353,13 @@ Possible flags for this option are:
@end table
@end table
+@item -cpucount @var{count} (@emph{global})
+Override detection of CPU count. This option is intended
+for testing. Do not use it unless you know what you're doing.
+@example
+ffmpeg -cpucount 2
+@end example
+
@item -max_alloc @var{bytes}
Set the maximum size limit for allocating a block on the heap by ffmpeg's
family of malloc functions. Exercise @strong{extreme caution} when using
diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 4148285971..6e875104fd 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -71,6 +71,7 @@ AVDictionary *format_opts, *codec_opts, *resample_opts;
static FILE *report_file;
static int report_file_level = AV_LOG_DEBUG;
int hide_banner = 0;
+int cpu_count = -1;
enum show_muxdemuxers {
SHOW_DEFAULT,
@@ -853,6 +854,32 @@ int opt_cpuflags(void *optctx, const char *opt, const char *arg)
return 0;
}
+int opt_cpucount(void *optctx, const char *opt, const char *arg)
+{
+ int ret;
+ int count;
+
+ static const AVOption opts[] = {
+ {"count", NULL, 0, AV_OPT_TYPE_INT, { .i64 = -1}, -1, INT_MAX, NULL},
+ {NULL},
+ };
+ static const AVClass class = {
+ .class_name = "cpucount",
+ .item_name = av_default_item_name,
+ .option = opts,
+ .version = LIBAVUTIL_VERSION_INT,
+ };
+ const AVClass *pclass = &class;
+
+ ret = av_opt_eval_int(&pclass, opts, arg, &count);
+
+ if (!ret) {
+ av_force_cpu_count(count);
+ }
+
+ return ret;
+}
+
int opt_loglevel(void *optctx, const char *opt, const char *arg)
{
const struct { const char *name; int level; } log_levels[] = {
diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h
index 5da9f4c88f..d1d1257b8b 100644
--- a/fftools/cmdutils.h
+++ b/fftools/cmdutils.h
@@ -50,6 +50,7 @@ extern AVDictionary *sws_dict;
extern AVDictionary *swr_opts;
extern AVDictionary *format_opts, *codec_opts, *resample_opts;
extern int hide_banner;
+extern int cpu_count;
/**
* Register a program-specific cleanup routine.
@@ -89,6 +90,11 @@ void log_callback_help(void* ptr, int level, const char* fmt, va_list vl);
int opt_cpuflags(void *optctx, const char *opt, const char *arg);
/**
+ * Override the cpucount.
+ */
+int opt_cpucount(void *optctx, const char *opt, const char *arg);
+
+/**
* Fallback for options that are not explicitly handled, these will be
* parsed through AVOptions.
*/
@@ -239,6 +245,7 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags,
{ "report", 0, { .func_arg = opt_report }, "generate a report" }, \
{ "max_alloc", HAS_ARG, { .func_arg = opt_max_alloc }, "set maximum size of a single allocated block", "bytes" }, \
{ "cpuflags", HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpuflags }, "force specific cpu flags", "flags" }, \
+ { "cpucount", HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpucount }, "force specific cpu count", "count" }, \
{ "hide_banner", OPT_BOOL | OPT_EXPERT, {&hide_banner}, "do not show program banner", "hide_banner" }, \
CMDUTILS_COMMON_OPTIONS_AVDEVICE \