|
|
|
@ -1684,19 +1684,6 @@ void avsubtitle_free(AVSubtitle *sub) |
|
|
|
|
|
|
|
|
|
av_cold int avcodec_close(AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
|
/* If there is a user-supplied mutex locking routine, call it. */ |
|
|
|
|
if (lockmgr_cb) { |
|
|
|
|
if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN)) |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
entangled_thread_counter++; |
|
|
|
|
if (entangled_thread_counter != 1) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n"); |
|
|
|
|
entangled_thread_counter--; |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (avcodec_is_open(avctx)) { |
|
|
|
|
FramePool *pool = avctx->internal->pool; |
|
|
|
|
int i; |
|
|
|
@ -1725,12 +1712,7 @@ av_cold int avcodec_close(AVCodecContext *avctx) |
|
|
|
|
av_freep(&avctx->extradata); |
|
|
|
|
avctx->codec = NULL; |
|
|
|
|
avctx->active_thread_type = 0; |
|
|
|
|
entangled_thread_counter--; |
|
|
|
|
|
|
|
|
|
/* Release any user-supplied mutex. */ |
|
|
|
|
if (lockmgr_cb) { |
|
|
|
|
(*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE); |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|