[FFmpeg-devel] [PATCH] cbs_av1: Copy loop filter and segment parameters of repeat frame from its mapped frame

Wang, Fei W fei.w.wang at intel.com
Tue Sep 3 09:11:11 EEST 2024


On Tue, 2024-09-03 at 01:20 +0000, Dai, Jianhui J wrote:
> 
> 
> > -----Original Message-----
> > From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
> > fei.w.wang-at-intel.com at ffmpeg.org
> > Sent: Wednesday, August 28, 2024 8:02 PM
> > To: ffmpeg-devel at ffmpeg.org
> > Cc: Wang, Fei W <fei.w.wang at intel.com>
> > Subject: [FFmpeg-devel] [PATCH] cbs_av1: Copy loop filter and
> > segment
> > parameters of repeat frame from its mapped frame
> > 
> > From: Fei Wang <fei.w.wang at intel.com>
> > 
> > Implement load/save loop filter and segment parameters defined in
> > section
> > 7.20 and 7.21 in spec for show_existing_frame frames.
> > 
> > Fixes ticket #11151.
> > 
> > Signed-off-by: Fei Wang <fei.w.wang at intel.com>
> > ---
> >  libavcodec/cbs_av1.h                 |  5 ++++
> >  libavcodec/cbs_av1_syntax_template.c | 36 +++++++++++++++++++++---
> > ----
> >  2 files changed, 33 insertions(+), 8 deletions(-)
> > 
> > diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h index
> > a027013bc7..8586f2bf4a 100644
> > --- a/libavcodec/cbs_av1.h
> > +++ b/libavcodec/cbs_av1.h
> > @@ -477,6 +477,11 @@ typedef struct CodedBitstreamAV1Context {
> >      // Writing will fail with an error if an OBU larger than can
> > be
> >      // represented by the fixed size is encountered.
> >      int fixed_obu_size_length;
> > +
> > +    int8_t  loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME];
> > +    int8_t  loop_filter_mode_deltas[2];
> > +    uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
> > +    int16_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
> >  } CodedBitstreamAV1Context;
> > 
> > 
> > diff --git a/libavcodec/cbs_av1_syntax_template.c
> > b/libavcodec/cbs_av1_syntax_template.c
> > index 3f4b13a177..a4a912482c 100644
> > --- a/libavcodec/cbs_av1_syntax_template.c
> > +++ b/libavcodec/cbs_av1_syntax_template.c
> > @@ -1374,6 +1374,15 @@ static int
> > FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext
> > *rw,
> >                  priv->render_height   = ref->render_height;
> >                  priv->bit_depth       = ref->bit_depth;
> >                  priv->order_hint      = ref->order_hint;
> > +
> > +                memcpy(priv->loop_filter_ref_deltas, ref-
> > >loop_filter_ref_deltas,
> > +                       sizeof(ref->loop_filter_ref_deltas));
> > +                memcpy(priv->loop_filter_mode_deltas, ref-
> > > loop_filter_mode_deltas,
> > +                       sizeof(ref->loop_filter_mode_deltas));
> > +                memcpy(priv->feature_enabled, ref-
> > >feature_enabled,
> > +                       sizeof(ref->feature_enabled));
> > +                memcpy(priv->feature_value, ref->feature_value,
> > +                       sizeof(ref->feature_value));
> >              } else
> >                  infer(refresh_frame_flags, 0);
> > 
> > @@ -1691,14 +1700,25 @@ update_refs:
> >                      priv->order_hints[j + AV1_REF_FRAME_LAST];
> >              }
> > 
> > -            memcpy(priv->ref[i].loop_filter_ref_deltas, current-
> > > loop_filter_ref_deltas,
> > -                   sizeof(current->loop_filter_ref_deltas));
> > -            memcpy(priv->ref[i].loop_filter_mode_deltas, current-
> > > loop_filter_mode_deltas,
> > -                   sizeof(current->loop_filter_mode_deltas));
> > -            memcpy(priv->ref[i].feature_enabled, current-
> > >feature_enabled,
> > -                   sizeof(current->feature_enabled));
> > -            memcpy(priv->ref[i].feature_value, current-
> > >feature_value,
> > -                   sizeof(current->feature_value));
> > +            if (current->show_existing_frame) {
> > +                memcpy(priv->ref[i].loop_filter_ref_deltas, priv-
> > > loop_filter_ref_deltas,
> > +                       sizeof(priv->loop_filter_ref_deltas));
> > +                memcpy(priv->ref[i].loop_filter_mode_deltas, priv-
> > > loop_filter_mode_deltas,
> > +                       sizeof(priv->loop_filter_mode_deltas));
> > +                memcpy(priv->ref[i].feature_enabled, priv-
> > >feature_enabled,
> > +                       sizeof(priv->feature_enabled));
> > +                memcpy(priv->ref[i].feature_value, priv-
> > >feature_value,
> > +                       sizeof(priv->feature_value));
> > +            } else {
> > +                memcpy(priv->ref[i].loop_filter_ref_deltas,
> > current-
> > > loop_filter_ref_deltas,
> > +                       sizeof(current->loop_filter_ref_deltas));
> > +                memcpy(priv->ref[i].loop_filter_mode_deltas,
> > current-
> > > loop_filter_mode_deltas,
> > +                       sizeof(current->loop_filter_mode_deltas));
> > +                memcpy(priv->ref[i].feature_enabled, current-
> > >feature_enabled,
> > +                       sizeof(current->feature_enabled));
> > +                memcpy(priv->ref[i].feature_value, current-
> > >feature_value,
> > +                       sizeof(current->feature_value));
> > +            }
> >          }
> >      }
> > 
> 
> Good fixing. Could you please apply?

Applied, thanks.

Fei

> 
> > --
> > 2.34.1
> > 
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > 
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request at ffmpeg.org
> > with subject "unsubscribe".



More information about the ffmpeg-devel mailing list