From 2d1b6fb72bd3d37798d448ba32ba85ee0eabd9e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Sun, 30 Oct 2011 01:20:15 +0300 Subject: [PATCH] avcodec: Allow locking and unlocking an avformat specific mutex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This extends the lock manager in avcodec to manage two separate mutexes via the user-specified lock functions. Signed-off-by: Martin Storsjö --- libavcodec/internal.h | 3 +++ libavcodec/utils.c | 23 +++++++++++++++++++++++ libavcodec/version.h | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/libavcodec/internal.h b/libavcodec/internal.h index e676148d75..54d57d2bec 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -55,4 +55,7 @@ int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b); unsigned int avpriv_toupper4(unsigned int x); +int avpriv_lock_avformat(void); +int avpriv_unlock_avformat(void); + #endif /* AVCODEC_INTERNAL_H */ diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 35c9eebc3a..cd8dce91fc 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -48,6 +48,7 @@ static int volatile entangled_thread_counter=0; static int (*ff_lockmgr_cb)(void **mutex, enum AVLockOp op); static void *codec_mutex; +static void *avformat_mutex; void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size) { @@ -1270,6 +1271,8 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) if (ff_lockmgr_cb) { if (ff_lockmgr_cb(&codec_mutex, AV_LOCK_DESTROY)) return -1; + if (ff_lockmgr_cb(&avformat_mutex, AV_LOCK_DESTROY)) + return -1; } ff_lockmgr_cb = cb; @@ -1277,6 +1280,26 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) if (ff_lockmgr_cb) { if (ff_lockmgr_cb(&codec_mutex, AV_LOCK_CREATE)) return -1; + if (ff_lockmgr_cb(&avformat_mutex, AV_LOCK_CREATE)) + return -1; + } + return 0; +} + +int avpriv_lock_avformat(void) +{ + if (ff_lockmgr_cb) { + if ((*ff_lockmgr_cb)(&avformat_mutex, AV_LOCK_OBTAIN)) + return -1; + } + return 0; +} + +int avpriv_unlock_avformat(void) +{ + if (ff_lockmgr_cb) { + if ((*ff_lockmgr_cb)(&avformat_mutex, AV_LOCK_RELEASE)) + return -1; } return 0; } diff --git a/libavcodec/version.h b/libavcodec/version.h index 65cc5594cc..3fc418e466 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -21,7 +21,7 @@ #define AVCODEC_VERSION_H #define LIBAVCODEC_VERSION_MAJOR 53 -#define LIBAVCODEC_VERSION_MINOR 15 +#define LIBAVCODEC_VERSION_MINOR 16 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \