[FFmpeg-devel] [PATCH 3/5] avcodec/h2645_sei: use the RefStruct API for film_grain_characteristics

James Almer jamrial at gmail.com
Fri Oct 25 05:26:11 EEST 2024


And ensure the buffer is synced between threads.

Signed-off-by: James Almer <jamrial at gmail.com>
---
 libavcodec/h2645_sei.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c
index 33390d389d..9ed2fc5596 100644
--- a/libavcodec/h2645_sei.c
+++ b/libavcodec/h2645_sei.c
@@ -42,6 +42,7 @@
 #include "golomb.h"
 #include "h2645_sei.h"
 #include "itut35.h"
+#include "refstruct.h"
 
 #define IS_H264(codec_id) (CONFIG_H264_SEI && CONFIG_HEVC_SEI ? codec_id == AV_CODEC_ID_H264 : CONFIG_H264_SEI)
 #define IS_HEVC(codec_id) (CONFIG_H264_SEI && CONFIG_HEVC_SEI ? codec_id == AV_CODEC_ID_HEVC : CONFIG_HEVC_SEI)
@@ -495,11 +496,10 @@ int ff_h2645_sei_message_decode(H2645SEI *h, enum SEIType type,
     case SEI_TYPE_DISPLAY_ORIENTATION:
         return decode_display_orientation(&h->display_orientation, gb);
     case SEI_TYPE_FILM_GRAIN_CHARACTERISTICS:
-        if (!h->film_grain_characteristics) {
-            h->film_grain_characteristics = av_mallocz(sizeof(*h->film_grain_characteristics));
-            if (!h->film_grain_characteristics)
-                return AVERROR(ENOMEM);
-        }
+        ff_refstruct_unref(&h->film_grain_characteristics);
+        h->film_grain_characteristics = ff_refstruct_allocz(sizeof(*h->film_grain_characteristics));
+        if (!h->film_grain_characteristics)
+            return AVERROR(ENOMEM);
         return decode_film_grain_characteristics(h->film_grain_characteristics, codec_id, gb);
     case SEI_TYPE_FRAME_PACKING_ARRANGEMENT:
         return decode_frame_packing_arrangement(&h->frame_packing, gb, codec_id);
@@ -556,6 +556,9 @@ int ff_h2645_sei_ctx_replace(H2645SEI *dst, const H2645SEI *src)
     }
     dst->aom_film_grain.enable = src->aom_film_grain.enable;
 
+    ff_refstruct_replace(&dst->film_grain_characteristics,
+                          src->film_grain_characteristics);
+
     return 0;
 }
 
@@ -930,5 +933,5 @@ void ff_h2645_sei_reset(H2645SEI *s)
 
     ff_aom_film_grain_uninit_params(&s->aom_film_grain);
 
-    av_freep(&s->film_grain_characteristics);
+    ff_refstruct_unref(&s->film_grain_characteristics);
 }
-- 
2.47.0



More information about the ffmpeg-devel mailing list