}
#endif // USE_AV_INTERRUPT_CALLBACK
-static int get_number_of_cpus(void)
-{
-#if defined _WIN32
- SYSTEM_INFO sysinfo;
- GetSystemInfo( &sysinfo );
-
- return (int)sysinfo.dwNumberOfProcessors;
-#elif defined __linux__ || defined __HAIKU__
- return (int)sysconf( _SC_NPROCESSORS_ONLN );
-#elif defined __APPLE__
- int numCPU=0;
- int mib[4];
- size_t len = sizeof(numCPU);
-
- // set the mib for hw.ncpu
- mib[0] = CTL_HW;
- mib[1] = HW_AVAILCPU; // alternatively, try HW_NCPU;
-
- // get the number of CPUs from the system
- sysctl(mib, 2, &numCPU, &len, NULL, 0);
-
- if( numCPU < 1 )
- {
- mib[1] = HW_NCPU;
- sysctl( mib, 2, &numCPU, &len, NULL, 0 );
-
- if( numCPU < 1 )
- numCPU = 1;
- }
-
- return (int)numCPU;
-#else
- return 1;
-#endif
-}
-
struct Image_FFMPEG
{
inline void fill_codec_context(AVCodecContext * enc, AVDictionary * dict)
{
-//#ifdef FF_API_THREAD_INIT
-// avcodec_thread_init(enc, get_number_of_cpus());
-//#else
- const int nCpus = get_number_of_cpus();
- enc->thread_count = enc->thread_count ? enc->thread_count: nCpus;
-//#endif
+ if (!enc->thread_count)
+ {
+ int nCpus = cv::getNumberOfCPUs();
+ int requestedThreads = std::min(nCpus, 16); // [OPENCV:FFMPEG:24] Application has requested XX threads. Using a thread count greater than 16 is not recommended.
+ char* threads_option = getenv("OPENCV_FFMPEG_THREADS");
+ if (threads_option != NULL)
+ {
+ requestedThreads = atoi(threads_option);
+ }
+ enc->thread_count = requestedThreads;
+ }
AVDictionaryEntry* avdiscard_entry = av_dict_get(dict, "avdiscard", NULL, 0);