This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 3628726488fe674fca501a9e1901731ff4298cad Author: Romain Beauxis <[email protected]> AuthorDate: Sun Nov 1 08:37:16 2026 -0600 Commit: Romain Beauxis <[email protected]> CommitDate: Sun Nov 8 12:48:28 2026 +0000 avcodec/opus/dec: move init and close above decoding Move opus_decode_close() and opus_decode_init() above opus_decode_packet(), so that decoding can call into them without forward declarations. --- libavcodec/opus/dec.c | 214 +++++++++++++++++++++++++------------------------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/libavcodec/opus/dec.c b/libavcodec/opus/dec.c index 0ca457d77d..bb38aec148 100644 --- a/libavcodec/opus/dec.c +++ b/libavcodec/opus/dec.c @@ -474,6 +474,113 @@ finish: return output_samples; } +static av_cold int opus_decode_close(AVCodecContext *avctx) +{ + OpusContext *c = avctx->priv_data; + + for (int i = 0; i < c->p.nb_streams; i++) { + OpusStreamContext *s = &c->streams[i]; + + ff_silk_free(&s->silk); + ff_celt_free(&s->celt); + + av_freep(&s->out_dummy); + s->out_dummy_allocated_size = 0; + + av_audio_fifo_free(s->sync_buffer); + av_audio_fifo_free(s->celt_delay); + swr_free(&s->swr); + } + + av_freep(&c->streams); + + c->p.nb_streams = 0; + + av_freep(&c->p.channel_maps); + av_freep(&c->fdsp); + + return 0; +} + +static av_cold int opus_decode_init(AVCodecContext *avctx) +{ + OpusContext *c = avctx->priv_data; + int ret; + + avctx->sample_fmt = AV_SAMPLE_FMT_FLTP; + if (!avctx->sample_rate) + avctx->sample_rate = 48000; + + c->fdsp = avpriv_float_dsp_alloc(0); + if (!c->fdsp) + return AVERROR(ENOMEM); + + /* find out the channel configuration */ + ret = ff_opus_parse_extradata(avctx, &c->p, avctx->extradata, + avctx->extradata_size); + if (ret < 0) + return ret; + if (c->p.gain_i) + c->gain = ff_exp10(c->p.gain_i / (20.0 * 256)); + + /* allocate and init each independent decoder */ + c->streams = av_calloc(c->p.nb_streams, sizeof(*c->streams)); + if (!c->streams) { + c->p.nb_streams = 0; + return AVERROR(ENOMEM); + } + + for (int i = 0; i < c->p.nb_streams; i++) { + OpusStreamContext *s = &c->streams[i]; + AVChannelLayout layout; + + s->output_channels = (i < c->p.nb_stereo_streams) ? 2 : 1; + + s->avctx = avctx; + + for (int j = 0; j < s->output_channels; j++) { + s->silk_output[j] = s->silk_buf[j]; + s->celt_output[j] = s->celt_buf[j]; + s->redundancy_output[j] = s->redundancy_buf[j]; + } + + s->fdsp = c->fdsp; + + s->swr =swr_alloc(); + if (!s->swr) + return AVERROR(ENOMEM); + + layout = (s->output_channels == 1) ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO : + (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; + av_opt_set_int(s->swr, "in_sample_fmt", avctx->sample_fmt, 0); + av_opt_set_int(s->swr, "out_sample_fmt", avctx->sample_fmt, 0); + av_opt_set_chlayout(s->swr, "in_chlayout", &layout, 0); + av_opt_set_chlayout(s->swr, "out_chlayout", &layout, 0); + av_opt_set_int(s->swr, "out_sample_rate", 48000, 0); + av_opt_set_int(s->swr, "filter_size", 16, 0); + + ret = ff_silk_init(avctx, &s->silk, s->output_channels); + if (ret < 0) + return ret; + + ret = ff_celt_init(avctx, &s->celt, s->output_channels, c->apply_phase_inv); + if (ret < 0) + return ret; + + s->celt_delay = av_audio_fifo_alloc(avctx->sample_fmt, + s->output_channels, 1024); + if (!s->celt_delay) + return AVERROR(ENOMEM); + + s->sync_buffer = av_audio_fifo_alloc(avctx->sample_fmt, + s->output_channels, 32); + if (!s->sync_buffer) + return AVERROR(ENOMEM); + } + + return 0; +} + static int opus_decode_packet(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt) { @@ -652,113 +759,6 @@ static av_cold void opus_decode_flush(AVCodecContext *ctx) } } -static av_cold int opus_decode_close(AVCodecContext *avctx) -{ - OpusContext *c = avctx->priv_data; - - for (int i = 0; i < c->p.nb_streams; i++) { - OpusStreamContext *s = &c->streams[i]; - - ff_silk_free(&s->silk); - ff_celt_free(&s->celt); - - av_freep(&s->out_dummy); - s->out_dummy_allocated_size = 0; - - av_audio_fifo_free(s->sync_buffer); - av_audio_fifo_free(s->celt_delay); - swr_free(&s->swr); - } - - av_freep(&c->streams); - - c->p.nb_streams = 0; - - av_freep(&c->p.channel_maps); - av_freep(&c->fdsp); - - return 0; -} - -static av_cold int opus_decode_init(AVCodecContext *avctx) -{ - OpusContext *c = avctx->priv_data; - int ret; - - avctx->sample_fmt = AV_SAMPLE_FMT_FLTP; - if (!avctx->sample_rate) - avctx->sample_rate = 48000; - - c->fdsp = avpriv_float_dsp_alloc(0); - if (!c->fdsp) - return AVERROR(ENOMEM); - - /* find out the channel configuration */ - ret = ff_opus_parse_extradata(avctx, &c->p, avctx->extradata, - avctx->extradata_size); - if (ret < 0) - return ret; - if (c->p.gain_i) - c->gain = ff_exp10(c->p.gain_i / (20.0 * 256)); - - /* allocate and init each independent decoder */ - c->streams = av_calloc(c->p.nb_streams, sizeof(*c->streams)); - if (!c->streams) { - c->p.nb_streams = 0; - return AVERROR(ENOMEM); - } - - for (int i = 0; i < c->p.nb_streams; i++) { - OpusStreamContext *s = &c->streams[i]; - AVChannelLayout layout; - - s->output_channels = (i < c->p.nb_stereo_streams) ? 2 : 1; - - s->avctx = avctx; - - for (int j = 0; j < s->output_channels; j++) { - s->silk_output[j] = s->silk_buf[j]; - s->celt_output[j] = s->celt_buf[j]; - s->redundancy_output[j] = s->redundancy_buf[j]; - } - - s->fdsp = c->fdsp; - - s->swr =swr_alloc(); - if (!s->swr) - return AVERROR(ENOMEM); - - layout = (s->output_channels == 1) ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO : - (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; - av_opt_set_int(s->swr, "in_sample_fmt", avctx->sample_fmt, 0); - av_opt_set_int(s->swr, "out_sample_fmt", avctx->sample_fmt, 0); - av_opt_set_chlayout(s->swr, "in_chlayout", &layout, 0); - av_opt_set_chlayout(s->swr, "out_chlayout", &layout, 0); - av_opt_set_int(s->swr, "out_sample_rate", 48000, 0); - av_opt_set_int(s->swr, "filter_size", 16, 0); - - ret = ff_silk_init(avctx, &s->silk, s->output_channels); - if (ret < 0) - return ret; - - ret = ff_celt_init(avctx, &s->celt, s->output_channels, c->apply_phase_inv); - if (ret < 0) - return ret; - - s->celt_delay = av_audio_fifo_alloc(avctx->sample_fmt, - s->output_channels, 1024); - if (!s->celt_delay) - return AVERROR(ENOMEM); - - s->sync_buffer = av_audio_fifo_alloc(avctx->sample_fmt, - s->output_channels, 32); - if (!s->sync_buffer) - return AVERROR(ENOMEM); - } - - return 0; -} - #define OFFSET(x) offsetof(OpusContext, x) #define AD AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM static const AVOption opus_options[] = { -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
