Commit d47dd843 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '577899a6'

* commit '577899a6':
  lavc: specify the behavior of av_lockmgr_register on failure.

Conflicts:
	libavcodec/avcodec.h
	libavcodec/utils.c
	libavcodec/version.h

See: a950edb4Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 67ddf216 577899a6
...@@ -5116,25 +5116,25 @@ enum AVLockOp { ...@@ -5116,25 +5116,25 @@ enum AVLockOp {
/** /**
* Register a user provided lock manager supporting the operations * Register a user provided lock manager supporting the operations
* specified by AVLockOp. The "mutex" argument to the function points * specified by AVLockOp. The "mutex" argument to the function points
* to a (void *) where the lockmgr should store/get a pointer to a user * to a (void *) where the lockmgr should store/get a pointer to a user
* allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the
* value left by the last call for all other ops. If the lock manager is * value left by the last call for all other ops. If the lock manager is
* unable to perform the op then it should leave the mutex in the same * unable to perform the op then it should leave the mutex in the same
* state as when it was called and return a non-zero value. However, * state as when it was called and return a non-zero value. However,
* when called with AV_LOCK_DESTROY the mutex will always be assumed to * when called with AV_LOCK_DESTROY the mutex will always be assumed to
* have been successfully destroyed. If av_lockmgr_register succeeds * have been successfully destroyed. If av_lockmgr_register succeeds
* it will return a non-negative value, if it fails it will return a * it will return a non-negative value, if it fails it will return a
* negative value and destroy all mutex and unregister all callbacks. * negative value and destroy all mutex and unregister all callbacks.
* av_lockmgr_register is not thread-safe, it must be called from a * av_lockmgr_register is not thread-safe, it must be called from a
* single thread before any calls which make use of locking are used. * single thread before any calls which make use of locking are used.
* *
* @param cb User defined callback. av_lockmgr_register invokes calls * @param cb User defined callback. av_lockmgr_register invokes calls
* to this callback and the previously registered callback. * to this callback and the previously registered callback.
* The callback will be used to create more than one mutex * The callback will be used to create more than one mutex
* each of which must be backed by its own underlying locking * each of which must be backed by its own underlying locking
* mechanism (i.e. do not use a single static object to * mechanism (i.e. do not use a single static object to
* implement your lock manager). If cb is set to NULL the * implement your lock manager). If cb is set to NULL the
* lockmgr will be unregistered. * lockmgr will be unregistered.
*/ */
int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op));
......
...@@ -3492,12 +3492,12 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) ...@@ -3492,12 +3492,12 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op))
void *new_avformat_mutex = NULL; void *new_avformat_mutex = NULL;
int err; int err;
if (err = cb(&new_codec_mutex, AV_LOCK_CREATE)) { if (err = cb(&new_codec_mutex, AV_LOCK_CREATE)) {
return err > 0 ? AVERROR_EXTERNAL : err; return err > 0 ? AVERROR_UNKNOWN : err;
} }
if (err = cb(&new_avformat_mutex, AV_LOCK_CREATE)) { if (err = cb(&new_avformat_mutex, AV_LOCK_CREATE)) {
// Ignore failures to destroy the newly created mutex. // Ignore failures to destroy the newly created mutex.
cb(&new_codec_mutex, AV_LOCK_DESTROY); cb(&new_codec_mutex, AV_LOCK_DESTROY);
return err > 0 ? AVERROR_EXTERNAL : err; return err > 0 ? AVERROR_UNKNOWN : err;
} }
lockmgr_cb = cb; lockmgr_cb = cb;
codec_mutex = new_codec_mutex; codec_mutex = new_codec_mutex;
...@@ -3536,6 +3536,7 @@ int ff_unlock_avcodec(void) ...@@ -3536,6 +3536,7 @@ int ff_unlock_avcodec(void)
if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE)) if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE))
return -1; return -1;
} }
return 0; return 0;
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#define LIBAVCODEC_VERSION_MAJOR 56 #define LIBAVCODEC_VERSION_MAJOR 56
#define LIBAVCODEC_VERSION_MINOR 3 #define LIBAVCODEC_VERSION_MINOR 3
#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_MICRO 101
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment