From patchwork Thu Jun 14 15:48:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Guillem X-Patchwork-Id: 9413 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:11c:0:0:0:0:0 with SMTP id c28-v6csp2076864jad; Thu, 14 Jun 2018 08:48:22 -0700 (PDT) X-Google-Smtp-Source: ADUXVKL1d0FGKUyybUT92zm/sL9GOAg0P10+eCKcDcZAuwkuEfpI5UP/yvSniq26Z/YUdtlNruCl X-Received: by 2002:a5d:4906:: with SMTP id x6-v6mr2814369wrq.66.1528991302274; Thu, 14 Jun 2018 08:48:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528991302; cv=none; d=google.com; s=arc-20160816; b=o7o0e8SdY7Fjr6FNEZdAgm5lWfT5d2uaZo5H8C8rhMSGYwXsnKQEls9YUBy1GEnSDP JR5i+q91+9gl1cDeb5cQXNePC0amwtnJQqDBu3p1saP+7aT6Otp/DbpBKflJ2HNyM7DL RHOnBiz4cOU+KFTjn1tCUb/1yfZJyUNYrUw9Jm5whzffB/uBeHxuXGnairt7Tey/6zcq kDX1Xfspc1yR2rnMBMCzCHLTnhsDiI2xEcwHviGHfbekChiXwfOdxUXG4rIZ6mDURUb5 8nd6hYbPe3+UdyldEHKvwNzdBko720IrzYinP1EPo3QVRLvWAVL/g1Z959zu64PtuqB+ Bzjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:dkim-signature:delivered-to :arc-authentication-results; bh=0MQ6KwcMrGbh8ljB+/KWnsF398fO4As+Z66SXdqocxE=; b=RuSQZt3LpDRmGmnEwzRPRp6ZQRqRbHTvMSegdjNd+DPXz+vHAIBICWMnKMIl2UB41C Lmvuk2ubALsvOeZohhnS+evQ4IDHJsAl/o2rYQOY5rsTHOeqN2h63TAsxN8RZMr6Z+su BHaI8xvtHQDuyJhp/Y90QPgvyNbSVe5usXEPumyZHYpvF5VnQpJx+u5n/N/0zRsQF/+t SBmLr4yObPWxtUt3IXLftnJRXwEtRGTyI+ABJUt6zBybwsUlwj6AyJhjtmss2QNOvz9R yRmW/TYtn/CkFB3PY0v/rvkIH1dumkVSb5et/NG2CgaT4pG2zIwDruebgIEjP3niFGfP ENuA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gllm.fr header.s=fm3 header.b="c4AXR/z6"; dkim=neutral (body hash did not verify) header.i=@messagingengine.com header.s=fm3 header.b=mL3QvafC; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gllm.fr Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y61-v6si5283507wrb.209.2018.06.14.08.48.21; Thu, 14 Jun 2018 08:48:22 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gllm.fr header.s=fm3 header.b="c4AXR/z6"; dkim=neutral (body hash did not verify) header.i=@messagingengine.com header.s=fm3 header.b=mL3QvafC; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gllm.fr Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2899A68A6CF; Thu, 14 Jun 2018 18:47:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5B0C768A69F for ; Thu, 14 Jun 2018 18:47:22 +0300 (EEST) Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id 2FE9221B0E for ; Thu, 14 Jun 2018 11:48:10 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Thu, 14 Jun 2018 11:48:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gllm.fr; h=date :from:in-reply-to:message-id:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; bh=HbMxRYkv5PTR+OvrjGKA2p/NYSIwd //FsCMxqsfMHas=; b=c4AXR/z688bAecU/eJawEhNRcK83q63qpmGKaBjxRRQlh xwbd+Bpb6LZ3ZsUovIqQJNJBFk3S8nO55zt6BpzGyRzUyg24pO3KsfY1Zwl9Vbfo z2c6I9sswvGV7ZZShfoR7dCL5l1Qv6qMg7SPfzOdDREQIDSvL4RZRfwCsOLZGpnP Xx7x3VDp5wxtOAoKAxRbo0nOikkWZ76zcT2iXOVIKVSH0qzSIK9spaoKI4rSv5nZ YvLOFowvgZ+fdEHP01nchX96KCLe6Y+ERNgeH7Rf5RNIkADfUCDKiurdow4h0AE6 SJj2rzyOFIWnjGUiORpNKlI3gCHi4NiUb7QwPHofg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=HbMxRYkv5PTR+OvrjGKA2p/NYSIwd//FsCMxqsfMHas=; b=mL3QvafC iZsgMKBR7M96VTBzyNUkcoGV00uOS87+8o4wpwXgeE7+N3iTF+GyTgM+FBBbc6Tr yKZMtnuqneJzcUf47Xil6/RMHYdpbSQrkCOKXSVEAvuNPlUYfiON/71KU0pya0fI n8KqwatLkv2HcCVgIxVChcUewCcsgMGxSaGk87SLqaYs9bjt/U+MXOBMo5bsXrn7 eKRbY4NltzZ6RfltklMzThtdBzcHtK8pHj3OWhh7Dk90s2F+Twn+ViFWsjb0etos pZ/cPC0OeL5uljC+euDaSe6Odwo/tBbE4FAon+QP5RWgL2mPVfZjiXfokPJRNyRk m7IC3OLzologKQ== X-ME-Proxy: X-ME-Sender: Received: from localhost.localdomain (unknown [78.194.250.245]) by mail.messagingengine.com (Postfix) with ESMTPA id 8C50E1026E for ; Thu, 14 Jun 2018 11:48:09 -0400 (EDT) From: Thomas Guillem To: ffmpeg-devel@ffmpeg.org Date: Thu, 14 Jun 2018 17:48:07 +0200 Message-Id: <20180614154807.14311-1-thomas@gllm.fr> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: Subject: [FFmpeg-devel] [PATCH 3/3] avcodec/videotoolboxenc: fix invalid session on iOS X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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,