Commit aa413b81 authored by Rick Kern's avatar Rick Kern

lavc/videotoolboxenc: flush/free frames on close

Prevents encode callback from running after codec is closed.
Fixes a crash when an error is returned.
Signed-off-by: 's avatarRick Kern <kernrj@gmail.com>
parent 9ea91e41
...@@ -145,6 +145,11 @@ static void set_async_error(VTEncContext *vtctx, int err) ...@@ -145,6 +145,11 @@ static void set_async_error(VTEncContext *vtctx, int err)
pthread_mutex_unlock(&vtctx->lock); pthread_mutex_unlock(&vtctx->lock);
} }
static void clear_frame_queue(VTEncContext *vtctx)
{
set_async_error(vtctx, 0);
}
static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, ExtraSEI **sei) static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, ExtraSEI **sei)
{ {
BufNode *info; BufNode *info;
...@@ -1966,6 +1971,9 @@ static av_cold int vtenc_close(AVCodecContext *avctx) ...@@ -1966,6 +1971,9 @@ static av_cold int vtenc_close(AVCodecContext *avctx)
if(!vtctx->session) return 0; if(!vtctx->session) return 0;
VTCompressionSessionCompleteFrames(vtctx->session,
kCMTimeIndefinite);
clear_frame_queue(vtctx);
pthread_cond_destroy(&vtctx->cv_sample_sent); pthread_cond_destroy(&vtctx->cv_sample_sent);
pthread_mutex_destroy(&vtctx->lock); pthread_mutex_destroy(&vtctx->lock);
CFRelease(vtctx->session); CFRelease(vtctx->session);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment