Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: mkver via ffmpeg-devel <ffmpeg-devel@ffmpeg.org>
To: ffmpeg-devel@ffmpeg.org
Cc: mkver <code@ffmpeg.org>
Subject: [FFmpeg-devel] [PATCH] avcodec: Add av_cold to flush,init,close functions missing it (PR #20509)
Date: Fri, 12 Sep 2025 20:40:07 -0000
Message-ID: <175770960838.25.4888418327511204814@463a07221176> (raw)

PR #20509 opened by mkver
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20509
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20509.patch


>From 343b38b29fe048358237807660224d8074b664df Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Fri, 5 Sep 2025 01:09:49 +0200
Subject: [PATCH 1/2] avcodec: Add av_cold to flush,init,close functions
 missing it

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/acelp_filters.c     |  2 +-
 libavcodec/acelp_vectors.c     |  2 +-
 libavcodec/adpcm.c             |  4 +++-
 libavcodec/adxdec.c            |  3 ++-
 libavcodec/agm.c               |  3 ++-
 libavcodec/apedec.c            |  3 ++-
 libavcodec/apv_decode.c        |  3 ++-
 libavcodec/arbc.c              |  3 ++-
 libavcodec/argo.c              |  3 ++-
 libavcodec/ass.c               |  2 +-
 libavcodec/ass_split.c         |  4 ++--
 libavcodec/atrac9dec.c         |  2 +-
 libavcodec/audio_frame_queue.c |  2 +-
 libavcodec/av1_parser.c        |  3 ++-
 libavcodec/av1dec.c            |  3 ++-
 libavcodec/avdct.c             |  7 ++++---
 libavcodec/bink.c              |  2 +-
 libavcodec/binkaudio.c         |  3 ++-
 libavcodec/cavsdec.c           |  3 ++-
 libavcodec/cbs_av1.c           |  5 +++--
 libavcodec/cbs_bsf.c           |  6 ++++--
 libavcodec/cbs_h2645.c         | 12 ++++++------
 libavcodec/cbs_vp9.c           |  2 +-
 libavcodec/ccaption_dec.c      |  3 ++-
 libavcodec/cdgraphics.c        |  4 +++-
 libavcodec/cdtoons.c           |  2 +-
 libavcodec/celp_filters.c      |  3 ++-
 libavcodec/cngdec.c            |  2 +-
 libavcodec/dirac_parser.c      |  5 +++--
 libavcodec/dovi_rpu.c          |  3 ++-
 libavcodec/dpcm.c              |  4 +++-
 libavcodec/dvdsubdec.c         |  2 +-
 libavcodec/evc_parser.c        |  4 +++-
 libavcodec/executor.c          |  6 +++---
 libavcodec/ffv1_parser.c       |  4 +++-
 libavcodec/flac_parser.c       |  2 +-
 libavcodec/ftr.c               |  4 +++-
 libavcodec/gif.c               |  3 ++-
 libavcodec/gsmdec.c            |  3 ++-
 libavcodec/h264_parser.c       |  3 ++-
 libavcodec/h264dec.c           |  3 ++-
 libavcodec/hevc/hevcdec.c      |  2 +-
 libavcodec/imm4.c              |  3 ++-
 libavcodec/imm5.c              |  3 ++-
 libavcodec/imx.c               |  5 +++--
 libavcodec/j2kenc.c            |  3 ++-
 libavcodec/lossless_videodsp.c |  3 ++-
 libavcodec/midivid.c           |  3 ++-
 libavcodec/mjpegdec.c          |  7 +++----
 libavcodec/mlpdec.c            |  3 ++-
 libavcodec/mobiclip.c          |  3 ++-
 libavcodec/movtextenc.c        |  3 ++-
 libavcodec/mpc7.c              |  3 ++-
 libavcodec/mpegvideo_parser.c  |  2 +-
 libavcodec/msrle.c             |  3 ++-
 libavcodec/msrleenc.c          |  4 +++-
 libavcodec/mv30.c              |  3 ++-
 libavcodec/osq.c               |  3 ++-
 libavcodec/parser.c            |  7 ++++---
 libavcodec/pdvdec.c            |  4 +++-
 libavcodec/qpeg.c              |  5 ++++-
 libavcodec/qtrle.c             |  4 +++-
 libavcodec/ralf.c              |  2 +-
 libavcodec/rtjpeg.c            |  4 +++-
 libavcodec/rv60dec.c           |  4 +++-
 libavcodec/samidec.c           |  3 ++-
 libavcodec/srtenc.c            |  2 +-
 libavcodec/svq1dec.c           |  3 ++-
 libavcodec/textdec.c           |  3 ++-
 libavcodec/v4l2_m2m.c          |  6 +++---
 libavcodec/vc1dec.c            |  2 +-
 libavcodec/vorbis_parser.c     |  2 +-
 libavcodec/vp3.c               |  3 ++-
 libavcodec/vp9.c               |  3 ++-
 libavcodec/vvc/thread.c        |  4 ++--
 libavcodec/wavpack.c           |  2 +-
 libavcodec/webvttenc.c         |  2 +-
 libavcodec/wmalosslessdec.c    |  2 +-
 libavcodec/wmaprodec.c         |  7 ++++---
 libavcodec/xbm_parser.c        |  7 +++++--
 libavcodec/zerocodec.c         |  3 ++-
 81 files changed, 176 insertions(+), 106 deletions(-)

diff --git a/libavcodec/acelp_filters.c b/libavcodec/acelp_filters.c
index db4908f31c..99e8994851 100644
--- a/libavcodec/acelp_filters.c
+++ b/libavcodec/acelp_filters.c
@@ -147,7 +147,7 @@ void ff_tilt_compensation(float *mem, float tilt, float *samples, int size)
     *mem = new_tilt_mem;
 }
 
-void ff_acelp_filter_init(ACELPFContext *c)
+av_cold void ff_acelp_filter_init(ACELPFContext *c)
 {
     c->acelp_interpolatef                      = ff_acelp_interpolatef;
     c->acelp_apply_order_2_transfer_function   = ff_acelp_apply_order_2_transfer_function;
diff --git a/libavcodec/acelp_vectors.c b/libavcodec/acelp_vectors.c
index f47da40008..99d573bda2 100644
--- a/libavcodec/acelp_vectors.c
+++ b/libavcodec/acelp_vectors.c
@@ -255,7 +255,7 @@ void ff_clear_fixed_vector(float *out, const AMRFixed *in, int size)
     }
 }
 
