#ifndef VPX_VP8_COMMON_THREADING_H_
#define VPX_VP8_COMMON_THREADING_H_
#include "./vpx_config.h"
#ifdef __cplusplus
extern "C" {
#endif
#if CONFIG_OS_SUPPORT && CONFIG_MULTITHREAD
#if defined(_WIN32) && !HAVE_PTHREAD_H
#include <windows.h>
#else
#ifdef __APPLE__
#include <mach/mach_init.h>
#include <mach/semaphore.h>
#include <mach/task.h>
#include <time.h>
#include <unistd.h>
#else
#include <semaphore.h>
#endif
#endif
#if defined(_WIN32) && !HAVE_PTHREAD_H
#define vp8_sem_t …
#define vp8_sem_init …
#define vp8_sem_wait …
#define vp8_sem_post …
#define vp8_sem_destroy …
#define thread_sleep …
#else
#ifdef __APPLE__
#define vp8_sem_t …
#define vp8_sem_init …
#define vp8_sem_wait …
#define vp8_sem_post …
#define vp8_sem_destroy …
#else
#include <errno.h>
#include <unistd.h>
#include <sched.h>
#define vp8_sem_t …
#define vp8_sem_init …
static INLINE int vp8_sem_wait(vp8_sem_t *sem) { … }
#define vp8_sem_post …
#define vp8_sem_destroy …
#endif
#if defined(__unix__) || defined(__APPLE__)
#define thread_sleep(nms) …
#else
#define thread_sleep …
#endif
#endif
#if VPX_ARCH_X86 || VPX_ARCH_X86_64
#include "vpx_ports/x86.h"
#else
#define x86_pause_hint …
#endif
#include "vpx_util/vpx_atomics.h"
static INLINE void vp8_atomic_spin_wait(
int mb_col, const vpx_atomic_int *last_row_current_mb_col,
const int nsync) { … }
#endif
#ifdef __cplusplus
}
#endif
#endif