diff mbox series

[FFmpeg-devel,2/5] avcodec/hevcdec: Use union for AVFrame* and ProgressFrame

Message ID AS8P250MB0744DF6B34770BE83896EF018F0D2@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM
State Accepted
Commit 0ec886ddc79c491fe27ad64b31d50d436a72de70
Headers show
Series [FFmpeg-devel,1/5] avcodec/progressframe: Explain how unnamed union can simplify accesses | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Andreas Rheinhardt April 19, 2024, 4:07 p.m. UTC
It avoids having to sync ProgressFrame.f and the pointer
typically used to access the AVFrame.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/hevc_refs.c | 2 --
 libavcodec/hevcdec.c   | 1 -
 libavcodec/hevcdec.h   | 8 ++++++--
 3 files changed, 6 insertions(+), 5 deletions(-)
diff mbox series

Patch

diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c
index 192d311696..8da9ec982a 100644
--- a/libavcodec/hevc_refs.c
+++ b/libavcodec/hevc_refs.c
@@ -34,7 +34,6 @@  void ff_hevc_unref_frame(HEVCFrame *frame, int flags)
     frame->flags &= ~flags;
     if (!frame->flags) {
         ff_progress_frame_unref(&frame->tf);
-        frame->frame = NULL;
         av_frame_unref(frame->frame_grain);
         frame->needs_fg = 0;
 
@@ -87,7 +86,6 @@  static HEVCFrame *alloc_frame(HEVCContext *s)
                                            AV_GET_BUFFER_FLAG_REF);
         if (ret < 0)
             return NULL;
-        frame->frame = frame->tf.f;
 
         frame->rpl = ff_refstruct_allocz(s->pkt.nb_nals * sizeof(*frame->rpl));
         if (!frame->rpl)
diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
index 1974bf9cb3..50433957f7 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -3418,7 +3418,6 @@  static int hevc_ref_frame(HEVCFrame *dst, HEVCFrame *src)
     int ret;
 
     ff_progress_frame_ref(&dst->tf, &src->tf);
-    dst->frame = dst->tf.f;
 
     if (src->needs_fg) {
         ret = av_frame_ref(dst->frame_grain, src->frame_grain);
diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h
index 24fcbf440a..e82daf6679 100644
--- a/libavcodec/hevcdec.h
+++ b/libavcodec/hevcdec.h
@@ -352,9 +352,13 @@  typedef struct DBParams {
 #define HEVC_SEQUENCE_COUNTER_INVALID (HEVC_SEQUENCE_COUNTER_MASK + 1)
 
 typedef struct HEVCFrame {
-    AVFrame *frame;
+    union {
+        struct {
+            AVFrame *frame;
+        };
+        ProgressFrame tf;
+    };
     AVFrame *frame_grain;
-    ProgressFrame tf;
     int needs_fg; /* 1 if grain needs to be applied by the decoder */
     MvField *tab_mvf;              ///< RefStruct reference
     RefPicList *refPicList;