added a lock/unlock_lib pair to allow extern progs to serialize access to lavc.
Originally committed as revision 3899 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
a603bf8d68
commit
f4ff1b92cc
@ -33,6 +33,25 @@ typedef struct ThreadContext{
|
|||||||
int ret;
|
int ret;
|
||||||
}ThreadContext;
|
}ThreadContext;
|
||||||
|
|
||||||
|
// it's odd Be never patented that :D
|
||||||
|
struct benaphore {
|
||||||
|
vint32 atom;
|
||||||
|
sem_id sem;
|
||||||
|
};
|
||||||
|
static inline int lock_ben(struct benaphore *ben)
|
||||||
|
{
|
||||||
|
if (atomic_add(&ben->atom, 1) > 0)
|
||||||
|
return acquire_sem(ben->sem);
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
static inline int unlock_ben(struct benaphore *ben)
|
||||||
|
{
|
||||||
|
if (atomic_add(&ben->atom, -1) > 1)
|
||||||
|
return release_sem(ben->sem);
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct benaphore av_thread_lib_ben;
|
||||||
|
|
||||||
static int32 ff_thread_func(void *v){
|
static int32 ff_thread_func(void *v){
|
||||||
ThreadContext *c= v;
|
ThreadContext *c= v;
|
||||||
@ -131,3 +150,31 @@ fail:
|
|||||||
avcodec_thread_free(s);
|
avcodec_thread_free(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* provide a mean to serialize calls to avcodec_*() for thread safety. */
|
||||||
|
|
||||||
|
int avcodec_thread_lock_lib(void)
|
||||||
|
{
|
||||||
|
return lock_ben(&av_thread_lib_ben);
|
||||||
|
}
|
||||||
|
|
||||||
|
int avcodec_thread_unlock_lib(void)
|
||||||
|
{
|
||||||
|
return unlock_ben(&av_thread_lib_ben);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* our versions of _init and _fini (which are called by those actually from crt.o) */
|
||||||
|
|
||||||
|
void initialize_after(void)
|
||||||
|
{
|
||||||
|
av_thread_lib_ben.atom = 0;
|
||||||
|
av_thread_lib_ben.sem = create_sem(0, "libavcodec benaphore");
|
||||||
|
}
|
||||||
|
|
||||||
|
void uninitialize_before(void)
|
||||||
|
{
|
||||||
|
delete_sem(av_thread_lib_ben.sem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user