Browse Source

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 <kernrj@gmail.com>
tags/n3.2
Rick Kern 9 years ago
parent
commit
aa413b810a
1 changed files with 8 additions and 0 deletions
  1. +8
    -0
      libavcodec/videotoolboxenc.c

+ 8
- 0
libavcodec/videotoolboxenc.c View File

@@ -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);


Loading…
Cancel
Save