Commit 3e58a497dc for ffmpeg
commit 3e58a497dc0f778bb40d4d7c4027cffc321afa7c
Author: Romain Beauxis <romain.beauxis@gmail.com>
Date: Sat Oct 31 09:16:23 2026 -0500
avcodec/flacdec: factor out applying a STREAMINFO
Share the steps that initialization and an inline header both run to
set the decoder up from a STREAMINFO.
diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c
index 0c88f577a1..b3e56df0a0 100644
--- a/libavcodec/flacdec.c
+++ b/libavcodec/flacdec.c
@@ -95,10 +95,25 @@ static void flac_set_bps(FLACContext *s)
}
}
+static int apply_streaminfo(FLACContext *s, const uint8_t *streaminfo)
+{
+ int ret = ff_flac_parse_streaminfo(s->avctx, &s->stream_info, streaminfo);
+ if (ret < 0)
+ return ret;
+ ret = allocate_buffers(s);
+ if (ret < 0)
+ return ret;
+ flac_set_bps(s);
+ ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt,
+ s->stream_info.channels);
+ s->got_streaminfo = 1;
+
+ return 0;
+}
+
static av_cold int flac_decode_init(AVCodecContext *avctx)
{
uint8_t *streaminfo;
- int ret;
FLACContext *s = avctx->priv_data;
s->avctx = avctx;
@@ -111,18 +126,7 @@ static av_cold int flac_decode_init(AVCodecContext *avctx)
return AVERROR_INVALIDDATA;
/* initialize based on the demuxer-supplied streamdata header */
- ret = ff_flac_parse_streaminfo(avctx, &s->stream_info, streaminfo);
- if (ret < 0)
- return ret;
- ret = allocate_buffers(s);
- if (ret < 0)
- return ret;
- flac_set_bps(s);
- ff_flacdsp_init(&s->dsp, avctx->sample_fmt,
- s->stream_info.channels);
- s->got_streaminfo = 1;
-
- return 0;
+ return apply_streaminfo(s, streaminfo);
}
static void dump_headers(AVCodecContext *avctx, FLACStreaminfo *s)
@@ -186,7 +190,7 @@ static int allocate_buffers(FLACContext *s)
*/
static int parse_streaminfo(FLACContext *s, const uint8_t *buf, int buf_size)
{
- int metadata_type, metadata_size, ret;
+ int metadata_type, metadata_size;
if (buf_size < FLAC_STREAMINFO_SIZE+8) {
/* need more data */
@@ -197,18 +201,7 @@ static int parse_streaminfo(FLACContext *s, const uint8_t *buf, int buf_size)
metadata_size != FLAC_STREAMINFO_SIZE) {
return AVERROR_INVALIDDATA;
}
- ret = ff_flac_parse_streaminfo(s->avctx, &s->stream_info, &buf[8]);
- if (ret < 0)
- return ret;
- ret = allocate_buffers(s);
- if (ret < 0)
- return ret;
- flac_set_bps(s);
- ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt,
- s->stream_info.channels);
- s->got_streaminfo = 1;
-
- return 0;
+ return apply_streaminfo(s, &buf[8]);
}
/**