lavu/cpu.c: Add av_force_cpu_count() to override auto-detection.

pull/359/head
Thilo Borgmann 4 years ago
parent b7266302a4
commit 87951dcbe7
  1. 13
      libavutil/cpu.c
  2. 6
      libavutil/cpu.h

@ -48,6 +48,7 @@
#endif #endif
static atomic_int cpu_flags = ATOMIC_VAR_INIT(-1); static atomic_int cpu_flags = ATOMIC_VAR_INIT(-1);
static atomic_int cpu_count = ATOMIC_VAR_INIT(-1);
static int get_cpu_flags(void) static int get_cpu_flags(void)
{ {
@ -186,6 +187,7 @@ int av_cpu_count(void)
static atomic_int printed = ATOMIC_VAR_INIT(0); static atomic_int printed = ATOMIC_VAR_INIT(0);
int nb_cpus = 1; int nb_cpus = 1;
int count = 0;
#if HAVE_WINRT #if HAVE_WINRT
SYSTEM_INFO sysinfo; SYSTEM_INFO sysinfo;
#endif #endif
@ -224,9 +226,20 @@ int av_cpu_count(void)
if (!atomic_exchange_explicit(&printed, 1, memory_order_relaxed)) if (!atomic_exchange_explicit(&printed, 1, memory_order_relaxed))
av_log(NULL, AV_LOG_DEBUG, "detected %d logical cores\n", nb_cpus); av_log(NULL, AV_LOG_DEBUG, "detected %d logical cores\n", nb_cpus);
count = atomic_load_explicit(&cpu_count, memory_order_relaxed);
if (count > 0) {
nb_cpus = count;
av_log(NULL, AV_LOG_DEBUG, "overriding to %d logical cores\n", nb_cpus);
}
return nb_cpus; return nb_cpus;
} }
void av_force_cpu_count(int count){
atomic_store_explicit(&cpu_count, count, memory_order_relaxed);
}
size_t av_cpu_max_align(void) size_t av_cpu_max_align(void)
{ {
if (ARCH_MIPS) if (ARCH_MIPS)

@ -98,6 +98,12 @@ int av_parse_cpu_caps(unsigned *flags, const char *s);
*/ */
int av_cpu_count(void); int av_cpu_count(void);
/**
* Overrides cpu count detection and forces the specified count.
* Count < 1 disables forcing of specific count.
*/
void av_force_cpu_count(int count);
/** /**
* Get the maximum data alignment that may be required by FFmpeg. * Get the maximum data alignment that may be required by FFmpeg.
* *

Loading…
Cancel
Save