34 #if HAVE_SCHED_GETAFFINITY
38 #if HAVE_GETPROCESSAFFINITYMASK
43 #include <sys/param.h>
45 #include <sys/types.h>
46 #include <sys/sysctl.h>
83 #define MAX_BUFFERS (32+1)
158 #define MAX_AUTO_THREADS 16
162 int ret, nb_cpus = 1;
163 #if HAVE_SCHED_GETAFFINITY && defined(CPU_COUNT)
168 ret = sched_getaffinity(0,
sizeof(cpuset), &cpuset);
170 nb_cpus = CPU_COUNT(&cpuset);
172 #elif HAVE_GETPROCESSAFFINITYMASK
173 DWORD_PTR proc_aff, sys_aff;
174 ret = GetProcessAffinityMask(GetCurrentProcess(), &proc_aff, &sys_aff);
176 nb_cpus = av_popcount64(proc_aff);
177 #elif HAVE_SYSCTL && defined(HW_NCPU)
178 int mib[2] = { CTL_HW, HW_NCPU };
179 size_t len =
sizeof(nb_cpus);
181 ret = sysctl(mib, 2, &nb_cpus, &len,
NULL, 0);
184 #elif HAVE_SYSCONF && defined(_SC_NPROC_ONLN)
185 nb_cpus = sysconf(_SC_NPROC_ONLN);
186 #elif HAVE_SYSCONF && defined(_SC_NPROCESSORS_ONLN)
187 nb_cpus = sysconf(_SC_NPROCESSORS_ONLN);
220 c->
func2(avctx, c->
args, our_job, self_id);
275 c->
rets = &dummy_ret;
307 if (thread_count <= 1) {
362 if (p->
state == STATE_INPUT_READY && !fctx->
die) {
364 while (p->
state == STATE_INPUT_READY && !fctx->
die)
369 if (fctx->
die)
break;
381 p->
state = STATE_INPUT_READY;
453 #define copy_fields(s, e) memcpy(&dst->s, &src->s, (char*)&dst->e - (char*)&dst->s);
532 if (prev_thread->
state == STATE_SETTING_UP) {
534 while (prev_thread->
state == STATE_SETTING_UP)
549 memcpy(buf, avpkt->
data, avpkt->
size);
552 p->
state = STATE_SETTING_UP;
564 while (p->
state != STATE_SETUP_FINISHED && p->
state != STATE_INPUT_READY) {
566 while (p->
state == STATE_SETTING_UP)
569 if (p->
state == STATE_GET_BUFFER) {
571 p->
state = STATE_SETTING_UP;
622 p = &fctx->
threads[finished++];
624 if (p->
state != STATE_INPUT_READY) {
626 while (p->
state != STATE_INPUT_READY)
665 if (!progress || progress[field] >= n)
return;
683 if (!progress || progress[field] >= n)
return;
691 while (progress[field] < n)
702 p->
state = STATE_SETUP_FINISHED;
715 if (p->
state != STATE_INPUT_READY) {
717 while (p->
state != STATE_INPUT_READY)
798 if (thread_count <= 1) {
835 err = codec->
init(copy);
897 if (i == MAX_BUFFERS) {
919 if (p->
state != STATE_SETTING_UP &&
921 av_log(avctx,
AV_LOG_ERROR,
"get_buffer() cannot be called after ff_thread_finish_setup()\n");
941 p->
state = STATE_GET_BUFFER;
945 while (p->
state != STATE_SETTING_UP)
983 memset(f->
data, 0,
sizeof(f->
data));