diff mbox series

[FFmpeg-devel,1/5] Partially revert "avcodec/h2645: allocate film grain metadata dynamically"

Message ID 20241025022613.3921-1-jamrial@gmail.com
State New
Headers show
Series [FFmpeg-devel,1/5] Partially revert "avcodec/h2645: allocate film grain metadata dynamically" | 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

James Almer Oct. 25, 2024, 2:26 a.m. UTC
AVFilmGrainAFGS1Params, the offending struct, is using sizeof(AVFilmGrainParams)
when it should not. This change also forgot to make the necessary changes to the
frame threading sync code.

Both of these will be fixed by the following commit.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/h2645_sei.c    | 17 +++++------------
 libavcodec/h2645_sei.h    |  2 +-
 libavcodec/hevc/hevcdec.c |  4 ++--
 3 files changed, 8 insertions(+), 15 deletions(-)
diff mbox series

Patch

diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c
index 33551f5406..a481dbca2c 100644
--- a/libavcodec/h2645_sei.c
+++ b/libavcodec/h2645_sei.c
@@ -245,12 +245,7 @@  static int decode_registered_user_data(H2645SEI *h, GetByteContext *gb,
 
         provider_oriented_code = bytestream2_get_byteu(gb);
         if (provider_oriented_code == aom_grain_provider_oriented_code) {
-            if (!h->aom_film_grain) {
-                h->aom_film_grain = av_mallocz(sizeof(*h->aom_film_grain));
-                if (!h->aom_film_grain)
-                    return AVERROR(ENOMEM);
-            }
-            return ff_aom_parse_film_grain_sets(h->aom_film_grain,
+            return ff_aom_parse_film_grain_sets(&h->aom_film_grain,
                                                 gb->buffer,
                                                 bytestream2_get_bytes_left(gb));
         }
@@ -894,11 +889,9 @@  FF_ENABLE_DEPRECATION_WARNINGS
     }
 
 #if CONFIG_HEVC_SEI
-    if (sei->aom_film_grain) {
-        ret = ff_aom_attach_film_grain_sets(sei->aom_film_grain, frame);
-        if (ret < 0)
-            return ret;
-    }
+    ret = ff_aom_attach_film_grain_sets(&sei->aom_film_grain, frame);
+    if (ret < 0)
+        return ret;
 #endif
 
     return 0;
@@ -925,7 +918,7 @@  void ff_h2645_sei_reset(H2645SEI *s)
     s->ambient_viewing_environment.present = 0;
     s->mastering_display.present = 0;
     s->content_light.present = 0;
+    s->aom_film_grain.enable = 0;
 
     av_freep(&s->film_grain_characteristics);
-    av_freep(&s->aom_film_grain);
 }
diff --git a/libavcodec/h2645_sei.h b/libavcodec/h2645_sei.h
index 8bcdc2bc5f..f001427e16 100644
--- a/libavcodec/h2645_sei.h
+++ b/libavcodec/h2645_sei.h
@@ -138,10 +138,10 @@  typedef struct H2645SEI {
     H2645SEIAmbientViewingEnvironment ambient_viewing_environment;
     H2645SEIMasteringDisplay mastering_display;
     H2645SEIContentLight content_light;
+    AVFilmGrainAFGS1Params aom_film_grain;
 
     // Dynamic allocations due to large size.
     H2645SEIFilmGrainCharacteristics* film_grain_characteristics;
-    AVFilmGrainAFGS1Params* aom_film_grain;
 } H2645SEI;
 
 enum {
diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c
index 1ea8df0fa0..900895598f 100644
--- a/libavcodec/hevc/hevcdec.c
+++ b/libavcodec/hevc/hevcdec.c
@@ -413,7 +413,7 @@  static int export_stream_params_from_sei(HEVCContext *s)
     }
 
     if ((s->sei.common.film_grain_characteristics && s->sei.common.film_grain_characteristics->present) ||
-        (s->sei.common.aom_film_grain && s->sei.common.aom_film_grain->enable))
+        s->sei.common.aom_film_grain.enable)
         avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN;
 
     return 0;
@@ -3268,7 +3268,7 @@  static int hevc_frame_start(HEVCContext *s, HEVCLayerContext *l,
         s->cur_frame->f->flags &= ~AV_FRAME_FLAG_KEY;
 
     s->cur_frame->needs_fg = ((s->sei.common.film_grain_characteristics && s->sei.common.film_grain_characteristics->present) ||
-                              (s->sei.common.aom_film_grain && s->sei.common.aom_film_grain->enable)) &&
+                              s->sei.common.aom_film_grain.enable) &&
         !(s->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) &&
         !s->avctx->hwaccel;