From patchwork Mon Apr 26 03:03:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wenbin Chen X-Patchwork-Id: 27409 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:5014:0:0:0:0:0 with SMTP id e20csp3598246iob; Sun, 25 Apr 2021 20:07:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzWF4w9+EEBqSMQRXU9qpvVY97Nx5ZxMd63qxrmcD3iffwyKNolaWJXlzBOBJK08vR7gCc9 X-Received: by 2002:a17:906:38c5:: with SMTP id r5mr15708068ejd.230.1619406459789; Sun, 25 Apr 2021 20:07:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619406459; cv=none; d=google.com; s=arc-20160816; b=BBvQspF71tsAHatrRlVugVKM85LHc9ZmffvrKMiTXK57KVGYrrCFokgs4lG5yS+Lhh N3oywulQXBBPA6g5Gat+f4acqecoF46yAYSpeIE90ULPolPhRgr6SlGi57YGakJ3X37R L/GqBSRPH9mvxUjAK3m1sNX7I3q/lz381F7NM5kzy1LiK2ZuIxjuWEbRyfWGACHS5zSR 2pMfXpmaiHFuFQuEbUJRk6Gtdy6byFvPCkC1CWcHyO3N3k8A2Q6cBEc6nRGcT0qPiJ4k rN+0lKTU8ASJxdsIoyGmzUkjJzUKlxIy/9qpC7FBc/KIvyPQACp4meeNhGxwVyiiT9lj fhQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:ironport-sdr:ironport-sdr:delivered-to; bh=NB2LzzAuNJCzwdrPSz2Pj0ZJTERfdnWkRpDTCmr7R+E=; b=q2QdBdM6l9e2sI64him1md4ycgusK18/ptPQ0KwQXHh9sV/9MMbTOOdIXoGfnNg1bK tEo7FUcHHdOp533IdSygSKJasLQP+IAgU5Tt477UlwNy/WGrTwVA4vJs1wsTvgnI+3ai xLuldi/COIecVj3Kat2PW1Lsd93W5cAs8DhSMJBqnCFzYcPC6IAcTqvT9CNKOpoiKAFA Br3QBImOvEH1phxyVx88YzZ8MmnOvtIRwKrV46Gi3fZ2RvdUarhd+j12ObNBQXyU4fBB tZJ7yVKCAcwzjI0FBhvDWDsecuxqqK/fEmOBgH6jcJUJ84qIXR5VUgjjz6rLHXw3rSWp lXSQ== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id fy26si12587320ejb.76.2021.04.25.20.07.39; Sun, 25 Apr 2021 20:07:39 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 26392689A29; Mon, 26 Apr 2021 06:07:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 17CAF6899AB for ; Mon, 26 Apr 2021 06:07:22 +0300 (EEST) IronPort-SDR: s5pRatAO+Tz99x7HOvMnxAW9YEguejmq0T/UT0fJIllGGFUtQCApVkz3rhVQjQTmrVbChK/bFd sm2+635jUzpw== X-IronPort-AV: E=McAfee;i="6200,9189,9965"; a="257577157" X-IronPort-AV: E=Sophos;i="5.82,250,1613462400"; d="scan'208";a="257577157" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Apr 2021 20:07:20 -0700 IronPort-SDR: 4iMh7xMPlhl5m8g3SJdBvXAKu1PfbHeVZYfizm0S0Utp0CkAnoSo2ZQfuSLBOjW7j/ai9oM+4/ gpTTYL2WnXow== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,251,1613462400"; d="scan'208";a="422435125" Received: from chenwenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.3]) by fmsmga008.fm.intel.com with ESMTP; 25 Apr 2021 20:07:19 -0700 From: wenbin.chen@intel.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 26 Apr 2021 11:03:41 +0800 Message-Id: <20210426030341.3274799-3-wenbin.chen@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210426030341.3274799-1-wenbin.chen@intel.com> References: <20210426030341.3274799-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 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 Cc: Wenbinc-Bin Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: nOXhLQu51KHE From: Wenbinc-Bin 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. Sigend-off-by Wenbin Chen Signed-off-by Guangxin Xu --- fftools/ffmpeg_qsv.c | 9 ++++++++- libavcodec/qsvdec.c | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fftools/ffmpeg_qsv.c b/fftools/ffmpeg_qsv.c index 960c88b69d..3862dc1e7d 100644 --- a/fftools/ffmpeg_qsv.c +++ b/fftools/ffmpeg_qsv.c @@ -74,6 +74,7 @@ int qsv_init(AVCodecContext *s) InputStream *ist = s->opaque; AVHWFramesContext *frames_ctx; AVQSVFramesContext *frames_hwctx; + int suggest_pool_size; int ret; if (!hw_device_ctx) { @@ -82,6 +83,12 @@ int qsv_init(AVCodecContext *s) return ret; } + suggest_pool_size = 0; + if (ist->hw_frames_ctx) { + frames_ctx = (AVHWFramesContext *)ist->hw_frames_ctx->data; + suggest_pool_size = frames_ctx->initial_pool_size; + } + av_buffer_unref(&ist->hw_frames_ctx); ist->hw_frames_ctx = av_hwframe_ctx_alloc(hw_device_ctx); if (!ist->hw_frames_ctx) @@ -94,7 +101,7 @@ int qsv_init(AVCodecContext *s) frames_ctx->height = FFALIGN(s->coded_height, 32); frames_ctx->format = AV_PIX_FMT_QSV; frames_ctx->sw_format = s->sw_pix_fmt; - frames_ctx->initial_pool_size = 64 + s->extra_hw_frames; + frames_ctx->initial_pool_size = suggest_pool_size + 16 + s->extra_hw_frames; frames_hwctx->frame_type = MFX_MEMTYPE_VIDEO_MEMORY_DECODER_TARGET; ret = av_hwframe_ctx_init(ist->hw_frames_ctx); diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index fe416e74ca..f7cd33cc74 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -643,18 +643,32 @@ static int qsv_process_data(AVCodecContext *avctx, QSVContext *q, } if (q->reinit_flag || !q->session) { + mfxFrameAllocRequest request; + AVHWFramesContext *hw_frames_ctx; + memset(&request, 0, sizeof(request)); + q->reinit_flag = 0; ret = qsv_decode_header(avctx, q, pkt, pix_fmt, ¶m); if (ret < 0) { 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"); + + if (avctx->hw_frames_ctx) { + hw_frames_ctx = (AVHWFramesContext *)avctx->hw_frames_ctx->data; + hw_frames_ctx->initial_pool_size = request.NumFrameSuggested; + } + ret = qsv_decode_preinit(avctx, q, pix_fmt, ¶m); if (ret < 0) goto reinit_fail;