[FFmpeg-devel] [PATCH] avcodec/av1dec: fix loading PrevGmParams for frames with primary_ref_frame none
Mark Thompson
sw at jkqxz.net
Tue Oct 27 22:57:48 EET 2020
On 17/10/2020 20:30, James Almer wrote:
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> libavcodec/av1dec.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
> index 54aeba1812..04aaf5d148 100644
> --- a/libavcodec/av1dec.c
> +++ b/libavcodec/av1dec.c
> @@ -109,13 +109,18 @@ static void read_global_param(AV1DecContext *s, int type, int ref, int idx)
> {
> uint8_t primary_frame, prev_frame;
> uint32_t abs_bits, prec_bits, round, prec_diff, sub, mx;
> - int32_t r;
> + int32_t r, prev_gm_param;
>
> primary_frame = s->raw_frame_header->primary_ref_frame;
> prev_frame = s->raw_frame_header->ref_frame_idx[primary_frame];
> abs_bits = AV1_GM_ABS_ALPHA_BITS;
> prec_bits = AV1_GM_ALPHA_PREC_BITS;
>
> + if (s->raw_frame_header->primary_ref_frame == AV1_PRIMARY_REF_NONE)
> + prev_gm_param = s->cur_frame.gm_params[ref][idx];
To clarify that I'm reading the standard correctly here, this is the value set for PrevGmParams by setup_past_independance(), which then matches the default for gm_params at the top of global_motion_params() so you've reused it here?
> + else
> + prev_gm_param = s->ref[prev_frame].gm_params[ref][idx];
> +
> if (idx < 2) {
> if (type == AV1_WARP_MODEL_TRANSLATION) {
> abs_bits = AV1_GM_ABS_TRANS_ONLY_BITS -
> @@ -131,7 +136,7 @@ static void read_global_param(AV1DecContext *s, int type, int ref, int idx)
> prec_diff = AV1_WARPEDMODEL_PREC_BITS - prec_bits;
> sub = (idx % 3) == 2 ? (1 << prec_bits) : 0;
> mx = 1 << abs_bits;
> - r = (s->ref[prev_frame].gm_params[ref][idx] >> prec_diff) - sub;
> + r = (prev_gm_param >> prec_diff) - sub;
>
> s->cur_frame.gm_params[ref][idx] =
> (decode_signed_subexp_with_ref(s->raw_frame_header->gm_params[ref][idx],
>
- Mark
More information about the ffmpeg-devel
mailing list