Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

audio: add optional decoding buffer #1842

Merged
merged 7 commits into from
Jun 1, 2022
Merged

Conversation

cspiel1
Copy link
Collaborator

@cspiel1 cspiel1 commented May 12, 2022

This is only for discussion so far.

       If an AEC is in the filter list aufilt, then the aubuf should be
       constant and small. A second audio buffer aubufdec should be added via
       config if network jitter is expected.

       .--------.   .-------.   .--------.   .----------.   .--------.
 |\    |        |   |       |   |        |   |  opt.    |   |        |
 | |<--| auplay |<--| aubuf |<--| aufilt |<--| aubufdec |<--| decode |<--- RTP
 |/    |        |   |       |   |        |   |          |   |        |
       '--------'   '-------'   '--------'   '----------'   '--------'

The aubufdec makes mostly sense, if it runs in adaptive mode to handle changing network jitter best. If running in adaptive mode, an extra thread might not be required.

@sreimers
Copy link
Member

If an AEC is in the filter list aufilt, then the aubuf should be constant and small.

With aubuf you mean the auplay aubuf should constant and small for AEC or the aubufdec?

@cspiel1
Copy link
Collaborator Author

cspiel1 commented May 13, 2022

The auplay aubuf should be small and constant. Where constant is most important for an AEC.

I tested this PR already with these settings and the rem/docs/aubuf/generate_plots.sh:

audio_buffer   20-260
audio_buffer_mode      fixed
decode_buffer_mode     adaptive
decode_buffer          20-320          # ms

jitter_buffer_type     adaptive
jitter_buffer_delay    0-20

with this jitter simulation:

sudo tc qdisc add dev ifb1 root netem delay 200ms 100ms

Note: If decode_buffer_mode is "adaptive" then there is no extra thread needed for the aufilt processing pipeline. But the thread you meant is for the RTP and decode, right?

The plot looks like this.
ajb

@sreimers
Copy link
Member

I see, can we put the AEC in a "auplay aufilt" stage?:

auplay <-- auplay aufilt <-- aubuf <-- aufilt <-- decode <-- RTP

If the AEC calculation is fast enough this should archive the best results.

But the thread you meant is for the RTP and decode, right?

Right.

@cspiel1
Copy link
Collaborator Author

cspiel1 commented May 13, 2022

I see, can we put the AEC in a "auplay aufilt" stage?:

auplay <-- auplay aufilt <-- aubuf <-- aufilt <-- decode <-- RTP

This was my first draft. When discussing this with our audio experts, we found that indeed AEC has to be very fast because the auplay thread has the strictest real time constraints in the whole decode pipeline. The AEC (e.g. our audio-core) can not guaranty this real time constraints in general.

If the AEC calculation is fast enough this should archive the best results.

But the thread you meant is for the RTP and decode, right?

Right.

The RTP+decode thread is a good idea. It does not overlap with this PR.

@sreimers
Copy link
Member

The decode part for AEC is normally not heavy (since the most work is done in encode) but maybe depends on the implementation.

Some quick webrtc_aec aufilt measurements (20ms ptime):

20-85 microseconds (decode)
100-350 microseconds (encode)

So putting webrtc_aec decode in auplay thread should be fast enough for realtime.

By The AEC (e.g. our audio-core) you mean a custom/hardware AEC?
Can we put the aubufdec into a aufilter module?

@cspiel1
Copy link
Collaborator Author

cspiel1 commented May 13, 2022

20-85 microseconds (decode) 100-350 microseconds (encode)

I will discuss this with our audio experts. Maybe they could make similar measurements with our audio-core.

By The AEC (e.g. our audio-core) you mean a custom/hardware AEC?

Yes a custom audio-core containing AEC, noise suppression, ...

Can we put the aubufdec into a aufilter module?

Maybe. Then there would not be any change in the baresip core. I'll give it a try.

@cspiel1
Copy link
Collaborator Author

cspiel1 commented May 13, 2022

And I just realized that if an decoding aubuf is added another thread is needed for the filter list, otherwise the auplay aubuf will have the underruns. This thread can be put also in the module. I will call this module auajb for "Audio - Adaptive Jitter Buffer" with one config setting decode_buffer 20-160.

@juha-h
Copy link
Collaborator

juha-h commented May 13, 2022 via email

@cspiel1
Copy link
Collaborator Author

cspiel1 commented May 13, 2022

This is not designed to support asynchronous write/read of audio frames through filters.

	/* Process exactly one audio-frame in reverse list order */
	for (le = rx->filtl.tail; le; le = le->prev) {
		struct aufilt_dec_st *st = le->data;

		if (st->af && st->af->dech)
			err |= st->af->dech(st, &af);
	}

For an AEC setup we need, these three threads:

  • An RTP+decoding thread that pushes into an adaptive aubuf "A",
  • a filter thread that contains the AEC filter, reads from "A" and pushes into a fixed aubuf "B",
  • an auplay thread that reads from "B".
