|
|
|
@@ -380,7 +380,8 @@ static void release_delayed_buffers(PerThreadContext *p) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static int submit_packet(PerThreadContext *p, AVPacket *avpkt) |
|
|
|
static int submit_packet(PerThreadContext *p, AVCodecContext *user_avctx, |
|
|
|
AVPacket *avpkt) |
|
|
|
{ |
|
|
|
FrameThreadContext *fctx = p->parent; |
|
|
|
PerThreadContext *prev_thread = fctx->prev_thread; |
|
|
|
@@ -392,6 +393,12 @@ static int submit_packet(PerThreadContext *p, AVPacket *avpkt) |
|
|
|
|
|
|
|
pthread_mutex_lock(&p->mutex); |
|
|
|
|
|
|
|
ret = update_context_from_user(p->avctx, user_avctx); |
|
|
|
if (ret) { |
|
|
|
pthread_mutex_unlock(&p->mutex); |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
release_delayed_buffers(p); |
|
|
|
|
|
|
|
if (prev_thread) { |
|
|
|
@@ -480,10 +487,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx, |
|
|
|
*/ |
|
|
|
|
|
|
|
p = &fctx->threads[fctx->next_decoding]; |
|
|
|
err = update_context_from_user(p->avctx, avctx); |
|
|
|
if (err) |
|
|
|
goto finish; |
|
|
|
err = submit_packet(p, avpkt); |
|
|
|
err = submit_packet(p, avctx, avpkt); |
|
|
|
if (err) |
|
|
|
goto finish; |
|
|
|
|
|
|
|
|