Merge commit '577899a6458ccad9026eb268f10dc0b39c224c8d'
* commit '577899a6458ccad9026eb268f10dc0b39c224c8d': lavc: specify the behavior of av_lockmgr_register on failure. Conflicts: libavcodec/avcodec.h libavcodec/utils.c libavcodec/version.h See: a950edb472e8823e34832c7313ba447b2db76f27 Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
d47dd84391
@ -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))
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
|
|
||||||
#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, \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user