[FFmpeg-cvslog] av1dec: Add force_integer_mv derived field for decoder use

Mark Thompson git at videolan.org
Mon May 6 22:29:34 EEST 2024


ffmpeg | branch: master | Mark Thompson <sw at jkqxz.net> | Sat Apr 27 16:22:05 2024 +0100| [6f56e0e7e516fef419c6b4361612c8a9bc178a2b] | committer: Mark Thompson

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.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6f56e0e7e516fef419c6b4361612c8a9bc178a2b
---

 libavcodec/av1dec.c | 7 +++++++
 libavcodec/av1dec.h | 6 ++++++
 2 files changed, 13 insertions(+)

diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
index 79a87f41c9..dd3c7f4734 100644
--- a/libavcodec/av1dec.c
+++ b/libavcodec/av1dec.c
@@ -725,6 +725,8 @@ static void av1_frame_replace(AV1Frame *dst, const AV1Frame *src)
            sizeof(dst->ref_frame_sign_bias));
     memcpy(dst->order_hints, src->order_hints,
            sizeof(dst->order_hints));
+
+    dst->force_integer_mv = src->force_integer_mv;
 }
 
 static av_cold int av1_decode_free(AVCodecContext *avctx)
@@ -1255,6 +1257,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;
 }
 
diff --git a/libavcodec/av1dec.h b/libavcodec/av1dec.h
index 66a732d781..8b2a7b0896 100644
--- a/libavcodec/av1dec.h
+++ b/libavcodec/av1dec.h
@@ -67,6 +67,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 {



More information about the ffmpeg-cvslog mailing list