From patchwork Wed Sep 18 07:10:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Fei W" X-Patchwork-Id: 51642 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d32e:0:b0:48e:c0f8:d0de with SMTP id cf14csp732180vqb; Wed, 18 Sep 2024 00:19:11 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU/2sQEFRUR7DpzMTM1HQ8z0vuLQGjDAkUhOzevhbSELjHJmj3zRT0+rqDI52xlWQ9dLu2ELk0VWNWqC7X5wgiS@gmail.com X-Google-Smtp-Source: AGHT+IHVdWpZIsx9kKOX4iLWIVxKL/HlGRK07YuU7RvDvsqQXJPmi61sVaqHTWtdsvzWwFao6NlK X-Received: by 2002:a17:907:749:b0:a90:b73f:61d1 with SMTP id a640c23a62f3a-a90b73f6409mr85001766b.51.1726643951682; Wed, 18 Sep 2024 00:19:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1726643951; cv=none; d=google.com; s=arc-20240605; b=jLLELXgyT2sbU90gUhc8vgYLTlrxJJtP5FPkgczuAw8x15/FttSXfQh9PJ1+BD7fIR jn0YgQm/r+u9pvzgaLogxkgPBM2+A7yHeZHJDojnFxho5obSDf05C/Hc87yE7PqnNov8 3Ontxgoo4gqIzMlIr2oKrqsxz9mT5acY14TzL1pA7lb3stUJ+asGVxjN0pb9MmlbvKa1 cb06yBJNmTMG8asuUZ0WB/KqtvEqkj0PPxL2F5Nwb5YzBzJe5125P7OKG2rFAoyZEJ9w q/EMigYaG3omLC8/Ssir5SlnoYdT3p4d/8F+6EiQJHij3ugNr3mjkWxHKs/1a7YzSmg4 KCYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=Wbjp81Hf+TxC/6mZPjibNxt/Vcfdu+tDEc9PKp3IX2o=; fh=i4ESP4ZRFDcfYfwXKWpOXjc2YhmIGuOsCfZUnwNO0gc=; b=iUj4lcGJcdoWLx659ibZl/l1u4jykO5zbnrg5r8EZT3fgDv86DU5GvO54DUJWY+fM4 B7b0nzNcM9fbKcpZfPjYpWwGdCpuHNZeY0FSZOW4YP5+/k19TjXyBsx57unMeN66MPsz /nZYBvdjx+/+AbBd6Pd33OsX5FWQBG3zo/8f338u6zVEczme84eDTWTxh3229u7D+zJR +dX1001gNc5fPIx+NLiyco6uPNnyApgX9CTGx3wQ14Gn6ZRxL65l/Lm8qNJSdkkTcnqd Kc8r2YPP3NB91+WARFUZtBhoFywAUOMjDOg/8uHSwKm7Ks7kku8pNZF4rkubsERIpwS2 AtLw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=JLW2ptxd; 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 a640c23a62f3a-a90613731f1si597740866b.982.2024.09.18.00.19.11; Wed, 18 Sep 2024 00:19:11 -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=JLW2ptxd; 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 2302568DD12; Wed, 18 Sep 2024 10:08:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7962568DCCA for ; Wed, 18 Sep 2024 10:08:16 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1726643301; x=1758179301; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nP5IRQpfdWMnRwHlEU4MlIYq0bWJ4KUMQGbvmPFIybA=; b=JLW2ptxdALPvemZmR4SnPQgdhfhz6KPNER46luk7H5zY9h5fNQV+WzNa IpSTFJ1dUMuQIQepUiV9XYFUqMoF88UeEUE0vy7Y4kYDsQG2QZN0/LhlK I3OntpVVKIVWstC5kklYsvgGc+f4l904FvGs6h/REVE+LhrWZl2FuTNJ1 sIokJWqAOxn6Le0cmtUAKOTAxi8Qu0fSocwxD1GNT79UIsso17Eyz53dI 0lcFCoqUuQMpMrOfpQ2IdUy+DbPMoM32B0l1tcEODEZBVQDde+zwJP+R1 x5Lpyp3WaNogBLaDlx+DK03O06BrC+t291+nmEvL6Tl9uMDYwZKt8+UDy A==; X-CSE-ConnectionGUID: zZMPFOduSCi7MSUU+j3uoA== X-CSE-MsgGUID: TwQuEIbLSWm9oMGMgM6HjQ== X-IronPort-AV: E=McAfee;i="6700,10204,11198"; a="25695720" X-IronPort-AV: E=Sophos;i="6.10,238,1719903600"; d="scan'208";a="25695720" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2024 00:08:11 -0700 X-CSE-ConnectionGUID: qqOLiv45SKqJyDlFYIax9g== X-CSE-MsgGUID: 3Ol10rGiQWitjoAL9qA5cQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.10,238,1719903600"; d="scan'208";a="69452266" Received: from feiwan1-desk3.sh.intel.com ([10.238.208.39]) by orviesa009.jf.intel.com with ESMTP; 18 Sep 2024 00:08:10 -0700 From: fei.w.wang-at-intel.com@ffmpeg.org To: ffmpeg-devel@ffmpeg.org Date: Wed, 18 Sep 2024 15:10:28 +0800 Message-Id: <20240918071031.1377336-5-fei.w.wang@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240918071031.1377336-1-fei.w.wang@intel.com> References: <20240918071031.1377336-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 5/8] lavc/vvc_refs: Define FF_VVC_FRAME_FLAG* to h header 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: fei.w.wang@intel.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oGqzyoGlzlNP From: Fei Wang So that hardware decoder can use the flags too. Signed-off-by: Fei Wang --- libavcodec/vvc/refs.c | 38 +++++++++++++++++--------------------- libavcodec/vvc/refs.h | 5 +++++ 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/libavcodec/vvc/refs.c b/libavcodec/vvc/refs.c index 133ff9eaba..3e5573df29 100644 --- a/libavcodec/vvc/refs.c +++ b/libavcodec/vvc/refs.c @@ -29,10 +29,6 @@ #include "refs.h" -#define VVC_FRAME_FLAG_OUTPUT (1 << 0) -#define VVC_FRAME_FLAG_SHORT_REF (1 << 1) -#define VVC_FRAME_FLAG_LONG_REF (1 << 2) -#define VVC_FRAME_FLAG_BUMPING (1 << 3) typedef struct FrameProgress { atomic_int progress[VVC_PROGRESS_LAST]; @@ -80,7 +76,7 @@ void ff_vvc_clear_refs(VVCFrameContext *fc) { for (int i = 0; i < FF_ARRAY_ELEMS(fc->DPB); i++) ff_vvc_unref_frame(fc, &fc->DPB[i], - VVC_FRAME_FLAG_SHORT_REF | VVC_FRAME_FLAG_LONG_REF); + FF_VVC_FRAME_FLAG_SHORT_REF | FF_VVC_FRAME_FLAG_LONG_REF); } void ff_vvc_flush_dpb(VVCFrameContext *fc) @@ -191,12 +187,12 @@ int ff_vvc_set_new_ref(VVCContext *s, VVCFrameContext *fc, AVFrame **frame) fc->ref = ref; if (s->no_output_before_recovery_flag && (IS_RASL(s) || !GDR_IS_RECOVERED(s))) - ref->flags = VVC_FRAME_FLAG_SHORT_REF; + ref->flags = FF_VVC_FRAME_FLAG_SHORT_REF; else if (ph->r->ph_pic_output_flag) - ref->flags = VVC_FRAME_FLAG_OUTPUT | VVC_FRAME_FLAG_SHORT_REF; + ref->flags = FF_VVC_FRAME_FLAG_OUTPUT | FF_VVC_FRAME_FLAG_SHORT_REF; if (!ph->r->ph_non_ref_pic_flag) - ref->flags |= VVC_FRAME_FLAG_SHORT_REF; + ref->flags |= FF_VVC_FRAME_FLAG_SHORT_REF; ref->poc = poc; ref->sequence = s->seq_decode; @@ -219,16 +215,16 @@ int ff_vvc_output_frame(VVCContext *s, VVCFrameContext *fc, AVFrame *out, const if (no_output_of_prior_pics_flag) { for (int i = 0; i < FF_ARRAY_ELEMS(fc->DPB); i++) { VVCFrame *frame = &fc->DPB[i]; - if (!(frame->flags & VVC_FRAME_FLAG_BUMPING) && frame->poc != fc->ps.ph.poc && + if (!(frame->flags & FF_VVC_FRAME_FLAG_BUMPING) && frame->poc != fc->ps.ph.poc && frame->sequence == s->seq_output) { - ff_vvc_unref_frame(fc, frame, VVC_FRAME_FLAG_OUTPUT); + ff_vvc_unref_frame(fc, frame, FF_VVC_FRAME_FLAG_OUTPUT); } } } for (int i = 0; i < FF_ARRAY_ELEMS(fc->DPB); i++) { VVCFrame *frame = &fc->DPB[i]; - if ((frame->flags & VVC_FRAME_FLAG_OUTPUT) && + if ((frame->flags & FF_VVC_FRAME_FLAG_OUTPUT) && frame->sequence == s->seq_output) { nb_output++; if (frame->poc < min_poc || nb_output == 1) { @@ -247,10 +243,10 @@ int ff_vvc_output_frame(VVCContext *s, VVCFrameContext *fc, AVFrame *out, const VVCFrame *frame = &fc->DPB[min_idx]; ret = av_frame_ref(out, frame->frame); - if (frame->flags & VVC_FRAME_FLAG_BUMPING) - ff_vvc_unref_frame(fc, frame, VVC_FRAME_FLAG_OUTPUT | VVC_FRAME_FLAG_BUMPING); + if (frame->flags & FF_VVC_FRAME_FLAG_BUMPING) + ff_vvc_unref_frame(fc, frame, FF_VVC_FRAME_FLAG_OUTPUT | FF_VVC_FRAME_FLAG_BUMPING); else - ff_vvc_unref_frame(fc, frame, VVC_FRAME_FLAG_OUTPUT); + ff_vvc_unref_frame(fc, frame, FF_VVC_FRAME_FLAG_OUTPUT); if (ret < 0) return ret; @@ -289,7 +285,7 @@ void ff_vvc_bump_frame(VVCContext *s, VVCFrameContext *fc) if ((frame->flags) && frame->sequence == s->seq_output && frame->poc != poc) { - if (frame->flags == VVC_FRAME_FLAG_OUTPUT && frame->poc < min_poc) { + if (frame->flags == FF_VVC_FRAME_FLAG_OUTPUT && frame->poc < min_poc) { min_poc = frame->poc; } } @@ -297,10 +293,10 @@ void ff_vvc_bump_frame(VVCContext *s, VVCFrameContext *fc) for (int i = 0; i < FF_ARRAY_ELEMS(fc->DPB); i++) { VVCFrame *frame = &fc->DPB[i]; - if (frame->flags & VVC_FRAME_FLAG_OUTPUT && + if (frame->flags & FF_VVC_FRAME_FLAG_OUTPUT && frame->sequence == s->seq_output && frame->poc <= min_poc) { - frame->flags |= VVC_FRAME_FLAG_BUMPING; + frame->flags |= FF_VVC_FRAME_FLAG_BUMPING; } } @@ -324,7 +320,7 @@ static VVCFrame *find_ref_idx(VVCContext *s, VVCFrameContext *fc, int poc, uint8 static void mark_ref(VVCFrame *frame, int flag) { - frame->flags &= ~(VVC_FRAME_FLAG_LONG_REF | VVC_FRAME_FLAG_SHORT_REF); + frame->flags &= ~(FF_VVC_FRAME_FLAG_LONG_REF | FF_VVC_FRAME_FLAG_SHORT_REF); frame->flags |= flag; } @@ -398,7 +394,7 @@ static int add_candidate_ref(VVCContext *s, VVCFrameContext *fc, RefPicList *lis refp->poc = poc; refp->ref = ref; - refp->is_lt = ref_flag & VVC_FRAME_FLAG_LONG_REF; + refp->is_lt = ref_flag & FF_VVC_FRAME_FLAG_LONG_REF; refp->is_scaled = ref->sps->r->sps_num_subpics_minus1 != fc->ref->sps->r->sps_num_subpics_minus1|| memcmp(&ref->scaling_win, &fc->ref->scaling_win, sizeof(ref->scaling_win)) || ref->pps->r->pps_pic_width_in_luma_samples != fc->ref->pps->r->pps_pic_width_in_luma_samples || @@ -489,11 +485,11 @@ int ff_vvc_slice_rpl(VVCContext *s, VVCFrameContext *fc, SliceContext *sc) if (rpls->st_ref_pic_flag[i]) { poc = poc_base + delta_poc_st(rpls, lx, i, sps); poc_base = poc; - ref_flag = VVC_FRAME_FLAG_SHORT_REF; + ref_flag = FF_VVC_FRAME_FLAG_SHORT_REF; } else { use_msb = ref_lists->delta_poc_msb_cycle_present_flag[lx][j]; poc = poc_lt(&prev_delta_poc_msb, ph->poc, ref_lists, lx, j, max_poc_lsb); - ref_flag = VVC_FRAME_FLAG_LONG_REF; + ref_flag = FF_VVC_FRAME_FLAG_LONG_REF; j++; } ret = add_candidate_ref(s, fc, rpl, poc, ref_flag, use_msb); diff --git a/libavcodec/vvc/refs.h b/libavcodec/vvc/refs.h index 8ae33d4a9a..fc8e0aae6d 100644 --- a/libavcodec/vvc/refs.h +++ b/libavcodec/vvc/refs.h @@ -25,6 +25,11 @@ #include "dec.h" +#define FF_VVC_FRAME_FLAG_OUTPUT (1 << 0) +#define FF_VVC_FRAME_FLAG_SHORT_REF (1 << 1) +#define FF_VVC_FRAME_FLAG_LONG_REF (1 << 2) +#define FF_VVC_FRAME_FLAG_BUMPING (1 << 3) + int ff_vvc_output_frame(VVCContext *s, VVCFrameContext *fc, struct AVFrame *out, int no_output_of_prior_pics_flag, int flush); void ff_vvc_bump_frame(VVCContext *s, VVCFrameContext *fc); int ff_vvc_set_new_ref(VVCContext *s, VVCFrameContext *fc, struct AVFrame **frame);