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 21A7A41227 for ; Fri, 18 Mar 2022 06:26:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E290D68B0E0; Fri, 18 Mar 2022 08:25:55 +0200 (EET) 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 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: 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); -- 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".