From patchwork Fri Dec 13 09:08:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 16770 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id A20FC4484FF for ; Fri, 13 Dec 2019 11:10:17 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7F5B968A846; Fri, 13 Dec 2019 11:10:17 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9CD3068A58A for ; Fri, 13 Dec 2019 11:10:10 +0200 (EET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Dec 2019 01:10:08 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,309,1571727600"; d="scan'208";a="211390963" Received: from t.sh.intel.com ([10.239.13.104]) by fmsmga008.fm.intel.com with ESMTP; 13 Dec 2019 01:10:06 -0800 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 13 Dec 2019 17:08:23 +0800 Message-Id: <20191213090823.31192-1-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avcodec/cbs_av1: avoid reset some members of loop filter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" According to spec 6.8.10, loop_filter_ref_deltas & loop_filter_mode_deltas should be keep same as its previous value if it is not presented in current syntax. Signed-off-by: Fei Wang --- libavcodec/cbs_av1.h | 3 +++ libavcodec/cbs_av1_syntax_template.c | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h index 643e76793f..7267baaceb 100644 --- a/libavcodec/cbs_av1.h +++ b/libavcodec/cbs_av1.h @@ -444,6 +444,9 @@ typedef struct CodedBitstreamAV1Context { AV1ReferenceFrameState *ref; AV1ReferenceFrameState read_ref[AV1_NUM_REF_FRAMES]; AV1ReferenceFrameState write_ref[AV1_NUM_REF_FRAMES]; + + int8_t pre_loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME]; + int8_t pre_loop_filter_mode_deltas[2]; } CodedBitstreamAV1Context; diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c index f53955c52e..c9ac1dc600 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -819,6 +819,13 @@ static int FUNC(loop_filter_params)(CodedBitstreamContext *ctx, RWContext *rw, CodedBitstreamAV1Context *priv = ctx->priv_data; int i, err; + memcpy(current->loop_filter_ref_deltas, + priv->pre_loop_filter_ref_deltas, + AV1_TOTAL_REFS_PER_FRAME * sizeof(int8_t)); + memcpy(current->loop_filter_mode_deltas, + priv->pre_loop_filter_mode_deltas, + 2 * sizeof(int8_t)); + if (priv->coded_lossless || current->allow_intrabc) { infer(loop_filter_level[0], 0); infer(loop_filter_level[1], 0); @@ -832,7 +839,15 @@ static int FUNC(loop_filter_params)(CodedBitstreamContext *ctx, RWContext *rw, infer(loop_filter_ref_deltas[AV1_REF_FRAME_ALTREF2], -1); for (i = 0; i < 2; i++) infer(loop_filter_mode_deltas[i], 0); - return 0; + + memcpy(priv->pre_loop_filter_ref_deltas, + current->loop_filter_ref_deltas, + AV1_TOTAL_REFS_PER_FRAME * sizeof(int8_t)); + memcpy(priv->pre_loop_filter_mode_deltas, + current->loop_filter_mode_deltas, + 2 * sizeof(int8_t)); + + return 0; } fb(6, loop_filter_level[0]); @@ -865,6 +880,13 @@ static int FUNC(loop_filter_params)(CodedBitstreamContext *ctx, RWContext *rw, } } + memcpy(priv->pre_loop_filter_ref_deltas, + current->loop_filter_ref_deltas, + AV1_TOTAL_REFS_PER_FRAME * sizeof(int8_t)); + memcpy(priv->pre_loop_filter_mode_deltas, + current->loop_filter_mode_deltas, + 2 * sizeof(int8_t)); + return 0; }