mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavc: enable recursively using avcodec_open2/close.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
7abf394814
commit
2470851f12
@ -178,4 +178,16 @@ int ff_get_logical_cpus(AVCodecContext *avctx);
|
||||
|
||||
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx);
|
||||
|
||||
/**
|
||||
* Call avcodec_open2 recursively by decrementing counter, unlocking mutex,
|
||||
* calling the function and then restoring again. Assumes the mutex is
|
||||
* already locked
|
||||
*/
|
||||
int ff_codec_open2_recursive(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
|
||||
|
||||
/**
|
||||
* Call avcodec_close recursively, counterpart to avcodec_open2_recursive.
|
||||
*/
|
||||
int ff_codec_close_recursive(AVCodecContext *avctx);
|
||||
|
||||
#endif /* AVCODEC_INTERNAL_H */
|
||||
|
@ -798,6 +798,27 @@ int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
|
||||
}
|
||||
#endif
|
||||
|
||||
int attribute_align_arg ff_codec_open2_recursive(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
entangled_thread_counter--;
|
||||
/* Release any user-supplied mutex. */
|
||||
if (ff_lockmgr_cb) {
|
||||
(*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE);
|
||||
}
|
||||
|
||||
ret = avcodec_open2(avctx, codec, options);
|
||||
|
||||
/* If there is a user-supplied mutex locking routine, call it. */
|
||||
if (ff_lockmgr_cb) {
|
||||
if ((*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN))
|
||||
return -1;
|
||||
}
|
||||
entangled_thread_counter++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
|
||||
{
|
||||
int ret = 0;
|
||||
@ -1809,6 +1830,27 @@ void avsubtitle_free(AVSubtitle *sub)
|
||||
memset(sub, 0, sizeof(AVSubtitle));
|
||||
}
|
||||
|
||||
av_cold int ff_codec_close_recursive(AVCodecContext *avctx)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
entangled_thread_counter--;
|
||||
/* Release any user-supplied mutex. */
|
||||
if (ff_lockmgr_cb) {
|
||||
(*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE);
|
||||
}
|
||||
|
||||
ret = avcodec_close(avctx);
|
||||
|
||||
/* If there is a user-supplied mutex locking routine, call it. */
|
||||
if (ff_lockmgr_cb) {
|
||||
if ((*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN))
|
||||
return -1;
|
||||
}
|
||||
entangled_thread_counter++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
av_cold int avcodec_close(AVCodecContext *avctx)
|
||||
{
|
||||
/* If there is a user-supplied mutex locking routine, call it. */
|
||||
|
Loading…
Reference in New Issue
Block a user