From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 8DB4441223 for ; Fri, 18 Mar 2022 06:26:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 076C968020A; Fri, 18 Mar 2022 08:25:57 +0200 (EET) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3E41968AF5D for ; Fri, 18 Mar 2022 08:25:49 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1647584754; x=1679120754; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=sUEZglQMFq937Kmm9MnSZAgOAh1AYCEB+OjdOYbfVPc=; b=CG3PLfNt8QHgKEqXcA6dlzrbZMsA000T+35jxhOmwnntK/MF8Hdb04lI OpNnIaZB6IVJPd6C2G/xZ56an8OHda2Xjl2/jXz3qGBDxAXAZmKuJj6CU dQFuqwwzYqtiky8moXowC/GG5egwrGcmIk5RJksnrbGMCca73HSuMint9 bFDVl7Q51UMGQJkfAxaS9cZbk2wFhh6KDn6JiKLGP/ehZtMWWDc9hia6/ N8P4XlWRAv3g4ZxJAtuspfPUUWdVsgCgHv1UzXZfQdXYfmvHJNAfYllQz nNW6yeqWLhBSoOmxz2VZnu95lq/moaMXjjiUlQTMSptZorPn7qzfzWdVL Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10289"; a="257252894" X-IronPort-AV: E=Sophos;i="5.90,191,1643702400"; d="scan'208";a="257252894" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2022 23:25:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,191,1643702400"; d="scan'208";a="822049465" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by fmsmga005.fm.intel.com with ESMTP; 17 Mar 2022 23:25:40 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Mar 2022 14:25:11 +0800 Message-Id: <20220318062511.382951-3-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220318062511.382951-1-wenbin.chen@intel.com> References: <20220318062511.382951-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/3] libavcodec/qsvdec: using suggested num to set init_pool_size 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: The init_pool_size is set to be 64 and it is too many. Use IOSurfQuery to get NumFrameSuggest which is the suggested number of frame that needed to be allocated when initializing the decoder. Considering that the hevc_qsv encoder uses the most frame buffer, async is 4 (default) and max_b_frames is 8 (default) and decoder may followed by VPP, use NumFrameSuggest + 16 to set init_pool_size. Signed-off-by: Wenbin Chen Signed-off-by: Guangxin Xu --- libavcodec/qsvdec.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 210bd0c1d5..9875d3d632 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -88,7 +88,7 @@ typedef struct QSVContext { uint32_t fourcc; mfxFrameInfo frame_info; AVBufferPool *pool; - + int suggest_pool_size; int initialized; // options set by the caller @@ -275,7 +275,7 @@ static int qsv_decode_preinit(AVCodecContext *avctx, QSVContext *q, enum AVPixel hwframes_ctx->height = FFALIGN(avctx->coded_height, 32); hwframes_ctx->format = AV_PIX_FMT_QSV; hwframes_ctx->sw_format = avctx->sw_pix_fmt; - hwframes_ctx->initial_pool_size = 64 + avctx->extra_hw_frames; + hwframes_ctx->initial_pool_size = q->suggest_pool_size + 16 + avctx->extra_hw_frames; frames_hwctx->frame_type = MFX_MEMTYPE_VIDEO_MEMORY_DECODER_TARGET; ret = av_hwframe_ctx_init(avctx->hw_frames_ctx); @@ -793,6 +793,9 @@ static int qsv_process_data(AVCodecContext *avctx, QSVContext *q, } if (q->reinit_flag || !q->session || !q->initialized) { + mfxFrameAllocRequest request; + memset(&request, 0, sizeof(request)); + q->reinit_flag = 0; ret = qsv_decode_header(avctx, q, pkt, pix_fmt, ¶m); if (ret < 0) { @@ -802,12 +805,19 @@ static int qsv_process_data(AVCodecContext *avctx, QSVContext *q, av_log(avctx, AV_LOG_ERROR, "Error decoding header\n"); goto reinit_fail; } + param.IOPattern = q->iopattern; q->orig_pix_fmt = avctx->pix_fmt = pix_fmt = ff_qsv_map_fourcc(param.mfx.FrameInfo.FourCC); avctx->coded_width = param.mfx.FrameInfo.Width; avctx->coded_height = param.mfx.FrameInfo.Height; + ret = MFXVideoDECODE_QueryIOSurf(q->session, ¶m, &request); + if (ret < 0) + return ff_qsv_print_error(avctx, ret, "Error querying IO surface"); + + q->suggest_pool_size = request.NumFrameSuggested; + ret = qsv_decode_preinit(avctx, q, pix_fmt, ¶m); if (ret < 0) goto reinit_fail; -- 2.32.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".