Skip to content

Commit

Permalink
Prepare to release 0.3.0
Browse files Browse the repository at this point in the history
  • Loading branch information
gavv committed Nov 17, 2023
1 parent d30b4c5 commit 11f1fe8
Show file tree
Hide file tree
Showing 7 changed files with 146 additions and 7 deletions.
2 changes: 1 addition & 1 deletion docs/man/roc-copy.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "ROC-COPY" "1" "2023" "Roc Toolkit 0.2" "Roc Toolkit"
.TH "ROC-COPY" "1" "2023" "Roc Toolkit 0.3" "Roc Toolkit"
.SH NAME
roc-copy \- copy local audio
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion docs/man/roc-recv.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "ROC-RECV" "1" "2023" "Roc Toolkit 0.2" "Roc Toolkit"
.TH "ROC-RECV" "1" "2023" "Roc Toolkit 0.3" "Roc Toolkit"
.SH NAME
roc-recv \- receive real-time audio
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion docs/man/roc-send.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "ROC-SEND" "1" "2023" "Roc Toolkit 0.2" "Roc Toolkit"
.TH "ROC-SEND" "1" "2023" "Roc Toolkit 0.3" "Roc Toolkit"
.SH NAME
roc-send \- send real-time audio
.SH SYNOPSIS
Expand Down
139 changes: 139 additions & 0 deletions docs/sphinx/development/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,145 @@ Changelog
Tests
Documentation
Version 0.3.0 (Nov XX, 2023)
============================

Features
--------

* support lower latencies, up to 7ms in our tests
* add new clock synchronization profile (``responsive``) suitable for lower latencies
* major improvements in C API (network-less API, metrics API, many small improvements)
* more flexible packet encoding configuration (currently available only via C API):

* more channel layouts: mono, stereo, multitrack (up to 1024 channels)
* custom smaple rate

* improve scaling precision of ``speex`` resampler
* implement new ``speexdec`` resampler, combining SpeexDSP for base rate conversion and decimation for clock drift compensation, which has better scaling precision than ``speex`` and is very cheap when base rates are equal

C API
-----

* implement new encoder / decoder API (``roc_sender_encoder`` and ``roc_receiver_decoder``), which is network-less version of sender / receiver API (encoder produces packets, decoder consumes packets, and user is responsible for delivering packets)

* implement initial metrics API:

* add ``roc_session_metrics``, ``roc_receiver_metrics``, and ``roc_sender_metrics`` structs (currently they support ``niq_latency`` and ``e2e_latency``)
* add ``roc_sender_query()``, ``roc_receiver_query()``, ``roc_sender_encoder_query()``, ``roc_receiver_decoder_query()`` to query metrics

* improvements in slot support:

* support deleting slots on fly using ``roc_sender_unlink()`` and ``roc_receiver_unlink()``
* refine error handling rules: if error happens during slot configuration, slot is marked broken and excluded from pipeline, but needs manual removal by user
* slot identifiers are now arbitrary ``long long`` numbers (not necessary continuous)

* simplify receiver configuration:

* replace ``max_latency_overrun`` + ``max_latency_underrun`` with one parameter ``latency_tolerance``
* rename ``broken_playback_timeout`` to ``choppy_playback_timeout``
* remove ``breakage_detection_window`` (automatically derive it from ``choppy_playback_timeout``)

* simplify interface configuration:

* introduce ``roc_interface_config`` struct, which holds all per-interface options
* replace ``roc_sender_set_outgoing_address()`` and ``roc_sender_set_reuseaddr()`` with ``roc_sender_configure()`` (which uses ``roc_interface_config``)
* replace ``roc_receiver_set_multicast_group()`` and ``roc_receiver_set_reuseaddr()`` with ``roc_receiver_configure()`` (which uses ``roc_interface_config``)

* rework encoding configuration:

* rename ``roc_frame_encoding`` enum to ``roc_format`` (in API, "encoding" now means format + rate + channels, which is now true for both frame encoding and packet encoding)
* add ``roc_media_encoding`` struct which defines format + rate + channels
* use ``roc_media_encoding`` instead of ``frame_encoding`` + ``frame_sample_rate`` + ``frame_channels`` in ``roc_sender_config`` and ``roc_receiver_config``
* rename ``roc_channel_set`` to ``roc_channel_layout``
* remove ``packet_sample_rate`` and ``packet_channels`` (these parameters are now derived from ``packet_encoding``)
* if ``packet_encoding`` is not set, automatically choose one that matches ``frame_encoding`` (among built-in and registered packet encodings)

* support channel layouts:

* ``ROC_CHANNEL_LAYOUT_MONO``
* ``ROC_CHANNEL_LAYOUT_STEREO``
* ``ROC_CHANNEL_LAYOUT_MULTITRACK`` - up to 1024 channels without special meaning

