From patchwork Fri Mar 18 06:25:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 34834 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:3486:0:0:0:0 with SMTP id ek6csp1537000nkb; Thu, 17 Mar 2022 23:26:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzfVufz/OuAsZS0x3pzlefUXcnv2ebu3Pq7PnHUE75dY5kYH83KcSAkCsKY0WQof+giwNz6 X-Received: by 2002:a05:6402:b08:b0:418:ebf0:6ab3 with SMTP id bm8-20020a0564020b0800b00418ebf06ab3mr7975130edb.403.1647584774980; Thu, 17 Mar 2022 23:26:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647584774; cv=none; d=google.com; s=arc-20160816; b=lfsVIS540E7unG02XbgHWDNy13Vu8iUn3SPuuVhtG61a9ytjQWtwV6O3GXYnTVTAJY n+dSV/wZaelKfUIgzoWXTOQFFu2p16cNzYboJ1gz0Gfc9sX/lYpHVA6sobN/tVXMmS5+ fboNdPFr6hrYnvcTEfitw3ZjwDqVkMLCSWyuwVGTmVUekht/kKYvNtMISqEIYw+pdBCZ 35B8uuBUunZlJj64iHV4lUrpdYRmxjc8a+jJKTcu/CUzFESIzCgXmICJi4bPpaz+fleb Gb4C+BvYc7yJA3TKmXLGa1epWtQTanpeiFZ3x8D99CZ4JXXnxcDf5J2xE6sZGD9AHw8o XKhA== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=aKJZj91hTkUtJw553p3UhEctsaeQdAfB2LvirDdnNDo=; b=yT9OFpimkHi159DX7T8dVc90bEPvsSL1UZkUuGrknemi+zJe1xNBQkFvUlck5BWOq/ 8Zhyx5sZbhq15TtXEsm1nkNkXP3sy/Pts5Ba3LP9x1nxHR59yv0Btr3kLILiQXVHRawZ znacXOsdWuU671FJrDNVRXVi5q0UIugR7fggDxTYU3SUSuym7bruqIWwu6+uH2kTP048 DiLmViBEJrKV1sPgcys51VhlJkqh0r1Oj8pSlMz7s2Arah0Lbra+T70c5AjeG7demqxy X6tbUSuRx4bQ446lM44inSyf5wvLwvts6f/OgLeDgh0bHifPz6PVB2oNgid06kOmPBQ9 Bs9g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=CG3PLfNt; 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 u26-20020a50c2da000000b00418c2b5bee0si3037081edf.450.2022.03.17.23.26.13; Thu, 17 Mar 2022 23:26:14 -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=@intel.com header.s=Intel header.b=CG3PLfNt; 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 3538568B0B9; Fri, 18 Mar 2022 08:25:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: IwUd9e2k+tAB 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;