|
|
@ -32,6 +32,8 @@ |
|
|
|
#undef __STRICT_ANSI__ /* for _beginthread() */ |
|
|
|
#undef __STRICT_ANSI__ /* for _beginthread() */ |
|
|
|
#include <stdlib.h> |
|
|
|
#include <stdlib.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <sys/fmutex.h> |
|
|
|
|
|
|
|
|
|
|
|
#include "libavutil/mem.h" |
|
|
|
#include "libavutil/mem.h" |
|
|
|
|
|
|
|
|
|
|
|
typedef TID pthread_t; |
|
|
|
typedef TID pthread_t; |
|
|
@ -47,6 +49,13 @@ typedef struct { |
|
|
|
|
|
|
|
|
|
|
|
typedef void pthread_condattr_t; |
|
|
|
typedef void pthread_condattr_t; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
|
|
|
|
volatile int done; |
|
|
|
|
|
|
|
_fmutex mtx; |
|
|
|
|
|
|
|
} pthread_once_t; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PTHREAD_ONCE_INIT {0, _FMUTEX_INITIALIZER} |
|
|
|
|
|
|
|
|
|
|
|
struct thread_arg { |
|
|
|
struct thread_arg { |
|
|
|
void *(*start_routine)(void *); |
|
|
|
void *(*start_routine)(void *); |
|
|
|
void *arg; |
|
|
|
void *arg; |
|
|
@ -163,4 +172,22 @@ static av_always_inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mute |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static av_always_inline int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!once_control->done) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_fmutex_request(&once_control->mtx, 0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!once_control->done) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
init_routine(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
once_control->done = 1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_fmutex_release(&once_control->mtx); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
#endif /* AVCODEC_OS2PTHREADS_H */ |
|
|
|
#endif /* AVCODEC_OS2PTHREADS_H */ |
|
|
|