Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package baresip for openSUSE:Factory checked in at 2026-09-09 16:22:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/baresip (Old) and /work/SRC/openSUSE:Factory/.baresip.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "baresip" Wed Sep 9 16:22:19 2026 rev:20 rq:1376593 version:4.11.0 Changes: -------- --- /work/SRC/openSUSE:Factory/baresip/baresip.changes 2026-08-04 21:34:13.695750717 +0200 +++ /work/SRC/openSUSE:Factory/.baresip.new.1265/baresip.changes 2026-09-09 16:23:55.158957713 +0200 @@ -1,0 +2,20 @@ +Thu Sep 3 12:05:43 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 4.11.0 + * core: cleanup stream_rtp_h ignore handling. + * audio: increase RTP timestamp also for underruns. + * aubuf: remove adaptive mode. + * webrtc_aec: fix system cmake include. + * call: avoid call progress if media is inactive. + * conf: remove unused conf_aubuf_adaptive(). + * audio: reuse mbuf for telephony events. + * call: add callback for incoming SIP INFO. + * test: check fixture error and fix call progress. + * aureceiver: fix return on error case in aurecv_start_player(). + * audio: fix warning() %d format in encode_rtp_send(). + * opus,aureceiver: fix PLC/FEC handling. + * l16: refactor NR_CODECS by RE_ARRAY_SIZE. + * config: remove unused config option 'audio_silence'. + * echo: refactor call_event_handler closed with bevent. + +------------------------------------------------------------------- Old: ---- baresip-4.10.0.tar.gz New: ---- baresip-4.11.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ baresip.spec ++++++ --- /var/tmp/diff_new_pack.xAN6Mz/_old 2026-09-09 16:23:55.934990146 +0200 +++ /var/tmp/diff_new_pack.xAN6Mz/_new 2026-09-09 16:23:55.935990188 +0200 @@ -20,7 +20,7 @@ %global sover 28 %global libname lib%{name}%{sover} Name: baresip -Version: 4.10.0 +Version: 4.11.0 Release: 0 Summary: Modular SIP useragent License: BSD-3-Clause ++++++ baresip-4.10.0.tar.gz -> baresip-4.11.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/CHANGELOG.md new/baresip-4.11.0/CHANGELOG.md --- old/baresip-4.10.0/CHANGELOG.md 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/CHANGELOG.md 2026-08-24 13:09:33.000000000 +0200 @@ -5,6 +5,29 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## v4.11.0 - 2026-08-25 + +## What's Changed +* core: cleanup stream_rtp_h ignore handling by @sreimers in https://github.com/baresip/baresip/pull/3770 +* audio: increase RTP timestamp also for underruns by @cspiel1 in https://github.com/baresip/baresip/pull/3775 +* aubuf: remove adaptive mode by @cspiel1 in https://github.com/baresip/baresip/pull/3780 +* webrtc_aec: fix system cmake include by @sreimers in https://github.com/baresip/baresip/pull/3782 +* call: avoid call progress if media is inactive by @cspiel1 in https://github.com/baresip/baresip/pull/3783 +* conf: remove unused conf_aubuf_adaptive() by @alfredh in https://github.com/baresip/baresip/pull/3785 +* audio: reuse mbuf for telephony events by @maximilianfridrich in https://github.com/baresip/baresip/pull/3787 +* call: add callback for incoming SIP INFO by @SnowMaster12 in https://github.com/baresip/baresip/pull/3762 +* test: check fixture error and fix call progress by @alfredh in https://github.com/baresip/baresip/pull/3786 +* aureceiver: fix return on error case in aurecv_start_player() by @alfredh in https://github.com/baresip/baresip/pull/3792 +* audio: fix warning() %d format in encode_rtp_send() by @alfredh in https://github.com/baresip/baresip/pull/3793 +* opus,aureceiver: fix PLC/FEC handling by @sreimers in https://github.com/baresip/baresip/pull/3794 +* l16: refactor NR_CODECS by RE_ARRAY_SIZE by @sreimers in https://github.com/baresip/baresip/pull/3803 +* config: remove unused config option 'audio_silence' by @alfredh in https://github.com/baresip/baresip/pull/3798 +* echo: refactor call_event_handler closed with bevent by @sreimers in https://github.com/baresip/baresip/pull/3806 + + +**Full Changelog**: https://github.com/baresip/baresip/compare/v4.10.0...v4.11.0 + + ## v4.10.0 - 2026-07-22 ### What's Changed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/CMakeLists.txt new/baresip-4.11.0/CMakeLists.txt --- old/baresip-4.10.0/CMakeLists.txt 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/CMakeLists.txt 2026-08-24 13:09:33.000000000 +0200 @@ -13,7 +13,7 @@ cmake_minimum_required(VERSION 3.18...4.0) -project(baresip VERSION 4.10.0) +project(baresip VERSION 4.11.0) set(PROJECT_SOVERSION 28) # bump if ABI breaks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/docs/examples/config new/baresip-4.11.0/docs/examples/config --- old/baresip-4.10.0/docs/examples/config 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/docs/examples/config 2026-08-24 13:09:33.000000000 +0200 @@ -52,8 +52,6 @@ auenc_format s16 # s16, float, .. audec_format s16 # s16, float, .. audio_buffer 20-160 # ms -audio_buffer_mode fixed # fixed, adaptive -audio_silence -35.0 # in [dB] audio_telev_pt 101 # payload type for telephone-event # Video diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/include/baresip.h new/baresip-4.11.0/include/baresip.h --- old/baresip-4.10.0/include/baresip.h 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/include/baresip.h 2026-08-24 13:09:33.000000000 +0200 @@ -13,7 +13,7 @@ /** Defines the Baresip version string */ -#define BARESIP_VERSION "4.10.0" +#define BARESIP_VERSION "4.11.0" #ifndef NET_MAX_NS @@ -217,7 +217,14 @@ typedef void (call_dtmf_h)(struct call *call, char key, void *arg); typedef bool (call_match_h)(const struct call *call, void *arg); typedef void (call_list_h)(struct call *call, void *arg); - +typedef bool (call_sip_info_h)( + struct call *call, + const char *content_type, + const uint8_t *body, + size_t body_len, + const struct sip_msg *msg, + void *arg +); int call_connect(struct call *call, const struct pl *paddr); int call_answer(struct call *call, uint16_t scode, enum vidmode vmode); @@ -248,6 +255,9 @@ const char *reason, ...); void call_set_handlers(struct call *call, call_event_h *eh, call_dtmf_h *dtmfh, void *arg); +void call_set_sip_info_handler(struct call *call, + call_sip_info_h *handler, + void *arg); struct account *call_account(const struct call *call); uint16_t call_scode(const struct call *call); enum call_state call_state(const struct call *call); @@ -359,7 +369,6 @@ struct vidsz *sz); int conf_get_sa(const struct conf *conf, const char *name, struct sa *sa); enum jbuf_type conf_get_jbuf_type(const struct pl *pl); -bool conf_aubuf_adaptive(const struct pl *pl); void conf_close(void); struct conf *conf_cur(void); int conf_loadfile(struct mbuf **mbp, const char *filename); @@ -428,8 +437,6 @@ int enc_fmt; /**< Audio encoder sample format */ int dec_fmt; /**< Audio decoder sample format */ struct range buffer; /**< Audio receive buffer in [ms] */ - bool adaptive; /**< Enable adaptive audio buffer */ - double silence; /**< Silence volume in [dB] */ uint32_t telev_pt; /**< Payload type for tel.-event */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/mk/Doxyfile new/baresip-4.11.0/mk/Doxyfile --- old/baresip-4.10.0/mk/Doxyfile 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/mk/Doxyfile 2026-08-24 13:09:33.000000000 +0200 @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = baresip -PROJECT_NUMBER = 4.10.0 +PROJECT_NUMBER = 4.11.0 OUTPUT_DIRECTORY = ../baresip-dox CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/modules/echo/echo.c new/baresip-4.11.0/modules/echo/echo.c --- old/baresip-4.10.0/modules/echo/echo.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/modules/echo/echo.c 2026-08-24 13:09:33.000000000 +0200 @@ -32,26 +32,6 @@ } -static void call_event_handler(struct call *call, enum call_event ev, - const char *str, void *arg) -{ - struct session *sess = arg; - (void)call; - - switch (ev) { - - case CALL_EVENT_CLOSED: - debug("echo: CALL_CLOSED: %s\n", str); - mem_deref(sess->call_in); - mem_deref(sess); - break; - - default: - break; - } -} - - static void call_dtmf_handler(struct call *call, char key, void *arg) { (void)arg; @@ -79,8 +59,7 @@ audio_set_devicename(call_audio(sess->call_in), a, a); video_set_devicename(call_video(sess->call_in), a, a); - call_set_handlers(sess->call_in, call_event_handler, - call_dtmf_handler, sess); + call_set_handlers(sess->call_in, NULL, call_dtmf_handler, NULL); list_append(&sessionl, &sess->le, sess); err = ua_answer(ua, call, VIDMODE_ON); @@ -107,11 +86,26 @@ call_localuri(call)); err = new_session(ua, call); - if (err) { + if (err) call_hangup(call, 500, "Server Error"); - } break; + case BEVENT_CALL_CLOSED: + info("echo: CALL_CLOSED: peer=%s --> local=%s\n", + call_peeruri(call), + call_localuri(call)); + + struct le *le; + LIST_FOREACH(&sessionl, le) + { + struct session *sess = le->data; + if (sess->call_in == call) { + mem_deref(sess); + break; + } + } + + break; default: break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/modules/l16/l16.c new/baresip-4.11.0/modules/l16/l16.c --- old/baresip-4.10.0/modules/l16/l16.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/modules/l16/l16.c 2026-08-24 13:09:33.000000000 +0200 @@ -15,9 +15,6 @@ */ -enum {NR_CODECS = 10}; - - static int encode(struct auenc_state *st, bool *marker, uint8_t *buf, size_t *len, int fmt, const void *sampv, size_t sampc) @@ -73,7 +70,7 @@ /* See RFC 3551 */ -static struct aucodec l16v[NR_CODECS] = { +static struct aucodec l16v[] = { {LE_INIT, 0, "L16", 48000, 48000, 2, 2, 4, 0, 0, encode, 0, decode, 0,0,0}, {LE_INIT, "10", "L16", 44100, 44100, 2, 2, 4, 0, 0, encode, 0, decode, 0,0,0}, {LE_INIT, 0, "L16", 32000, 32000, 2, 2, 10, 0, 0, encode, 0, decode, 0,0,0}, @@ -90,9 +87,8 @@ static int module_init(void) { struct list *aucodecl = baresip_aucodecl(); - size_t i; - for (i=0; i<NR_CODECS; i++) + for (size_t i = 0; i < RE_ARRAY_SIZE(l16v); i++) aucodec_register(aucodecl, &l16v[i]); return 0; @@ -101,9 +97,7 @@ static int module_close(void) { - size_t i; - - for (i=0; i<NR_CODECS; i++) + for (size_t i = 0; i < RE_ARRAY_SIZE(l16v); i++) aucodec_unregister(&l16v[i]); return 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/modules/opus/decode.c new/baresip-4.11.0/modules/opus/decode.c --- old/baresip-4.10.0/modules/opus/decode.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/modules/opus/decode.c 2026-08-24 13:09:33.000000000 +0200 @@ -118,10 +118,17 @@ return EINVAL; /* - * FEC=0 -> use PLC - * FEC=1 -> use inband FEC + * FEC=0 -> use PLC (packet loss concealment, no coded data + * available for this lost frame) + * FEC=1 -> use inband FEC (recover this lost frame from the + * FEC data carried in the next, already received, + * packet) + * + * Inband FEC can only be attempted when the caller actually + * supplies the coded payload of the following packet; otherwise + * fall back to plain concealment. */ - fec = opus_packet_loss > 0; + fec = buf && len && opus_packet_loss > 0; opus_decoder_ctl(ads->dec, OPUS_GET_LAST_PACKET_DURATION(&frame_size)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/modules/webrtc_aec/CMakeLists.txt new/baresip-4.11.0/modules/webrtc_aec/CMakeLists.txt --- old/baresip-4.10.0/modules/webrtc_aec/CMakeLists.txt 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/modules/webrtc_aec/CMakeLists.txt 2026-08-24 13:09:33.000000000 +0200 @@ -17,10 +17,10 @@ add_library(${PROJECT_NAME} MODULE ${SRCS}) endif() -target_include_directories(${PROJECT_NAME} PRIVATE ${WEBRTC_AEC_INCLUDE_DIRS}) +target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE + ${WEBRTC_AEC_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} PRIVATE ${WEBRTC_AEC_LIBRARIES}) target_compile_options(${PROJECT_NAME} PRIVATE - -isystem $(WEBRTC_AEC_INCLUDE_DIRS) -fPIC -Wno-shadow -Wno-pedantic diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/src/audio.c new/baresip-4.11.0/src/audio.c --- old/baresip-4.10.0/src/audio.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/src/audio.c 2026-08-24 13:09:33.000000000 +0200 @@ -86,6 +86,7 @@ RE_ATOMIC bool aubuf_started; /**< Aubuf was started flag */ struct list filtl; /**< Audio filters in encoding order */ struct mbuf *mb; /**< Buffer for outgoing RTP packets */ + struct mbuf *mb_telev; /**< Buffer for Telephony Events */ char *module; /**< Audio source module name */ char *device; /**< Audio source device name */ void *sampv; /**< Sample buffer */ @@ -203,6 +204,7 @@ mem_deref(a->tx.enc); mem_deref(a->tx.aubuf); mem_deref(a->tx.mb); + mem_deref(a->tx.mb_telev); mem_deref(a->tx.sampv); mem_deref(a->tx.module); mem_deref(a->tx.device); @@ -353,7 +355,7 @@ af->sampc = 0; } else if (err) { - warning("audio: %s encode error: %d samples (%m)\n", + warning("audio: %s encode error: %zu samples (%m)\n", tx->ac->name, af->sampc, err); goto out; } @@ -457,28 +459,24 @@ static void check_telev(struct audio *a, struct autx *tx) { const struct sdp_format *fmt; - struct mbuf *mb; + struct mbuf *mb = tx->mb_telev; bool marker = false; int err; - mb = mbuf_alloc(STREAM_PRESZ + 64); - if (!mb) - return; - mb->pos = mb->end = STREAM_PRESZ; mtx_lock(tx->mtx); err = telev_poll(a->telev, &marker, mb); mtx_unlock(tx->mtx); if (err) - goto out; + return; if (marker) tx->ts_tel = (uint32_t)tx->ts_ext; fmt = sdp_media_rformat(stream_sdpmedia(audio_strm(a)), telev_rtpfmt); if (!fmt) - goto out; + return; mb->pos = STREAM_PRESZ; mtx_lock(a->tx.mtx); @@ -487,9 +485,6 @@ if (err) { warning("audio: telev: stream_send %m\n", err); } - - out: - mem_deref(mb); } @@ -626,7 +621,6 @@ struct rtpext *extv, size_t extc, struct mbuf *mb, unsigned lostc, bool new_source, - bool *ignore, void *arg) { struct audio *a = arg; @@ -639,7 +633,7 @@ if (new_source) aurecv_reset(a->aur); - aurecv_receive(a->aur, hdr, extv, extc, mb, lostc, ignore); + aurecv_receive(a->aur, hdr, extv, extc, mb, lostc); } @@ -767,10 +761,11 @@ tx->mb = mbuf_alloc(STREAM_PRESZ + 4096); + tx->mb_telev = mbuf_alloc(STREAM_PRESZ + 64); tx->sampv = mem_zalloc(AUDIO_SAMPSZ * aufmt_sample_size(tx->enc_fmt), NULL); - if (!tx->mb || !tx->sampv) { + if (!tx->mb || !tx->mb_telev || !tx->sampv) { err = ENOMEM; goto out; } @@ -894,6 +889,9 @@ } else { ++tx->stats.aubuf_underrun; + mtx_lock(tx->mtx); + tx->ts_ext += (tx->ptime * tx->ac->crate / 1000); + mtx_unlock(tx->mtx); debug("audio: thread: tx aubuf underrun" " (total %llu)\n", tx->stats.aubuf_underrun); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/src/aureceiver.c new/baresip-4.11.0/src/aureceiver.c --- old/baresip-4.10.0/src/aureceiver.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/src/aureceiver.c 2026-08-24 13:09:33.000000000 +0200 @@ -158,10 +158,6 @@ aubuf_set_id(ar->aubuf, id); mem_deref(id); - aubuf_set_mode(ar->aubuf, cfg->adaptive ? - AUBUF_ADAPTIVE : AUBUF_FIXED); - aubuf_set_silence(ar->aubuf, cfg->silence); - out: mtx_unlock(ar->aubuf_mtx); @@ -211,12 +207,38 @@ } +static int aurecv_plc_frame(struct audio_recv *ar, + const struct rtp_header *hdr, + const uint8_t *buf, size_t len) +{ + struct auframe af; + size_t sampc = ar->sampvsz / aufmt_sample_size(ar->fmt); + int err; + const struct aucodec *ac = ar->ac; + + err = ac->plch(ar->dec, ar->fmt, ar->sampv, &sampc, buf, len); + if (err) { + warning("audio_recv: %s codec PLC error: %m\n", + ac->name, err); + return err; + } + + auframe_init(&af, ar->fmt, ar->sampv, sampc, ac->srate, ac->ch); + af.timestamp = ((uint64_t) hdr->ts) * AUDIO_TIMEBASE / ac->crate; + + err = aurecv_process_decfilt(ar, &af); + if (err) + return err; + + return aurecv_push_aubuf(ar, &af); +} + + static int aurecv_stream_decode(struct audio_recv *ar, const struct rtp_header *hdr, - struct mbuf *mb, unsigned lostc, bool drop) + struct mbuf *mb, unsigned lostc) { struct auframe af; - size_t sampc = ar->sampvsz / aufmt_sample_size(ar->fmt); bool marker = hdr->m; int err = 0; const struct aucodec *ac = ar->ac; @@ -225,19 +247,34 @@ if (!ac) return 0; - /* TODO: PLC */ + /* + * Packet Loss Concealment (PLC) + * + * One or more packets were lost before this one arrived. Generate + * a concealment frame for each lost packet. + * + * Only the last lost packet can potentially be recovered using + * in-band FEC data carried in the current (just received) packet + * -- e.g. Opus -- so it is the only one handed the current + * packet's payload. Earlier losses fall back to plain + * concealment, since no coded data is available for them. + */ if (lostc && ac->plch) { + for (unsigned i = 0; i < lostc; i++) { - err = ac->plch(ar->dec, - ar->fmt, ar->sampv, &sampc, - mbuf_buf(mb), mbuf_get_left(mb)); - if (err) { - warning("audio_recv: %s codec decode %zu bytes: %m\n", - ac->name, mbuf_get_left(mb), err); - goto out; + bool last = (i == lostc - 1); + + err = aurecv_plc_frame(ar, hdr, + last ? mbuf_buf(mb) : NULL, + last ? mbuf_get_left(mb) : 0); + if (err) + goto out; } } - else if (mbuf_get_left(mb)) { + + size_t sampc = ar->sampvsz / aufmt_sample_size(ar->fmt); + + if (mbuf_get_left(mb)) { err = ac->dech(ar->dec, ar->fmt, ar->sampv, &sampc, @@ -249,18 +286,13 @@ } } else { - /* no PLC in the codec, might be done in filters below */ + /* PLC might be done in filters below or above within Codec */ sampc = 0; } auframe_init(&af, ar->fmt, ar->sampv, sampc, ac->srate, ac->ch); af.timestamp = ((uint64_t) hdr->ts) * AUDIO_TIMEBASE / ac->crate; - if (drop) { - aubuf_drop_auframe(ar->aubuf, &af); - goto out; - } - err = aurecv_process_decfilt(ar, &af); if (err) goto out; @@ -286,12 +318,10 @@ /* Handle incoming stream data from the network */ void aurecv_receive(struct audio_recv *ar, const struct rtp_header *hdr, struct rtpext *extv, size_t extc, - struct mbuf *mb, unsigned lostc, bool *ignore) + struct mbuf *mb, unsigned lostc) { bool discard = false; - bool drop = *ignore; int wrap; - (void) lostc; if (!mb) return; @@ -299,11 +329,9 @@ mtx_lock(ar->mtx); if (hdr->pt != ar->pt) { mtx_unlock(ar->mtx); - *ignore = true; return; } - *ignore = false; /* RFC 5285 -- A General Mechanism for RTP Header Extensions */ const struct rtpext *ext = rtpext_find(extv, extc, ar->extmap_aulevel); @@ -346,14 +374,7 @@ goto out; } - /* TODO: what if lostc > 1 ?*/ - /* PLC should generate lostc frames here. Not only one. - * aubuf should replace PLC frames with late arriving real frames. - * It should use timestamp to decide if a frame should be replaced. */ -/* if (lostc)*/ -/* (void)aurecv_stream_decode(ar, hdr, mb, lostc, drop);*/ - - (void)aurecv_stream_decode(ar, hdr, mb, 0, drop); + (void)aurecv_stream_decode(ar, hdr, mb, lostc); out: mtx_unlock(ar->mtx); @@ -691,7 +712,7 @@ warning("audio_recv: start_player failed (%s.%s): " "%m\n", ar->module, ar->device, err); - goto out; + return err; } ar->ap = auplay_find(auplayl, ar->module); @@ -700,8 +721,6 @@ aufmt_name(ar->play_fmt)); } -out: - return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/src/call.c new/baresip-4.11.0/src/call.c --- old/baresip-4.10.0/src/call.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/src/call.c 2026-08-24 13:09:33.000000000 +0200 @@ -85,6 +85,8 @@ bool use_video; bool use_rtp; struct pl *user_data; /**< User data related to the call */ + call_sip_info_h *sip_infoh;/**< SIP INFO handler for this call */ + void *sip_info_arg; /**< SIP INFO handler argument */ }; @@ -975,6 +977,17 @@ } +void call_set_sip_info_handler(struct call *call, + call_sip_info_h *handler, void *arg) +{ + if (!call) + return; + + call->sip_infoh = handler; + call->sip_info_arg = arg; +} + + void call_set_custom_hdrs(struct call *call, const struct list *hdrs) { struct le *le; @@ -1273,6 +1286,17 @@ if (!call) return EINVAL; + enum sdp_dir ardir = sdp_media_rdir(stream_sdpmedia(audio_strm( + call_audio(call)))); + enum sdp_dir vrdir = sdp_media_rdir(stream_sdpmedia(video_strm( + call_video(call)))); + if ((adir & ardir) == SDP_INACTIVE && + (vdir & vrdir) == SDP_INACTIVE) { + debug("call: progress: both audio and video would become " + "inactive\n"); + return EINVAL; + } + tmr_cancel(&call->tmr_inv); if (adir != call->estadir || vdir != call->estvdir) @@ -2011,6 +2035,39 @@ } +static bool call_emit_sip_info(struct call *call, const struct sip_msg *msg) +{ + struct pl body; + char content_type[256] = ""; + + if (!call || !msg || !call->sip_infoh) + return false; + + if (pl_isset(&msg->ctyp.type) && pl_isset(&msg->ctyp.subtype)) { + re_snprintf( + content_type, + sizeof(content_type), + "%r/%r%s%r", + &msg->ctyp.type, + &msg->ctyp.subtype, + pl_isset(&msg->ctyp.params) ? ";" : "", + &msg->ctyp.params + ); + } + + pl_set_mbuf(&body, msg->mb); + + return call->sip_infoh( + call, + content_type[0] ? content_type : NULL, + (const uint8_t *)body.p, + body.l, + msg, + call->sip_info_arg + ); +} + + static void sipsess_estab_handler(const struct sip_msg *msg, void *arg) { struct call *call = arg; @@ -2113,7 +2170,7 @@ } } } - else if (!mbuf_get_left(msg->mb)) { + else if (call_emit_sip_info(call, msg) || !mbuf_get_left(msg->mb)) { (void)sip_reply(sip, msg, 200, "OK"); } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/src/conf.c new/baresip-4.11.0/src/conf.c --- old/baresip-4.10.0/src/conf.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/src/conf.c 2026-08-24 13:09:33.000000000 +0200 @@ -327,16 +327,6 @@ } -bool conf_aubuf_adaptive(const struct pl *pl) -{ - if (0 == pl_strcasecmp(pl, "fixed")) return false; - if (0 == pl_strcasecmp(pl, "adaptive")) return true; - - warning("unsupported audio buffer mode (%r)\n", pl); - return false; -} - - /** * Configure the system with default settings * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/src/config.c new/baresip-4.11.0/src/config.c --- old/baresip-4.10.0/src/config.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/src/config.c 2026-08-24 13:09:33.000000000 +0200 @@ -52,8 +52,6 @@ .enc_fmt = AUFMT_S16LE, .dec_fmt = AUFMT_S16LE, .buffer = {20, 160}, - .adaptive = false, - .silence = -35.0, .telev_pt = 101 }, @@ -454,10 +452,6 @@ return EINVAL; } - if (0 == conf_get(conf, "audio_buffer_mode", &pl)) - cfg->audio.adaptive = conf_aubuf_adaptive(&pl); - - (void)conf_get_float(conf, "audio_silence", &cfg->audio.silence); (void)conf_get_u32(conf, "audio_telev_pt", &cfg->audio.telev_pt); /* Video */ @@ -623,8 +617,6 @@ "auenc_format\t\t%s\n" "audec_format\t\t%s\n" "audio_buffer\t\t%H\t\t# ms\n" - "audio_buffer_mode\t%s\t\t# fixed, adaptive\n" - "audio_silence\t\t%.1lf\t\t# in [dB]\n" "audio_telev_pt\t\t%u\n" "\n", cfg->audio.audio_path, @@ -639,8 +631,6 @@ aufmt_name(cfg->audio.enc_fmt), aufmt_name(cfg->audio.dec_fmt), range_print, &cfg->audio.buffer, - cfg->audio.adaptive ? "adaptive" : "fixed", - cfg->audio.silence, cfg->audio.telev_pt); if (err) return err; @@ -887,8 +877,6 @@ "auenc_format\t\ts16\t\t# s16, float, ..\n" "audec_format\t\ts16\t\t# s16, float, ..\n" "audio_buffer\t\t%H\t\t# ms\n" - "audio_buffer_mode\t%s\t\t# fixed, adaptive\n" - "audio_silence\t\t%.1lf\t\t# in [dB]\n" "audio_telev_pt\t\t%u\t\t" "# payload type for telephone-event\n" "\n" @@ -898,8 +886,6 @@ default_audio_device(), default_audio_device(), range_print, &cfg->audio.buffer, - cfg->audio.adaptive ? "adaptive" : "fixed", - cfg->audio.silence, cfg->audio.telev_pt); err |= re_hprintf(pf, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/src/core.h new/baresip-4.11.0/src/core.h --- old/baresip-4.10.0/src/core.h 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/src/core.h 2026-08-24 13:09:33.000000000 +0200 @@ -130,7 +130,7 @@ int aurecv_set_device(struct audio_recv *ar, const char *device); void aurecv_receive(struct audio_recv *ar, const struct rtp_header *hdr, struct rtpext *extv, size_t extc, - struct mbuf *mb, unsigned lostc, bool *ignore); + struct mbuf *mb, unsigned lostc); void aurecv_reset(struct audio_recv *ar); int aurecv_start_player(struct audio_recv *ar, struct list *auplayl); bool aurecv_player_started(const struct audio_recv *ar); @@ -305,7 +305,6 @@ typedef void (stream_rtp_h)(const struct rtp_header *hdr, struct rtpext *extv, size_t extc, struct mbuf *mb, unsigned lostc, bool new_source, - bool *ignore, void *arg); typedef int (stream_pt_h)(uint8_t pt, struct mbuf *mb, void *arg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/src/rtprecv.c new/baresip-4.11.0/src/rtprecv.c --- old/baresip-4.10.0/src/rtprecv.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/src/rtprecv.c 2026-08-24 13:09:33.000000000 +0200 @@ -260,12 +260,11 @@ } -static int handle_rtp(struct rtp_receiver *rx, const struct rtp_header *hdr, - struct mbuf *mb, unsigned lostc, bool drop) +static void handle_rtp(struct rtp_receiver *rx, const struct rtp_header *hdr, + struct mbuf *mb, unsigned lostc) { struct rtpext extv[8]; size_t extc = 0; - bool ignore = drop; /* RFC 5285 -- A General Mechanism for RTP Header Extensions */ if (hdr->ext && hdr->x.len && mb) { @@ -287,7 +286,7 @@ warning("rtp_receiver: corrupt rtp packet," " not enough space for rtpext of %zu bytes\n", ext_len); - return 0; + return; } mb->pos = mb->pos - ext_len; @@ -299,7 +298,7 @@ if (err) { warning("rtp_receiver: rtpext_decode failed " "(%m)\n", err); - return 0; + return; } } @@ -314,11 +313,9 @@ bool new_source = rtprecv_consume_ssrc_change(rx, NULL); - rx->rtph(hdr, extv, extc, mb, lostc, new_source, &ignore, rx->arg); - if (ignore) - return EAGAIN; + rx->rtph(hdr, extv, extc, mb, lostc, new_source, rx->arg); - return 0; + return; } @@ -366,22 +363,20 @@ if (!rx || !rx->jbuf) return; - uint32_t n = jbuf_packets(rx->jbuf); + uint32_t n = 1; do { err = jbuf_get(rx->jbuf, &hdr, &mb); - if (err && err != EAGAIN) + if (err == EAGAIN) + ++n; + else if (err) break; lostc = lostcalc(rx, hdr.seq); - err = handle_rtp(rx, &hdr, mb, lostc > 0 ? lostc : 0, - err == EAGAIN); + handle_rtp(rx, &hdr, mb, lostc > 0 ? lostc : 0); mem_deref(mb); - - if (err && err != EAGAIN) - break; - } while (n--); + } while (--n); delay = jbuf_next_play(rx->jbuf); if (delay < 0) @@ -495,7 +490,7 @@ } } else { - (void)handle_rtp(rx, hdr, mb, 0, false); + (void)handle_rtp(rx, hdr, mb, 0); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/src/video.c new/baresip-4.11.0/src/video.c --- old/baresip-4.10.0/src/video.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/src/video.c 2026-08-24 13:09:33.000000000 +0200 @@ -889,14 +889,12 @@ struct rtpext *extv, size_t extc, struct mbuf *mb, unsigned lostc, bool new_source, - bool *ignore, void *arg) { struct video *v = arg; (void)extv; (void)extc; (void)new_source; - (void)ignore; MAGIC_CHECK(v); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/test/call.c new/baresip-4.11.0/test/call.c --- old/baresip-4.10.0/test/call.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/test/call.c 2026-08-24 13:09:33.000000000 +0200 @@ -145,7 +145,8 @@ /* run main-loop with timeout, wait for events */ err = re_main_timeout(5000); TEST_ERR(err); - TEST_ERR(fix.err); + err = fix.err; + TEST_ERR(err); ASSERT_EQ(0, fix.a.n_incoming); ASSERT_EQ(0, fix.a.n_established); @@ -172,12 +173,10 @@ struct call *call; int err = 0; - fixture_init(f); - - f->behaviour = BEHAVIOUR_PROGRESS; - + fixture_init_prm(f, ";answermode=early"); cancel_rule_new(BEVENT_CALL_PROGRESS, f->a.ua, 0, 0, 0); cr->n_progress = 1; + f->behaviour = BEHAVIOUR_NOTHING; /* Make a call from A to B */ err = ua_connect(f->a.ua, &call, NULL, f->buri, VIDMODE_OFF); @@ -186,13 +185,15 @@ /* run main-loop with timeout, wait for events */ err = re_main_timeout(5000); TEST_ERR(err); - TEST_ERR(fix.err); + err = fix.err; + TEST_ERR(err); ua_hangup(f->a.ua, call, 0, NULL); err = re_main_timeout(5000); TEST_ERR(err); - TEST_ERR(fix.err); + err = fix.err; + TEST_ERR(err); ASSERT_EQ(0, fix.a.n_incoming); ASSERT_EQ(1, fix.a.n_progress); @@ -220,12 +221,10 @@ struct call *call; int err = 0; - fixture_init(f); - - f->behaviour = BEHAVIOUR_PROGRESS; - + fixture_init_prm(f, ";answermode=early"); cancel_rule_new(BEVENT_CALL_PROGRESS, f->a.ua, 0, 0, 0); cr->n_progress = 1; + f->behaviour = BEHAVIOUR_NOTHING; /* Make a call from A to B */ err = ua_connect(f->a.ua, &call, NULL, f->buri, VIDMODE_OFF); @@ -234,7 +233,8 @@ /* run main-loop with timeout, wait for events */ err = re_main_timeout(5000); TEST_ERR(err); - TEST_ERR(fix.err); + err = fix.err; + TEST_ERR(err); err = ua_answer(f->b.ua, NULL, VIDMODE_ON); TEST_ERR(err); @@ -243,7 +243,8 @@ err = re_main_timeout(5000); TEST_ERR(err); - TEST_ERR(fix.err); + err = fix.err; + TEST_ERR(err); ASSERT_EQ(0, fix.a.n_incoming); ASSERT_EQ(1, fix.a.n_progress); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/test/call.h new/baresip-4.11.0/test/call.h --- old/baresip-4.10.0/test/call.h 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/test/call.h 2026-08-24 13:09:33.000000000 +0200 @@ -17,7 +17,6 @@ BEHAVIOUR_REJECT, BEHAVIOUR_REJECTF, BEHAVIOUR_GET_HDRS, - BEHAVIOUR_PROGRESS, }; enum action { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/test/call_fixture.c new/baresip-4.11.0/test/call_fixture.c --- old/baresip-4.10.0/test/call_fixture.c 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/test/call_fixture.c 2026-08-24 13:09:33.000000000 +0200 @@ -142,14 +142,6 @@ } break; - case BEHAVIOUR_PROGRESS: - err = call_progress(call); - if (err) { - warning("call_progress failed (%m)\n", err); - goto out; - } - break; - default: break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/.gitignore new/baresip-4.11.0/tools/aubuf/.gitignore --- old/baresip-4.10.0/tools/aubuf/.gitignore 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/.gitignore 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -ajb.dat -ajb.eps -underrun.dat -plots -ajb.json -mcplots -.env -re_trace.json diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/README.md new/baresip-4.11.0/tools/aubuf/README.md --- old/baresip-4.10.0/tools/aubuf/README.md 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +0,0 @@ -# How to test adaptive aubuf - -- in aubuf.c set AUBUF\_DEBUG to 1 -- in ajb.c set DEBUG\_LEVEL to 6 -- build and install libre again -- use script `generate_plots.sh` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/accounts new/baresip-4.11.0/tools/aubuf/accounts --- old/baresip-4.10.0/tools/aubuf/accounts 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/accounts 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -<sip:alice@office>;regint=0;ptime=20 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/ajb.plot new/baresip-4.11.0/tools/aubuf/ajb.plot --- old/baresip-4.10.0/tools/aubuf/ajb.plot 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/ajb.plot 1970-01-01 01:00:00.000000000 +0100 @@ -1,88 +0,0 @@ -#!/usr/bin/gnuplot -# -# How to generate a plot -# ====================== -# This gnuplot script plots DEBUG_LEVEL 6 output of ajb.c. You have to -# increment the DEBUG_LEVEL in ajb.c if you want to get the table for -# ajb.dat. Then call baresip like this: -# -# ./baresip 2>&1 | grep -Eo "plot_ajb.*" > ajb.dat -# -# Call this script. Then compare the plot legend with the variables in ajb.c! -# -# -# Description of the plot -# ======================= -# The plot is a time based diagram. The values avbuftime should lie between -# bufmin and bufmax. If it runs somewhere out of these boundaries a "Low" / -# "High" situation is detected. -# -# "Good" means: The number of frames in the audio buffer is ok. -# -# "Low" means: The number is too low. Then the number of frames are -# incremented by holding one frame back. -# -# "High" means: The number is to high. Then one frame is dropped. This reduces -# the audio delay. -# -# The number of "Low"/"High" situations should be low while buffer under-runs -# should be avoided completely. - -# On the x-axes of the plot there is the time in milliseconds. See function -# `ajb_calc()`! We note the variables in ajb.c here in parentheses. -# E.g. (var jitter). -# -# - The orange line is the computed network jitter (var jitter). This is a -# moving average of the difference (var d) between the real time diff -# (var tr - var tr0) and the RTP timestamps diff (var ts - var ts0). -# See RFC-3550 RTP - A.8! -# We suggest a fast rise of the moving average and a slow shrink. Thus -# avoiding buffer under-runs have a higher priority than reducing the audio -# delay. -# -# - The buftime (var buftime) is the whole time period stored in the aubuf. -# The buftime (light-grey) changes very fast during periods of jitter. To be -# applicable for detecting "Low" or "High" situations it has to be smoothed. -# The blue line avbuftime (var avbuftime) is a moving average of the buftime -# and is used to detect "Low"/"High". Thus the ajb algorithm tries to keep -# the avbuftime between the following boundaries. -# -# - The green lines bufmin and bufmax (var bufmin, bufmax) are boundaries for -# avbuftime.They are computed by constant factors (> 1.) from the jitter. -# -# -# Copyright (C) 2020,2022 commend.com - Christian Spielberger, Michael Peitler - - -# Choose your preferred gnuplot terminal or use e.g. evince to view the -# ajb.eps! - -#set terminal qt persist -set terminal postscript eps size 15,10 enhanced color -set output 'ajb.eps' -#set terminal png size 1280,480 -#set output 'ajb.png' -set datafile separator "," -set key outside -set xlabel "time/[ms]" -set ylabel "[ms]" - -stats "ajb.dat" using ($6/1000) name "B" -stats "ajb.dat" using 3 name "X" - -bufst(y) = y>0 ? B_max*0.8 + y*B_max*0.09 : NaN -text1(y) = y==1 ? "LOW" : y==2 ? "HIGH" : "" -text2(y) = y==1 ? "UNDERRUN" : "" -underr(y) = B_max*0.7 + y*B_max*0.09 - -plot \ -'ajb.dat' using 3:($5/1000) title 'jitter' with linespoints lc "orange", \ -'ajb.dat' using 3:($7/1000) title 'avbuftime' with linespoints lc "skyblue", \ -'ajb.dat' using 3:($8/1000) title 'bufmin' with linespoints lc "sea-green", \ -'ajb.dat' using 3:($9/1000) title 'bufmax' with linespoints lc "sea-green", \ -'ajb.dat' using 3:($6/1000) title 'buftime' lc "light-grey", \ -'ajb.dat' using 3:(bufst($10)) title 'Low/High' lc "red", \ -"<echo 1 1 1" using (X_max):(bufst(2)):(text1(2)) notitle w labels tc "red", \ -"<echo 1 1 1" using (X_max):(bufst(1)):(text1(1)) notitle w labels tc "red", \ -'underrun.dat' using 3:(underr($4)) title 'underrun' pt 7 ps 1.5 lc "red", \ -"<echo 1 1 1" using (X_max):(underr(1)):(text2(1)) notitle w labels tc "red" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/config new/baresip-4.11.0/tools/aubuf/config --- old/baresip-4.10.0/tools/aubuf/config 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/config 1970-01-01 01:00:00.000000000 +0100 @@ -1,56 +0,0 @@ -#audio_path /usr/local/share/baresip -audio_player pulse, -audio_source pulse, -audio_alert pulse, -audio_level no -audio_buffer 30-250 -audio_buffer_mode adaptive -audio_silence 0.0 - -audio_jitter_buffer_type adaptive -audio_jitter_buffer_delay 0-25 - -statmode_default off -rtp_stats no - -module_path /usr/local/lib/baresip/modules - -# UI Modules -module stdio.so -module cons.so - -module opus.so -#module g722.so -#module g711.so - -module auconv.so -module auresamp.so - -module pulse.so - - -module_app account.so -module_app menu.so -module_app netroam.so - - -cons_listen 0.0.0.0:5555 # cons - Console UI UDP/TCP sockets - -# Opus codec parameters -opus_bitrate 28000 # 6000-510000 -#opus_stereo yes -#opus_sprop_stereo yes -#opus_cbr no -#opus_inbandfec no -#opus_dtx no -#opus_mirror no -#opus_complexity 10 -#opus_application audio # {voip,audio} -#opus_samplerate 48000 -#opus_packet_loss 10 # 0-100 percent (expected packet loss) - -# Opus Multistream codec parameters -#opus_ms_channels 2 #total channels (2 or 4) -#opus_ms_streams 2 #number of streams -#opus_ms_c_streams 2 #number of coupled streams - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/env-template new/baresip-4.11.0/tools/aubuf/env-template --- old/baresip-4.10.0/tools/aubuf/env-template 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/env-template 1970-01-01 01:00:00.000000000 +0100 @@ -1,4 +0,0 @@ -target=1.2.3.4 -netif=eno1 -once=true - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/generate_plot.sh new/baresip-4.11.0/tools/aubuf/generate_plot.sh --- old/baresip-4.10.0/tools/aubuf/generate_plot.sh 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/generate_plot.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -#!/bin/bash - -if ! which jq; then - echo "Install jq" - exit 1 -fi - -if ! which gnuplot; then - echo "Install gnuplot" - exit 1 -fi - -if [ ! -f re_trace.json ]; then - echo "re_trace.json does not exist" - exit 1 -fi - -function gen_datfile() { - ph=$1 - filename=$2 - - jqc='.traceEvents[] | select (.cat == "ajb" and .ph == "' - jqc="${jqc}${ph}"'") | .args.line' - cat re_trace.json | jq -r "${jqc}" > $filename -} - - -gen_datfile "P" ajb.dat -gen_datfile "U" underrun.dat - -./ajb.plot diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/mcconfig/accounts new/baresip-4.11.0/tools/aubuf/mcconfig/accounts --- old/baresip-4.10.0/tools/aubuf/mcconfig/accounts 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/mcconfig/accounts 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -<sip:alice@office>;regint=0;ptime=20 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/mcconfig/config new/baresip-4.11.0/tools/aubuf/mcconfig/config --- old/baresip-4.10.0/tools/aubuf/mcconfig/config 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/mcconfig/config 1970-01-01 01:00:00.000000000 +0100 @@ -1,57 +0,0 @@ -#audio_path /usr/local/share/baresip -audio_player pulse, -audio_source pulse, -audio_alert pulse, -audio_level no -audio_buffer 20-160 -audio_buffer_mode adaptive -audio_silence 0.0 - -audio_jitter_buffer_type adaptive -audio_jitter_buffer_delay 0-20 - -module_path /usr/local/lib/baresip/modules - -# UI Modules -module stdio.so -module cons.so - -module g722.so -module g711.so - -module auconv.so -module auresamp.so - -module pulse.so - - -module_app account.so -module_app menu.so -module_app netroam.so - - -cons_listen 0.0.0.0:5555 # cons - Console UI UDP/TCP sockets - -# Opus codec parameters -opus_bitrate 28000 # 6000-510000 -#opus_stereo yes -#opus_sprop_stereo yes -#opus_cbr no -#opus_inbandfec no -#opus_dtx no -#opus_mirror no -#opus_complexity 10 -#opus_application audio # {voip,audio} -#opus_samplerate 48000 -#opus_packet_loss 10 # 0-100 percent (expected packet loss) - -# Opus Multistream codec parameters -#opus_ms_channels 2 #total channels (2 or 4) -#opus_ms_streams 2 #number of streams -#opus_ms_c_streams 2 #number of coupled streams - - -module_app multicast.so -multicast_jbuf_type adaptive # off, fixed, adaptive -multicast_jbuf_delay 0-20 -multicast_listener 224.0.1.194:5004 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/run.sh new/baresip-4.11.0/tools/aubuf/run.sh --- old/baresip-4.10.0/tools/aubuf/run.sh 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/run.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,71 +0,0 @@ -#!/bin/bash - -if [ ! -f .env ]; then - echo ".env is missing. Copy and edit env-template!" - exit 1 -fi - -export `cat .env` - -echo "target: $target" -echo "netif: $netif" -echo "once: $once" - -if ! which jq; then - echo "Install jq" - exit 1 -fi - -trap "../jitter-off.sh; killall -q baresip" EXIT - -source ../jitter.sh -init_jitter $netif - -i=1 -for ptime in 20 10 5 15 30 40; do - - sed -e "s/ptime=[0-9]*/ptime=$ptime/" -i accounts - for buf in $(( ptime + ptime/2 )) $(( ptime )) $(( 2*ptime )) $(( 4*ptime )) $(( 6*ptime )); do - echo "########### ptime $ptime buffer $buf ###############" - - sed -e "s/audio_buffer\s*[0-9]*\-.*/audio_buffer $buf-250/" -i config - baresip -v -f . > /tmp/b.log 2>&1 & - sleep 1 - echo "/dial $target" | nc -N localhost 5555 - - sleep 8 - - enable_jitter - - sleep $(( ptime )) - - disable_jitter - - sleep $(( ptime )) - - echo "/quit" | nc -N localhost 5555 - - sleep 1 - - ./generate_plot.sh \ - || { exit 1; } - - if [ ! -d plots ]; then - mkdir plots - fi - - tar="plots/ptime${i}_${ptime}_buf_${buf}_jitter_0" - if [ -f ajb.eps ]; then - mv ajb.eps ${tar}.eps - fi - if [ -f ajb.png ]; then - mv ajb.png ${tar}.png - fi - - i=$(( i+1 )) - - if [ $once == "true" ]; then - exit 0 - fi - done -done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/run_multicast.sh new/baresip-4.11.0/tools/aubuf/run_multicast.sh --- old/baresip-4.10.0/tools/aubuf/run_multicast.sh 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/run_multicast.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,74 +0,0 @@ -#!/bin/bash - -if [ ! -f .env ]; then - echo ".env is missing. Copy and edit env-template!" - exit 1 -fi - -export `cat .env` - -echo "netif: $netif" -echo "once: $once" - -if ! which jq; then - echo "Install jq" - exit 1 -fi - -trap "../jitter-off.sh; killall -q baresip" EXIT - -source ../jitter.sh -init_jitter $netif - -i=1 -for jbuf in 0 1 3 4; do - for buf in 20 40 60; do - echo "########### jbuf min $jbuf buffer $buf ###############" - - sed -e "s/audio_buffer\s*[0-9]*\-/audio_buffer $buf-/" -i mcconfig/config - sed -e "s/multicast_jbuf_delay\s*[0-9]*\-/multicast_jbuf_delay $jbuf-/" -i mcconfig/config - baresip -f mcconfig > /tmp/b.log 2>&1 & - - sleep 1.5 - - ./stream_fm4.sh & - pidfm4=$( pgrep -P $! ) - echo "STARTED STREAM with PID $pidfm4" - - sleep 8 - - enable_jitter - - sleep 8 - disable_jitter - - sleep 16 - - kill $pidfm4 - - echo "/quit" | nc -N localhost 5555 - - sleep 1 - - ./generate_plot.sh \ - || { exit 1; } - - if [ ! -d mcplots ]; then - mkdir mcplots - fi - - tar="mcplots/jbuf${i}_min${jbuf}_buf_${buf}" - if [ -f ajb.eps ]; then - cp ajb.eps ${tar}.eps - fi - if [ -f ajb.png ]; then - mv ajb.png ${tar}.png - fi - - i=$(( i+1 )) - - if [ "$once" == "true" ]; then - exit 0 - fi - done -done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/aubuf/stream_fm4.sh new/baresip-4.11.0/tools/aubuf/stream_fm4.sh --- old/baresip-4.10.0/tools/aubuf/stream_fm4.sh 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/aubuf/stream_fm4.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -gst-launch-1.0 -q --no-position souphttpsrc location=https://orf-live.ors-shoutcast.at/fm4-q1a ssl-strict=false ! decodebin expose-all-streams=false ! audiorate skip-to-first=true ! audioconvert ! audioresample ! avenc_g722 ! rtpg722pay ! udpsink host=224.0.1.194 port=5004 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/jbuf/audio/config new/baresip-4.11.0/tools/jbuf/audio/config --- old/baresip-4.10.0/tools/jbuf/audio/config 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/jbuf/audio/config 2026-08-24 13:09:33.000000000 +0200 @@ -5,7 +5,6 @@ audio_level no audio_buffer 10-50 audio_buffer_mode adaptive -audio_silence 0.0 audio_jitter_buffer_type adaptive audio_jitter_buffer_delay 0-500 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baresip-4.10.0/tools/jbuf/video/config new/baresip-4.11.0/tools/jbuf/video/config --- old/baresip-4.10.0/tools/jbuf/video/config 2026-07-22 11:48:14.000000000 +0200 +++ new/baresip-4.11.0/tools/jbuf/video/config 2026-08-24 13:09:33.000000000 +0200 @@ -5,7 +5,6 @@ audio_level no audio_buffer 10-50 audio_buffer_mode adaptive -audio_silence 0.0 audio_jitter_buffer_type off video_jitter_buffer_type adaptive