auplay <-- B <-- filters with AEC <-- A <-- decode <-- RTP
|  thread  |          thread          |      thread      |

@cspiel1 cspiel1 force-pushed the aubuf_decode branch 4 times, most recently from 19bf30b to cc87ce9 Compare May 20, 2022 11:03
src/audio.c Outdated
@@ -173,6 +184,14 @@ struct aurx {
enum jbuf_type jbtype; /**< Jitter buffer type */
volatile int32_t wcnt; /**< Write handler call count */

#ifdef HAVE_PTHREAD
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

when using the new C11 thrd_t api, I think the ifdef is no longer needed ?

src/audio.c Outdated
#ifdef HAVE_PTHREAD
struct {
thrd_t thrd; /**< Audio RX filter thread */
mtx_t mtx; /**< Mutex for stopping thread */
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it possible to use Atomic bool here, instead of mutex ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think so. This mtx solution is maybe overcautious. I saw this in module ausine.

src/audio.c Outdated
@@ -751,20 +779,84 @@ static int stream_pt_handler(uint8_t pt, struct mbuf *mb, void *arg)
}


static int process_decfilt(struct aurx *rx, struct auframe *af)
{
struct le *le;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

le can now be declared inside the for loop (C99 style)

src/audio.c Outdated
}


static int rx_push_aubuf(struct aurx *rx, struct auframe *af)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

auframe can be made const ?

src/audio.c Outdated
int err = 0;
const struct aucodec *ac = rx->ac;
bool flush = rx->ssrc != hdr->ssrc && rx->ssrc;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ssrc value 0 is also a valid SSRC. I think there should be a variable ssrc_set that can be used ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay, we can simplify this:

bool flush = rx->ssrc != hdr->ssrc;

because it doesn't make a difference if we flush at the beginning. The first frame is pushed to aubuf anyway.

@cspiel1 cspiel1 changed the title audio: add optional decoding buffer (WIP) audio: add optional decoding buffer May 23, 2022
@cspiel1 cspiel1 marked this pull request as ready for review May 23, 2022 07:18
@sreimers sreimers merged commit 3994550 into baresip:main Jun 1, 2022
@cspiel1 cspiel1 deleted the aubuf_decode branch June 2, 2022 06:18
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Jul 18, 2022
Still needs more testing for all the different options and plugins.

Changelog:

== 2.5.0 - 2022-07-01

== What's Changed
* audio: add optional decoding buffer by @cspiel1 in baresip/baresip#1842
* audio: RX filter thread needs separate sampv buffer by @cspiel1 in baresip/baresip#1879
* aufile: fix possible data race warning by @cspiel1 in baresip/baresip#1880
* audiounit,coreaudio: fix kAudioObjectPropertyElementMaster deprecation by @sreimers in baresip/baresip#1881
* av1: explicitly check for supported OBU types by @alfredh in baresip/baresip#1882
* audiounit/coreaudio: fix kAudioObjectPropertyElementMain by @sreimers in baresip/baresip#1885
* ci/build: bump macos min. sdk to 10.12 by @sreimers in baresip/baresip#1883
* ci: run only for pull requests and main branch by @sreimers in baresip/baresip#1887
* multicast: C11 mutex by @alfredh in baresip/baresip#1892
* dtls_srtp: enable ECC by default, remove RSA by @alfredh in baresip/baresip#1891
* ci/build: add ubuntu 22.04 by @sreimers in baresip/baresip#1890
* test: add check for memory leaks by @sreimers in baresip/baresip#1896
* stream,metric: RX real-time - make metric thread-safe by @cspiel1 in baresip/baresip#1895
* Cmake findre by @alfredh in baresip/baresip#1893
* test: wait for both audio and video to be established by @alfredh in baresip/baresip#1903
* docs: remove old TODO file by @alfredh in baresip/baresip#1902
* audio: fixed check for aubuf started flag by @cspiel1 in baresip/baresip#1904
* use new mutex interface by @cspiel1 in baresip/baresip#1905
* audio: make rx.filtl thread-safe by @cspiel1 in baresip/baresip#1897
* audio: allocate correct buffer size for static auplay srate by @cspiel1 in baresip/baresip#1906
* Pulseaudio Async Interface Module by @cHuberCoffee in baresip/baresip#1907
* Do not destroy register client when it is unregistered by @juha-h in baresip/baresip#1908
* Two spaces are required after email address by @juha-h in baresip/baresip#1909
* cmake: add alsa module by @alfredh in baresip/baresip#1910
* cmake: fix static openssl and thread linking by @sreimers in baresip/baresip#1911
* In start_registering, create register clients if reg list is empty by @juha-h in baresip/baresip#1913
* ctrl_dbus: use new thread and mtx interface by @cspiel1 in baresip/baresip#1916
* cmake: add pulse and pulse_async module by @cHuberCoffee in baresip/baresip#1919
* Un-subscribe mwi at un-register by @juha-h in baresip/baresip#1918
* call: update media on session progress. by @RobertMi21 in baresip/baresip#1922
* ctrl_dbus send event in main thread by @cspiel1 in baresip/baresip#1921
* uag: add timestamps to SIP trace by @cspiel1 in baresip/baresip#1914
* main: fix open timers check by @sreimers in baresip/baresip#1925
* cmake: add account module by @alfredh in baresip/baresip#1926

---

== 2.4.0 - 2022-06-01

== What's Changed
* mulitcast unmute bad quality by @cspiel1 in baresip/baresip#1821
* menu ringback for parallel call by @cspiel1 in baresip/baresip#1827
* multicast: support error code EAGAIN of jbuf_get() by @cspiel1 in baresip/baresip#1832
* use RTP clock rate for timestamp calculation by @cspiel1 in baresip/baresip#1834
* av1 obu by @alfredh in baresip/baresip#1835
* av1 packetizer by @alfredh in baresip/baresip#1836
* av1: depacketizer by @alfredh in baresip/baresip#1837
* Disabled debug statement by @juha-h in baresip/baresip#1838
* h264: move from rem to re by @sreimers in baresip/baresip#1839
* ua: send new event UA_EVENT_CREATE at successful ua allocation by @cHuberCoffee in baresip/baresip#1840
* evdev: fix wrong ioctl size by @sreimers in baresip/baresip#1843
* aufile: ausrc_prm has to be copied when source is allocated by @cspiel1 in baresip/baresip#1844
* conf: missing pointer initialization found by clang analyzer by @cspiel1 in baresip/baresip#1845
* mk/modules: fix omx RPI detection by @sreimers in baresip/baresip#1847
* auconv: add auconv_to_float (fixes #1833) by @alfredh in baresip/baresip#1849
* avfilter: migrate to C11 mutex by @alfredh in baresip/baresip#1850
* avformat: C11 mutex by @alfredh in baresip/baresip#1851
* selfview: C11 mutex by @alfredh in baresip/baresip#1852
* audio: C11 mutex by @alfredh in baresip/baresip#1853
* metric: C11 mutex by @alfredh in baresip/baresip#1854
* play: C11 mutex by @alfredh in baresip/baresip#1855
* dns: add query cache by @sreimers in baresip/baresip#1848
* video: C11 mutex by @alfredh in baresip/baresip#1856
* aufile: C11 threads by @alfredh in baresip/baresip#1858
* audio: add more locking by @alfredh in baresip/baresip#1857
* aufile/play: fix run data race by @sreimers in baresip/baresip#1859
* mc: multicast receiver enable state fix by @cHuberCoffee in baresip/baresip#1861
* audio: C11 thread by @alfredh in baresip/baresip#1860
* av1: add packetize handler by @alfredh in baresip/baresip#1865
* net/net_debug: add default route hint by @sreimers in baresip/baresip#1864
* ice: fix local prio calculation by @sreimers in baresip/baresip#1863
* avformat: open codec if not passthrough by @alfredh in baresip/baresip#1866
* dtls_srtp: Minor whitespace fix by @robert-scheck in baresip/baresip#1870
* vp8: add packetize handler by @alfredh in baresip/baresip#1868
* vp9: add packetizer by @alfredh in baresip/baresip#1871
* debug_cmd: support absolute path for command aufileinfo by @cspiel1 in baresip/baresip#1875
* event: add diverter URI to UA event by @cspiel1 in baresip/baresip#1876
* aufileinfo with synchronous response by @cspiel1 in baresip/baresip#1877

**Full Changelog**: baresip/baresip@v2.3.0...v2.4.0

---

== [2.3.0] - 2022-05-01

== What's Changed
* mc: multicast mute function by @cHuberCoffee in baresip/baresip#1805
* mc: reject incoming call if high prio multicast is received by @cHuberCoffee in baresip/baresip#1804
* mc: mcplayer stream fade-out and fade-in by @cHuberCoffee in baresip/baresip#1802
* clean_number now will remove all non-digit chars by @mbattista in baresip/baresip#1806
* Workflows cmakelint by @alfredh in baresip/baresip#1808
* ccheck: check all CMakeLists.txt files by @sreimers in baresip/baresip#1810
* mk: remove win32 MSVC project files by @alfredh in baresip/baresip#1811
* cmake: add modules by @sreimers in baresip/baresip#1812
* ajb,aubuf: timestamp is given in [us] by @cspiel1 in baresip/baresip#1809
* call: allow optional leading space in SIP INFO for dtmf-relay by @thomas-karl in baresip/baresip#1814
* conf: add fs_file_extension() by @alfredh in baresip/baresip#1816
* Updated debian version by @juha-h in baresip/baresip#1817
* pulse: fix timestamp integer overrun for arm by @cspiel1 in baresip/baresip#1818
* fix audio multicast artefacts by @cspiel1 in baresip/baresip#1819
* audio: flush aubuf if ssrc changes by @cspiel1 in baresip/baresip#1822
* Debian control dependency update by @juha-h in baresip/baresip#1823
* pulse: support restart of pulseaudio during stream by @cspiel1 in baresip/baresip#1824
* version 2.3.0 by @alfredh in baresip/baresip#1826

== New Contributors
* @thomas-karl made their first contribution in baresip/baresip#1814

---

== [2.0.2] - 2022-04-09

== What's Changed
* Added API function call_diverteruri by @juha-h in baresip/baresip#1780
* Avoid undeclared 'CLOCK_REALTIME' on RHEL/CentOS 7 (fixes #1781) by @robert-scheck in baresip/baresip#1782
* audio: add lock in audio_send_digit by @GGGO in baresip/baresip#1786
* vumeter: use new auframe_level() by @sreimers in baresip/baresip#1788
* reg.c: use already declared acc by @GGGO in baresip/baresip#1789
* aubuf adaptive jitter buffer by @cspiel1 in baresip/baresip#1784
* multicast set aubuf silence by @cspiel1 in baresip/baresip#1791
* ccheck: fix line number in error print by @cspiel1 in baresip/baresip#1793
* test: check the correct stream in UA_EVENT_CALL_MENC by @alfredh in baresip/baresip#1794
* audio: missing lock around stream_send by @GGGO in baresip/baresip#1796
* docs: remove obsolete jitter_buffer_wish from config example by @cspiel1 in baresip/baresip#1798
* Multicast jbuf and aubuf changes by @cHuberCoffee in baresip/baresip#1797
* uag: uag_hold_resume() should not return err if there is no call to hold by @cspiel1 in baresip/baresip#1799
* stream: remove mbuf_get_left check in rtp_handler by @GGGO in baresip/baresip#1801
* cmake: preliminary support by @alfredh in baresip/baresip#1800

== New Contributors
* @GGGO made their first contribution in baresip/baresip#1786

---

== [2.0.1] - 2022-03-27

=== What's Changed
* audio: fix rx_thread (adaptive jitter buffer) by @sreimers in baresip/baresip#1769
* test: init fixture by @alfredh in baresip/baresip#1772
* test: refactoring of test_account_uri_complete by @alfredh in baresip/baresip#1773
* mk: check also if extensions/XShm.h is present by @cspiel1 in baresip/baresip#1774
* menu: support custom SIP headers by @cspiel1 in baresip/baresip#1775
* menu: use new sdp_dir_decode by @cspiel1 in baresip/baresip#1776
* menu: avoid multiple hash entries with same key by @cspiel1 in baresip/baresip#1777
* menu: support audio file config value "none" by @cspiel1 in baresip/baresip#1778
* intercom: add video preview call by @cspiel1 in baresip/baresip#1779

---

== [2.0.0] - 2022-03-11

=== What's Changed
* debug_cmd: use module_event() for aufileinfo events by @cspiel1 in baresip/baresip#1345
* multicast: use module_event() for sending events by @cspiel1 in baresip/baresip#1346
* ctrl_dbus: use module_event() to send exported event by @cspiel1 in baresip/baresip#1347
* ua,call: add CALL_EVENT_OUTGOING by @cspiel1 in baresip/baresip#1348
* GTK caller history by @mbattista in baresip/baresip#1350
* Convert FRITZ!Box XML phone book into Baresip contacts by @robert-scheck in baresip/baresip#1382
* menu: play ringtone on audio_alert device by @cspiel1 in baresip/baresip#1396
* menu: use str_isset() for command parameter by @cspiel1 in baresip/baresip#1397
* dtls_srtp: use elliptic curve cryptography by @cHuberCoffee in baresip/baresip#1385
* Support for s16 playback in jack. Needed for play tones by @srperens in baresip/baresip#1399
* Check that account ;sipnat param has valid value by @juha-h in baresip/baresip#1401
* Tls sipcert per acc by @cHuberCoffee in baresip/baresip#1376
* Vidsrc add packet handler by @alfredh in baresip/baresip#1402
* ToS for video and sip by @cspiel1 in baresip/baresip#1393
* account: add accounts parameter to force media address family by @cspiel1 in baresip/baresip#1395
* Selective early media by @cspiel1 in baresip/baresip#1398
* ua,uag: split ua.c and uag.c by @cspiel1 in baresip/baresip#1349
* Account media af template by @cspiel1 in baresip/baresip#1406
* account: add missing client certificate parameter to template by @cHuberCoffee in baresip/baresip#1408
* account: update answermode values in template by @cspiel1 in baresip/baresip#1405
* menu: command uafind raises UA to head by @cspiel1 in baresip/baresip#1407
* ctrl_dbus: fix possible memleak on failed initialization by @cspiel1 in baresip/baresip#1410
* video passthrough by @alfredh in baresip/baresip#1418
* menu: enable auto answer calls also for command dialdir by @cspiel1 in baresip/baresip#1412
* menu: add command for settings media local direction by @cspiel1 in baresip/baresip#1413
* Accounts addr params by @cspiel1 in baresip/baresip#1414
* Accounts example cleanup by @cspiel1 in baresip/baresip#1415
* menu,call: fix hangup for outgoing call by @cspiel1 in baresip/baresip#1417
* multicast: add source and player API calls by @cHuberCoffee in baresip/baresip#1403
* menu: add command /uareg by @alfredh in baresip/baresip#1421
* menu: return complete URI for commands dial,dialdir by @cspiel1 in baresip/baresip#1424
* menu: in command dialdir call uag_find_requri() with uri by @cspiel1 in baresip/baresip#1425
* gst: replace variable length array (buf) with mem_zalloc by @sreimers in baresip/baresip#1426
* menu: avoid possible memleaks for dial/dialdir commands by @cspiel1 in baresip/baresip#1430
* uag: use local cuser for selecting user-agent (#1433) by @cspiel1 in baresip/baresip#1434
* Work on Intercom module by @cspiel1 in baresip/baresip#1432
* Attended Transfer on GTK by @mbattista in baresip/baresip#1435
* Update README.md with configuration suggestion by @webstean in baresip/baresip#1438
* README fixes by @juha-h in baresip/baresip#1440
* Accounts examples and template by @cspiel1 in baresip/baresip#1441
* serreg: use a timer for registration restart by @cspiel1 in baresip/baresip#1445
* gst: audio playback not correct for some WAV files. by @RobertMi21 in baresip/baresip#1442
* Working on intercom (ringtone override) by @cspiel1 in baresip/baresip#1436
* Use line number 0 if user did not provide any line number by @negbie in baresip/baresip#1451
* AMR Bandwidth Efficient mode support by @srperens in baresip/baresip#1423
* Working on Intercom (menu: allow other modules to reject a call) by @cspiel1 in baresip/baresip#1437
* auframe: add samplerate and channels by @sreimers in baresip/baresip#1452
* account: comment out very basic example in template by @cspiel1 in baresip/baresip#1458
* call answer media dir by @cspiel1 in baresip/baresip#1449
* Account auto answer beep by @cspiel1 in baresip/baresip#1461
* serreg: unregister correct User-Agents on registration failure by @cspiel1 in baresip/baresip#1462
* mk: enable auto-detect of av1 module by @alfredh in baresip/baresip#1463
* ctrl dbus makefile depends by @cspiel1 in baresip/baresip#1457
* stream: check if media is present before enabling the RTP timeout by @cspiel1 in baresip/baresip#1465
* ctrl_dbus: generate dbus code and documentation in makefile by @cspiel1 in baresip/baresip#1456
* auframe: always set srate and ch by @janh in baresip/baresip#1468
* auto answer beep per alert info URI by @cspiel1 in baresip/baresip#1466
* auframe: move to rem by @sreimers in baresip/baresip#1470
* mixminus: add conference feature by @sreimers in baresip/baresip#1411
* vidbridge: check vidbridge_disp_display args fixes segfault by @sreimers in baresip/baresip#1471
* gst: fixed some memory leaks by @RobertMi21 in baresip/baresip#1476
* ua, menu: move auto answer delay handling to menu (#1474) by @cspiel1 in baresip/baresip#1475
* ua,menu: move handling of ANSWERMODE_AUTO to menu (#1474) by @cspiel1 in baresip/baresip#1478
* ausine: support for multiple samplerates by @alfredh in baresip/baresip#1479
* account: fix IPv6 only URI for account_uri_complete() by @cspiel1 in baresip/baresip#1472
* ilbc: remove deprecated module by @alfredh in baresip/baresip#1483
* aubridge/device: remove unused sampv_out (old resample code) by @sreimers in baresip/baresip#1484
* pkg-config version check by @sreimers in baresip/baresip#1481
* mk: support more locations for libre.pc and librem.pc by @cspiel1 in baresip/baresip#1486
* net: remove unused domain by @alfredh in baresip/baresip#1489
* audio: fix aufilt_setup update handling by @sreimers in baresip/baresip#1498
* SIP redirect callbackfunction by @cHuberCoffee in baresip/baresip#1495
* add secure websocket tls context by @sreimers in baresip/baresip#1499
* test: add stunuri by @alfredh in baresip/baresip#1503
* turn: refactoring, add compv by @alfredh in baresip/baresip#1505
* fmt: add string to bool function by @cspiel1 in baresip/baresip#1501
* mk: check glib-2.0 at least like in ubuntu 18.04 by @cspiel1 in baresip/baresip#1507
* registration fixes by @cspiel1 in baresip/baresip#1510
* uag,menu: add commands to enable/disable UDP/TCP/TLS by @cspiel1 in baresip/baresip#1502
* config,audio: add setting audio.telev_pt by @cspiel1 in baresip/baresip#1509
* stream: fix telephone event (#1494) by @cspiel1 in baresip/baresip#1506
* Fix I2S compile error, use auframe by @andreaswatch in baresip/baresip#1512
* ci/tools: fix pylint by @sreimers in baresip/baresip#1515
* config: not all audio config was printed by @cspiel1 in baresip/baresip#1516
* net: replace network_if_getname with net_if_getname by @sreimers in baresip/baresip#1518
* account: add setting audio payload type for telephone-event by @cspiel1 in baresip/baresip#1517
* uag,menu: simplify transport enable/disable and support also ws/wss by @cspiel1 in baresip/baresip#1514
* rst: remove deprecated module by @alfredh in baresip/baresip#1519
* turn: add TCP and TLS transports by @alfredh in baresip/baresip#1520
* speex_pp: remove deprecated module by @alfredh in baresip/baresip#1521
* call: allow video calls by only rejecting a call without any common codecs by @cHuberCoffee in baresip/baresip#1523
* multicast: add missing join for multicast addresses by @cHuberCoffee in baresip/baresip#1524
* confg,uag: rework on sip_transports setting by @cspiel1 in baresip/baresip#1525
* ua: check if peer is capable of video for early video by @cHuberCoffee in baresip/baresip#1526
* mqtt/subscribe: replace fixed command buf and increase response size by @sreimers in baresip/baresip#1527
* mqtt: add reconnect handling (lost broker connection) by @sreimers in baresip/baresip#1528
* event: increase module_event buffer size by @sreimers in baresip/baresip#1532
* mqtt/subscribe: use safe odict_string to prevent crashes by @sreimers in baresip/baresip#1534
* stream: add stream_set_label by @alfredh in baresip/baresip#1537
* Makefile dependency check improvements by @sreimers in baresip/baresip#1531
* account: add enable/disable flag for video by @cspiel1 in baresip/baresip#1536
* audio: use account specific audio telev pt correctly by @cspiel1 in baresip/baresip#1542
* net: add missing HAVE_INET6 by @cspiel1 in baresip/baresip#1543
* account: remove unused API function for video enable by @cspiel1 in baresip/baresip#1544
* gst: changed log level for end of file message by @RobertMi21 in baresip/baresip#1548
* multicast: add new configurable multicast TTL config parameter by @cHuberCoffee in baresip/baresip#1545
* call: fix early video capability check (wrong SDP direction checked) by @cHuberCoffee in baresip/baresip#1549
* audio: catch end of file message in ausrc error handler (#1539) by @RobertMi21 in baresip/baresip#1550
* menu: added stopringing command by @RobertMi21 in baresip/baresip#1551
* stream: remove obsolete rx.jbuf_started by @cspiel1 in baresip/baresip#1552
* ua: downgrade level of message "ua: using best effort AF" by @viordash in baresip/baresip#1553
* outgoing calls early callid by @cspiel1 in baresip/baresip#1547
* audio: changed log level for ausrc error handler messages by @RobertMi21 in baresip/baresip#1554
* SIP default protocol by @cspiel1 in baresip/baresip#1538
* serreg: fix server selection in case all server were unavailable by @cHuberCoffee in baresip/baresip#1557
* multicast: fix missing unlock by @alfredh in baresip/baresip#1559
* config: replace strcpy by saver re_snprintf (#1558) by @cspiel1 in baresip/baresip#1560
* multicast: fix coverity scan by @alfredh in baresip/baresip#1561
* odict: hide struct odict_entry by @sreimers in baresip/baresip#1562
* ctrl_dbus: use mqueue to trigger processing of command in remain thread by @cspiel1 in baresip/baresip#1565
* multicast,config: add separate jitter buffer configuration by @cspiel1 in baresip/baresip#1566
* ua: emit CALL_CLOSED event when user agent is deleted by @cspiel1 in baresip/baresip#1564
* core: move stream_enable_rtp_timeout to api by @sreimers in baresip/baresip#1569
* stream: add mid sdp attribute by @alfredh in baresip/baresip#1570
* rtpext: change length type to size_t by @alfredh in baresip/baresip#1573
* avcodec: remove old backwards compat wrapper by @alfredh in baresip/baresip#1575
* main: Added option (-a) to set the ua agent string. by @RobertMi21 in baresip/baresip#1576
* menu fix tones for parallel outgoing calls by @cspiel1 in baresip/baresip#1577
* Fix win32 by @viordash in baresip/baresip#1579
* Fix static analyzer warnings by @viordash in baresip/baresip#1580
* call: added auto dtmf mode by @RobertMi21 in baresip/baresip#1583
* RTP inbound telephone events should not lead to packet loss by @cspiel1 in baresip/baresip#1581
* Running tests in a win32 project  by @viordash in baresip/baresip#1585
* stream: wrong media direction after setting stream to hold by @RobertMi21 in baresip/baresip#1587
* move network check to module by @cspiel1 in baresip/baresip#1584
* serreg: do not ignore returned errors of ua_register() by @cspiel1 in baresip/baresip#1589
* Bundle media mux by @alfredh in baresip/baresip#1588
* mixausrc: no warnings flood when sampc changes by @cspiel1 in baresip/baresip#1595
* ua: select laddr with route to SDP offer address by @cspiel1 in baresip/baresip#1590
* net,uag: allow incoming peer-to-peer calls with user@domain by @cspiel1 in baresip/baresip#1591
* uag: in uag_reset_transp() select laddr with route to SDP raddr by @cspiel1 in baresip/baresip#1592
* uag: exit if transport could not be added by @cspiel1 in baresip/baresip#1593
* avcodec: use const AVCodec by @alfredh in baresip/baresip#1602
* module: deprecate module_tmp by @alfredh in baresip/baresip#1600
* test: use ausine as audio source by @alfredh in baresip/baresip#1601
* Selftest fakevideo by @alfredh in baresip/baresip#1604
* When adding local address, check that it has not been added already by @juha-h in baresip/baresip#1606
* start without network by @cspiel1 in baresip/baresip#1607
* config: add netroam module by @sreimers in baresip/baresip#1608
* multicast: allow any port number for sender and receiver by @cHuberCoffee in baresip/baresip#1609
* netroam: add netlink immediate network change detection by @cspiel1 in baresip/baresip#1612
* remove uag transp rm (#1611) by @cspiel1 in baresip/baresip#1616
* net dns srv get by @cspiel1 in baresip/baresip#1615
* move calls to stream_start_rtcp to call.c by @alfredh in baresip/baresip#1617
* video: null pointer check for the display handler by @cspiel1 in baresip/baresip#1621
* audio: add lock by @alfredh in baresip/baresip#1619
* ua: select proper af and laddr for outgoing IP calls by @cspiel1 in baresip/baresip#1618
* audio: lock stream by @alfredh in baresip/baresip#1622
* test: replace mock ausrc with ausine by @alfredh in baresip/baresip#1623
* menu ringback session progress by @cspiel1 in baresip/baresip#1625
* New module providing webrtc aec mobile mode filter by @juha-h in baresip/baresip#1626
* uag: respect setting sip_listen (#1627) by @cspiel1 in baresip/baresip#1628
* select laddr for SDP with respect to net_interface by @cspiel1 in baresip/baresip#1630
* stream: do not start audio during early-video by @cspiel1 in baresip/baresip#1629
* remove struct media_ctx by @alfredh in baresip/baresip#1632
* ci: add libwebrtc-audio-processing-dev (module webrtc_aec) by @sreimers in baresip/baresip#1635
* auconv: new module for audio format conversion by @alfredh in baresip/baresip#1634
* Support for IPv6 link local address for streams by @cspiel1 in baresip/baresip#1624
* call: check if address family is valid also for video stream by @cspiel1 in baresip/baresip#1636
* audio: pass pointer to tx->ausrc_prm instead of local variable by @cspiel1 in baresip/baresip#1637
* menu: add an event for call transfer by @cspiel1 in baresip/baresip#1641
* netroam: error handling for reset transport by @cspiel1 in baresip/baresip#1642
* mk: use CC_TEST for auto detect modules by @sreimers in baresip/baresip#1647
* test: use dtls_srtp.so module instead of mock by @alfredh in baresip/baresip#1646
* stream: create jbuf only if use_rtp is set by @cspiel1 in baresip/baresip#1648
* multicast: fix memleak in player destructor by @cspiel1 in baresip/baresip#1653
* stream: split up sender/receiver by @alfredh in baresip/baresip#1654
* set sdp laddr to SIP src address by @cspiel1 in baresip/baresip#1645
* serreg fix fallback accounts by @cspiel1 in baresip/baresip#1660
* ctrl_dbus: print command with the warning by @cspiel1 in baresip/baresip#1662
* call: new transfer call state to handle transfered calls correctly by @cHuberCoffee in baresip/baresip#1658
* serreg: prevent fast register retries if offline by @cspiel1 in baresip/baresip#1663
* av1: update packetization code by @alfredh in baresip/baresip#1657
* call: magic check in sipsess_desc_handler() by @cspiel1 in baresip/baresip#1664
* alsa: use snd_pcm_drop instead of snd_pcm_drain by @sreimers in baresip/baresip#1669
* Increased debian compat level to 10 by @juha-h in baresip/baresip#1667
* conf: fix conf_configure_buf() config parse by @sreimers in baresip/baresip#1666
* stream flush rtp socket by @cspiel1 in baresip/baresip#1671
* Transfer like rfc5589 by @cHuberCoffee in baresip/baresip#1678
* GTK: mem_derefer call earlier by @mbattista in baresip/baresip#1682
* netroam: add fail counter and event by @cspiel1 in baresip/baresip#1685
* Added API functions stream_metric_get_(tx|rx)_bitrate by @juha-h in baresip/baresip#1686
* Multicast new functions by @cHuberCoffee in baresip/baresip#1687
* avcodec: Enable pass-through for more codecs by @abrodkin in baresip/baresip#1692
* menu: filter for the correct call state in menu_selcall by @cHuberCoffee in baresip/baresip#1693
* test: fix warning on mingw32 by @alfredh in baresip/baresip#1696
* menu: Play ringback in play device by @myrkr in baresip/baresip#1698
* sip: add optional TCP source port by @cspiel1 in baresip/baresip#1695
* rtpext: change id unsigned -> uint8_t by @alfredh in baresip/baresip#1701
* ci: add mingw build test by @sreimers in baresip/baresip#1700
* test: use mediaenc srtp instead of mock by @alfredh in baresip/baresip#1702
* test: remove mock mediaenc by @alfredh in baresip/baresip#1704
* descr: add session_description by @alfredh in baresip/baresip#1706
* use fs_isfile() by @alfredh in baresip/baresip#1709
* stream: only call rtp_clear for audio by @alfredh in baresip/baresip#1710
* checks if call is available before calling call, closes #1708 by @mbattista in baresip/baresip#1712
* conf: add conf_loadfile by @alfredh in baresip/baresip#1713
* ice: remove ice_mode by @sreimers in baresip/baresip#1714
* audio: use auframe in encode_rtp_send, ref #1699 by @alfredh in baresip/baresip#1715
* Increased account's max video codec count from four to eight by @juha-h in baresip/baresip#1717
* gtk: Avoid duplicate call_timer registration by @myrkr in baresip/baresip#1719
* Attended call transfer by @cHuberCoffee in baresip/baresip#1718
* menu: exclude given call when searching for active call by @cspiel1 in baresip/baresip#1721
* menu: play call waiting tone on audio_player device by @cspiel1 in baresip/baresip#1722
* ci/build/macos: link ffmpeg@4 by @sreimers in baresip/baresip#1725
* module auresamp by @cspiel1 in baresip/baresip#1705
* test: remove h264 testcode, already in retest by @alfredh in baresip/baresip#1726
* h265: move from avcodec to rem by @alfredh in baresip/baresip#1728
* mc: send more details at receiver - timeout event by @cHuberCoffee in baresip/baresip#1731
* h265: move packetizer from avcodec to rem by @alfredh in baresip/baresip#1732
* FFmpeg 5 by @sreimers in baresip/baresip#1734
* Fixing clang ThreadSanitizer warnings by @sreimers in baresip/baresip#1730
* auresamp: replace anonymous union for pre C11 compilers by @cspiel1 in baresip/baresip#1738
* aufile: align naming of alloc handlers by @sreimers in baresip/baresip#1739
* auresamp fixes by @cspiel1 in baresip/baresip#1741
* mc: new priority handling with multicast state by @cHuberCoffee in baresip/baresip#1740
* remove support for Solaris platform by @alfredh in baresip/baresip#1745
* Allow hanging up call that has not been ACKed yet by @juha-h in baresip/baresip#1747
* Multicast identical condition and fmt string fix by @cHuberCoffee in baresip/baresip#1751
* audio: allocate aubuf before ausrc_alloc (fixes data race) by @sreimers in baresip/baresip#1748
* call: send supported header for 200 answering/ok by @cHuberCoffee in baresip/baresip#1752
* event: check if media line is present for encoding audio/video dir by @cspiel1 in baresip/baresip#1754
* Removed unused variable in modules/webrtc_aec/aec.cpp by @juha-h in baresip/baresip#1756
* audio use module auconv by @cspiel1 in baresip/baresip#1742
* test: use aufile module by @alfredh in baresip/baresip#1757
* x11grab: remove module, use avformat.so instead by @alfredh in baresip/baresip#1758
* audio: declare iterator inside for-loop (C99) by @alfredh in baresip/baresip#1759
* aufile: set run=true before write thread starts (#1727) by @cspiel1 in baresip/baresip#1762
* Added new API function call_supported() and used it in menu module by @juha-h in baresip/baresip#1761
* aufile: separate aufile_src.c from aufile.c by @cspiel1 in baresip/baresip#1765
* ctrl_dbus: fix possible data race (#1727) by @cspiel1 in baresip/baresip#1764
* menu select other call on hangup by @cspiel1 in baresip/baresip#1763
* event: encode also combined media direction by @cspiel1 in baresip/baresip#1766

== New Contributors
* @srperens made their first contribution in baresip/baresip#1399
* @negbie made their first contribution in baresip/baresip#1451
* @andreaswatch made their first contribution in baresip/baresip#1512
* @viordash made their first contribution in baresip/baresip#1553
* @abrodkin made their first contribution in baresip/baresip#1692
* @myrkr made their first contribution in baresip/baresip#1698

---
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants