diff options
author | Tian Qi <[email protected]> | 2020-08-27 10:53:27 +0800 |
---|---|---|
committer | Rick Kern <[email protected]> | 2020-09-28 21:46:30 -0400 |
commit | 1cbea3f9caa8d8641f749219a0c207320908778f (patch) | |
tree | 61781f37aa5ef2f357f7c713b573f9f1755ff2ef | |
parent | d80d91d2135e416a0e50ac7127d95ac995f805f6 (diff) |
avcodec/videotoolboxenc: don't wait when flushing data
because there is run in thread mode, few times will block
the workflow at the wait, so check the status is flushing data,
don't wait when flushing data.
Signed-off-by: Tian Qi <[email protected]>
Signed-off-by: Steven Liu <[email protected]>
Signed-off-by: Rick Kern <[email protected]>
-rw-r--r-- | libavcodec/videotoolboxenc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index ea13845232..a99a224bfc 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -294,7 +294,7 @@ static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, E return 0; } - while (!vtctx->q_head && !vtctx->async_error && wait) { + while (!vtctx->q_head && !vtctx->async_error && wait && !vtctx->flushing) { pthread_cond_wait(&vtctx->cv_sample_sent, &vtctx->lock); } @@ -310,6 +310,7 @@ static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, E vtctx->q_tail = NULL; } + vtctx->frame_ct_out++; pthread_mutex_unlock(&vtctx->lock); *buf = info->cm_buffer; @@ -321,7 +322,6 @@ static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, E } av_free(info); - vtctx->frame_ct_out++; return 0; } |