@@ -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);
}
@@ -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 {
@@ -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;
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(-)