From patchwork Fri Feb 18 03:07:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 34377 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:d078:0:0:0:0 with SMTP id x24csp558980nkx; Thu, 17 Feb 2022 19:08:02 -0800 (PST) X-Google-Smtp-Source: ABdhPJxoiCO2wEKkHCLJE2RBVDrVM7GQ1g5xiBvuj1WIBFFP2OHPlB02/jSzYb+oCNZunFDC4Xxp X-Received: by 2002:a50:8714:0:b0:410:5c41:3f25 with SMTP id i20-20020a508714000000b004105c413f25mr5787967edb.183.1645153682233; Thu, 17 Feb 2022 19:08:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645153682; cv=none; d=google.com; s=arc-20160816; b=QGADL1qkGwdyxpzIHm3iO+KpN63TuoJrlAbZo64M3CQTNwQt62VVrezqyWF/R4rQkY +/vi1DiqVMY8CTNVp1DpBr2ExPvJP6ZUK5MAerpahuEGK/ehbiX6wycotZ76zlu+XZD9 IEJa7drHkRFWw5t2QqHaLZOsg7ywk7MD56RePgIufECzefWawTmG79C8j+wxjEFEYyDw /v/JLVAUdUNV1ikmgnLUoiWgg3eTmoIrexm+wISQdk70D8O/cgWViljFbyOmryT0zt2R tF1buz7WApvVtN/IO4ddiSzyl3Sl32g/3CMU1cfM2gRFd03wKqxS3AcA+USyaVJJSDxD TYww== 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=N9T0kgB0BFguUrx6fMeUquD3RPk43anRaEdXhRlVGDw=; b=KFyEhAm3AZXUkYQYijUkriYOLMqNL6D28yjqP7VxH+vttM+XO98CvOXWFQbo+JsK+n SwyPpEugxQtv8XJOL0gbhED39g1yKLMw+1KOVxZsUFhRL9cOlfPscOO40FaDJOO4NpQW 3HnmgrbIBiFMWGeaGsF5y0s+dr/7T2H8wfpbWFojLJFzjl5HcdmiFRqmZE65DEZSEBwf tYhxQ03YtvGWq9Xk3hhcCDypbfzPEvYBEsez4o2C41g9LGvorGx0jf8xYbGSveexvZT5 JRZRaA3kONXzHiG0oqsR07shNhYgwkHION7/HbmIP6uQdPMcKX3Kqs4i1sHXvk5jn2fJ +53A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=TCJRORWB; 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 jj8si2420067ejc.577.2022.02.17.19.08.01; Thu, 17 Feb 2022 19:08:02 -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=TCJRORWB; 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 189A368B388; Fri, 18 Feb 2022 05:07:59 +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 6661268B2D4 for ; Fri, 18 Feb 2022 05:07:51 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645153677; x=1676689677; h=from:to:subject:date:message-id:mime-version: content-transfer-encoding; bh=WJd1mkbpcmOyO9ilQpgnzrUE3XSNP1VcCCc7a3WqlLg=; b=TCJRORWByqZCv8OeXTAnvktU+YKDr/jK/fipgF1g6XJebwGzFwrjOcsa yq6m+JP5e/wERyfSMGdGroxOGtf7fx1YHlIto8VVZGk9TTTumW7f6Kx3E sSNT13DqAvlovIbm3DQbp5HSES2jxtDEinKoELYqUzT96VCtI5jngsi5d 6LIJAAfToKtKdP6wqjObLcNh1WSC5U9QI1zwxJxvXA2dzTUKz0ZsCXwRR Qa3Z6TUvH5lcQ5p/Xhsu4APOzVeBgM4QrlGDPe90U4DYiPOwRHI1yrXFa Jvh6D6e1dTkceJzT3Cl0G8ST80HV720h2VKFx4pT/JolH3jjc/jenekqK g==; X-IronPort-AV: E=McAfee;i="6200,9189,10261"; a="234570102" X-IronPort-AV: E=Sophos;i="5.88,377,1635231600"; d="scan'208";a="234570102" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Feb 2022 19:07:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,377,1635231600"; d="scan'208";a="541723530" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.110]) by fmsmga007.fm.intel.com with ESMTP; 17 Feb 2022 19:07:48 -0800 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Feb 2022 11:07:46 +0800 Message-Id: <20220218030747.894232-1-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 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: rynWZwmaohAg 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 | 32 +++++++++++++++++++++++++++----- libavcodec/vaapi_encode.h | 3 +++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index 3bf379b1a0..3f8c8ace2a 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,14 @@ 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 {