message: videoio(ffmpeg): limit number of default threads
diff: @@ -373,42 +373,6 @@ inline double get_monotonic_time_diff_ms(timespec time1, timespec time2)
  }
  #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
  {
  @@ -998,12 +962,17 @@ public:
  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);
  