From e615a777990f9c9cd6dd4d5d85cb21f6e43e5d74 Mon Sep 17 00:00:00 2001 From: Dave Yeo Date: Mon, 27 May 2013 23:22:10 -0700 Subject: os2threads: move from lavc to compat/ For useage in other places besides lavc. Needed after commit 90f9a5830b5d332de7ebb1ab45589f1870cbd65d Signed-off-by: Michael Niedermayer --- compat/os2threads.h | 162 ++++++++++++++++++++++++++++++++++++++ libavcodec/Makefile | 1 - libavcodec/frame_thread_encoder.c | 2 +- libavcodec/os2threads.h | 162 -------------------------------------- libavcodec/pthread.c | 2 +- libavcodec/vp8.h | 2 +- libavfilter/pthread.c | 2 + libavformat/network.c | 2 +- 8 files changed, 168 insertions(+), 167 deletions(-) create mode 100644 compat/os2threads.h delete mode 100644 libavcodec/os2threads.h diff --git a/compat/os2threads.h b/compat/os2threads.h new file mode 100644 index 0000000000..b816bff15f --- /dev/null +++ b/compat/os2threads.h @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2011 KO Myung-Hun + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * os2threads to pthreads wrapper + */ + +#ifndef AVCODEC_OS2PTHREADS_H +#define AVCODEC_OS2PTHREADS_H + +#define INCL_DOS +#include + +#undef __STRICT_ANSI__ /* for _beginthread() */ +#include + +typedef TID pthread_t; +typedef void pthread_attr_t; + +typedef HMTX pthread_mutex_t; +typedef void pthread_mutexattr_t; + +typedef struct { + HEV event_sem; + int wait_count; +} pthread_cond_t; + +typedef void pthread_condattr_t; + +struct thread_arg { + void *(*start_routine)(void *); + void *arg; +}; + +static void thread_entry(void *arg) +{ + struct thread_arg *thread_arg = arg; + + thread_arg->start_routine(thread_arg->arg); + + av_free(thread_arg); +} + +static av_always_inline int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg) +{ + struct thread_arg *thread_arg; + + thread_arg = av_mallocz(sizeof(struct thread_arg)); + + thread_arg->start_routine = start_routine; + thread_arg->arg = arg; + + *thread = _beginthread(thread_entry, NULL, 256 * 1024, thread_arg); + + return 0; +} + +static av_always_inline int pthread_join(pthread_t thread, void **value_ptr) +{ + DosWaitThread((PTID)&thread, DCWW_WAIT); + + return 0; +} + +static av_always_inline int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) +{ + DosCreateMutexSem(NULL, (PHMTX)mutex, 0, FALSE); + + return 0; +} + +static av_always_inline int pthread_mutex_destroy(pthread_mutex_t *mutex) +{ + DosCloseMutexSem(*(PHMTX)mutex); + + return 0; +} + +static av_always_inline int pthread_mutex_lock(pthread_mutex_t *mutex) +{ + DosRequestMutexSem(*(PHMTX)mutex, SEM_INDEFINITE_WAIT); + + return 0; +} + +static av_always_inline int pthread_mutex_unlock(pthread_mutex_t *mutex) +{ + DosReleaseMutexSem(*(PHMTX)mutex); + + return 0; +} + +static av_always_inline int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) +{ + DosCreateEventSem(NULL, &cond->event_sem, DCE_POSTONE, FALSE); + + cond->wait_count = 0; + + return 0; +} + +static av_always_inline int pthread_cond_destroy(pthread_cond_t *cond) +{ + DosCloseEventSem(cond->event_sem); + + return 0; +} + +static av_always_inline int pthread_cond_signal(pthread_cond_t *cond) +{ + if (cond->wait_count > 0) { + DosPostEventSem(cond->event_sem); + + cond->wait_count--; + } + + return 0; +} + +static av_always_inline int pthread_cond_broadcast(pthread_cond_t *cond) +{ + while (cond->wait_count > 0) { + DosPostEventSem(cond->event_sem); + + cond->wait_count--; + } + + return 0; +} + +static av_always_inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) +{ + cond->wait_count++; + + pthread_mutex_unlock(mutex); + + DosWaitEventSem(cond->event_sem, SEM_INDEFINITE_WAIT); + + pthread_mutex_lock(mutex); + + return 0; +} + +#endif /* AVCODEC_OS2PTHREADS_H */ diff --git a/libavcodec/Makefile b/libavcodec/Makefile index ad42d1aebb..32d51a1066 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -803,7 +803,6 @@ SKIPHEADERS-$(CONFIG_MPEG_XVMC_DECODER) += xvmc.h SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_internal.h SKIPHEADERS-$(CONFIG_VDA) += vda.h SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h -SKIPHEADERS-$(HAVE_OS2THREADS) += os2threads.h TESTPROGS = cabac \ dct \ diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c index 80577ec9c4..b9acefc110 100644 --- a/libavcodec/frame_thread_encoder.c +++ b/libavcodec/frame_thread_encoder.c @@ -32,7 +32,7 @@ #elif HAVE_W32THREADS #include "compat/w32pthreads.h" #elif HAVE_OS2THREADS -#include "os2threads.h" +#include "compat/os2threads.h" #endif #define MAX_THREADS 64 diff --git a/libavcodec/os2threads.h b/libavcodec/os2threads.h deleted file mode 100644 index b816bff15f..0000000000 --- a/libavcodec/os2threads.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2011 KO Myung-Hun - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * os2threads to pthreads wrapper - */ - -#ifndef AVCODEC_OS2PTHREADS_H -#define AVCODEC_OS2PTHREADS_H - -#define INCL_DOS -#include - -#undef __STRICT_ANSI__ /* for _beginthread() */ -#include - -typedef TID pthread_t; -typedef void pthread_attr_t; - -typedef HMTX pthread_mutex_t; -typedef void pthread_mutexattr_t; - -typedef struct { - HEV event_sem; - int wait_count; -} pthread_cond_t; - -typedef void pthread_condattr_t; - -struct thread_arg { - void *(*start_routine)(void *); - void *arg; -}; - -static void thread_entry(void *arg) -{ - struct thread_arg *thread_arg = arg; - - thread_arg->start_routine(thread_arg->arg); - - av_free(thread_arg); -} - -static av_always_inline int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg) -{ - struct thread_arg *thread_arg; - - thread_arg = av_mallocz(sizeof(struct thread_arg)); - - thread_arg->start_routine = start_routine; - thread_arg->arg = arg; - - *thread = _beginthread(thread_entry, NULL, 256 * 1024, thread_arg); - - return 0; -} - -static av_always_inline int pthread_join(pthread_t thread, void **value_ptr) -{ - DosWaitThread((PTID)&thread, DCWW_WAIT); - - return 0; -} - -static av_always_inline int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) -{ - DosCreateMutexSem(NULL, (PHMTX)mutex, 0, FALSE); - - return 0; -} - -static av_always_inline int pthread_mutex_destroy(pthread_mutex_t *mutex) -{ - DosCloseMutexSem(*(PHMTX)mutex); - - return 0; -} - -static av_always_inline int pthread_mutex_lock(pthread_mutex_t *mutex) -{ - DosRequestMutexSem(*(PHMTX)mutex, SEM_INDEFINITE_WAIT); - - return 0; -} - -static av_always_inline int pthread_mutex_unlock(pthread_mutex_t *mutex) -{ - DosReleaseMutexSem(*(PHMTX)mutex); - - return 0; -} - -static av_always_inline int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) -{ - DosCreateEventSem(NULL, &cond->event_sem, DCE_POSTONE, FALSE); - - cond->wait_count = 0; - - return 0; -} - -static av_always_inline int pthread_cond_destroy(pthread_cond_t *cond) -{ - DosCloseEventSem(cond->event_sem); - - return 0; -} - -static av_always_inline int pthread_cond_signal(pthread_cond_t *cond) -{ - if (cond->wait_count > 0) { - DosPostEventSem(cond->event_sem); - - cond->wait_count--; - } - - return 0; -} - -static av_always_inline int pthread_cond_broadcast(pthread_cond_t *cond) -{ - while (cond->wait_count > 0) { - DosPostEventSem(cond->event_sem); - - cond->wait_count--; - } - - return 0; -} - -static av_always_inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) -{ - cond->wait_count++; - - pthread_mutex_unlock(mutex); - - DosWaitEventSem(cond->event_sem, SEM_INDEFINITE_WAIT); - - pthread_mutex_lock(mutex); - - return 0; -} - -#endif /* AVCODEC_OS2PTHREADS_H */ diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c index 259dab0d8c..7968a61358 100644 --- a/libavcodec/pthread.c +++ b/libavcodec/pthread.c @@ -43,7 +43,7 @@ #elif HAVE_W32THREADS #include "compat/w32pthreads.h" #elif HAVE_OS2THREADS -#include "os2threads.h" +#include "compat/os2threads.h" #endif typedef int (action_func)(AVCodecContext *c, void *arg); diff --git a/libavcodec/vp8.h b/libavcodec/vp8.h index 1bba79e415..3bc06a7c58 100644 --- a/libavcodec/vp8.h +++ b/libavcodec/vp8.h @@ -38,7 +38,7 @@ #elif HAVE_W32THREADS #include "compat/w32pthreads.h" #elif HAVE_OS2THREADS -#include "os2threads.h" +#include "compat/os2threads.h" #endif #define VP8_MAX_QUANT 127 diff --git a/libavfilter/pthread.c b/libavfilter/pthread.c index 0630ad2f50..eb40f0058e 100644 --- a/libavfilter/pthread.c +++ b/libavfilter/pthread.c @@ -34,6 +34,8 @@ #if HAVE_PTHREADS #include +#elif HAVE_OS2THREADS +#include "compat/os2threads.h" #elif HAVE_W32THREADS #include "compat/w32pthreads.h" #endif diff --git a/libavformat/network.c b/libavformat/network.c index abb89b331e..766351eb6e 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -29,7 +29,7 @@ #if HAVE_PTHREADS #include #elif HAVE_OS2THREADS -#include "libavcodec/os2threads.h" +#include "compat/os2threads.h" #else #include "compat/w32pthreads.h" #endif -- cgit v1.2.3