[FFmpeg-devel] [PATCH] lavc/vvc: Validate temporal MVP references
Nuo Mi
nuomi2021 at gmail.com
Mon May 27 15:29:50 EEST 2024
On Sun, May 26, 2024 at 5:16 PM Frank Plowman <post at frankplowman.com> wrote:
> Per VVCv3 p. 157, the collocated reference picture used in temporal
> motion vector prediction must have RprConstraintsActiveFlag equal to
> zero and the same CTU size as the current picture. Add these checks,
> fixing crashes decoding some fuzzed bitstreams.
>
> Additionally, only set up the collocated reference picture if it is
> actually going to be used (i.e. if ph_temporal_mvp_enabled_flag is 1),
> else legal RPR bitstreams will fail the new checks.
>
Applied, thank you, Frank.
>
> Co-authored-by: Nuo Mi <nuomi2021 at gmail.com>
> Signed-off-by: Frank Plowman <post at frankplowman.com>
> ---
> libavcodec/vvc/refs.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/vvc/refs.c b/libavcodec/vvc/refs.c
> index fb42963034..8b7ba639a3 100644
> --- a/libavcodec/vvc/refs.c
> +++ b/libavcodec/vvc/refs.c
> @@ -506,9 +506,14 @@ int ff_vvc_slice_rpl(VVCContext *s, VVCFrameContext
> *fc, SliceContext *sc)
> return ret;
> }
> }
> - if ((!rsh->sh_collocated_from_l0_flag) == lx &&
> - rsh->sh_collocated_ref_idx < rpl->nb_refs)
> - fc->ref->collocated_ref =
> rpl->refs[rsh->sh_collocated_ref_idx].ref;
> + if (ph->r->ph_temporal_mvp_enabled_flag &&
> + (!rsh->sh_collocated_from_l0_flag) == lx &&
> + rsh->sh_collocated_ref_idx < rpl->nb_refs) {
> + const VVCRefPic *refp = rpl->refs +
> rsh->sh_collocated_ref_idx;
> + if (refp->is_scaled || refp->ref->sps->ctb_log2_size_y !=
> sps->ctb_log2_size_y)
> + return AVERROR_INVALIDDATA;
> + fc->ref->collocated_ref = refp->ref;
> + }
> }
> return 0;
> }
> --
> 2.44.0
>
>
More information about the ffmpeg-devel
mailing list