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

fei.w.wang at intel.com fei.w.wang at intel.com
Wed Sep 18 10:10:28 EEST 2024


From: Fei Wang <fei.w.wang at intel.com>

So that hardware decoder can use the flags too.

Signed-off-by: Fei Wang <fei.w.wang at intel.com>
---
 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);
-- 
2.34.1



More information about the ffmpeg-devel mailing list