diff mbox series

[FFmpeg-devel,v2,5/8] lavc/vvc_refs: Define FF_VVC_FRAME_FLAG* to h header

Message ID 20240918071031.1377336-5-fei.w.wang@intel.com
State New
Headers show
Series [FFmpeg-devel,v2,1/8] lavc/vaapi_dec: Create VA parameters dynamically | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Wang, Fei W Sept. 18, 2024, 7:10 a.m. UTC
From: Fei Wang <fei.w.wang@intel.com>

So that hardware decoder can use the flags too.

Signed-off-by: Fei Wang <fei.w.wang@intel.com>
---
 libavcodec/vvc/refs.c | 38 +++++++++++++++++---------------------
 libavcodec/vvc/refs.h |  5 +++++
 2 files changed, 22 insertions(+), 21 deletions(-)
diff mbox series

Patch

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