From patchwork Fri Mar 18 06:25:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 34832 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:3486:0:0:0:0 with SMTP id ek6csp1536883nkb; Thu, 17 Mar 2022 23:25:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzZfE8DqLcBEnEmE4cZafvtMMlzjaavae938pGV3+P7sqstrfzHdNLstUO9oAan36/rKden X-Received: by 2002:a05:6402:520a:b0:417:f20c:6b5a with SMTP id s10-20020a056402520a00b00417f20c6b5amr8040148edd.11.1647584753883; Thu, 17 Mar 2022 23:25:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647584753; cv=none; d=google.com; s=arc-20160816; b=mgRWTkGkQftq2xISfECuGYraFO2JiK/caYN9MSgNePigob1LUfO7xTct9Dz6J5vmG8 F9vLuXUg/BWeXoVKKWiqZ5fBg8VsdJlTmESAUf3/FcjiT5KNr4v9NNMlaeMfJfET4sVY EzD66UvpbN+rWdAPatTCLfBO7QnDhKXPnL4XlLuLxQrq+OnxUz25DQA0pXKVC8uKskU2 exN77GeW/5iWx3noxmWHckJLtNxchVmu5omxEqvKoMNibcSBH7WTvYSY59+WenBz4Vx+ UPkTNRCjSWa5zEKT9fnAJiA31DoDfR6WOswDomIesfKn9x0saj5jq89gHxWmVmSPH4Hs 3m5Q== 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=7F6gHWZDfNXfU3KyV3Pkg9/9cVGN03zVudSvUcdkWIA=; b=BhhN7b6JOS4uxZAVJZfN5uqefSYgdJfqfNM3frLzWp0A56wDQIwbggKM4vADSTwn7I yfasp4KLaqrz7yByt809SzgvGCPIQcfbXxMrVghCDyb4TZgaLs2aoJdYB4Y7+Ca8ytuR zdkSGbPKiXeFu9smmdgJq+JPdiPxFGCQO+bi0iu89cFef+sgeNhO1akKqg2/zltsIMx+ fnLKXMzecBBGbcDWlV3EFS0NQgSAzlq5pelDtwiZQkJ0AxeHU3WFiICAousGuDJBg7rh TyRrE15MXUTDvbfRj2QIv/LYdGSA2SnuLpVK/+XYU82ybMyOIiB+Hh8rdQRD8RB+IYhb qmFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=CagY8kET; 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 s9-20020a17090699c900b006df76385c27si548976ejn.199.2022.03.17.23.25.53; Thu, 17 Mar 2022 23:25:53 -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=CagY8kET; 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 10D9968A3B7; Fri, 18 Mar 2022 08:25:49 +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 1EABF68A3B7 for ; Fri, 18 Mar 2022 08:25:41 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1647584747; x=1679120747; h=from:to:subject:date:message-id:mime-version: content-transfer-encoding; bh=BerfIXDIeuTtBe1q0UpnDr1OhxJPGK/3YsaH2i+eROE=; b=CagY8kETBhNDaXIDBRatK2VroNLhNNACwNjFXL116IV9oiMgnv4+ZjcW RHy4qA7LWgtwtwVHfXSYGHO8Zv1kIK5/Ot6fR4T4aYT4BriboRdxhhGTU tBRXmGDZsO0aK/0Ey/Oxp61O26vyMWtBvenURR8LixPcdiW5tuhnkmFQs T6WxbzrmsS6R0ZksZg553pWJoppYR2s41EMxtbLt1EmVt2ZG18n6mppfD ESnZ/7EgKjrNW/kBkSbYkowAfVXzobAQtL1koojFmkqke9H8MHA6eaSZE 9kZt4evrs9ktU1kjiNwUCGXpuH1bTHir+zJTSlDaBJUcmOR3WBACPVJLK w==; X-IronPort-AV: E=McAfee;i="6200,9189,10289"; a="257252882" X-IronPort-AV: E=Sophos;i="5.90,191,1643702400"; d="scan'208";a="257252882" 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:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,191,1643702400"; d="scan'208";a="822049459" 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:38 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Mar 2022 14:25:09 +0800 Message-Id: <20220318062511.382951-1-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/3] libavcodec/qsvdec: reinit decoder according to decode() return value 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: MjaieBjEfAe8 FFmpeg-qsv decoder reinit codec when width and height change, but there are not only resolution change need to reinit codec. I change it to use return value from DecodeFrameAsync() to decide whether decoder need to be reinitialized. Signed-off-by: Wenbin Chen Signed-off-by: Guangxin Xu --- libavcodec/qsvdec.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 1b5bf85cb6..0b5e416867 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -630,6 +630,13 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, } while (ret == MFX_WRN_DEVICE_BUSY || ret == MFX_ERR_MORE_SURFACE); + if (ret == MFX_ERR_INCOMPATIBLE_VIDEO_PARAM) { + q->reinit_flag = 1; + av_log(avctx, AV_LOG_DEBUG, "Video parameter change\n"); + av_freep(&sync); + return 0; + } + if (ret != MFX_ERR_NONE && ret != MFX_ERR_MORE_DATA && ret != MFX_WRN_VIDEO_PARAM_CHANGED && @@ -782,9 +789,9 @@ static int qsv_process_data(AVCodecContext *avctx, QSVContext *q, ret = qsv_decode_header(avctx, q, pkt, pix_fmt, ¶m); - if (ret >= 0 && (q->orig_pix_fmt != ff_qsv_map_fourcc(param.mfx.FrameInfo.FourCC) || + if (q->reinit_flag || (ret >= 0 && (q->orig_pix_fmt != ff_qsv_map_fourcc(param.mfx.FrameInfo.FourCC) || avctx->coded_width != param.mfx.FrameInfo.Width || - avctx->coded_height != param.mfx.FrameInfo.Height)) { + avctx->coded_height != param.mfx.FrameInfo.Height))) { AVPacket zero_pkt = {0}; if (q->buffered_count) { From patchwork Fri Mar 18 06:25:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 34833 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:3486:0:0:0:0 with SMTP id ek6csp1536950nkb; Thu, 17 Mar 2022 23:26:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwDxlu9QXuiAuAyPIDMqRVi3+lzFLcRhogIpddcbdyKt+DI7ad0XvTgwgkk/OPlInLR2Twb X-Received: by 2002:a17:906:610:b0:6d6:e68b:136 with SMTP id s16-20020a170906061000b006d6e68b0136mr7685089ejb.332.1647584764801; Thu, 17 Mar 2022 23:26:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647584764; cv=none; d=google.com; s=arc-20160816; b=0pbfvlNx5YJp+kEuWekHBq8ksLEiewhKgTnGgzRlUBE8Gj3X/WGCOyjt/OqABlorXn 7kGaOIjbXUZ3nWXq6d1y2GybgZvmK1BICsYhpUuRY+2Q2OJb3VBReXmjugor0MGp7rbe aOi56S6sXpFJCQuwAOt+2ElcWscr1AQjKsuQwaotRnPwXbPnp+p7QUR9tR7olwYWN3OL 0f84oE2qG4jA/xlgizEMCOr7dLlr+mmDZwVF/+SO/yG0CCF1qQTqM1KaAK6rOEe0L8qg 1xyGXPux5lcpbtzeOnqNq5SbY85N4Qf6RoAWh9p0u795P+4jFWkPf117lJxGlwJQU1/8 52Jg== 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=IEYPanSvvqgsCmbg09Ja84tH6dIyXQcZBZvO2ZYWRDg=; b=vVmtwhp24mWaPG0TJAZO/6WR4QhghMaILcsXCJxChn3/Tb15CKorW5i3ah/BVuf72y XcRmseifdYmkERP88diEPWjkDYuaVQ/bwDuNDqC0Epb6OvDFXKwduqByA4zYHTG4J+ua zEI2oZiICJrCY2R1mrZWWN7id3J+I7eZ/sBVGCYx2n7D6yNm0OO5wPSGtzgD5ILgwPU4 QXqLYejiTxXIoqss0VAkiseNcSY60nz79C5YwPwz/L9524VIi20FMgDz6wnrAm5/KRUa 7YgmCwExSF3+INm3cIwWwNYbyto/o6sILAmkS2lVEZRmyNTe0GHhh6mNQbeU8ioiMoK3 I92Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=iB0e+MGQ; 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 ay12-20020a170906d28c00b006df76385e95si716149ejb.821.2022.03.17.23.26.04; Thu, 17 Mar 2022 23:26:04 -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=iB0e+MGQ; 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 249F268AEC2; Fri, 18 Mar 2022 08:25:56 +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 03A5B68AF5D for ; Fri, 18 Mar 2022 08:25:47 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1647584753; x=1679120753; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=uwTlCyfvNgzGe9UnmRUVppj6gDMx918aX9dqZTxSw58=; b=iB0e+MGQQ5+wnObAM7hInYfGLNivfWLEHMK6cn5scXh5iNFcilTKS+Wn 0q6htliOImhRSggAKZmZsngBlisuBZj6JI6aSr0mi8+8e/G8qhMhj7dQB IYWchW+g33zDqx7hhQmNHrMa7wOKWv1vmPheXjCuHNmdLAgMdAoOqFeek wp+/fFAQlmNQx3HWuzn/E5rLXudB9xMdVREbEV9j7O6m97uaNhyqAEhCB CkR+/C1HaSuzA5mZj045fE3H9DOQCYUYg5tuW33kqOiojgELGyFqdelMs ES0VMOPuxo1Z4ZZ5xvKjVa+SlSEbGiHJdLN2/PHD9F3OXcC6LVsA9VN6Q w==; X-IronPort-AV: E=McAfee;i="6200,9189,10289"; a="257252887" X-IronPort-AV: E=Sophos;i="5.90,191,1643702400"; d="scan'208";a="257252887" 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:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,191,1643702400"; d="scan'208";a="822049462" 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:39 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Mar 2022 14:25:10 +0800 Message-Id: <20220318062511.382951-2-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 2/3] libavcodec/qsvdec: remove redundant decodeHeader() 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: zLLgnW1q9dnO Since ffmpeg-qsv uses return value to reinit decoder, it doesn't need to decode header each time. Move qsv_decode_header's position so that it will be called only if codec needed to be reinitialized. Rearrange the code of flushing decoder and re-init decoder operation. Remove the buffer_count and use the got_frame to decide whether the decoder is drain. Signed-off-by: Wenbin Chen Signed-off-by: Guangxin Xu --- libavcodec/qsvdec.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 0b5e416867..210bd0c1d5 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -82,7 +82,6 @@ typedef struct QSVContext { AVFifo *async_fifo; int zero_consume_run; - int buffered_count; int reinit_flag; enum AVPixelFormat orig_pix_fmt; @@ -653,8 +652,6 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, ++q->zero_consume_run; if (q->zero_consume_run > 1) ff_qsv_print_warning(avctx, ret, "A decode call did not consume any data"); - } else if (!*sync && bs.DataOffset) { - ++q->buffered_count; } else { q->zero_consume_run = 0; } @@ -787,20 +784,24 @@ static int qsv_process_data(AVCodecContext *avctx, QSVContext *q, if (!avctx->coded_height) avctx->coded_height = 720; - ret = qsv_decode_header(avctx, q, pkt, pix_fmt, ¶m); - - if (q->reinit_flag || (ret >= 0 && (q->orig_pix_fmt != ff_qsv_map_fourcc(param.mfx.FrameInfo.FourCC) || - avctx->coded_width != param.mfx.FrameInfo.Width || - avctx->coded_height != param.mfx.FrameInfo.Height))) { + /* decode zero-size pkt to flush the buffered pkt before reinit */ + if (q->reinit_flag) { AVPacket zero_pkt = {0}; + ret = qsv_decode(avctx, q, frame, got_frame, &zero_pkt); + if (ret < 0 || *got_frame) + return ret; + } - if (q->buffered_count) { - q->reinit_flag = 1; - /* decode zero-size pkt to flush the buffered pkt before reinit */ - q->buffered_count--; - return qsv_decode(avctx, q, frame, got_frame, &zero_pkt); - } + if (q->reinit_flag || !q->session || !q->initialized) { q->reinit_flag = 0; + ret = qsv_decode_header(avctx, q, pkt, pix_fmt, ¶m); + if (ret < 0) { + if (ret == AVERROR(EAGAIN)) + av_log(avctx, AV_LOG_INFO, "More data is required to decode header\n"); + else + av_log(avctx, AV_LOG_ERROR, "Error decoding header\n"); + goto reinit_fail; + } q->orig_pix_fmt = avctx->pix_fmt = pix_fmt = ff_qsv_map_fourcc(param.mfx.FrameInfo.FourCC); 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;