[FFmpeg-devel] [PATCH 3/3] avcodec/videotoolboxenc: fix invalid session on iOS
Aman Gupta
ffmpeg at tmm1.net
Mon Jun 18 21:50:15 EEST 2018
On Mon, Jun 18, 2018 at 2:22 AM Thomas Guillem <thomas at gllm.fr> wrote:
> Ping?
>
Applied to master and release/4.0 branches.
Aman
>
> On Thu, Jun 14, 2018, at 17:48, Thomas Guillem wrote:
> > Cf. comment. Restart the VT session when the APP goes from foreground to
> > background and vice versa.
> > ---
> > libavcodec/videotoolboxenc.c | 23 +++++++++++++++++++++--
> > 1 file changed, 21 insertions(+), 2 deletions(-)
> >
> > diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c
> > index 1060055ba5..ac847358ab 100644
> > --- a/libavcodec/videotoolboxenc.c
> > +++ b/libavcodec/videotoolboxenc.c
> > @@ -2175,8 +2175,27 @@ static int create_cv_pixel_buffer(AVCodecContext
>
> > *avctx,
> > #if TARGET_OS_IPHONE
> > pix_buf_pool = VTCompressionSessionGetPixelBufferPool(vtctx-
> > >session);
> > if (!pix_buf_pool) {
> > - av_log(avctx, AV_LOG_ERROR, "Could not get pixel buffer pool.
> > \n");
> > - return AVERROR_EXTERNAL;
> > + /* On iOS, the VT session is invalidated when the APP switches
> > from
> > + * foreground to background and vice versa. Fetch the actual
> > error code
> > + * of the VT session to detect that case and restart the VT
> > session
> > + * accordingly. */
> > + OSStatus vtstatus;
> > +
> > + vtstatus = VTCompressionSessionPrepareToEncodeFrames(vtctx-
> > >session);
> > + if (vtstatus == kVTInvalidSessionErr) {
> > + CFRelease(vtctx->session);
> > + vtctx->session = NULL;
> > + status = vtenc_configure_encoder(avctx);
> > + if (status == 0)
> > + pix_buf_pool =
> > VTCompressionSessionGetPixelBufferPool(vtctx->session);
> > + }
> > + if (!pix_buf_pool) {
> > + av_log(avctx, AV_LOG_ERROR, "Could not get pixel buffer
> > pool.\n");
> > + return AVERROR_EXTERNAL;
> > + }
> > + else
> > + av_log(avctx, AV_LOG_WARNING, "VT session restarted because
> > of a "
> > + "kVTInvalidSessionErr error.\n");
> > }
> >
> > status = CVPixelBufferPoolCreatePixelBuffer(NULL,
> > --
> > 2.17.1
> >
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
More information about the ffmpeg-devel
mailing list