package: baresip Version: 1.1.0-1 The source code of baresip is incompatible with the current version of FFmpeg 7, leading to a crash when trying to compile against it. The attached patch (from upstream) fixes the issues, allowing successful compilation.
I am using Ubuntu 24.04 and Debian Unstable.
diff -Nru baresip-1.1.0.orig/modules/avcodec/decode.c baresip-1.1.0/modules/avcodec/decode.c --- baresip-1.1.0.orig/modules/avcodec/decode.c 2024-09-12 17:59:08.067564052 -0400 +++ baresip-1.1.0/modules/avcodec/decode.c 2024-09-13 10:38:11.763692796 -0400 @@ -267,8 +267,8 @@ if (got_picture) { -#if LIBAVUTIL_VERSION_MAJOR >= 56 if (hw_frame) { + av_frame_unref(st->pict); /* cleanup old frame */ /* retrieve data from GPU to CPU */ ret = av_hwframe_transfer_data(st->pict, hw_frame, 0); if (ret < 0) { @@ -276,11 +276,14 @@ " the data to system memory\n"); goto out; } - +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(58, 29, 100) + st->pict->flags = hw_frame->flags; +#else st->pict->key_frame = hw_frame->key_frame; - } #endif + } + frame->fmt = avpixfmt_to_vidfmt(st->pict->format); if (frame->fmt == (enum vidfmt)-1) { warning("avcodec: decode: bad pixel format" @@ -297,7 +300,11 @@ frame->size.w = st->ctx->width; frame->size.h = st->ctx->height; +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(58, 29, 100) + if (st->pict->flags & AV_FRAME_FLAG_KEY) { +#else if (st->pict->key_frame) { +#endif *intra = true; st->got_keyframe = true; diff -Nru baresip-1.1.0.orig/modules/avcodec/encode.c baresip-1.1.0/modules/avcodec/encode.c --- baresip-1.1.0.orig/modules/avcodec/encode.c 2024-09-12 17:59:08.067564052 -0400 +++ baresip-1.1.0/modules/avcodec/encode.c 2024-09-13 10:41:16.252176798 -0400 @@ -544,7 +544,11 @@ if (update) { debug("avcodec: encoder picture update\n"); +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(58, 29, 100) + pict->flags |= AV_FRAME_FLAG_KEY; +#else pict->key_frame = 1; +#endif pict->pict_type = AV_PICTURE_TYPE_I; } diff -Nru baresip-1.1.0.orig/modules/avformat/audio.c baresip-1.1.0/modules/avformat/audio.c --- baresip-1.1.0.orig/modules/avformat/audio.c 2024-09-12 17:59:08.067564052 -0400 +++ baresip-1.1.0/modules/avformat/audio.c 2024-09-13 10:45:45.022881711 -0400 @@ -100,8 +100,14 @@ avformat_shared_set_audio(st->shared, st); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 37, 100) + int channels = sh->au.ctx->ch_layout.nb_channels; +#else + int channels = sh->au.ctx->channels; +#endif + info("avformat: audio: converting %u/%u %s -> %u/%u %s\n", - sh->au.ctx->sample_rate, sh->au.ctx->channels, + sh->au.ctx->sample_rate, channels, av_get_sample_fmt_name(sh->au.ctx->sample_fmt), prm->srate, prm->ch, aufmt_name(prm->fmt)); @@ -154,13 +160,19 @@ const AVRational tb = st->au.time_base; struct auframe af; + int channels = st->ausrc_st->prm.ch; +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 37, 100) + av_channel_layout_default(&frame2.ch_layout, channels); +#else frame.channel_layout = av_get_default_channel_layout(frame.channels); - frame2.channels = st->ausrc_st->prm.ch; + frame2.channels = channels; frame2.channel_layout = av_get_default_channel_layout(st->ausrc_st->prm.ch); +#endif + frame2.sample_rate = st->ausrc_st->prm.srate; frame2.format = aufmt_to_avsampleformat(st->ausrc_st->prm.fmt); @@ -173,7 +185,7 @@ } auframe_init(&af, st->ausrc_st->prm.fmt, frame2.data[0], - frame2.nb_samples * frame2.channels); + frame2.nb_samples * channels); af.timestamp = frame.pts * AUDIO_TIMEBASE * tb.num / tb.den; st->ausrc_st->readh(&af, st->ausrc_st->arg); diff -Nru baresip-1.1.0.orig/modules/avformat/avformat.c baresip-1.1.0/modules/avformat/avformat.c --- baresip-1.1.0.orig/modules/avformat/avformat.c 2024-09-12 17:59:08.067564052 -0400 +++ baresip-1.1.0/modules/avformat/avformat.c 2024-09-13 10:46:07.842941552 -0400 @@ -44,7 +44,7 @@ static enum AVHWDeviceType avformat_hwdevice = AV_HWDEVICE_TYPE_NONE; #endif static char avformat_inputformat[64]; -static AVCodec *avformat_decoder; +static const AVCodec *avformat_decoder; static void shared_destructor(void *arg) { @@ -56,12 +56,10 @@ } if (st->au.ctx) { - avcodec_close(st->au.ctx); avcodec_free_context(&st->au.ctx); } if (st->vid.ctx) { - avcodec_close(st->vid.ctx); avcodec_free_context(&st->vid.ctx); } @@ -170,7 +168,7 @@ static int open_codec(struct stream *s, const struct AVStream *strm, int i, AVCodecContext *ctx) { - AVCodec *codec = avformat_decoder; + const AVCodec *codec = avformat_decoder; int ret; if (s->idx >= 0 || s->ctx) @@ -226,7 +224,11 @@ struct shared *st; struct pl pl_fmt, pl_dev; char *device = NULL; +#if LIBAVUTIL_VERSION_MAJOR >= 57 + const AVInputFormat *input_format = NULL; +#else AVInputFormat *input_format = NULL; +#endif AVDictionary *format_opts = NULL; char buf[16]; unsigned i;