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);