[FFmpeg-devel] [PATCH 3/3] avcodec/videotoolboxenc: fix invalid session on iOS

Thomas Guillem thomas at gllm.fr
Mon Jun 18 12:21:54 EEST 2018


Ping?

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


More information about the ffmpeg-devel mailing list