[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