* support packet encodings:

* ``ROC_PACKET_ENCODING_AVP_L16_MONO``
* ``ROC_PACKET_ENCODING_AVP_L16_STEREO``

* support registering custom packet encodings using ``roc_context_register_encoding()``

* add ``roc_clock_sync_backend`` parameter, with two values:

* ``ROC_CLOCK_SYNC_BACKEND_DISABLE`` - do not adjust receiver clock
* ``ROC_CLOCK_SYNC_BACKEND_NIQ`` - adjust receiver clock based on network incoming queue size (current behavior)

* add ``roc_clock_sync_profile`` parameter with three values:

* ``ROC_CLOCK_SYNC_PROFILE_GRADUAL`` - adjust clock smoothly (old behavior, good for high jitter and high latency)
* ``ROC_CLOCK_SYNC_PROFILE_RESPONSIVE`` - adjust clock smoothly (good for low jitter and low latency)
``ROC_CLOCK_SYNC_PROFILE_DEFAULT`` - select profile automatically based on ``target_latency``

* rename ``ROC_CLOCK_EXTERNAL`` / ``ROC_CLOCK_INTERNAL`` to ``ROC_CLOCK_SOURCE_EXTERNAL`` / ``ROC_CLOCK_SOURCE_INTERNAL``

* add ``ROC_RESAMPLER_BACKEND_SPEEXDEC`` backend

* add ``ROC_VERSION`` and ``ROC_VERSION_CODE()``

Bindings
--------

* add script for generating enums in bindings repos (java, go)

Command-line tools
------------------

* replace ``--min-latency`` + ``--max-latency`` with ``--latency-tolerance``
* remove ``--no-resampling`` (use ``--clock-backend=disable`` instead)
* add ``--clock-backend`` and ``--clock-profile``
* rename ``--np-timeout`` to ``--no-play-timeout``
* replace ``--bp-timeout`` + ``--bp-window`` with ``--choppy-play-timeout``
* rename ``--beeping`` to ``--beep``
* rename ``roc-conv`` tool to ``roc-copy``
* list supported endpoint schemes in ``--print-supported``

Bug fixes
---------

* fix NTP 2036 year problem
* fix latency reported in logs

Internals
---------

* change default packet length from ``7ms`` to ``2.5ms``
* get rid of hard-coded frame length in pipeline components (now they work with any requested frame length), which allows to handle latencies lower than default frame length
* support capture timestamps (CTS) in packets and frames (based on RTCP + NTP) and forward them through the pipeline, needed for end-to-end latency calculation
* start work on calculation of end-to-end latency (overall delay from sender to receiver, including I/O and network)
* start work for automatic mapping between different channel layouts and orders (including mono, stereo, surround, and multitrack layouts)
* start work for reporting and forwarding error codes through the pipeline
* implement fast lock-free PRNG
* optimize task processing: process pipeline tasks in-place when they're scheduled from I/O thread, to avoid unnecessary delays
* improve memory protection:

* always employ memory poisoning in arenas and pools
* implement buffer overflow protection using canary guards in arenas and pools
* implement ownership checks in arenas and pools

* module ``roc_peer`` renamed to ``roc_node`` (because it now has non-peer nodes)

Build system
------------

* add ``--compiler-launcher`` scons option (may be used for ``ccache``)
* correctly handle ``--enable-debug-3rdparty`` for all dependencies

Documentation
-------------

* improve C API doxygen comments
* fix pulseaudio C API examples
* numerous improvements and updates in sphinx documentation

Version 0.2.5 (Jul 28, 2023)
============================

Expand Down
2 changes: 1 addition & 1 deletion docs/sphinx/development/maintainer_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ Then fast-forward ``master`` to ``develop``:
Creating release
================

Rename ``next`` milestone to ``v1.2.3`` and close it. Create new ``next`` milestone.
Rename ``next`` milestone to ``1.2.3`` and close it. Create new ``next`` milestone.

Add new release to :doc:`changelog page </development/changelog>`.

Expand Down
2 changes: 1 addition & 1 deletion rpm/roc-toolkit.spec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%undefine _disable_source_fetch

Name: roc-toolkit
Version: 0.2.5
Version: 0.3.0
Release: 1%{?dist}
Summary: Real-time audio streaming over the network
License: MPL-2.0 AND CECILL-C AND BSD
Expand Down
4 changes: 2 additions & 2 deletions src/public_api/include/roc/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ extern "C" {

/** Minor version component.
*/
#define ROC_VERSION_MINOR 2
#define ROC_VERSION_MINOR 3

/** Patch version component.
*/
#define ROC_VERSION_PATCH 5
#define ROC_VERSION_PATCH 0

/** Convert version triple to numeric version code.
* Version codes can be compared direcrly, e.g.:
Expand Down

0 comments on commit 11f1fe8

Please sign in to comment.