-void ff_acelp_vectors_init(ACELPVContext *c)
+av_cold void ff_acelp_vectors_init(ACELPVContext *c)
 {
     c->weighted_vector_sumf   = ff_weighted_vector_sumf;
 
diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c
index 4c15be6207..26323507e3 100644
--- a/libavcodec/adpcm.c
+++ b/libavcodec/adpcm.c
@@ -46,6 +46,8 @@
 #include "codec_internal.h"
 #include "decode.h"
 
+#include "libavutil/attributes.h"
+
 /**
  * @file
  * ADPCM decoders
@@ -2540,7 +2542,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return bytestream2_tell(&gb);
 }
 
-static void adpcm_flush(AVCodecContext *avctx)
+static av_cold void adpcm_flush(AVCodecContext *avctx)
 {
     ADPCMDecodeContext *c = avctx->priv_data;
 
diff --git a/libavcodec/adxdec.c b/libavcodec/adxdec.c
index 21be6fea97..49c2e25182 100644
--- a/libavcodec/adxdec.c
+++ b/libavcodec/adxdec.c
@@ -19,6 +19,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/intreadwrite.h"
 #include "avcodec.h"
 #include "adx.h"
@@ -246,7 +247,7 @@ static int adx_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return buf - avpkt->data;
 }
 
-static void adx_decode_flush(AVCodecContext *avctx)
+static av_cold void adx_decode_flush(AVCodecContext *avctx)
 {
     ADXContext *c = avctx->priv_data;
     memset(c->prev, 0, sizeof(c->prev));
diff --git a/libavcodec/agm.c b/libavcodec/agm.c
index fdf896d61a..c13b4d963e 100644
--- a/libavcodec/agm.c
+++ b/libavcodec/agm.c
@@ -24,6 +24,7 @@
 
 #define BITSTREAM_READER_LE
 
+#include "libavutil/attributes.h"
 #include "libavutil/mem.h"
 #include "libavutil/mem_internal.h"
 
@@ -1245,7 +1246,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     AGMContext *s = avctx->priv_data;
 
diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
index 6634650355..58f5355b58 100644
--- a/libavcodec/apedec.c
+++ b/libavcodec/apedec.c
@@ -22,6 +22,7 @@
 
 #include <inttypes.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/crc.h"
@@ -1729,7 +1730,7 @@ static int ape_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return !s->samples ? avpkt->size : 0;
 }
 
-static void ape_flush(AVCodecContext *avctx)
+static av_cold void ape_flush(AVCodecContext *avctx)
 {
     APEContext *s = avctx->priv_data;
     s->samples= 0;
diff --git a/libavcodec/apv_decode.c b/libavcodec/apv_decode.c
index 27aaf7aac7..dbe354a793 100644
--- a/libavcodec/apv_decode.c
+++ b/libavcodec/apv_decode.c
@@ -18,6 +18,7 @@
 
 #include <stdatomic.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/mastering_display_metadata.h"
 #include "libavutil/mem_internal.h"
 #include "libavutil/pixdesc.h"
@@ -156,7 +157,7 @@ static av_cold int apv_decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void apv_decode_flush(AVCodecContext *avctx)
+static av_cold void apv_decode_flush(AVCodecContext *avctx)
 {
     APVDecodeContext *apv = avctx->priv_data;
 
diff --git a/libavcodec/arbc.c b/libavcodec/arbc.c
index 46b0275e9a..537af4d455 100644
--- a/libavcodec/arbc.c
+++ b/libavcodec/arbc.c
@@ -19,6 +19,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
 
@@ -192,7 +193,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     ARBCContext *s = avctx->priv_data;
 
diff --git a/libavcodec/argo.c b/libavcodec/argo.c
index 589feed410..b2e9f3bb18 100644
--- a/libavcodec/argo.c
+++ b/libavcodec/argo.c
@@ -21,6 +21,7 @@
 
 #include <string.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
 
@@ -717,7 +718,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     ArgoContext *s = avctx->priv_data;
 
diff --git a/libavcodec/ass.c b/libavcodec/ass.c
index 35861139ef..6ae591d840 100644
--- a/libavcodec/ass.c
+++ b/libavcodec/ass.c
@@ -163,7 +163,7 @@ int ff_ass_add_rect(AVSubtitle *sub, const char *dialog,
     return ff_ass_add_rect2(sub, dialog, readorder, layer, style, speaker, NULL);
 }
 
-void ff_ass_decoder_flush(AVCodecContext *avctx)
+av_cold void ff_ass_decoder_flush(AVCodecContext *avctx)
 {
     FFASSDecoderContext *s = avctx->priv_data;
     if (!(avctx->flags2 & AV_CODEC_FLAG2_RO_FLUSH_NOOP))
diff --git a/libavcodec/ass_split.c b/libavcodec/ass_split.c
index 9376265d7a..3f8f5e7cae 100644
--- a/libavcodec/ass_split.c
+++ b/libavcodec/ass_split.c
@@ -379,7 +379,7 @@ static int ass_split(ASSSplitContext *ctx, const char *buf)
     return buf ? 0 : AVERROR_INVALIDDATA;
 }
 
-ASSSplitContext *ff_ass_split(const char *buf)
+av_cold ASSSplitContext *ff_ass_split(const char *buf)
 {
     ASSSplitContext *ctx = av_mallocz(sizeof(*ctx));
     if (!ctx)
@@ -467,7 +467,7 @@ ASSDialog *ff_ass_split_dialog(ASSSplitContext *ctx, const char *buf)
     return dialog;
 }
 
-void ff_ass_split_free(ASSSplitContext *ctx)
+av_cold void ff_ass_split_free(ASSSplitContext *ctx)
 {
     if (ctx) {
         int i;
diff --git a/libavcodec/atrac9dec.c b/libavcodec/atrac9dec.c
index 9114d645d0..0748d671f1 100644
--- a/libavcodec/atrac9dec.c
+++ b/libavcodec/atrac9dec.c
@@ -820,7 +820,7 @@ static int atrac9_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return avctx->block_align;
 }
 
-static void atrac9_decode_flush(AVCodecContext *avctx)
+static av_cold void atrac9_decode_flush(AVCodecContext *avctx)
 {
     ATRAC9Context *s = avctx->priv_data;
 
diff --git a/libavcodec/audio_frame_queue.c b/libavcodec/audio_frame_queue.c
index 10b5d21392..1ca5f70304 100644
--- a/libavcodec/audio_frame_queue.c
+++ b/libavcodec/audio_frame_queue.c
@@ -33,7 +33,7 @@ av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
     afq->frame_count       = 0;
 }
 
-void ff_af_queue_close(AudioFrameQueue *afq)
+av_cold void ff_af_queue_close(AudioFrameQueue *afq)
 {
     if(afq->frame_count)
         av_log(afq->avctx, AV_LOG_WARNING, "%d frames left in the queue on closing\n", afq->frame_count);
diff --git a/libavcodec/av1_parser.c b/libavcodec/av1_parser.c
index 1792e813f4..ed6e1b61ad 100644
--- a/libavcodec/av1_parser.c
+++ b/libavcodec/av1_parser.c
@@ -20,6 +20,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 
 #include "av1_parse.h"
@@ -200,7 +201,7 @@ static av_cold int av1_parser_init(AVCodecParserContext *ctx)
     return 0;
 }
 
-static void av1_parser_close(AVCodecParserContext *ctx)
+static av_cold void av1_parser_close(AVCodecParserContext *ctx)
 {
     AV1ParseContext *s = ctx->priv_data;
 
diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
index be595484d1..3d4363cfaa 100644
--- a/libavcodec/av1dec.c
+++ b/libavcodec/av1dec.c
@@ -20,6 +20,7 @@
 
 #include "config_components.h"
 
+#include "libavutil/attributes.h"
 #include "libavutil/hdr_dynamic_metadata.h"
 #include "libavutil/film_grain_params.h"
 #include "libavutil/mastering_display_metadata.h"
@@ -1535,7 +1536,7 @@ static int av1_receive_frame(AVCodecContext *avctx, AVFrame *frame)
     return ret;
 }
 
-static void av1_decode_flush(AVCodecContext *avctx)
+static av_cold void av1_decode_flush(AVCodecContext *avctx)
 {
     AV1DecContext *s = avctx->priv_data;
     AV1RawMetadataITUTT35 itut_t35;
diff --git a/libavcodec/avdct.c b/libavcodec/avdct.c
index 5322b181bc..f7941a457c 100644
--- a/libavcodec/avdct.c
+++ b/libavcodec/avdct.c
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/mem.h"
 #include "avcodec.h"
 #include "idctdsp.h"
@@ -68,12 +69,12 @@ static const AVClass avdct_class = {
     .version                 = LIBAVUTIL_VERSION_INT,
 };
 
-const AVClass *avcodec_dct_get_class(void)
+av_cold const AVClass *avcodec_dct_get_class(void)
 {
     return &avdct_class;
 }
 
-AVDCT *avcodec_dct_alloc(void)
+av_cold AVDCT *avcodec_dct_alloc(void)
 {
     AVDCT *dsp = av_mallocz(sizeof(AVDCT));
 
@@ -86,7 +87,7 @@ AVDCT *avcodec_dct_alloc(void)
     return dsp;
 }
 
-int avcodec_dct_init(AVDCT *dsp)
+av_cold int avcodec_dct_init(AVDCT *dsp)
 {
     AVCodecContext *avctx = avcodec_alloc_context3(NULL);
 
diff --git a/libavcodec/bink.c b/libavcodec/bink.c
index 04fd90aa11..ef8e974589 100644
--- a/libavcodec/bink.c
+++ b/libavcodec/bink.c
@@ -1411,7 +1411,7 @@ static av_cold int decode_end(AVCodecContext *avctx)
     return 0;
 }
 
-static void flush(AVCodecContext *avctx)
+static av_cold void flush(AVCodecContext *avctx)
 {
     BinkContext * const c = avctx->priv_data;
 
diff --git a/libavcodec/binkaudio.c b/libavcodec/binkaudio.c
index 265f93a822..ee75256ecd 100644
--- a/libavcodec/binkaudio.c
+++ b/libavcodec/binkaudio.c
@@ -30,6 +30,7 @@
 
 #include "config_components.h"
 
+#include "libavutil/attributes.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/intfloat.h"
 #include "libavutil/mem_internal.h"
@@ -358,7 +359,7 @@ fail:
     return ret;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     BinkAudioContext *const s = avctx->priv_data;
 
diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c
index e076cfc47f..fffe0657f9 100644
--- a/libavcodec/cavsdec.c
+++ b/libavcodec/cavsdec.c
@@ -25,6 +25,7 @@
  * @author Stefan Gehrer <stefan.gehrer@gmx.de>
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/emms.h"
 #include "libavutil/mem.h"
@@ -1230,7 +1231,7 @@ static int decode_seq_header(AVSContext *h)
     return 0;
 }
 
-static void cavs_flush(AVCodecContext * avctx)
+static av_cold void cavs_flush(AVCodecContext * avctx)
 {
     AVSContext *h = avctx->priv_data;
     h->got_keyframe = 0;
diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c
index 4edb6ecd50..f0021eff61 100644
--- a/libavcodec/cbs_av1.c
+++ b/libavcodec/cbs_av1.c
@@ -16,6 +16,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixfmt.h"
@@ -1265,7 +1266,7 @@ static int cbs_av1_assemble_fragment(CodedBitstreamContext *ctx,
 #endif
 }
 
-static void cbs_av1_flush(CodedBitstreamContext *ctx)
+static av_cold void cbs_av1_flush(CodedBitstreamContext *ctx)
 {
     CodedBitstreamAV1Context *priv = ctx->priv_data;
 
@@ -1279,7 +1280,7 @@ static void cbs_av1_flush(CodedBitstreamContext *ctx)
     priv->tile_num = 0;
 }
 
-static void cbs_av1_close(CodedBitstreamContext *ctx)
+static av_cold void cbs_av1_close(CodedBitstreamContext *ctx)
 {
     CodedBitstreamAV1Context *priv = ctx->priv_data;
 
diff --git a/libavcodec/cbs_bsf.c b/libavcodec/cbs_bsf.c
index b25285483b..f342e5489e 100644
--- a/libavcodec/cbs_bsf.c
+++ b/libavcodec/cbs_bsf.c
@@ -20,6 +20,8 @@
 #include "bsf_internal.h"
 #include "cbs_bsf.h"
 
+#include "libavutil/attributes.h"
+
 static int cbs_bsf_update_side_data(AVBSFContext *bsf, AVPacket *pkt)
 {
     CBSBSFContext           *ctx = bsf->priv_data;
@@ -107,7 +109,7 @@ fail:
     return err;
 }
 
-int ff_cbs_bsf_generic_init(AVBSFContext *bsf, const CBSBSFType *type)
+av_cold int ff_cbs_bsf_generic_init(AVBSFContext *bsf, const CBSBSFType *type)
 {
     CBSBSFContext           *ctx = bsf->priv_data;
     CodedBitstreamFragment *frag = &ctx->fragment;
@@ -152,7 +154,7 @@ fail:
     return err;
 }
 
-void ff_cbs_bsf_generic_close(AVBSFContext *bsf)
+av_cold void ff_cbs_bsf_generic_close(AVBSFContext *bsf)
 {
     CBSBSFContext *ctx = bsf->priv_data;
 
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index fa70a8fb7b..75784b03a9 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -1905,7 +1905,7 @@ static int cbs_h2645_assemble_fragment(CodedBitstreamContext *ctx,
     return 0;
 }
 
-static void cbs_h264_flush(CodedBitstreamContext *ctx)
+static av_cold void cbs_h264_flush(CodedBitstreamContext *ctx)
 {
     CodedBitstreamH264Context *h264 = ctx->priv_data;
 
@@ -1919,7 +1919,7 @@ static void cbs_h264_flush(CodedBitstreamContext *ctx)
     h264->last_slice_nal_unit_type = 0;
 }
 
-static void cbs_h264_close(CodedBitstreamContext *ctx)
+static av_cold void cbs_h264_close(CodedBitstreamContext *ctx)
 {
     CodedBitstreamH264Context *h264 = ctx->priv_data;
     int i;
@@ -1932,7 +1932,7 @@ static void cbs_h264_close(CodedBitstreamContext *ctx)
         av_refstruct_unref(&h264->pps[i]);
 }
 
-static void cbs_h265_flush(CodedBitstreamContext *ctx)
+static av_cold void cbs_h265_flush(CodedBitstreamContext *ctx)
 {
     CodedBitstreamH265Context *h265 = ctx->priv_data;
 
@@ -1948,7 +1948,7 @@ static void cbs_h265_flush(CodedBitstreamContext *ctx)
     h265->active_pps = NULL;
 }
 
-static void cbs_h265_close(CodedBitstreamContext *ctx)
+static av_cold void cbs_h265_close(CodedBitstreamContext *ctx)
 {
     CodedBitstreamH265Context *h265 = ctx->priv_data;
     int i;
@@ -1963,7 +1963,7 @@ static void cbs_h265_close(CodedBitstreamContext *ctx)
         av_refstruct_unref(&h265->pps[i]);
 }
 
-static void cbs_h266_flush(CodedBitstreamContext *ctx)
+static av_cold void cbs_h266_flush(CodedBitstreamContext *ctx)
 {
     CodedBitstreamH266Context *h266 = ctx->priv_data;
 
@@ -1976,7 +1976,7 @@ static void cbs_h266_flush(CodedBitstreamContext *ctx)
     av_refstruct_unref(&h266->ph_ref);
 }
 
-static void cbs_h266_close(CodedBitstreamContext *ctx)
+static av_cold void cbs_h266_close(CodedBitstreamContext *ctx)
 {
     CodedBitstreamH266Context *h266 = ctx->priv_data;
 
diff --git a/libavcodec/cbs_vp9.c b/libavcodec/cbs_vp9.c
index ff99fe32fb..9a97b0532c 100644
--- a/libavcodec/cbs_vp9.c
+++ b/libavcodec/cbs_vp9.c
@@ -587,7 +587,7 @@ static int cbs_vp9_assemble_fragment(CodedBitstreamContext *ctx,
     return 0;
 }
 
-static void cbs_vp9_flush(CodedBitstreamContext *ctx)
+static av_cold void cbs_vp9_flush(CodedBitstreamContext *ctx)
 {
     CodedBitstreamVP9Context *vp9 = ctx->priv_data;
 
diff --git a/libavcodec/ccaption_dec.c b/libavcodec/ccaption_dec.c
index 6f4d4fca41..9b6c766d87 100644
--- a/libavcodec/ccaption_dec.c
+++ b/libavcodec/ccaption_dec.c
@@ -23,6 +23,7 @@
 #include "avcodec.h"
 #include "ass.h"
 #include "codec_internal.h"
+#include "libavutil/attributes.h"
 #include "libavutil/opt.h"
 
 #define SCREEN_ROWS 15
@@ -309,7 +310,7 @@ static av_cold int close_decoder(AVCodecContext *avctx)
     return 0;
 }
 
-static void flush_decoder(AVCodecContext *avctx)
+static av_cold void flush_decoder(AVCodecContext *avctx)
 {
     CCaptionSubContext *ctx = avctx->priv_data;
     ctx->screen[0].row_used = 0;
diff --git a/libavcodec/cdgraphics.c b/libavcodec/cdgraphics.c
index 518c75081b..1b5a37875b 100644
--- a/libavcodec/cdgraphics.c
+++ b/libavcodec/cdgraphics.c
@@ -24,6 +24,8 @@
 #include "codec_internal.h"
 #include "decode.h"
 
+#include "libavutil/attributes.h"
+
 /**
  * @file
  * @brief CD Graphics Video Decoder
@@ -367,7 +369,7 @@ static int cdg_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return avpkt->size;
 }
 
-static void cdg_decode_flush(AVCodecContext *avctx)
+static av_cold void cdg_decode_flush(AVCodecContext *avctx)
 {
     CDGraphicsContext *cc = avctx->priv_data;
 
diff --git a/libavcodec/cdtoons.c b/libavcodec/cdtoons.c
index adc6cf3f44..f96c89115b 100644
--- a/libavcodec/cdtoons.c
+++ b/libavcodec/cdtoons.c
@@ -420,7 +420,7 @@ static av_cold int cdtoons_decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void cdtoons_flush(AVCodecContext *avctx)
+static av_cold void cdtoons_flush(AVCodecContext *avctx)
 {
     CDToonsContext *c = avctx->priv_data;
 
diff --git a/libavcodec/celp_filters.c b/libavcodec/celp_filters.c
index 4f627e0092..d3381e3ee7 100644
--- a/libavcodec/celp_filters.c
+++ b/libavcodec/celp_filters.c
@@ -25,6 +25,7 @@
 
 #include "config.h"
 #include "celp_filters.h"
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/common.h"
 
@@ -210,7 +211,7 @@ void ff_celp_lp_zero_synthesis_filterf(float *out, const float *filter_coeffs,
     }
 }
 
-void ff_celp_filter_init(CELPFContext *c)
+void av_cold ff_celp_filter_init(CELPFContext *c)
 {
     c->celp_lp_synthesis_filterf        = ff_celp_lp_synthesis_filterf;
     c->celp_lp_zero_synthesis_filterf   = ff_celp_lp_zero_synthesis_filterf;
diff --git a/libavcodec/cngdec.c b/libavcodec/cngdec.c
index dfcc685e7e..e65f0f084e 100644
--- a/libavcodec/cngdec.c
+++ b/libavcodec/cngdec.c
@@ -97,7 +97,7 @@ static void make_lpc_coefs(float *lpc, const float *refl, int order)
         memcpy(lpc, cur, sizeof(*lpc) * order);
 }
 
-static void cng_decode_flush(AVCodecContext *avctx)
+static av_cold void cng_decode_flush(AVCodecContext *avctx)
 {
     CNGContext *p = avctx->priv_data;
     p->inited = 0;
diff --git a/libavcodec/dirac_parser.c b/libavcodec/dirac_parser.c
index 912f594243..61f8067001 100644
--- a/libavcodec/dirac_parser.c
+++ b/libavcodec/dirac_parser.c
@@ -29,10 +29,11 @@
 
 #include <string.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/mem.h"
 
-#include "parser.h"
+#include "avcodec.h"
 
 #define DIRAC_PARSE_INFO_PREFIX 0x42424344
 
@@ -265,7 +266,7 @@ static int dirac_parse(AVCodecParserContext *s, AVCodecContext *avctx,
     return next;
 }
 
-static void dirac_parse_close(AVCodecParserContext *s)
+static av_cold void dirac_parse_close(AVCodecParserContext *s)
 {
     DiracParseContext *pc = s->priv_data;
 
diff --git a/libavcodec/dovi_rpu.c b/libavcodec/dovi_rpu.c
index 04e48d2b95..f19c1922f1 100644
--- a/libavcodec/dovi_rpu.c
+++ b/libavcodec/dovi_rpu.c
@@ -21,6 +21,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/mem.h"
 
 #include "dovi_rpu.h"
@@ -39,7 +40,7 @@ void ff_dovi_ctx_unref(DOVIContext *s)
     };
 }
 
-void ff_dovi_ctx_flush(DOVIContext *s)
+av_cold void ff_dovi_ctx_flush(DOVIContext *s)
 {
     av_refstruct_unref(&s->dm);
     for (int i = 0; i < FF_ARRAY_ELEMS(s->vdr); i++)
diff --git a/libavcodec/dpcm.c b/libavcodec/dpcm.c
index eff6587404..edeb1aae72 100644
--- a/libavcodec/dpcm.c
+++ b/libavcodec/dpcm.c
@@ -43,6 +43,8 @@
 #include "decode.h"
 #include "mathops.h"
 
+#include "libavutil/attributes.h"
+
 typedef struct DPCMContext {
     int16_t array[256];
     int sample[2];                  ///< previous sample (for SOL_DPCM and WADY_DPCM)
@@ -457,7 +459,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return avpkt->size;
 }
 
-static void dpcm_flush(AVCodecContext *avctx)
+static av_cold void dpcm_flush(AVCodecContext *avctx)
 {
     DPCMContext *s = avctx->priv_data;
 
diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c
index 78658f7d2f..c4fbcffc41 100644
--- a/libavcodec/dvdsubdec.c
+++ b/libavcodec/dvdsubdec.c
@@ -686,7 +686,7 @@ static av_cold int dvdsub_init(AVCodecContext *avctx)
     return 1;
 }
 
-static void dvdsub_flush(AVCodecContext *avctx)
+static av_cold void dvdsub_flush(AVCodecContext *avctx)
 {
     DVDSubContext *ctx = avctx->priv_data;
     ctx->buf_size = 0;
diff --git a/libavcodec/evc_parser.c b/libavcodec/evc_parser.c
index 8590ebcdaf..ea6675693e 100644
--- a/libavcodec/evc_parser.c
+++ b/libavcodec/evc_parser.c
@@ -25,6 +25,8 @@
 #include "evc.h"
 #include "evc_parse.h"
 
+#include "libavutil/attributes.h"
+
 typedef struct EVCParserContext {
     EVCParamSets ps;
     EVCParserPoc poc;
@@ -362,7 +364,7 @@ static int evc_parse(AVCodecParserContext *s, AVCodecContext *avctx,
     return next;
 }
 
-static void evc_parser_close(AVCodecParserContext *s)
+static av_cold void evc_parser_close(AVCodecParserContext *s)
 {
     EVCParserContext *ctx = s->priv_data;
 
diff --git a/libavcodec/executor.c b/libavcodec/executor.c
index 7a86e894f8..3bf60bedb3 100644
--- a/libavcodec/executor.c
+++ b/libavcodec/executor.c
@@ -129,7 +129,7 @@ static void *executor_worker_task(void *data)
 }
 #endif
 
-static void executor_free(FFExecutor *e, const int has_lock, const int has_cond)
+static av_cold void executor_free(FFExecutor *e, const int has_lock, const int has_cond)
 {
     if (e->thread_count) {
         //signal die
@@ -153,7 +153,7 @@ static void executor_free(FFExecutor *e, const int has_lock, const int has_cond)
     av_free(e);
 }
 
-FFExecutor* ff_executor_alloc(const FFTaskCallbacks *cb, int thread_count)
+av_cold FFExecutor* ff_executor_alloc(const FFTaskCallbacks *cb, int thread_count)
 {
     FFExecutor *e;
     int has_lock = 0, has_cond = 0;
@@ -199,7 +199,7 @@ free_executor:
     return NULL;
 }
 
-void ff_executor_free(FFExecutor **executor)
+av_cold void ff_executor_free(FFExecutor **executor)
 {
     int thread_count;
 
diff --git a/libavcodec/ffv1_parser.c b/libavcodec/ffv1_parser.c
index bf61e88a2e..e54854d84f 100644
--- a/libavcodec/ffv1_parser.c
+++ b/libavcodec/ffv1_parser.c
@@ -20,6 +20,8 @@
 #include "ffv1.h"
 #include "rangecoder.h"
 
+#include "libavutil/attributes.h"
+
 typedef struct FFV1ParseContext {
     FFV1Context f;
     int got_first;
@@ -70,7 +72,7 @@ static int parse(AVCodecParserContext *s,
     return buf_size;
 }
 
-static void ffv1_close(AVCodecParserContext *s)
+static av_cold void ffv1_close(AVCodecParserContext *s)
 {
     FFV1ParseContext *p = s->priv_data;
 
diff --git a/libavcodec/flac_parser.c b/libavcodec/flac_parser.c
index d9c47801f8..c310832617 100644
--- a/libavcodec/flac_parser.c
+++ b/libavcodec/flac_parser.c
@@ -887,7 +887,7 @@ static av_cold int flac_parse_init(AVCodecParserContext *c)
     return 0;
 }
 
-static void flac_parse_close(AVCodecParserContext *c)
+static av_cold void flac_parse_close(AVCodecParserContext *c)
 {
     FLACParseContext *fpc = c->priv_data;
     FLACHeaderMarker *curr = fpc->headers, *temp;
diff --git a/libavcodec/ftr.c b/libavcodec/ftr.c
index 06241fdca3..31aef538f9 100644
--- a/libavcodec/ftr.c
+++ b/libavcodec/ftr.c
@@ -22,6 +22,8 @@
 #include "get_bits.h"
 #include "decode.h"
 
+#include "libavutil/attributes.h"
+
 typedef struct FTRContext {
     AVCodecContext *aac_avctx[64];   // wrapper context for AAC
     int nb_context;
@@ -173,7 +175,7 @@ static int ftr_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return get_bits_count(&gb) >> 3;
 }
 
-static void ftr_flush(AVCodecContext *avctx)
+static av_cold void ftr_flush(AVCodecContext *avctx)
 {
     FTRContext *s = avctx->priv_data;
 
diff --git a/libavcodec/gif.c b/libavcodec/gif.c
index 04f5341ea7..c11cad8d38 100644
--- a/libavcodec/gif.c
+++ b/libavcodec/gif.c
@@ -30,6 +30,7 @@
  * @see http://www.w3.org/Graphics/GIF/spec-gif89a.txt
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/imgutils_internal.h"
 #include "libavutil/mem.h"
 #include "libavutil/opt.h"
@@ -518,7 +519,7 @@ static int gif_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     return 0;
 }
 
-static int gif_encode_close(AVCodecContext *avctx)
+static av_cold int gif_encode_close(AVCodecContext *avctx)
 {
     GIFContext *s = avctx->priv_data;
 
diff --git a/libavcodec/gsmdec.c b/libavcodec/gsmdec.c
index 14e2364345..b20cdb7544 100644
--- a/libavcodec/gsmdec.c
+++ b/libavcodec/gsmdec.c
@@ -26,6 +26,7 @@
 
 #include "config_components.h"
 
+#include "libavutil/attributes.h"
 #include "libavutil/channel_layout.h"
 #include "avcodec.h"
 #include "codec_internal.h"
@@ -106,7 +107,7 @@ static int gsm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return avctx->block_align;
 }
 
-static void gsm_flush(AVCodecContext *avctx)
+static av_cold void gsm_flush(AVCodecContext *avctx)
 {
     GSMContext *s = avctx->priv_data;
     memset(s, 0, sizeof(*s));
diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
index 006f4059e8..722cbcb42f 100644
--- a/libavcodec/h264_parser.c
+++ b/libavcodec/h264_parser.c
@@ -29,6 +29,7 @@
 
 #include <stdint.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/avutil.h"
 #include "libavutil/error.h"
 #include "libavutil/log.h"
@@ -660,7 +661,7 @@ static int h264_parse(AVCodecParserContext *s,
     return next;
 }
 
-static void h264_close(AVCodecParserContext *s)
+static av_cold void h264_close(AVCodecParserContext *s)
 {
     H264ParseContext *p = s->priv_data;
     ParseContext *pc = &p->pc;
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index b1cf0f81b3..ab31832308 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -29,6 +29,7 @@
 
 #include "config_components.h"
 
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/emms.h"
 #include "libavutil/imgutils.h"
@@ -474,7 +475,7 @@ void ff_h264_flush_change(H264Context *h)
     h->mmco_reset = 1;
 }
 
-static void h264_decode_flush(AVCodecContext *avctx)
+static av_cold void h264_decode_flush(AVCodecContext *avctx)
 {
     H264Context *h = avctx->priv_data;
     int i;
diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c
index d3e5e58cfc..ba12d84474 100644
--- a/libavcodec/hevc/hevcdec.c
+++ b/libavcodec/hevc/hevcdec.c
@@ -4187,7 +4187,7 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void hevc_decode_flush(AVCodecContext *avctx)
+static av_cold void hevc_decode_flush(AVCodecContext *avctx)
 {
     HEVCContext *s = avctx->priv_data;
     ff_hevc_flush_dpb(s);
diff --git a/libavcodec/imm4.c b/libavcodec/imm4.c
index 573b614833..d945a440f2 100644
--- a/libavcodec/imm4.c
+++ b/libavcodec/imm4.c
@@ -23,6 +23,7 @@
 #include <stddef.h>
 #include <string.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/mem.h"
 #include "libavutil/mem_internal.h"
 #include "libavutil/thread.h"
@@ -518,7 +519,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     IMM4Context *s = avctx->priv_data;
 
diff --git a/libavcodec/imm5.c b/libavcodec/imm5.c
index 4b9f3f6b75..7bb77b5e7a 100644
--- a/libavcodec/imm5.c
+++ b/libavcodec/imm5.c
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/attributes_internal.h"
 #include "libavutil/intreadwrite.h"
 
@@ -155,7 +156,7 @@ static int imm5_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return avpkt->size;
 }
 
-static void imm5_flush(AVCodecContext *avctx)
+static av_cold void imm5_flush(AVCodecContext *avctx)
 {
     IMM5Context *ctx = avctx->priv_data;
 
diff --git a/libavcodec/imx.c b/libavcodec/imx.c
index 9f7f2aa829..0f4327ddf7 100644
--- a/libavcodec/imx.c
+++ b/libavcodec/imx.c
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/common.h"
 #include "avcodec.h"
 #include "bytestream.h"
@@ -158,7 +159,7 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
     return avpkt->size;
 }
 
-static void imx_decode_flush(AVCodecContext *avctx)
+static av_cold void imx_decode_flush(AVCodecContext *avctx)
 {
     SimbiosisIMXContext *imx = avctx->priv_data;
 
@@ -168,7 +169,7 @@ static void imx_decode_flush(AVCodecContext *avctx)
     memset(imx->history, 0, sizeof(imx->history));
 }
 
-static int imx_decode_close(AVCodecContext *avctx)
+static av_cold int imx_decode_close(AVCodecContext *avctx)
 {
     SimbiosisIMXContext *imx = avctx->priv_data;
 
diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
index 847358dc7b..7bec5bbe36 100644
--- a/libavcodec/j2kenc.c
+++ b/libavcodec/j2kenc.c
@@ -71,6 +71,7 @@
 #include "bytestream.h"
 #include "jpeg2000.h"
 #include "version.h"
+#include "libavutil/attributes.h"
 #include "libavutil/common.h"
 #include "libavutil/mem.h"
 #include "libavutil/pixdesc.h"
@@ -580,7 +581,7 @@ static void init_quantization(Jpeg2000EncoderContext *s)
     }
 }
 
-static void init_luts(void)
+static av_cold void init_luts(void)
 {
     int i, a,
         mask = ~((1<<NMSEDEC_FRACBITS)-1);
diff --git a/libavcodec/lossless_videodsp.c b/libavcodec/lossless_videodsp.c
index 876decb1e6..229494bb50 100644
--- a/libavcodec/lossless_videodsp.c
+++ b/libavcodec/lossless_videodsp.c
@@ -21,6 +21,7 @@
 #include "config.h"
 #include "lossless_videodsp.h"
 #include "libavcodec/mathops.h"
+#include "libavutil/attributes.h"
 
 // 0x7f7f7f7f or 0x7f7f7f7f7f7f7f7f or whatever, depending on the cpu's native arithmetic size
 #define pb_7f (~0UL / 255 * 0x7f)
@@ -110,7 +111,7 @@ static void add_gradient_pred_c(uint8_t *src, const ptrdiff_t stride, const ptrd
     }
 }
 
-void ff_llviddsp_init(LLVidDSPContext *c)
+av_cold void ff_llviddsp_init(LLVidDSPContext *c)
 {
     c->add_bytes                  = add_bytes_c;
     c->add_median_pred            = add_median_pred_c;
diff --git a/libavcodec/midivid.c b/libavcodec/midivid.c
index 70730231b5..a4f90c2cfe 100644
--- a/libavcodec/midivid.c
+++ b/libavcodec/midivid.c
@@ -19,6 +19,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/internal.h"
 #include "libavutil/mem.h"
@@ -257,7 +258,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     MidiVidContext *s = avctx->priv_data;
 
diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
index 3dde759fea..7c262cfb03 100644
--- a/libavcodec/mjpegdec.c
+++ b/libavcodec/mjpegdec.c
@@ -32,7 +32,7 @@
 
 #include "config_components.h"
 
-#include "libavutil/display.h"
+#include "libavutil/attributes.h"
 #include "libavutil/emms.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/avassert.h"
@@ -43,6 +43,7 @@
 #include "codec_internal.h"
 #include "copy_block.h"
 #include "decode.h"
+#include "exif.h"
 #include "hwaccel_internal.h"
 #include "hwconfig.h"
 #include "idctdsp.h"
@@ -53,8 +54,6 @@
 #include "jpeglsdec.h"
 #include "profiles.h"
 #include "put_bits.h"
-#include "exif_internal.h"
-#include "bytestream.h"
 
 
 static int init_default_huffman_tables(MJpegDecodeContext *s)
@@ -2924,7 +2923,7 @@ av_cold int ff_mjpeg_decode_end(AVCodecContext *avctx)
     return 0;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     MJpegDecodeContext *s = avctx->priv_data;
     s->got_picture = 0;
diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
index e85dac36a7..688cf51d6c 100644
--- a/libavcodec/mlpdec.c
+++ b/libavcodec/mlpdec.c
@@ -29,6 +29,7 @@
 #include <stdint.h>
 
 #include "avcodec.h"
+#include "libavutil/attributes.h"
 #include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/channel_layout.h"
@@ -1413,7 +1414,7 @@ error:
     return AVERROR_INVALIDDATA;
 }
 
-static void mlp_decode_flush(AVCodecContext *avctx)
+static av_cold void mlp_decode_flush(AVCodecContext *avctx)
 {
     MLPDecodeContext *m = avctx->priv_data;
 
diff --git a/libavcodec/mobiclip.c b/libavcodec/mobiclip.c
index 133a835ad1..8e8fe44800 100644
--- a/libavcodec/mobiclip.c
+++ b/libavcodec/mobiclip.c
@@ -23,6 +23,7 @@
 
 #include <inttypes.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/mem.h"
 #include "libavutil/thread.h"
@@ -1315,7 +1316,7 @@ static int mobiclip_decode(AVCodecContext *avctx, AVFrame *rframe,
     return 0;
 }
 
-static void mobiclip_flush(AVCodecContext *avctx)
+static av_cold void mobiclip_flush(AVCodecContext *avctx)
 {
     MobiClipContext *s = avctx->priv_data;
 
diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c
index b78dadfc07..a5f0325595 100644
--- a/libavcodec/movtextenc.c
+++ b/libavcodec/movtextenc.c
@@ -21,6 +21,7 @@
 
 #include <stdarg.h>
 #include "avcodec.h"
+#include "libavutil/attributes.h"
 #include "libavutil/opt.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/mem.h"
@@ -162,7 +163,7 @@ static const Box box_types[] = {
 
 const static size_t box_count = FF_ARRAY_ELEMS(box_types);
 
-static int mov_text_encode_close(AVCodecContext *avctx)
+static av_cold int mov_text_encode_close(AVCodecContext *avctx)
 {
     MovTextContext *s = avctx->priv_data;
 
diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
index 83cef60914..98ef1732cf 100644
--- a/libavcodec/mpc7.c
+++ b/libavcodec/mpc7.c
@@ -25,6 +25,7 @@
  * divided into 32 subbands.
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/internal.h"
 #include "libavutil/lfg.h"
@@ -296,7 +297,7 @@ static int mpc7_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return avpkt->size;
 }
 
-static void mpc7_decode_flush(AVCodecContext *avctx)
+static av_cold void mpc7_decode_flush(AVCodecContext *avctx)
 {
     MPCContext *c = avctx->priv_data;
 
diff --git a/libavcodec/mpegvideo_parser.c b/libavcodec/mpegvideo_parser.c
index 663399a919..cf9eaddf80 100644
--- a/libavcodec/mpegvideo_parser.c
+++ b/libavcodec/mpegvideo_parser.c
@@ -293,7 +293,7 @@ static int mpegvideo_parse(AVCodecParserContext *s,
     return next;
 }
 
-static int mpegvideo_parse_init(AVCodecParserContext *s)
+static av_cold int mpegvideo_parse_init(AVCodecParserContext *s)
 {
     s->pict_type = AV_PICTURE_TYPE_NONE; // first frame might be partial
     return 0;
diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c
index 288f0d768a..24db12bc4b 100644
--- a/libavcodec/msrle.c
+++ b/libavcodec/msrle.c
@@ -34,6 +34,7 @@
 #include "codec_internal.h"
 #include "decode.h"
 #include "msrledec.h"
+#include "libavutil/attributes.h"
 #include "libavutil/imgutils.h"
 
 typedef struct MsrleContext {
@@ -138,7 +139,7 @@ static int msrle_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
     return buf_size;
 }
 
-static void msrle_decode_flush(AVCodecContext *avctx)
+static av_cold void msrle_decode_flush(AVCodecContext *avctx)
 {
     MsrleContext *s = avctx->priv_data;
 
diff --git a/libavcodec/msrleenc.c b/libavcodec/msrleenc.c
index 654da42c0a..d4775a8d3d 100644
--- a/libavcodec/msrleenc.c
+++ b/libavcodec/msrleenc.c
@@ -30,6 +30,8 @@
 #include "codec_internal.h"
 #include "encode.h"
 
+#include "libavutil/attributes.h"
+
 typedef struct MSRLEContext {
     int curframe;
     AVFrame *last_frame;
@@ -276,7 +278,7 @@ static int msrle_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     return av_frame_replace(s->last_frame, pict);
 }
 
-static int msrle_encode_close(AVCodecContext *avctx)
+static av_cold int msrle_encode_close(AVCodecContext *avctx)
 {
     MSRLEContext *s = avctx->priv_data;
     av_frame_free(&s->last_frame);
diff --git a/libavcodec/mv30.c b/libavcodec/mv30.c
index 124a37e23f..2ca74496a7 100644
--- a/libavcodec/mv30.c
+++ b/libavcodec/mv30.c
@@ -23,6 +23,7 @@
 #include <stddef.h>
 #include <string.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/mem.h"
 #include "libavutil/thread.h"
 
@@ -682,7 +683,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     MV30Context *s = avctx->priv_data;
 
diff --git a/libavcodec/osq.c b/libavcodec/osq.c
index 76090aa8d0..f88b639fe0 100644
--- a/libavcodec/osq.c
+++ b/libavcodec/osq.c
@@ -19,6 +19,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/mem.h"
@@ -62,7 +63,7 @@ typedef struct OSQContext {
     int pkt_offset;
 } OSQContext;
 
-static void osq_flush(AVCodecContext *avctx)
+static av_cold void osq_flush(AVCodecContext *avctx)
 {
     OSQContext *s = avctx->priv_data;
 
diff --git a/libavcodec/parser.c b/libavcodec/parser.c
index 426cc314fb..af966766ee 100644
--- a/libavcodec/parser.c
+++ b/libavcodec/parser.c
@@ -24,12 +24,13 @@
 #include <stdint.h>
 #include <string.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/mem.h"
 
 #include "parser.h"
 
-AVCodecParserContext *av_parser_init(int codec_id)
+av_cold AVCodecParserContext *av_parser_init(int codec_id)
 {
     AVCodecParserContext *s = NULL;
     const AVCodecParser *parser;
@@ -190,7 +191,7 @@ int av_parser_parse2(AVCodecParserContext *s, AVCodecContext *avctx,
     return index;
 }
 
-void av_parser_close(AVCodecParserContext *s)
+av_cold void av_parser_close(AVCodecParserContext *s)
 {
     if (s) {
         if (s->parser->parser_close)
@@ -287,7 +288,7 @@ int ff_combine_frame(ParseContext *pc, int next,
     return 0;
 }
 
-void ff_parse_close(AVCodecParserContext *s)
+av_cold void ff_parse_close(AVCodecParserContext *s)
 {
     ParseContext *pc = s->priv_data;
 
diff --git a/libavcodec/pdvdec.c b/libavcodec/pdvdec.c
index e2c03e7e0d..fffc95a530 100644
--- a/libavcodec/pdvdec.c
+++ b/libavcodec/pdvdec.c
@@ -25,6 +25,8 @@
 #include "decode.h"
 #include "zlib_wrapper.h"
 
+#include "libavutil/attributes.h"
+
 #include <zlib.h>
 
 typedef struct PDVContext {
@@ -117,7 +119,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return avpkt->size;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     PDVContext *s = avctx->priv_data;
 
diff --git a/libavcodec/qpeg.c b/libavcodec/qpeg.c
index 08bff5c81b..41b083bc14 100644
--- a/libavcodec/qpeg.c
+++ b/libavcodec/qpeg.c
@@ -29,6 +29,8 @@
 #include "codec_internal.h"
 #include "decode.h"
 
+#include "libavutil/attributes.h"
+
 typedef struct QpegContext{
     AVCodecContext *avctx;
     AVFrame *ref;
@@ -314,7 +316,8 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
     return avpkt->size;
 }
 
-static void decode_flush(AVCodecContext *avctx){
+static av_cold void decode_flush(AVCodecContext *avctx)
+{
     QpegContext * const a = avctx->priv_data;
     int i, pal_size;
     const uint8_t *pal_src;
diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c
index be105bdfb6..1c2fbc357e 100644
--- a/libavcodec/qtrle.c
+++ b/libavcodec/qtrle.c
@@ -38,6 +38,8 @@
 #include "bytestream.h"
 #include "codec_internal.h"
 
+#include "libavutil/attributes.h"
+
 typedef struct QtrleContext {
     AVCodecContext *avctx;
     AVFrame *frame;
@@ -561,7 +563,7 @@ done:
     return avpkt->size;
 }
 
-static void qtrle_decode_flush(AVCodecContext *avctx)
+static av_cold void qtrle_decode_flush(AVCodecContext *avctx)
 {
     QtrleContext *s = avctx->priv_data;
 
diff --git a/libavcodec/ralf.c b/libavcodec/ralf.c
index 036c3a931c..98e869db1f 100644
--- a/libavcodec/ralf.c
+++ b/libavcodec/ralf.c
@@ -503,7 +503,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
     return avpkt->size;
 }
 
-static void decode_flush(AVCodecContext *avctx)
+static av_cold void decode_flush(AVCodecContext *avctx)
 {
     RALFContext *ctx = avctx->priv_data;
 
diff --git a/libavcodec/rtjpeg.c b/libavcodec/rtjpeg.c
index 734e3875da..839eea20b5 100644
--- a/libavcodec/rtjpeg.c
+++ b/libavcodec/rtjpeg.c
@@ -18,6 +18,8 @@
  * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
+
+#include "libavutil/attributes.h"
 #include "libavutil/common.h"
 #include "get_bits.h"
 #include "rtjpeg.h"
@@ -167,7 +169,7 @@ void ff_rtjpeg_decode_init(RTJpegContext *c, int width, int height,
     c->h = height;
 }
 
-void ff_rtjpeg_init(RTJpegContext *c, struct AVCodecContext *avctx)
+av_cold void ff_rtjpeg_init(RTJpegContext *c, struct AVCodecContext *avctx)
 {
     int i;
 
diff --git a/libavcodec/rv60dec.c b/libavcodec/rv60dec.c
index 208fbc68f7..33728e33a0 100644
--- a/libavcodec/rv60dec.c
+++ b/libavcodec/rv60dec.c
@@ -33,6 +33,8 @@
 #include "unary.h"
 #include "videodsp.h"
 
+#include "libavutil/attributes.h"
+
 static const int8_t frame_types[4] = {AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, AV_PICTURE_TYPE_NONE};
 
 enum CUType {
@@ -2396,7 +2398,7 @@ static int rv60_decode_frame(AVCodecContext *avctx, AVFrame * frame,
     return avpkt->size;
 }
 
-static void rv60_flush(AVCodecContext *avctx)
+static av_cold void rv60_flush(AVCodecContext *avctx)
 {
     RV60Context *s = avctx->priv_data;
 
diff --git a/libavcodec/samidec.c b/libavcodec/samidec.c
index 6576ce93fe..d8a7624bc3 100644
--- a/libavcodec/samidec.c
+++ b/libavcodec/samidec.c
@@ -25,6 +25,7 @@
  */
 
 #include "ass.h"
+#include "libavutil/attributes.h"
 #include "libavutil/avstring.h"
 #include "libavutil/bprint.h"
 #include "libavutil/mem.h"
@@ -174,7 +175,7 @@ static av_cold int sami_close(AVCodecContext *avctx)
     return 0;
 }
 
