From aa413b810a7f94d8317635160a1de1b573b138ee Mon Sep 17 00:00:00 2001 From: Rick Kern Date: Mon, 10 Oct 2016 09:13:39 -0400 Subject: [PATCH] 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: Rick Kern --- libavcodec/videotoolboxenc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index d9100494d7..73e673f082 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -145,6 +145,11 @@ static void set_async_error(VTEncContext *vtctx, int err) 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) { BufNode *info; @@ -1966,6 +1971,9 @@ static av_cold int vtenc_close(AVCodecContext *avctx) if(!vtctx->session) return 0; + VTCompressionSessionCompleteFrames(vtctx->session, + kCMTimeIndefinite); + clear_frame_queue(vtctx); pthread_cond_destroy(&vtctx->cv_sample_sent); pthread_mutex_destroy(&vtctx->lock); CFRelease(vtctx->session);