diff mbox series

[FFmpeg-devel,v2] avutil/thread: add wrappers for pthread_cond_t and pthread_t functions

Message ID 20230818161427.3968-1-jamrial@gmail.com
State New
Headers show
Series [FFmpeg-devel,v2] avutil/thread: add wrappers for pthread_cond_t and pthread_t functions | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

James Almer Aug. 18, 2023, 4:14 p.m. UTC
Signed-off-by: James Almer <jamrial@gmail.com>
---
Now not defining pthread_t when !HAVE_THREADS, like it's done with cond, mutex,
and once.

 libavutil/thread.h | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

Comments

Michael Niedermayer Aug. 18, 2023, 8:16 p.m. UTC | #1
On Fri, Aug 18, 2023 at 01:14:27PM -0300, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
> Now not defining pthread_t when !HAVE_THREADS, like it's done with cond, mutex,
> and once.
> 
>  libavutil/thread.h | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)

this seems not to build on ppc
AVMutex use before definition

make
AR	libavdevice/libavdevice.a
CC	libavfilter/dnn/dnn_backend_common.o
In file included from src/libavfilter/dnn/dnn_backend_common.h:29:0,
                 from src/libavfilter/dnn/dnn_backend_common.c:24:
src/libavutil/thread.h:193:46: error: unknown type name ‘AVMutex’; did you mean ‘AVFilter’?
 static inline int ff_cond_wait(AVCond *cond, AVMutex *mutex){ return 0; }
                                              ^~~~~~~
                                              AVFilter
src/libavutil/thread.h:194:51: error: unknown type name ‘AVMutex’; did you mean ‘AVFilter’?
 static inline int ff_cond_timedwait(AVCond *cond, AVMutex *mutex,
                                                   ^~~~~~~
                                                   AVFilter
src/libavfilter/dnn/dnn_backend_common.c: In function ‘ff_dnn_async_module_cleanup’:
src/libavfilter/dnn/dnn_backend_common.c:94:11: warning: unused variable ‘status’ [-Wunused-variable]
     void *status = 0;
           ^~~~~~
src/libavfilter/dnn/dnn_backend_common.c: In function ‘ff_dnn_start_inference_async’:
src/libavfilter/dnn/dnn_backend_common.c:114:11: warning: unused variable ‘status’ [-Wunused-variable]
     void *status = 0;
           ^~~~~~
At top level:
src/libavfilter/dnn/dnn_backend_common.c:80:14: warning: ‘async_thread_routine’ defined but not used [-Wunused-function]
 static void *async_thread_routine(void *args)
              ^~~~~~~~~~~~~~~~~~~~
src/ffbuild/common.mak:81: recipe for target 'libavfilter/dnn/dnn_backend_common.o' failed
make: *** [libavfilter/dnn/dnn_backend_common.o] Error 1



[...]
James Almer Aug. 18, 2023, 10:04 p.m. UTC | #2
On 8/18/2023 5:16 PM, Michael Niedermayer wrote:
> On Fri, Aug 18, 2023 at 01:14:27PM -0300, James Almer wrote:
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>> Now not defining pthread_t when !HAVE_THREADS, like it's done with cond, mutex,
>> and once.
>>
>>   libavutil/thread.h | 30 ++++++++++++++++++++++++++++++
>>   1 file changed, 30 insertions(+)
> 
> this seems not to build on ppc
> AVMutex use before definition
> 
> make
> AR	libavdevice/libavdevice.a
> CC	libavfilter/dnn/dnn_backend_common.o
> In file included from src/libavfilter/dnn/dnn_backend_common.h:29:0,
>                   from src/libavfilter/dnn/dnn_backend_common.c:24:
> src/libavutil/thread.h:193:46: error: unknown type name ‘AVMutex’; did you mean ‘AVFilter’?
>   static inline int ff_cond_wait(AVCond *cond, AVMutex *mutex){ return 0; }
>                                                ^~~~~~~
>                                                AVFilter
> src/libavutil/thread.h:194:51: error: unknown type name ‘AVMutex’; did you mean ‘AVFilter’?
>   static inline int ff_cond_timedwait(AVCond *cond, AVMutex *mutex,
>                                                     ^~~~~~~
>                                                     AVFilter
> src/libavfilter/dnn/dnn_backend_common.c: In function ‘ff_dnn_async_module_cleanup’:
> src/libavfilter/dnn/dnn_backend_common.c:94:11: warning: unused variable ‘status’ [-Wunused-variable]
>       void *status = 0;
>             ^~~~~~
> src/libavfilter/dnn/dnn_backend_common.c: In function ‘ff_dnn_start_inference_async’:
> src/libavfilter/dnn/dnn_backend_common.c:114:11: warning: unused variable ‘status’ [-Wunused-variable]
>       void *status = 0;
>             ^~~~~~
> At top level:
> src/libavfilter/dnn/dnn_backend_common.c:80:14: warning: ‘async_thread_routine’ defined but not used [-Wunused-function]
>   static void *async_thread_routine(void *args)
>                ^~~~~~~~~~~~~~~~~~~~
> src/ffbuild/common.mak:81: recipe for target 'libavfilter/dnn/dnn_backend_common.o' failed
> make: *** [libavfilter/dnn/dnn_backend_common.o] Error 1

Should be fixed in v3.
diff mbox series

Patch

diff --git a/libavutil/thread.h b/libavutil/thread.h
index 2f5e7e1cb5..7dfa54c6a9 100644
--- a/libavutil/thread.h
+++ b/libavutil/thread.h
@@ -155,6 +155,15 @@  static inline int strict_pthread_once(pthread_once_t *once_control, void (*init_
 #include "compat/w32pthreads.h"
 #endif
 
+#define AVCond pthread_cond_t
+
+#define ff_cond_init      pthread_cond_init
+#define ff_cond_destroy   pthread_cond_destroy
+#define ff_cond_signal    pthread_cond_signal
+#define ff_cond_broadcast pthread_cond_broadcast
+#define ff_cond_wait      pthread_cond_wait
+#define ff_cond_timedwait pthread_cond_timedwait
+
 #define AVMutex pthread_mutex_t
 #define AV_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
 
@@ -168,8 +177,23 @@  static inline int strict_pthread_once(pthread_once_t *once_control, void (*init_
 
 #define ff_thread_once(control, routine) pthread_once(control, routine)
 
+#define AVThread pthread_t
+
+#define ff_thread_create pthread_create
+#define ff_thread_join   pthread_join
+
 #else
 
+#define AVCond char
+
+static inline int ff_cond_init(AVCond *cond, const void *attr){ return 0; }
+static inline int ff_cond_destroy(AVCond *cond){ return 0; }
+static inline int ff_cond_signal(AVCond *cond){ return 0; }
+static inline int ff_cond_broadcast(AVCond *cond){ return 0; }
+static inline int ff_cond_wait(AVCond *cond, AVMutex *mutex){ return 0; }
+static inline int ff_cond_timedwait(AVCond *cond, AVMutex *mutex,
+                                    const void *abstime){ return 0; }
+
 #define AVMutex char
 #define AV_MUTEX_INITIALIZER 0
 
@@ -190,6 +214,12 @@  static inline int ff_thread_once(char *control, void (*routine)(void))
     return 0;
 }
 
+#define AVThread char
+
+static inline int ff_thread_create(AVThread *thread, const void *unused_attr,
+                                   void *(*start_routine)(void*), void *arg){ return 0; }
+static inline int ff_thread_join(AVThread thread, void **value_ptr){ return 0; }
+
 #endif
 
 static inline int ff_thread_setname(const char *name)