From patchwork Wed Jan 5 02:48:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 33073 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp347125iog; Tue, 4 Jan 2022 18:48:32 -0800 (PST) X-Google-Smtp-Source: ABdhPJxQdAdNsSpeW3ITf712SJx2sRZQr3kGsJSgA9TVcgDGS2L82fkaRwWm1a/NoykAnEkiVP3x X-Received: by 2002:a05:6402:1008:: with SMTP id c8mr51966590edu.114.1641350911987; Tue, 04 Jan 2022 18:48:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641350911; cv=none; d=google.com; s=arc-20160816; b=TS0c8AtVh7a+AO1+3SO43ZHIM8SH4EJv+q5areXgZ5cCgBvm3fiYkNtevqIFM1xRI8 WkcZFSQFKkkwFO3ATDn+H+W7lxbxJoTHLB8k17pyiVnCVeEFTKG2MhpnVUetFKEksdx9 9ifYFGTFQ+sHrtVNPVcEZ9/nXYh0maTey3+wmZPrZcOeMWe1qznIGiGmWm40Q98fLGvI 15WmXQhaxFn8ZauOP31Kdp0uX+4cwSs566g6/YvfMnhPUzewKwn50+udfzLEiZgB/QUg x1cYQl4KRR5TOlDvS338rE0hQjNw8bFheNYDcexCWPvC0I23jTw+HLv4Fbdk/rUl40f1 46hA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=Mn/VSlWf8oIlSbGhFqBYzIVX7cHQWAkw84ObbIsgs3w=; b=T/lmtcSImdJDXv2spv3kTGf5wWLRK0sshfqSnDFWWnEpw+IQ+wPn7QiUCtayx9ou6z YiDAhtaUf0zujOKlSTrzKAIC5Wz1/ZtmHZT5yWldZeN7V7djJdyd7/DD6qnL0LVyZ7+8 kqhGCLqkKSP1LwQYYHwR7BFUsK5F58PR1RA8/7tUUJvkyBERV/jvFvco15o4dcAQphq0 RgaDYDiS9HKAf2l+Ngdsq7oVLVtUZt7xo9+dXddy/OvY+tfVBaIlfkyRN6T7JC/WPJe1 GK3Jw3xaFL66J5ixjanXDnMoqME6RUJ9iO5KNhlX07Kjk95ayNSWdCiIwr3KwphUlSUC KiJQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=oKGaQ1hT; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dp22si19894544ejc.266.2022.01.04.18.48.31; Tue, 04 Jan 2022 18:48:31 -0800 (PST) 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=@intel.com header.s=Intel header.b=oKGaQ1hT; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B13116802C3; Wed, 5 Jan 2022 04:48:28 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5B663680212 for ; Wed, 5 Jan 2022 04:48:21 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1641350906; x=1672886906; h=from:to:subject:date:message-id:mime-version: content-transfer-encoding; bh=mS/dob/hj5m+BVRU3Uyd4QCLwRkqnyPC7dckiQuuViI=; b=oKGaQ1hTAPYBd8ZKAagz/RJhjyheRQQRMNMdSRDnAaTvbmOABoYmPcPT acXuwQlXGslmi4Sc9v/YuHx7uhM0RrCqZY81GqobAEyZm0zwhixDdqrSJ PskndVgrVJc9q2ndpV1SB6Rv/MW9ZnZ0tKUh1X4ZmB93BT2z2Df4t4Pgf LmlW/21Bwc6lYPzaFgrSfsDCbBt0EQ0ADvyeSLXmOGE54tWBDKp9/o+TA PPfJek/VaYZbP0UrbptS91vk1LiNVSQF68JWFAP0BwKH/ASTINrbNHltz BeRwCU+aM0QQbLRw1xIUSngYfe6AGDrr0i751Ha6NGu51k7OaksSYJJ1h Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10217"; a="229171971" X-IronPort-AV: E=Sophos;i="5.88,262,1635231600"; d="scan'208";a="229171971" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jan 2022 18:48:19 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,262,1635231600"; d="scan'208";a="470375911" Received: from chenwenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.110]) by orsmga003.jf.intel.com with ESMTP; 04 Jan 2022 18:48:18 -0800 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Wed, 5 Jan 2022 10:48:08 +0800 Message-Id: <20220105024810.435597-1-wenbin.chen@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH V2 1/3] libavcodec/vaapi_encode: Add new API adaption to vaapi_encode X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: taWs7REJiPga Add vaSyncBuffer to VAAPI encoder. Old version API vaSyncSurface wait surface to complete. When surface is used for multiple operation, it waits all operations to finish. vaSyncBuffer only wait one channel to finish. Add wait param to vaapi_encode_wait() to prepare for the async_depth option. "wait=1" means wait until operation ready. "wait=0" means query operation's status. If it is ready return 0, if it is still in progress return EAGAIN. Signed-off-by: Wenbin Chen --- libavcodec/vaapi_encode.c | 47 +++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index 3bf379b1a0..b87b58a42b 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -134,7 +134,8 @@ static int vaapi_encode_make_misc_param_buffer(AVCodecContext *avctx, } static int vaapi_encode_wait(AVCodecContext *avctx, - VAAPIEncodePicture *pic) + VAAPIEncodePicture *pic, + uint8_t wait) { VAAPIEncodeContext *ctx = avctx->priv_data; VAStatus vas; @@ -150,11 +151,43 @@ static int vaapi_encode_wait(AVCodecContext *avctx, "(input surface %#x).\n", pic->display_order, pic->encode_order, pic->input_surface); - vas = vaSyncSurface(ctx->hwctx->display, pic->input_surface); - if (vas != VA_STATUS_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to sync to picture completion: " - "%d (%s).\n", vas, vaErrorStr(vas)); +#if VA_CHECK_VERSION(1, 9, 0) + // Try vaSyncBuffer. + vas = vaSyncBuffer(ctx->hwctx->display, + pic->output_buffer, + wait ? VA_TIMEOUT_INFINITE : 0); + if (vas == VA_STATUS_ERROR_TIMEDOUT) { + return AVERROR(EAGAIN); + } else if (vas != VA_STATUS_SUCCESS && vas != VA_STATUS_ERROR_UNIMPLEMENTED) { + av_log(avctx, AV_LOG_ERROR, "Failed to sync to output buffer completion: " + "%d (%s).\n", vas, vaErrorStr(vas)); return AVERROR(EIO); + } else if (vas == VA_STATUS_ERROR_UNIMPLEMENTED) + // If vaSyncBuffer is not implemented, try old version API. +#endif + { + if (!wait) { + VASurfaceStatus surface_status; + vas = vaQuerySurfaceStatus(ctx->hwctx->display, + pic->input_surface, + &surface_status); + if (vas == VA_STATUS_SUCCESS && + surface_status != VASurfaceReady && + surface_status != VASurfaceSkipped) { + return AVERROR(EAGAIN); + } else if (vas != VA_STATUS_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to query surface status: " + "%d (%s).\n", vas, vaErrorStr(vas)); + return AVERROR(EIO); + } + } else { + vas = vaSyncSurface(ctx->hwctx->display, pic->input_surface); + if (vas != VA_STATUS_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to sync to picture completion: " + "%d (%s).\n", vas, vaErrorStr(vas)); + return AVERROR(EIO); + } + } } // Input is definitely finished with now. @@ -633,7 +666,7 @@ static int vaapi_encode_output(AVCodecContext *avctx, uint8_t *ptr; int err; - err = vaapi_encode_wait(avctx, pic); + err = vaapi_encode_wait(avctx, pic, 1); if (err < 0) return err; @@ -695,7 +728,7 @@ fail: static int vaapi_encode_discard(AVCodecContext *avctx, VAAPIEncodePicture *pic) { - vaapi_encode_wait(avctx, pic); + vaapi_encode_wait(avctx, pic, 1); if (pic->output_buffer_ref) { av_log(avctx, AV_LOG_DEBUG, "Discard output for pic "