On Thu, 1 Oct 2015 15:36:56 +0100 Derek Buitenhuis <[email protected]> wrote:
> Signed-off-by: Derek Buitenhuis <[email protected]> > --- > libavcodec/utils.c | 38 +++++++++++++++++++++----------------- > 1 file changed, 21 insertions(+), 17 deletions(-) > > diff --git a/libavcodec/utils.c b/libavcodec/utils.c > index 1721c09..586e7be 100644 > --- a/libavcodec/utils.c > +++ b/libavcodec/utils.c > @@ -845,20 +845,21 @@ int attribute_align_arg avcodec_open2(AVCodecContext > *avctx, const AVCodec *code > av_dict_copy(&tmp, *options, 0); > > /* If there is a user-supplied mutex locking routine, call it. */ > - if (lockmgr_cb) { > - if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN)) > - return -1; > - } > + if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) { > + if (lockmgr_cb) { > + if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN)) > + return -1; > + } > > - entangled_thread_counter++; > - if (entangled_thread_counter != 1 && > - !(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE)) { > - av_log(avctx, AV_LOG_ERROR, > - "Insufficient thread locking. At least %d threads are " > - "calling avcodec_open2() at the same time right now.\n", > - entangled_thread_counter); > - ret = -1; > - goto end; > + entangled_thread_counter++; > + if (entangled_thread_counter != 1) { > + av_log(avctx, AV_LOG_ERROR, > + "Insufficient thread locking. At least %d threads are " > + "calling avcodec_open2() at the same time right now.\n", > + entangled_thread_counter); > + ret = -1; > + goto end; > + } > } > > avctx->internal = av_mallocz(sizeof(AVCodecInternal)); > @@ -1085,12 +1086,15 @@ FF_ENABLE_DEPRECATION_WARNINGS > #endif > } > end: > - entangled_thread_counter--; > + if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) { > + entangled_thread_counter--; > > - /* Release any user-supplied mutex. */ > - if (lockmgr_cb) { > - (*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE); > + /* Release any user-supplied mutex. */ > + if (lockmgr_cb) { > + (*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE); > + } > } > + > if (options) { > av_dict_free(options); > *options = tmp; Is this a preparation for a long, painful transition, or just a way to workaround your particular failure case? _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
