[FFmpeg-devel] [PATCH 08/18] avcodec/vvcdec: refact, pred_get_refs return VVCRefPic instead of VVCFrame

Nuo Mi nuomi2021 at gmail.com
Sun May 19 16:27:39 EEST 2024


---
 libavcodec/vvc/inter.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/libavcodec/vvc/inter.c b/libavcodec/vvc/inter.c
index cd96707c02..23d9ac05e6 100644
--- a/libavcodec/vvc/inter.c
+++ b/libavcodec/vvc/inter.c
@@ -387,15 +387,15 @@ static void luma_prof_bi(VVCLocalContext *lc, uint8_t *dst, const ptrdiff_t dst_
         fc->vvcdsp.inter.avg(dst, dst_stride, tmp[L0], tmp[L1], block_w, block_h);
 }
 
-static int pred_get_refs(const VVCLocalContext *lc, VVCFrame *ref[2],  const MvField *mv)
+static int pred_get_refs(const VVCLocalContext *lc, VVCRefPic *refp[2], const MvField *mv)
 {
-    const RefPicList *rpl = lc->sc->rpl;
+    RefPicList *rpl = lc->sc->rpl;
 
     for (int mask = PF_L0; mask <= PF_L1; mask++) {
         if (mv->pred_flag & mask) {
             const int lx = mask - PF_L0;
-            ref[lx] = rpl[lx].refs[mv->ref_idx[lx]].ref;
-            if (!ref[lx])
+            refp[lx] = rpl[lx].refs + mv->ref_idx[lx];
+            if (!refp[lx]->ref)
                 return AVERROR_INVALIDDATA;
         }
     }
@@ -487,9 +487,9 @@ static void pred_regular(VVCLocalContext *lc, const MvField *mvf, const MvField
 {
     const VVCFrameContext *fc = lc->fc;
     const int c_end           = fc->ps.sps->r->sps_chroma_format_idc ? CR : LUMA;
-    VVCFrame *ref[2];
+    VVCRefPic *refp[2];
 
-    if (pred_get_refs(lc, ref, mvf) < 0)
+    if (pred_get_refs(lc, refp, mvf) < 0)
         return;
 
     for (int c_idx = c_start; c_idx <= c_end; c_idx++) {
@@ -511,10 +511,10 @@ static void pred_regular(VVCLocalContext *lc, const MvField *mvf, const MvField
 
         if (mvf->pred_flag != PF_BI) {
             const int lx = mvf->pred_flag - PF_L0;
-            mc_uni(lc, inter, inter_stride, ref[lx]->frame, mvf,
+            mc_uni(lc, inter, inter_stride, refp[lx]->ref->frame, mvf,
                 x, y, w, h, c_idx, hf_idx, vf_idx);
         } else {
-            mc_bi(lc, inter, inter_stride, ref[0]->frame, ref[1]->frame, mvf, orig_mvf,
+            mc_bi(lc, inter, inter_stride, refp[L0]->ref->frame, refp[L1]->ref->frame, mvf, orig_mvf,
                 x, y, w, h, c_idx, do_bdof, hf_idx, vf_idx);
         }
         if (do_ciip) {
@@ -660,10 +660,10 @@ static void derive_sb_mv(VVCLocalContext *lc, MvField *mv, MvField *orig_mv, int
     if (pu->bdof_flag)
         *sb_bdof_flag = 1;
     if (pu->dmvr_flag) {
-        VVCFrame* ref[2];
-        if (pred_get_refs(lc, ref, mv) < 0)
+        VVCRefPic *refp[2];
+        if (pred_get_refs(lc, refp, mv) < 0)
             return;
-        dmvr_mv_refine(lc, mv, orig_mv, sb_bdof_flag, ref[0]->frame, ref[1]->frame, x0, y0, sbw, sbh);
+        dmvr_mv_refine(lc, mv, orig_mv, sb_bdof_flag, refp[L0]->ref->frame, refp[L1]->ref->frame, x0, y0, sbw, sbh);
         set_dmvr_info(fc, x0, y0, sbw, sbh, mv);
     }
 }
@@ -734,18 +734,18 @@ static void pred_affine_blk(VVCLocalContext *lc)
 
             uint8_t *dst0 = POS(0, x, y);
             const MvField *mv = ff_vvc_get_mvf(fc, x, y);
-            VVCFrame *ref[2];
+            VVCRefPic *refp[2];
 
-            if (pred_get_refs(lc, ref, mv) < 0)
+            if (pred_get_refs(lc, refp, mv) < 0)
                 return;
 
             if (mi->pred_flag != PF_BI) {
                 const int lx = mi->pred_flag - PF_L0;
-                luma_prof_uni(lc, dst0, fc->frame->linesize[0], ref[lx]->frame,
+                luma_prof_uni(lc, dst0, fc->frame->linesize[LUMA], refp[lx]->ref->frame,
                     mv, x, y, sbw, sbh, pu->cb_prof_flag[lx],
                     pu->diff_mv_x[lx], pu->diff_mv_y[lx]);
             } else {
-                luma_prof_bi(lc, dst0, fc->frame->linesize[0], ref[0]->frame, ref[1]->frame,
+                luma_prof_bi(lc, dst0, fc->frame->linesize[LUMA], refp[L0]->ref->frame, refp[L1]->ref->frame,
                     mv, x, y, sbw, sbh);
             }
             if (fc->ps.sps->r->sps_chroma_format_idc) {
-- 
2.34.1



More information about the ffmpeg-devel mailing list