34 #if HAVE_SCHED_GETAFFINITY
38 #if HAVE_GETPROCESSAFFINITYMASK
43 #include <sys/param.h>
45 #include <sys/types.h>
46 #include <sys/sysctl.h>
84 #define MAX_BUFFERS (32+1)
159 #define MAX_AUTO_THREADS 16
163 int ret, nb_cpus = 1;
164 #if HAVE_SCHED_GETAFFINITY && defined(CPU_COUNT)
169 ret = sched_getaffinity(0,
sizeof(cpuset), &cpuset);
171 nb_cpus = CPU_COUNT(&cpuset);
173 #elif HAVE_GETPROCESSAFFINITYMASK
174 DWORD_PTR proc_aff, sys_aff;
175 ret = GetProcessAffinityMask(GetCurrentProcess(), &proc_aff, &sys_aff);
177 nb_cpus = av_popcount64(proc_aff);
178 #elif HAVE_SYSCTL && defined(HW_NCPU)
179 int mib[2] = { CTL_HW, HW_NCPU };
180 size_t len =
sizeof(nb_cpus);
182 ret = sysctl(mib, 2, &nb_cpus, &len,
NULL, 0);
185 #elif HAVE_SYSCONF && defined(_SC_NPROC_ONLN)
186 nb_cpus = sysconf(_SC_NPROC_ONLN);
187 #elif HAVE_SYSCONF && defined(_SC_NPROCESSORS_ONLN)
188 nb_cpus = sysconf(_SC_NPROCESSORS_ONLN);
199 unsigned last_execute = 0;
224 c->
func2(avctx, c->
args, our_job, self_id);
280 c->
rets = &dummy_ret;
313 if (thread_count <= 1) {
368 if (p->
state == STATE_INPUT_READY && !fctx->
die) {
370 while (p->
state == STATE_INPUT_READY && !fctx->
die)
375 if (fctx->
die)
break;
387 p->
state = STATE_INPUT_READY;
459 #define copy_fields(s, e) memcpy(&dst->s, &src->s, (char*)&dst->e - (char*)&dst->s);
538 if (prev_thread->
state == STATE_SETTING_UP) {
540 while (prev_thread->
state == STATE_SETTING_UP)
555 memcpy(buf, avpkt->
data, avpkt->
size);
558 p->
state = STATE_SETTING_UP;
570 while (p->
state != STATE_SETUP_FINISHED && p->
state != STATE_INPUT_READY) {
572 while (p->
state == STATE_SETTING_UP)
575 if (p->
state == STATE_GET_BUFFER) {
577 p->
state = STATE_SETTING_UP;
628 p = &fctx->
threads[finished++];
630 if (p->
state != STATE_INPUT_READY) {
632 while (p->
state != STATE_INPUT_READY)
671 if (!progress || progress[field] >= n)
return;
689 if (!progress || progress[field] >= n)
return;
697 while (progress[field] < n)
708 p->
state = STATE_SETUP_FINISHED;
721 if (p->
state != STATE_INPUT_READY) {
723 while (p->
state != STATE_INPUT_READY)
804 if (thread_count <= 1) {
841 err = codec->
init(copy);
903 if (i == MAX_BUFFERS) {
925 if (p->
state != STATE_SETTING_UP &&
927 av_log(avctx,
AV_LOG_ERROR,
"get_buffer() cannot be called after ff_thread_finish_setup()\n");
947 p->
state = STATE_GET_BUFFER;
951 while (p->
state != STATE_SETTING_UP)
989 memset(f->
data, 0,
sizeof(f->
data));