1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-08 13:22:53 +02:00

av1dec: Add force_integer_mv derived field for decoder use

This is not the same as the syntax element value in the frame header
because the specification parsing tables override the value on intra
frames.

(cherry picked from commit 6f56e0e7e5)
This commit is contained in:
Mark Thompson 2024-04-27 16:22:05 +01:00
parent a51c06b42c
commit c3665ee60f
2 changed files with 13 additions and 0 deletions

View File

@ -730,6 +730,8 @@ static int av1_frame_ref(AVCodecContext *avctx, AV1Frame *dst, const AV1Frame *s
memcpy(dst->order_hints, src->order_hints,
sizeof(dst->order_hints));
dst->force_integer_mv = src->force_integer_mv;
return 0;
fail:
@ -1288,6 +1290,11 @@ static int get_current_frame(AVCodecContext *avctx)
order_hint_info(s);
load_grain_params(s);
s->cur_frame.force_integer_mv =
s->raw_frame_header->force_integer_mv ||
s->raw_frame_header->frame_type == AV1_FRAME_KEY ||
s->raw_frame_header->frame_type == AV1_FRAME_INTRA_ONLY;
return ret;
}

View File

@ -61,6 +61,12 @@ typedef struct AV1Frame {
// OrderHints[] when this is the current frame, otherwise
// SavedOrderHints[s][] when is the reference frame in slot s.
uint8_t order_hints[AV1_TOTAL_REFS_PER_FRAME];
// force_integer_mv value at the end of the frame header parsing.
// This is not the same as the syntax element value in
// raw_frame_header because the specification parsing tables
// override the value on intra frames.
uint8_t force_integer_mv;
} AV1Frame;
typedef struct TileGroupInfo {