According to spec 6.8.10, loop_filter_ref_deltas & loop_filter_mode_deltas should be keep same as its previous value if it is not presented in current syntax.
Signed-off-by: Fei Wang <fei.w.w...@intel.com> --- libavcodec/cbs_av1.h | 3 +++ libavcodec/cbs_av1_syntax_template.c | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h index 643e76793f..7267baaceb 100644 --- a/libavcodec/cbs_av1.h +++ b/libavcodec/cbs_av1.h @@ -444,6 +444,9 @@ typedef struct CodedBitstreamAV1Context { AV1ReferenceFrameState *ref; AV1ReferenceFrameState read_ref[AV1_NUM_REF_FRAMES]; AV1ReferenceFrameState write_ref[AV1_NUM_REF_FRAMES]; + + int8_t pre_loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME]; + int8_t pre_loop_filter_mode_deltas[2]; } CodedBitstreamAV1Context; diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c index f53955c52e..c9ac1dc600 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -819,6 +819,13 @@ static int FUNC(loop_filter_params)(CodedBitstreamContext *ctx, RWContext *rw, CodedBitstreamAV1Context *priv = ctx->priv_data; int i, err; + memcpy(current->loop_filter_ref_deltas, + priv->pre_loop_filter_ref_deltas, + AV1_TOTAL_REFS_PER_FRAME * sizeof(int8_t)); + memcpy(current->loop_filter_mode_deltas, + priv->pre_loop_filter_mode_deltas, + 2 * sizeof(int8_t)); + if (priv->coded_lossless || current->allow_intrabc) { infer(loop_filter_level[0], 0); infer(loop_filter_level[1], 0); @@ -832,7 +839,15 @@ static int FUNC(loop_filter_params)(CodedBitstreamContext *ctx, RWContext *rw, infer(loop_filter_ref_deltas[AV1_REF_FRAME_ALTREF2], -1); for (i = 0; i < 2; i++) infer(loop_filter_mode_deltas[i], 0); - return 0; + + memcpy(priv->pre_loop_filter_ref_deltas, + current->loop_filter_ref_deltas, + AV1_TOTAL_REFS_PER_FRAME * sizeof(int8_t)); + memcpy(priv->pre_loop_filter_mode_deltas, + current->loop_filter_mode_deltas, + 2 * sizeof(int8_t)); + + return 0; } fb(6, loop_filter_level[0]); @@ -865,6 +880,13 @@ static int FUNC(loop_filter_params)(CodedBitstreamContext *ctx, RWContext *rw, } } + memcpy(priv->pre_loop_filter_ref_deltas, + current->loop_filter_ref_deltas, + AV1_TOTAL_REFS_PER_FRAME * sizeof(int8_t)); + memcpy(priv->pre_loop_filter_mode_deltas, + current->loop_filter_mode_deltas, + 2 * sizeof(int8_t)); + return 0; } -- 2.17.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".