-static void sami_flush(AVCodecContext *avctx)
+static av_cold void sami_flush(AVCodecContext *avctx)
 {
     SAMIContext *sami = avctx->priv_data;
     if (!(avctx->flags2 & AV_CODEC_FLAG2_RO_FLUSH_NOOP))
diff --git a/libavcodec/srtenc.c b/libavcodec/srtenc.c
index de05a09254..7fd6bfee05 100644
--- a/libavcodec/srtenc.c
+++ b/libavcodec/srtenc.c
@@ -275,7 +275,7 @@ static int text_encode_frame(AVCodecContext *avctx,
     return encode_frame(avctx, buf, bufsize, sub, &text_callbacks);
 }
 
-static int srt_encode_close(AVCodecContext *avctx)
+static av_cold int srt_encode_close(AVCodecContext *avctx)
 {
     SRTContext *s = avctx->priv_data;
     ff_ass_split_free(s->ass_ctx);
diff --git a/libavcodec/svq1dec.c b/libavcodec/svq1dec.c
index 57cac8ee7b..5505b896a2 100644
--- a/libavcodec/svq1dec.c
+++ b/libavcodec/svq1dec.c
@@ -32,6 +32,7 @@
  *   http://www.pcisys.net/~melanson/codecs/
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/crc.h"
 #include "libavutil/mem.h"
 #include "libavutil/thread.h"
@@ -846,7 +847,7 @@ static av_cold int svq1_decode_end(AVCodecContext *avctx)
     return 0;
 }
 
-static void svq1_flush(AVCodecContext *avctx)
+static av_cold void svq1_flush(AVCodecContext *avctx)
 {
     SVQ1Context *s = avctx->priv_data;
 
diff --git a/libavcodec/textdec.c b/libavcodec/textdec.c
index 10a052e99b..e38cba3afe 100644
--- a/libavcodec/textdec.c
+++ b/libavcodec/textdec.c
@@ -28,6 +28,7 @@
 #include "avcodec.h"
 #include "ass.h"
 #include "codec_internal.h"
+#include "libavutil/attributes.h"
 #include "libavutil/bprint.h"
 #include "libavutil/opt.h"
 
@@ -65,7 +66,7 @@ static int text_decode_frame(AVCodecContext *avctx, AVSubtitle *sub,
     return avpkt->size;
 }
 
-static void text_flush(AVCodecContext *avctx)
+static av_cold void text_flush(AVCodecContext *avctx)
 {
     TextContext *text = avctx->priv_data;
     if (!(avctx->flags2 & AV_CODEC_FLAG2_RO_FLUSH_NOOP))
diff --git a/libavcodec/v4l2_m2m.c b/libavcodec/v4l2_m2m.c
index 8f633e2aeb..07c7500000 100644
--- a/libavcodec/v4l2_m2m.c
+++ b/libavcodec/v4l2_m2m.c
@@ -134,7 +134,7 @@ done:
     return ret;
 }
 
-static int v4l2_configure_contexts(V4L2m2mContext *s)
+static av_cold int v4l2_configure_contexts(V4L2m2mContext *s)
 {
     void *log_ctx = s->avctx;
     int ret;
@@ -261,7 +261,7 @@ static void v4l2_m2m_destroy_context(AVRefStructOpaque unused, void *context)
     av_packet_unref(&s->buf_pkt);
 }
 
-int ff_v4l2_m2m_codec_end(V4L2m2mPriv *priv)
+av_cold int ff_v4l2_m2m_codec_end(V4L2m2mPriv *priv)
 {
     V4L2m2mContext *s = priv->context;
     int ret;
@@ -287,7 +287,7 @@ int ff_v4l2_m2m_codec_end(V4L2m2mPriv *priv)
     return 0;
 }
 
-int ff_v4l2_m2m_codec_init(V4L2m2mPriv *priv)
+av_cold int ff_v4l2_m2m_codec_init(V4L2m2mPriv *priv)
 {
     int ret = AVERROR(EINVAL);
     struct dirent *entry;
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index de6d9ef7a9..55225baec9 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -336,7 +336,7 @@ static int vc1_decode_sprites(VC1Context *v, GetBitContext* gb)
     return 0;
 }
 
-static void vc1_sprite_flush(AVCodecContext *avctx)
+static av_cold void vc1_sprite_flush(AVCodecContext *avctx)
 {
     VC1Context *v     = avctx->priv_data;
     MpegEncContext *s = &v->s;
diff --git a/libavcodec/vorbis_parser.c b/libavcodec/vorbis_parser.c
index c6969f139f..25884b6b8a 100644
--- a/libavcodec/vorbis_parser.c
+++ b/libavcodec/vorbis_parser.c
@@ -329,7 +329,7 @@ end:
     return buf_size;
 }
 
-static void vorbis_parser_close(AVCodecParserContext *ctx)
+static av_cold void vorbis_parser_close(AVCodecParserContext *ctx)
 {
     VorbisParseContext *s = ctx->priv_data;
     av_vorbis_parse_free(&s->vp);
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
index 8f18cdf4c6..59ad41bb85 100644
--- a/libavcodec/vp3.c
+++ b/libavcodec/vp3.c
@@ -35,6 +35,7 @@
 #include <stddef.h>
 #include <string.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/emms.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/mem.h"
@@ -349,7 +350,7 @@ static av_cold void free_tables(AVCodecContext *avctx)
     av_freep(&s->motion_val[1]);
 }
 
-static void vp3_decode_flush(AVCodecContext *avctx)
+static av_cold void vp3_decode_flush(AVCodecContext *avctx)
 {
     Vp3DecodeContext *s = avctx->priv_data;
 
diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c
index d0d0238c2c..715d3b7563 100644
--- a/libavcodec/vp9.c
+++ b/libavcodec/vp9.c
@@ -41,6 +41,7 @@
 #include "vp9data.h"
 #include "vp9dec.h"
 #include "vpx_rac.h"
+#include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/mem.h"
 #include "libavutil/pixdesc.h"
@@ -1822,7 +1823,7 @@ fail:
     return ret;
 }
 
-static void vp9_decode_flush(AVCodecContext *avctx)
+static av_cold void vp9_decode_flush(AVCodecContext *avctx)
 {
     VP9Context *s = avctx->priv_data;
     int i;
diff --git a/libavcodec/vvc/thread.c b/libavcodec/vvc/thread.c
index 2138341b0f..164ad83430 100644
--- a/libavcodec/vvc/thread.c
+++ b/libavcodec/vvc/thread.c
@@ -684,7 +684,7 @@ static int task_run(FFTask *_t, void *local_context, void *user_data)
     return 0;
 }
 
-FFExecutor* ff_vvc_executor_alloc(VVCContext *s, const int thread_count)
+av_cold FFExecutor* ff_vvc_executor_alloc(VVCContext *s, const int thread_count)
 {
     FFTaskCallbacks callbacks = {
         s,
@@ -695,7 +695,7 @@ FFExecutor* ff_vvc_executor_alloc(VVCContext *s, const int thread_count)
     return ff_executor_alloc(&callbacks, thread_count);
 }
 
-void ff_vvc_executor_free(FFExecutor **e)
+av_cold void ff_vvc_executor_free(FFExecutor **e)
 {
     ff_executor_free(e);
 }
diff --git a/libavcodec/wavpack.c b/libavcodec/wavpack.c
index 9c74967f74..341315373f 100644
--- a/libavcodec/wavpack.c
+++ b/libavcodec/wavpack.c
@@ -1611,7 +1611,7 @@ static int wavpack_decode_block(AVCodecContext *avctx, AVFrame *frame, int block
     return 0;
 }
 
-static void wavpack_decode_flush(AVCodecContext *avctx)
+static av_cold void wavpack_decode_flush(AVCodecContext *avctx)
 {
     WavpackContext *s = avctx->priv_data;
 
diff --git a/libavcodec/webvttenc.c b/libavcodec/webvttenc.c
index 3b66b4f2dd..d5d3ddd17c 100644
--- a/libavcodec/webvttenc.c
+++ b/libavcodec/webvttenc.c
@@ -187,7 +187,7 @@ static int webvtt_encode_frame(AVCodecContext *avctx,
     return s->buffer.len;
 }
 
-static int webvtt_encode_close(AVCodecContext *avctx)
+static av_cold int webvtt_encode_close(AVCodecContext *avctx)
 {
     WebVTTContext *s = avctx->priv_data;
     ff_ass_split_free(s->ass_ctx);
diff --git a/libavcodec/wmalosslessdec.c b/libavcodec/wmalosslessdec.c
index f36212e19b..243388a65b 100644
--- a/libavcodec/wmalosslessdec.c
+++ b/libavcodec/wmalosslessdec.c
@@ -1302,7 +1302,7 @@ static int decode_packet(AVCodecContext *avctx, AVFrame *rframe,
     return (s->packet_loss) ? AVERROR_INVALIDDATA : get_bits_count(gb) >> 3;
 }
 
-static void flush(AVCodecContext *avctx)
+static av_cold void flush(AVCodecContext *avctx)
 {
     WmallDecodeCtx *s    = avctx->priv_data;
     s->packet_loss       = 1;
diff --git a/libavcodec/wmaprodec.c b/libavcodec/wmaprodec.c
index d87ed0433e..b15bf31ccc 100644
--- a/libavcodec/wmaprodec.c
+++ b/libavcodec/wmaprodec.c
@@ -88,6 +88,7 @@
 
 #include <inttypes.h>
 
+#include "libavutil/attributes.h"
 #include "libavutil/audio_fifo.h"
 #include "libavutil/mem.h"
 #include "libavutil/tx.h"
@@ -2040,7 +2041,7 @@ static av_cold int xma_decode_end(AVCodecContext *avctx)
     return 0;
 }
 
-static void flush(WMAProDecodeCtx *s)
+static av_cold void flush(WMAProDecodeCtx *s)
 {
     int i;
     /** reset output buffer as a part of it is used during the windowing of a
@@ -2058,14 +2059,14 @@ static void flush(WMAProDecodeCtx *s)
  *@brief Clear decoder buffers (for seeking).
  *@param avctx codec context
  */
-static void wmapro_flush(AVCodecContext *avctx)
+static av_cold void wmapro_flush(AVCodecContext *avctx)
 {
     WMAProDecodeCtx *s = avctx->priv_data;
 
     flush(s);
 }
 
-static void xma_flush(AVCodecContext *avctx)
+static av_cold void xma_flush(AVCodecContext *avctx)
 {
     XMADecodeCtx *s = avctx->priv_data;
     int i;
diff --git a/libavcodec/xbm_parser.c b/libavcodec/xbm_parser.c
index 28aae49ee3..436aec96ab 100644
--- a/libavcodec/xbm_parser.c
+++ b/libavcodec/xbm_parser.c
@@ -24,7 +24,10 @@
  * XBM parser
  */
 
-#include "libavutil/common.h"
+#include <stdint.h>
+
+#include "libavutil/attributes.h"
+#include "libavutil/avutil.h"
 
 #include "parser.h"
 
@@ -41,7 +44,7 @@ typedef struct XBMParseContext {
 
 #define END ((';' << 8) | ('\n' << 0))
 
-static int xbm_init(AVCodecParserContext *s)
+static av_cold int xbm_init(AVCodecParserContext *s)
 {
     XBMParseContext *bpc = s->priv_data;
 
diff --git a/libavcodec/zerocodec.c b/libavcodec/zerocodec.c
index 48f78d1d86..a19ca62836 100644
--- a/libavcodec/zerocodec.c
+++ b/libavcodec/zerocodec.c
@@ -22,6 +22,7 @@
 #include "codec_internal.h"
 #include "decode.h"
 #include "zlib_wrapper.h"
+#include "libavutil/attributes.h"
 #include "libavutil/common.h"
 
 typedef struct ZeroCodecContext {
@@ -126,7 +127,7 @@ static av_cold int zerocodec_decode_init(AVCodecContext *avctx)
     return ff_inflate_init(&zc->zstream, avctx);
 }
 
-static void zerocodec_decode_flush(AVCodecContext *avctx)
+static av_cold void zerocodec_decode_flush(AVCodecContext *avctx)
 {
     ZeroCodecContext *zc = avctx->priv_data;
 
-- 
2.49.1


>From e5f8ee82fb59d96d312ee9090a0bac3d30ae6704 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Fri, 5 Sep 2025 12:55:14 +0200
Subject: [PATCH 2/2] avcodec/dvdsubdec: Don't return value != 0 on init
 success

Currently, any nonnegative return value from an init function
is just treated as success and otherwise ignored; while it is
not explicitly forbidden to return something else than 0 (there
is no documentation whatsoever), the assumption is that
they return zero on success. So change dvdsubdec.c accordingly.

Also change dvdsub_parse_extradata() to return zero on success.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/dvdsubdec.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c
index c4fbcffc41..9f9845bf8e 100644
--- a/libavcodec/dvdsubdec.c
+++ b/libavcodec/dvdsubdec.c
@@ -624,10 +624,10 @@ static int dvdsub_parse_extradata(AVCodecContext *avctx)
 {
     DVDSubContext *ctx = (DVDSubContext*) avctx->priv_data;
     char *dataorig, *data;
-    int ret = 1;
+    int ret;
 
     if (!avctx->extradata || !avctx->extradata_size)
-        return 1;
+        return 0;
 
     dataorig = data = av_malloc(avctx->extradata_size+1);
     if (!data)
@@ -656,6 +656,7 @@ static int dvdsub_parse_extradata(AVCodecContext *avctx)
         data += strspn(data, "\n\r");
     }
 
+    ret = 0;
 fail:
     av_free(dataorig);
     return ret;
@@ -683,7 +684,7 @@ static av_cold int dvdsub_init(AVCodecContext *avctx)
         av_log(avctx, AV_LOG_DEBUG, "\n");
     }
 
-    return 1;
+    return 0;
 }
 
 static av_cold void dvdsub_flush(AVCodecContext *avctx)
-- 
2.49.1

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

                 reply	other threads:[~2025-09-12 20:40 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=175770960838.25.4888418327511204814@463a07221176 \
    --to=ffmpeg-devel@ffmpeg.org \
    --cc=code@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git