[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