ffmpeg/libavcodec/hevc
Andreas Rheinhardt c9168717bf avcodec/h274: Make H274FilmGrainDatabase a shared object
Right now, the private contexts of every decoder supporting
H.274 film grain synthesis (namely H.264, HEVC and VVC)
contain a H274FilmGrainDatabase; said structure is very large
700442B before this commit) and takes up the overwhelming
majority of said contexts: Removing it reduces sizeof(H264Context)
by 92.88%, sizeof(HEVCContext) by 97.78% and sizeof(VVCContext)
by 99.86%. This is especially important for H.264 and HEVC
when using frame-threading.

The content of said film grain database does not depend on
any input parameter; it is shareable between all its users and
could be hardcoded in the binary (but isn't, because it is so huge).

This commit adds a database with static storage duration to h274.c
and uses it instead of the elements in the private contexts above.
It is still lazily initialized as-needed; a mutex is used
for the necessary synchronization. An alternative would be to use
an AV_ONCE to initialize the whole database either in the decoders'
init function (which would be wasteful given that most videos
don't use film grain synthesis) or in ff_h274_apply_film_grain().

Reviewed-by: Niklas Haas <ffmpeg@haasn.dev>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2025-09-22 04:54:22 +02:00
..
cabac.c all: fix whitespace/new-line issues 2025-08-03 13:48:47 +02:00
data.c
data.h
dsp.c
dsp.h
dsp_template.c
filter.c
hevc.h
hevcdec.c avcodec/h274: Make H274FilmGrainDatabase a shared object 2025-09-22 04:54:22 +02:00
hevcdec.h avcodec/h274: Make H274FilmGrainDatabase a shared object 2025-09-22 04:54:22 +02:00
Makefile
mvs.c
parse.c
parse.h
parser.c
pred.c
pred.h
pred_template.c
ps.c avcodec/get_bits: Add get_bits_bytesize() 2025-07-11 15:13:21 +02:00
ps.h
ps_enc.c
refs.c avcodec/decode: Only use ff_progress_frame_get_buffer() with blank input 2025-04-14 10:15:08 +02:00
sei.c
sei.h