From patchwork Fri Feb 18 02:07:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 34375 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:d078:0:0:0:0 with SMTP id x24csp526452nkx; Thu, 17 Feb 2022 18:08:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJz2KQ+8VEqhsH1Z1CRE81OyjahAkMVNu4MAVLUjFNylCfsgmFqmP5AjMm/fIY11pC9le7T9 X-Received: by 2002:a17:906:69d1:b0:6ce:7201:ec26 with SMTP id g17-20020a17090669d100b006ce7201ec26mr4754455ejs.105.1645150093501; Thu, 17 Feb 2022 18:08:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645150093; cv=none; d=google.com; s=arc-20160816; b=c9XS8jY3akhUUsBPWy3KzV6CHbwldsXTDKzagDaDXC6MMc15vjyM5/y1tj+M1JAa8S 0dA17DMRxrFaHyFN+tvXEar7Wg7hfLH7Yt3xdT8+Zo73KISuBgLy8iN29iqalHlgahPz T17J3Ugph4oUjXQz3phSSSR3tBnG5su97ZUxnVxsUwROxIv8EUmYgn3L1Ctvmdjvgkb/ +QCtEY51KZws/pjL8mmnz1KYC0bC0481WypnBXQUzzK8Ce1fHmxgnJj2HscxVuFHOKF3 3+dLhX0HH7Y6dLu8c/+N9vy0gHH+gj8CWKORZbPKr8GUiQXSHBvddqzAShmCtgDO2Nww h0Tw== 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=gcQuC4ousbTK6+Gn59ixYArPukod4X0iMPSRIwxUu+w=; b=zHa7kSUIhufX506nsLw3ImlIst13u9zEU+FMEAYploJuoO+Kg2Z9bOAlIVbpbzXIpm sjSwflJfAhGQ53EfYJaVb2BZ0RBys08rZRzjwgRgdP+UJpGjEOu1WE4X8wrp9EZkcYQZ /GBX8tWXfoGFhi0dzp8KJIDs6V5bwzXy7k0+9e2VJFS2/K8X6jLoEiZw81OtucgW8igv TXI1WwCIOXtvOnSXNoTxCniNmcrZ29wzVbfyL1r12WlCVaDL/7w1yTYe8egodcPWCEJk 9vswzZFA2ftfK3im0wJxzNt9AkVHwos1IQNV0JHTZ9jTM2FTxdPiQvhs4wKFxaCqgVzG ujFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=ZKEuNX2v; 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 tc23si3142000ejc.393.2022.02.17.18.08.12; Thu, 17 Feb 2022 18:08:13 -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=ZKEuNX2v; 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 6957968B36C; Fri, 18 Feb 2022 04:08:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6ED7468B366 for ; Fri, 18 Feb 2022 04:08:02 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645150087; x=1676686087; h=from:to:subject:date:message-id:mime-version: content-transfer-encoding; bh=KQ+bgv1tGNef4XApkDItGYgPAMh5bOB4923pZovR6Ag=; b=ZKEuNX2vKE+FgNuIRNISb0jdqOz+NlJYmWo9XGfcAtjfk3eZNfaNtZbR oyjhrF9cyjCwSu5Kx333gmBJBuvP8h+SVfEjkzTkbFVir6wQjCIRQF1lS IucuF+wmLYBH/RcuJvLGbVj/GoHza8c+hyGhfaBzpkt1G5O5f0nXrwhHw iZA2Iw4eSMGWzRnZ5OYXaRXClS3i6n3CiuIN7IJswQ7xZrSqz2suayzyr n9koaK5KbO/DIH3Td4oakfEX0CbuL4XgbEMg6N4SjJAXWuAxqHzKS2nyU otvIz1abapjAOpNBqbgkawd0IAjEg5mCdv1Y16htWwAo3qctr9lg7m3Fg w==; X-IronPort-AV: E=McAfee;i="6200,9189,10261"; a="231668155" X-IronPort-AV: E=Sophos;i="5.88,377,1635231600"; d="scan'208";a="231668155" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Feb 2022 18:07:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,377,1635231600"; d="scan'208";a="572108071" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.110]) by orsmga001.jf.intel.com with ESMTP; 17 Feb 2022 18:07:58 -0800 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Feb 2022 10:07:56 +0800 Message-Id: <20220218020757.834409-1-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 1/2] 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: mvMtBH8PnJve From: Wenbin Chen 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. Signed-off-by: Wenbin Chen Signed-off-by: Haihao Xiang --- libavcodec/vaapi_encode.c | 31 ++++++++++++++++++++++++++----- libavcodec/vaapi_encode.h | 3 +++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index 3bf379b1a0..335a8e450a 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -150,11 +150,25 @@ 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)); - return AVERROR(EIO); +#if VA_CHECK_VERSION(1, 9, 0) + if (ctx->has_sync_buffer_func) { + vas = vaSyncBuffer(ctx->hwctx->display, + pic->output_buffer, + VA_TIMEOUT_INFINITE); + if (vas != VA_STATUS_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to sync to output buffer completion: " + "%d (%s).\n", vas, vaErrorStr(vas)); + return AVERROR(EIO); + } + } else +#endif + { // If vaSyncBuffer is not implemented, try old version API. + 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. @@ -2522,6 +2536,13 @@ av_cold int ff_vaapi_encode_init(AVCodecContext *avctx) } } +#if VA_CHECK_VERSION(1, 9, 0) + // check vaSyncBuffer function + vas = vaSyncBuffer(ctx->hwctx->display, VA_INVALID_ID, 0); + if (vas != VA_STATUS_ERROR_UNIMPLEMENTED) { + ctx->has_sync_buffer_func = 1; +#endif + return 0; fail: diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h index b41604a883..29d9e9b91c 100644 --- a/libavcodec/vaapi_encode.h +++ b/libavcodec/vaapi_encode.h @@ -345,6 +345,9 @@ typedef struct VAAPIEncodeContext { int roi_warned; AVFrame *frame; + + // Whether the driver support vaSyncBuffer + int has_sync_buffer_func; } VAAPIEncodeContext; enum {