summaryrefslogtreecommitdiff
path: root/libavcodec/pthread.c
diff options
context:
space:
mode:
authorAnatoliy Wasserman <anatoliy.wasserman@yandex.ru>2011-12-07 14:14:49 -0800
committerMichael Niedermayer <michaelni@gmx.at>2011-12-08 02:01:21 +0100
commit6778f9d9f225cd9ec33ac49a5ec29f3542f980c8 (patch)
tree2eb8a177f08d80bcfc0f504a4fe1831a12ddd5b9 /libavcodec/pthread.c
parentec8a3e25d8cfed9f8f335b88d8162ae331b68df9 (diff)
downloadffmpeg-6778f9d9f225cd9ec33ac49a5ec29f3542f980c8.tar.gz
pthread: fixed thread initialization issues related to thread-safe buffer allocator
Signed-off-by: Anatoliy Wasserman <anatoliy.wasserman@yandex.ru> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/pthread.c')
-rw-r--r--libavcodec/pthread.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index 8aac89fa24..2154163c10 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -301,7 +301,7 @@ static attribute_align_arg void *frame_worker_thread(void *arg)
if (fctx->die) break;
- if (!codec->update_thread_context && avctx->thread_safe_callbacks)
+ if (!codec->update_thread_context && (avctx->thread_safe_callbacks || avctx->get_buffer == avcodec_default_get_buffer))
ff_thread_finish_setup(avctx);
pthread_mutex_lock(&p->mutex);
@@ -403,6 +403,7 @@ static void update_context_from_user(AVCodecContext *dst, AVCodecContext *src)
dst->frame_number = src->frame_number;
dst->reordered_opaque = src->reordered_opaque;
+ dst->thread_safe_callbacks = src->thread_safe_callbacks;
#undef copy_fields
}
@@ -828,7 +829,8 @@ int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f)
}
if (p->state != STATE_SETTING_UP &&
- (avctx->codec->update_thread_context || !avctx->thread_safe_callbacks)) {
+ (avctx->codec->update_thread_context || (!avctx->thread_safe_callbacks &&
+ avctx->get_buffer != avcodec_default_get_buffer))) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() cannot be called after ff_thread_finish_setup()\n");
return -1;
}