From patchwork Fri Jul 15 05:06:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Fei W" X-Patchwork-Id: 36793 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:43a1:b0:8b:53c6:bec9 with SMTP id i33csp63563pzl; Thu, 14 Jul 2022 22:08:10 -0700 (PDT) X-Google-Smtp-Source: AGRyM1thg3PcKjhpZGZxlCvVLPl5nyyloqn9fxXaVGZ8/gIwO16phsWV297mmX5ET+dpBktIc7nZ X-Received: by 2002:a17:906:844b:b0:72b:54b9:b97d with SMTP id e11-20020a170906844b00b0072b54b9b97dmr12201130ejy.229.1657861690793; Thu, 14 Jul 2022 22:08:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657861690; cv=none; d=google.com; s=arc-20160816; b=Zq3eQykYrzyXaGuUf7XeYK3dREwS3BTHGIGP8rvHly1ke0Aefm8UafF5srFxfbe3f9 9aa60MG+vpbKelEQj/0vPx3Jloq0R2RdSbNykkSVHt9tgR53ZEnqlPFijVvtdSGlprVu G2SRiTNNvvk9wBuMyyYoqtj+kdUrodYBSsDqIjBxOgebgKrFgHct6adlsZ5iWJyAWq9a qYbU0/CfVvDGHzsZO8OFV63QCMXcIkLjnlkhx1Y3aAuv5j5DOi4V7jcUE7LtfhfTLSPW Kl7D7nEfiDWouh1USwa/+l/bVEr5ZQBfQUwdPRSIdXUvoDSPQCiDubJDKocx1oyQ7HpF OFfg== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=S0L9TcHwHTKon3BMdCdrFoIIJrfjPFU5zcb0fOUWSW4=; b=EfgeOCqzj0lIdm8clGaAbFYuZac0fpLILIdJXebB1hE4qimvJxpagMzXT6LMNqO2it n1mI95Zaaa9It2dYykIBN6MaL9YnwpvQ8E1RDIufqTOUMaHR5u/vezgFdQTeUWlBt4Tx 97J+ASFRRPYfi4n5T/yV9Xitlzx/G0/dbKSMm92IMK9TgDq+gLBHkqTHkzJzA4yGF/4O 1I6h0Hy9qJV5GZj+RlKyAbi5cXhqH1iu0W+/sMmMrcwQTIDA70lu+iS3vt3FIPSjhhvA rOKtUVkqfaT+BltU7/M+3wu4ti3Y/Id6QPJtHAsL7l31uU845wRjjt7CxSvRgWH1Q59R zhSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=TFkwNlQt; 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 q35-20020a05640224a300b00439bccfd4cfsi4683117eda.99.2022.07.14.22.08.09; Thu, 14 Jul 2022 22:08:10 -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=TFkwNlQt; 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 F287868B691; Fri, 15 Jul 2022 08:08:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A595368B632 for ; Fri, 15 Jul 2022 08:07:57 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657861682; x=1689397682; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=wYAMlgvVuDyHoX/UUpFAnwW/gqwTs35UX/vQfOxNH80=; b=TFkwNlQtONDJMrJl+T4KVhC5UYc7ZGeLucTTQquTwJvXneVURTWH+VNV Od4HEvklkDsdnEtCVmfurb/uGXsTaIZwaN7UDxMVzJo488TfxlPydEqUr mKErIg7LieKNXklqBxdpL5K5CE8kBFXkzNRYqzyLlg5VEi5CxNINXwUQT jiWYWWDjOU4hWaldCfJm2bxDF4Omn6h8wA+Rupj03g5+YrHrHj9ayQh5L e6dpbtCduO7Nj9utT9sCcSoGpQXNRE+PDM5YvjaVETTEBGcqtPs2B4IAa CJSeFpkw+BRNDQ98YTqYeio3A2ZZIO7PzsZ0RSkNNzmG977oaqMAvH4MV g==; X-IronPort-AV: E=McAfee;i="6400,9594,10408"; a="265490995" X-IronPort-AV: E=Sophos;i="5.92,272,1650956400"; d="scan'208";a="265490995" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jul 2022 22:07:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,272,1650956400"; d="scan'208";a="654183802" Received: from t.sh.intel.com ([10.239.159.159]) by fmsmga008.fm.intel.com with ESMTP; 14 Jul 2022 22:07:53 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Jul 2022 13:06:41 +0800 Message-Id: <20220715050644.879488-1-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/4] lavc/hevc_refs: fix dpb logical for IRAP 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: Xu Guangxin , Fei Wang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: MGQo6IUIkMCa From: Xu Guangxin According to C.5.2.2, item 2. When we got an IRAP, and the NoOutputOfPriorPicsFlag = 0, we need bump all outputable frames. Tested-by: Fei Wang Signed-off-by: Xu Guangxin --- update: 1. clean and replace 0xff with HEVC_SEQUENCE_COUNTER_MASK libavcodec/hevc_refs.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index 6a70c817b0..2b0468d6c4 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -175,21 +175,24 @@ int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc) int ff_hevc_output_frame(HEVCContext *s, AVFrame *out, int flush) { + if (IS_IRAP(s) && s->no_rasl_output_flag == 1) { + const static int mask = HEVC_FRAME_FLAG_BUMPING | HEVC_FRAME_FLAG_OUTPUT; + for (int i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++) { + HEVCFrame *frame = &s->DPB[i]; + if ((frame->flags & mask) == HEVC_FRAME_FLAG_OUTPUT && + frame->sequence != s->seq_decode) { + if (s->sh.no_output_of_prior_pics_flag == 1) + ff_hevc_unref_frame(s, frame, HEVC_FRAME_FLAG_OUTPUT); + else + frame->flags |= HEVC_FRAME_FLAG_BUMPING; + } + } + } do { int nb_output = 0; int min_poc = INT_MAX; int i, min_idx, ret; - if (s->sh.no_output_of_prior_pics_flag == 1 && s->no_rasl_output_flag == 1) { - for (i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++) { - HEVCFrame *frame = &s->DPB[i]; - if (!(frame->flags & HEVC_FRAME_FLAG_BUMPING) && frame->poc != s->poc && - frame->sequence == s->seq_output) { - ff_hevc_unref_frame(s, frame, HEVC_FRAME_FLAG_OUTPUT); - } - } - } - for (i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++) { HEVCFrame *frame = &s->DPB[i]; if ((frame->flags & HEVC_FRAME_FLAG_OUTPUT) && From patchwork Fri Jul 15 05:06:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Fei W" X-Patchwork-Id: 36794 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:43a1:b0:8b:53c6:bec9 with SMTP id i33csp63644pzl; Thu, 14 Jul 2022 22:08:22 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tLf2EedvbKR1nMP191VY1169PEYg+PZKaPkjan2grvTePHqOkWS6I7TaXfPO5Qd011KL7w X-Received: by 2002:a05:6402:51cb:b0:43a:e94c:a841 with SMTP id r11-20020a05640251cb00b0043ae94ca841mr16666249edd.212.1657861702368; Thu, 14 Jul 2022 22:08:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657861702; cv=none; d=google.com; s=arc-20160816; b=MA6uiCQ6oyfnoIwjTdgUGRQEFaXB9QVrQni/tmmYSeMODELXWVmYaXg2QqS7/jni8b 2PBgupvaJ679k1Yo9CHZ4022KRK727XMD++PSY8BtOzD4HhqFkviIKnWxUQVC+Y9DDEF Mx4K706hrbzVBKqx7pndxng76XbolHea81mEhAS2kvrqAu85ZQMbGtK6HWN0QT3QzX+x VlFia4RupyPmI0typUT9Pabmp/a5ncf4T9PVo22mDfszx74KL5DcT0UzH/wb87UnKaMi xBu4EaBj3uleFWo1u5n+4lu9e9+llDG85zTjfSYYRuYQ2oHF/lrSFkCijIFT/xF33P2a K0Wg== 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:dkim-signature:delivered-to; bh=fYwMp/UGaF964UFH+Ack5glcfWJOYivZz1zvCck4cHM=; b=cZnPwk80Cri2jQiKuPnHmifzB49rpn4EM7H8vPZFTmx9cMei77upMSk417okBi07eQ y5BesRPGanytO0PlaZGAqgSCVnIFh/x5DVWGWYu7dtMPbetR5ZVjYvUfavxjernTdukh mI7XzmFVKl3A6YxRYu0aFDyZxQ1VCM9znDNsobz6FkX1l23QP+iNKZJc1IhfiPnBYEb3 p/NAKlGMzYrjqVslbdi66UlPylz90FsDQJgmJDqIEXZQwb/iA5yAQW8KWYqi6Nh0+wlQ BiAMkI+GQCl2EGg2zXcYqfFUI4gvRiNoIhPlOuIRYOKi6ilk31GpHm/eYFdmVFCSmd6g 2wHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=eqIqrXM3; 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 js1-20020a17090797c100b0072b9b3d42cbsi5936351ejc.525.2022.07.14.22.08.22; Thu, 14 Jul 2022 22:08:22 -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=eqIqrXM3; 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 16B8C68B88E; Fri, 15 Jul 2022 08:08:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0A80468B632 for ; Fri, 15 Jul 2022 08:07:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657861684; x=1689397684; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6QuZ7C1cqsqWY2+u06uYI0FZIW1zLs332jpsA3f3dX4=; b=eqIqrXM3AdrSbABFJPOPO/OF2+drljsgesX19VFFlJuorp3BeKfMq4OY lhl0fFWWw9X9bWw5kOEdUWyUJdXkAdkoJw5S06oQ2y/IP2c/DqgNoBODJ JoM6u4Q5Kz3+dWo7fPd/eiPIXNrtzLZ4ZHeulSzcCbxdmN+7qkuUaBgRL V4od4XgpsKoFm/Ld/VxmnK9/hwZOn6BqmiDeTCSrhSbmfAtljO+Fghb3Z Ch/3uPPjTsxrf45eimauDFzoy8Gelt5rQ3KVB/6cwDCRvi5xPuL4T7txZ 6T0Eo5E6DmCxuvLiZLYvzhevBNuWwYy92HvNg6Pxa0xvhu0tMJ6MiA9vL Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10408"; a="265490996" X-IronPort-AV: E=Sophos;i="5.92,272,1650956400"; d="scan'208";a="265490996" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jul 2022 22:07:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,272,1650956400"; d="scan'208";a="654183808" Received: from t.sh.intel.com ([10.239.159.159]) by fmsmga008.fm.intel.com with ESMTP; 14 Jul 2022 22:07:54 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Jul 2022 13:06:42 +0800 Message-Id: <20220715050644.879488-2-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220715050644.879488-1-fei.w.wang@intel.com> References: <20220715050644.879488-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 2/4] lavc/hevcdec: do not let missing ref frames invovled in dpb process 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: Xu Guangxin , Fei Wang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: mawVbx2no/XD From: Xu Guangxin We will generate a new frame for a missed reference. The frame can only be used for reference. We assign an invalid decode sequence to it, so it will not be involved in any dpb process. Tested-by: Fei Wang Signed-off-by: Fei Wang Signed-off-by: Xu Guangxin --- libavcodec/hevc_refs.c | 16 ++++++++++++++-- libavcodec/hevcdec.c | 8 ++++---- libavcodec/hevcdec.h | 3 +++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index 2b0468d6c4..5282716a61 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -173,6 +173,16 @@ int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc) return 0; } +static void unref_missing_refs(HEVCContext *s) +{ + for (int i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++) { + HEVCFrame *frame = &s->DPB[i]; + if (frame->sequence == HEVC_SEQUENCE_COUNTER_INVALID) { + ff_hevc_unref_frame(s, frame, ~0); + } + } +} + int ff_hevc_output_frame(HEVCContext *s, AVFrame *out, int flush) { if (IS_IRAP(s) && s->no_rasl_output_flag == 1) { @@ -233,7 +243,7 @@ int ff_hevc_output_frame(HEVCContext *s, AVFrame *out, int flush) } if (s->seq_output != s->seq_decode) - s->seq_output = (s->seq_output + 1) & 0xff; + s->seq_output = (s->seq_output + 1) & HEVC_SEQUENCE_COUNTER_MASK; else break; } while (1); @@ -419,7 +429,7 @@ static HEVCFrame *generate_missing_ref(HEVCContext *s, int poc) } frame->poc = poc; - frame->sequence = s->seq_decode; + frame->sequence = HEVC_SEQUENCE_COUNTER_INVALID; frame->flags = 0; if (s->threads_type == FF_THREAD_FRAME) @@ -463,6 +473,8 @@ int ff_hevc_frame_rps(HEVCContext *s) return 0; } + unref_missing_refs(s); + /* clear the reference flags on all frames except the current one */ for (i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++) { HEVCFrame *frame = &s->DPB[i]; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index f222f20706..6544171cf0 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -569,7 +569,7 @@ static int hls_slice_header(HEVCContext *s) } if ((IS_IDR(s) || IS_BLA(s)) && sh->first_slice_in_pic_flag) { - s->seq_decode = (s->seq_decode + 1) & 0xff; + s->seq_decode = (s->seq_decode + 1) & HEVC_SEQUENCE_COUNTER_MASK; s->max_ra = INT_MAX; if (IS_IDR(s)) ff_hevc_clear_refs(s); @@ -614,7 +614,7 @@ static int hls_slice_header(HEVCContext *s) return pix_fmt; s->avctx->pix_fmt = pix_fmt; - s->seq_decode = (s->seq_decode + 1) & 0xff; + s->seq_decode = (s->seq_decode + 1) & HEVC_SEQUENCE_COUNTER_MASK; s->max_ra = INT_MAX; } @@ -3266,7 +3266,7 @@ static int decode_nal_unit(HEVCContext *s, const H2645NAL *nal) break; case HEVC_NAL_EOS_NUT: case HEVC_NAL_EOB_NUT: - s->seq_decode = (s->seq_decode + 1) & 0xff; + s->seq_decode = (s->seq_decode + 1) & HEVC_SEQUENCE_COUNTER_MASK; s->max_ra = INT_MAX; break; case HEVC_NAL_AUD: @@ -3741,7 +3741,7 @@ static int hevc_update_thread_context(AVCodecContext *dst, s->threads_type = s0->threads_type; if (s0->eos) { - s->seq_decode = (s->seq_decode + 1) & 0xff; + s->seq_decode = (s->seq_decode + 1) & HEVC_SEQUENCE_COUNTER_MASK; s->max_ra = INT_MAX; } diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index f6acf845ae..542adcf593 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -390,6 +390,9 @@ typedef struct DBParams { #define HEVC_FRAME_FLAG_LONG_REF (1 << 2) #define HEVC_FRAME_FLAG_BUMPING (1 << 3) +#define HEVC_SEQUENCE_COUNTER_MASK 0xff +#define HEVC_SEQUENCE_COUNTER_INVALID (HEVC_SEQUENCE_COUNTER_MASK + 1) + typedef struct HEVCFrame { AVFrame *frame; AVFrame *frame_grain; From patchwork Fri Jul 15 05:06:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Fei W" X-Patchwork-Id: 36795 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:43a1:b0:8b:53c6:bec9 with SMTP id i33csp63725pzl; Thu, 14 Jul 2022 22:08:32 -0700 (PDT) X-Google-Smtp-Source: AGRyM1t+gWA0gJ3dwz9qwi/wpTCoPChfmi95cL52CIH1E5ZCoojSiGvPY2Ag7D/IYfpYgvyu+E32 X-Received: by 2002:a17:906:5a5b:b0:72b:39cf:6042 with SMTP id my27-20020a1709065a5b00b0072b39cf6042mr11726968ejc.301.1657861712642; Thu, 14 Jul 2022 22:08:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657861712; cv=none; d=google.com; s=arc-20160816; b=ovXgoOqliZgutxrvDormLh3ntipMVP9TszA8LXxHjmvLTXmftvJR+Ym0qXjelyAC5F wQP/sPyKR+RSPfMxU6HM4F3Po16TINtHGSmDRyf2RNhTVTwKaeL/bQd2tj8wofPnkudR piu1l5OIDu/X7h/dPy2pw6UKkt30K9TQ+ORSJ13lj7J6N4w9rFY+yqkld3MO+srCNU8U xWY/gQ8l7PgGdOHzF/OhMz91XWS6vnyNQsvNl4UtgBSxcmztjcMr11kCdSwK6E6T6ttu oczIvGI6UW+XlTvY5nGmPnYDBiU/Duit1BWItBv4VV47+fsXz4TouCP9Q5Ol0Fp1OGtU dmhQ== 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:dkim-signature:delivered-to; bh=upBLCYdh5iJcUGORz7OM8EETONzpykhoZoDldP+p/Tg=; b=S2FB8+cRMT3c6S3Mhqvch8dnwV2PZhnxlzDAWeu4HI7zSPI34g7a+UbWZS6Mxyh6ae kIi70z7HDJ1JU9Ge8UwHV6rCZaIgUQVpBlEJFZH+LMDP0bEiA68CtrDMxmkIVmvYfs7+ 3B7Hp572UJHB7wWHHsJfqqG1eAfaAzAgaNhqyZIribKac9QidZyQ7HGH4yDIzYoQK5Qm 8qEz0T6EzsHwfXoMtlc/cL6PpdmcmbxJTR6Dgk4p9vNwI1LCsjKaZgp9SLK1IfPQs0va yhDNMTckOMY7xrDxApjOv3mBEc3Fv64VBYpXfxUwoJckCATkErkLB57gtssm1jhN4t27 fe7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=JapqHXts; 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 f26-20020a50d55a000000b0043743ad1af8si3437366edj.356.2022.07.14.22.08.32; Thu, 14 Jul 2022 22:08:32 -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=JapqHXts; 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 52E8868B800; Fri, 15 Jul 2022 08:08:11 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9333F68B78C for ; Fri, 15 Jul 2022 08:08:03 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657861688; x=1689397688; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dqZjY8+21UDy3woIV/K1+z2xGrTmYkS1yygskZyJoAo=; b=JapqHXtsBsTzKKH4lkZZMP6OfvW2VBrFy7UzpjDtXK7dQP1AEQJwIQ6j Udg2Fd8d5+vUVu8K5rXP10fSAB8j4pGxByB5QdzC1fairZCSGJfk1C+Ho 0CDZtM0GbgwYDElr7QzwmVgUN0xWU+1DqIyzFVisG+4PSfllJtLkRrRRb tz+Kq/rT6IqKnupR2aVYHZ8a3XbR6YucfJ2/Vq0hxZAqpDhtMO0Ii1xBA mUEBPBom0nvk/Q6ksS4p0Wqtqq8PFelLfmL9MhwuI4N19WNfL33hIUFZH NdIo7tNea65yEQS9hKevc+5SOtpeo+AkJwrlqhwu40nuHrdA1/nuLa1Bw w==; X-IronPort-AV: E=McAfee;i="6400,9594,10408"; a="265490997" X-IronPort-AV: E=Sophos;i="5.92,272,1650956400"; d="scan'208";a="265490997" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jul 2022 22:07:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,272,1650956400"; d="scan'208";a="654183813" Received: from t.sh.intel.com ([10.239.159.159]) by fmsmga008.fm.intel.com with ESMTP; 14 Jul 2022 22:07:55 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Jul 2022 13:06:43 +0800 Message-Id: <20220715050644.879488-3-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220715050644.879488-1-fei.w.wang@intel.com> References: <20220715050644.879488-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 3/4] lavc/hevc_refs: exclude current frame from long term refs 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: Xu Guangxin , Fei Wang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Cwoj7Xpb9fkv From: Xu Guangxin suppose a. You have 3 frames, 0, 1, 4096. b. The ltMask is 0xfff and use_msb is 0. c. The 0, 1 are lt refs for 4096. d. you are decoding frame 4096, and get the 0 frame. Since 4096 & ltMask is 0 too, even you want get 0, find_ref_idx may give you 4096. add_candidate_ref will report an error for this Tested-by: Fei Wang Signed-off-by: Xu Guangxin --- libavcodec/hevc_refs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index 5282716a61..811e8feff8 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -387,7 +387,7 @@ static HEVCFrame *find_ref_idx(HEVCContext *s, int poc, uint8_t use_msb) for (i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++) { HEVCFrame *ref = &s->DPB[i]; if (ref->frame->buf[0] && ref->sequence == s->seq_decode) { - if ((ref->poc & mask) == poc) + if ((ref->poc & mask) == poc && (use_msb || ref->poc != s->poc)) return ref; } } From patchwork Fri Jul 15 05:06:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Fei W" X-Patchwork-Id: 36796 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:43a1:b0:8b:53c6:bec9 with SMTP id i33csp63786pzl; Thu, 14 Jul 2022 22:08:42 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vQwIILOuG4T0B/nUGKX0MUXY5yU9lXfSSTkM0exb8EbrxQ4Md9hWXZFo+Fov3GunDrq+Te X-Received: by 2002:a17:906:8a5b:b0:72b:50a1:a72c with SMTP id gx27-20020a1709068a5b00b0072b50a1a72cmr12253937ejc.152.1657861721870; Thu, 14 Jul 2022 22:08:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657861721; cv=none; d=google.com; s=arc-20160816; b=cPvL9MW4Z4jZuTE/QFrNXck6Kz0XTaUCxkEqV/DDjGnRyDhhEs7PdgbSy/4+D1+Te7 6ZbNnV07/tQ0XgMvOsNbEXD292P0IRLy/fGKNgsuGkzORtQdwH9YfOCcknSpjzb92zRW HLFsHj06yK5vJevVt/VoGRANiKsskoiFzCOEWQWHHnDcnQfNz3JVIhJ5dR45zXlqCkpi kJt0KQUOgsO2pqw1fBTHNt6pcDagATChz1+cW9QJCJLWi7I/wmusmrCRbyOk8LMbREFj Qf36ycCEuTLHQMZeFpPcLe6z6CJRVKV506PgVGF3Q5ghquCLJRLub53z3+E+IJqt08li A2Dw== 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:dkim-signature:delivered-to; bh=w5hHfmF7McLMy8GGObwN+vHXEItfpBiVv5OZfmrbx1g=; b=i874tL44J9NBQgqXRKLnknAwWW9UXw3Sg7u4fAS7El0Trlu7vN68ProvItCWXKNB+/ vMwQhTq1FQ4ZYPIuom0WYM0tF78XK1YAungopjp57SBfw11R+hLQE2J63je02xxvk0tt 2k7gyYnIQWh6KXKn3pukSNkdsiI7zyz8vQugvEosKaj5vXoBsTbejR18om9H1BLPDSOt anlbxqCgqXuwoSwahnGUrrhy2axx8c1JawIepxJxKGpwmnBCQT9UjUG1pWc3LJ+fs4MY KTUQb6trHGrTYqq58hA2em+pV9tLPpf+ME3hWFXVr9NPvHDtAw847UL49V/ZRTPYsway I4HQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=f12ca8qy; 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 qa44-20020a17090786ac00b0071256ff7906si4396183ejc.692.2022.07.14.22.08.41; Thu, 14 Jul 2022 22:08:41 -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=f12ca8qy; 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 4D7F868B9AE; Fri, 15 Jul 2022 08:08:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E07ED68B78C for ; Fri, 15 Jul 2022 08:08:04 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657861690; x=1689397690; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=f9AqIUswfIutQPdoE7Zum6MZeTUs/17S56tsXmTZzzo=; b=f12ca8qyinMEnRj7Txx110WwSlEziVyfaFobg5Kw63z7BG6DcuguT9QR GGHMgfUrYRM4gUWIRugIqDCebSUNuWdNkFvAp29sNPH7LaVQzUp4dYef/ nUUeSNCGvMjj3oUfX1lVj6jVfhgsHTc2o5pumvmQooypfthrI/Erod1cx YrqHVF54bAYRWvUNpjZwhWmk550gy7nF2xpWk8b9ca8hT/h6YOE8LwV+N SdF76j+8VQtHcZqElRreAlzKpJuQ4MJM7pCjYA2DR9LTLBFqW0P2bfrsI Y8gYn5OwWEq7uA33wDhOElF5m129kA099GJlTiQCTJvY0al4pklPScEEe w==; X-IronPort-AV: E=McAfee;i="6400,9594,10408"; a="265490999" X-IronPort-AV: E=Sophos;i="5.92,272,1650956400"; d="scan'208";a="265490999" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jul 2022 22:07:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,272,1650956400"; d="scan'208";a="654183820" Received: from t.sh.intel.com ([10.239.159.159]) by fmsmga008.fm.intel.com with ESMTP; 14 Jul 2022 22:07:56 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Jul 2022 13:06:44 +0800 Message-Id: <20220715050644.879488-4-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220715050644.879488-1-fei.w.wang@intel.com> References: <20220715050644.879488-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 4/4] lavc/hevcdec: respect the value of no_output_of_prior_pics_flag 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: Xu Guangxin , Fei Wang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: XMCMiZuJwZVc From: Xu Guangxin Even resolution or number of picture stores changes, we still need follow no_output_of_prior_pics_flag in next IDR. Tested-by: Fei Wang Signed-off-by: Xu Guangxin --- libavcodec/hevcdec.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 6544171cf0..6caaaed62b 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -594,15 +594,8 @@ static int hls_slice_header(HEVCContext *s) if (s->ps.sps != (HEVCSPS*)s->ps.sps_list[s->ps.pps->sps_id]->data) { const HEVCSPS *sps = (HEVCSPS*)s->ps.sps_list[s->ps.pps->sps_id]->data; - const HEVCSPS *last_sps = s->ps.sps; enum AVPixelFormat pix_fmt; - if (last_sps && IS_IRAP(s) && s->nal_unit_type != HEVC_NAL_CRA_NUT) { - if (sps->width != last_sps->width || sps->height != last_sps->height || - sps->temporal_layer[sps->max_sub_layers - 1].max_dec_pic_buffering != - last_sps->temporal_layer[last_sps->max_sub_layers - 1].max_dec_pic_buffering) - sh->no_output_of_prior_pics_flag = 0; - } ff_hevc_clear_refs(s); ret = set_sps(s, sps, sps->pix_fmt);