roc-toolkit (0.4.0) unstable; urgency=low

  [ Features ]
  * finish RTCP & XR support (gh-14, gh-674)
    * handle all reports from RFC 3550 and some XR reports
    * implement 2-way RTCP reports exchange
    * route packets to sessions according to SSRC and CNAME
    * support RTT calculation based on RTCP XR packets
    * improve packet validation
    * support packet padding
    * support RTCP multicast
  * support latency tuning and clock drift compensation on sender instead of
    receiver (gh-675)
  * implement backend for WAV files without external dependencies, useful in
    contrained environments (gh-576)
  * implement libsndfile backend for audio files (gh-246)

  [ C API ]
  * rework latency configuration, introduce concept of latency tuner, available
    on both sender and receiver (by default enabled on receiver and disabled on
    sender)
    * replace `roc_clock_sync_backend` with `roc_latency_tuner_backend`
    * replace `roc_clock_sync_profile` with `roc_latency_tuner_profile`
  * rework metrics API (gh-681)
    * replace `roc_session_metrics` with `roc_connection_metrics`
    * rework `roc_sender_metrics` and `roc_receiver_metrics`; connection metrics
      are now available on both sender and receiver
    * functions for querying metrics (`roc_sender_query()`,
      `roc_receiver_query()`, `roc_sender_encoder_query()`,
      `roc_receiver_decoder_query()`) are reworked and simplified
    * `niq_latency` is removed from API
  * support 2-way control packet exchange in codecs API (`roc_sender_encoder`
    and `roc_receiver_decoder`)
    * rename `roc_sender_encoder_push()` to `roc_sender_encoder_push_frame()`
    * rename `roc_sender_encoder_pop()` to `roc_sender_encoder_pop_packet()`
    * add `roc_sender_encoder_push_feedback_packet()`
    * rename `roc_receiver_decoder_push()` to
      `roc_receiver_decoder_push_packet()`
    * rename `roc_receiver_decoder_pop()` to `roc_receiver_decoder_pop_frame()`
    * add `roc_receiver_decoder_pop_feedback_packet()`
  * rename `roc_version_get()` to `roc_version_load()`

  [ Bindings ]
  * `generate_bindings.py` moved to separate repo (bindgen)

  [ Command-line tools ]
  * rework latency configuration:
    * rename `--sess-latency` to `--target-latency`
    * replace `--clock-backend` with `--latency-backend`
    * replace `--clock-profile` with `--latency-profile`
  * rename options:
    * `--packet-length` to `--packet-len`
    * `--packet-limit` to `--max-packet-size`
    * `--frame-length` to `--frame-len`
    * `--frame-limit` to `--max-frame-size`
  * support floats for sizes and durations (gh-654)
  * support `NO_COLOR` and `FORCE_COLOR` environment variables (gh-564)

  [ Applications ]
  * first release of virtual audio device for macOS (roc-vad)

  [ Bug fixes ]
  * fix routing of FEC packets in encoder/decoder API (`roc_sender_encoder` and
    `roc_receiver_decoder`)
  * fix segfault when roc-send input device omitted (gh-728)
  * fix work when `no_playback_timeout` is lower than `target_latency` (gh-657)
  * fix "unexpected already cancelled task" panic
  * properly handle allocation errors in `HeapArena`

  [ Portability ]
  * add Ubuntu 24.04 to CI (gh-634)
  * add macOS 14 (arm64) to CI
  * add OpenWrt with uCLibc and musl (MIPS32) to CI
  * fix build on Debian GNU/Hurd
  * improve handling of unknown unix-like platforms in scons

  [ Dependencies ]
  * new optional dependency: libsndfile, used in CLI tools (gh-246)

  [ Internals ]
  * support frame of different format in different parts of pipeline (gh-547)
  * continue work on configurable encoding (gh-608)
  * continue work on surround sound support (gh-86)
  * start work on configurable limits (gh-610)
  * improvements and refactoring in `roc_core`

  [ Build system ]
  * fix `--build-3rdparty` on macOS 14
  * fix static library on macOS (`libroc.a`); ensure that all object files have
    unique names
  * fix macos linker warnings about `-lc++`
  * fix build with macports installed; don't implicitly use brew if pkg-config
    is not from brew
  * fix openssl search
  * workaround for brew + pkg-config + openssl error on macOS
  * fix building old pulseaudio on clang 17

  [ Tests ]
  * improve tests for capture timestamps (CTS)
  * improve RTCP tests (in `roc_rtcp`, `roc_pipeline`, and `public_api`)
  * improve pipeline tests
  * add tests for metrics

  [ Documentation ]
  * document audio backends
  * document sponsored work

 -- Roc Streaming authors <roc@freelists.org>  Fri, 14 Jun 2024 00:00:00 +0000

roc-toolkit (0.3.0) unstable; urgency=low

  [ 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)
  * 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

 -- Roc Streaming authors <roc@freelists.org>  Wed, 22 Nov 2023 00:00:00 +0000

roc-toolkit (0.2.6) unstable; urgency=low

  [ Packaging ]
  * build debian packages on debian:bullseye
  * in debian packages, statically link all dependencies except `libc`,
    `libasound`, `libpulse`
  * ensure that packages are installable on debian:oldstable, debian:stable,
    ubuntu:20.04, ubuntu:22.04, ubuntu:latest

 -- Roc Streaming authors <roc@freelists.org>  Sun, 05 Nov 2023 00:00:00 +0000

roc-toolkit (0.2.5) unstable; urgency=low

  [ Bug fixes ]
  * fix byte order conversion

  [ Build system ]
  * fix compiler type detection when compiler is specified via `CC` or `CXX`
    variable
  * export symbols of dependencies built by `--build-3rdparty` when building
    static library (`libroc.a`), to avoid linker errors when using it

 -- Roc Streaming authors <roc@freelists.org>  Fri, 28 Jul 2023 00:00:00 +0000

roc-toolkit (0.2.4) unstable; urgency=low

  [ C API ]
  * always set `file` and `line` in `roc_log_message`

  [ Command-line tools ]
  * support PulseAudio sources in `roc-send`
  * support `--io-latency` option in `roc-send`

  [ Bug fixes ]
  * fix potential race
  * fix byte order detection on Android
  * do not write to log from shared library destructor
  * stop using user-provided log handler after entering shared library
    destructor

  [ Internals ]
  * improve logging
  * refactor scons scripts

  [ Build system ]
  * fix `--build-3rdparty=sox` when `sndio` is installed
  * fix `--build-3rdparty=google-benchmark` when there is `python3`, but no
    `python` in PATH
  * fix OpenSSL platform detection in `--build-3rdparty=openssl` when not cross-
    compiling
  * set Android API level to `21`
  * add `--macos-platform` and `--macos-arch` scons options
  * by default, set `--macos-platform` to current OS, to avoid linker warnings
    about incompatible macOS deployment targets
  * support building macOS universal binaries by providing multiple values for
    `--macos-arch`
  * propagate Android platform, macOS platform, and macOS architectures to
    `--build--3rdparty`
  * unexport all symbols except `roc_*` from `libroc.so` and `libroc.a` on
    Linux, and `libroc.dylib` on macOS
  * resolve `pkg-config` absolute path

  [ Documentation ]
  * minor updates

 -- Roc Streaming authors <roc@freelists.org>  Sat, 13 May 2023 00:00:00 +0000

roc-toolkit (0.2.3) unstable; urgency=low

  [ C API ]
  * add `roc_receiver_set_reuseaddr` and `roc_sender_set_reuseaddr`

  [ Command-line tools ]
  * add `--reuseaddr` to `roc-recv` and `roc-send`

  [ Bug fixes ]
  * fix formatting of endpoint URI with zero port
  * fix usage of multicast with RTCP in `roc-recv`

  [ Build system ]
  * add new dependency OpenSSL
  * fix work with SCons 4.5
  * exclude sox and libpulse from .pc file for libroc

  [ Packaging ]
  * add debian packages and publish them on github
  * add rpm packages spec

  [ Documentation ]
  * minor updates

 -- Roc Streaming authors <roc@freelists.org>  Thu, 09 Mar 2023 00:00:00 +0000

roc-toolkit (0.2.2) unstable; urgency=low

  [ C API ]
  * rename `roc_get_version` to `roc_version_get`

  [ Bug fixes ]
  * fix crash in `roc_log_set_handler` when argument is NULL

  [ Build system ]
  * fix build on recent Android NDK
  * install `.pc` file to `<libdir>/pkgconfig` instead of `PKG_CONFIG_PATH`
  * add support for `DESTDIR`
  * strip symbols in release build

  [ Documentation ]
  * minor updates

 -- Roc Streaming authors <roc@freelists.org>  Mon, 27 Feb 2023 00:00:00 +0000

roc-toolkit (0.2.1) unstable; urgency=low

  [ Build system ]
  * install to `/usr` by default (except macOS)

  [ Documentation ]
  * minor updates

 -- Roc Streaming authors <roc@freelists.org>  Mon, 26 Dec 2022 00:00:00 +0000

roc-toolkit (0.2.0) unstable; urgency=low

  [ Features ]
  * support multicast
  * support broadcast
  * support speex resampler and make it default
  * support slots (connect sender to multiple receivers and vice versa)
  * initial support for RTCP

  [ C API ]
  * return error codes from `roc_context_open`, `roc_receiver_open`,
    `roc_sender_open`
  * introduce `roc_endpoint` to identify endpoints using URI
  * rename `roc_fec_code` to `roc_fec_encoding`
  * add `roc_resampler_backend`
  * add `roc_clock_source`
  * add `roc_version` and friends

  [ Bindings ]
  * add Go bindings (roc-go)
  * add Java bindings (roc-java)

  [ Command-line tools ]
  * use URIs to identify audio devices and endpoints
  * add `--backup` option to `roc-recv`
  * replace `--frame-size` with `--frame-length` and `--frame-limit`
  * remove `--resampler-interp` and `--resampler-window`

  [ Applications ]
  * move PulseAudio modules to roc-pulse repo
  * add roc-droid Android app

  [ Bug fixes ]
  * fix race in PRNG
  * fix race in mutex and semaphore on macOS
  * fix potential deadlock in network code

  [ Portability ]
  * Linux / aarch64 build fixes
  * Android build fixes
  * macOS build fixes
  * FreeBSD build fixes
  * support generic Unix target
  * continuous integration for more Linux distros
  * continuous integration for Android
  * testing on Raspberry Pi 4

  [ Internals ]
  * add `roc_peer` module
  * add `roc_ctl` module
  * support for asynchronous tasks in `roc_pipeline`, `roc_netio`, `roc_ctl`
  * lock-free task queues
  * optimizations to avoid unnecessary context switches
  * improvements in memory pools
  * improvements in logger
  * self-profiling
  * start work on SDP support
  * preparations for RTSP support
  * rework project structure
  * lots of small improvements

  [ Build system ]
  * add `--enable-static` and `--disable-shared`
  * add `--disable-soversion` option
  * compatibility with recent SCons versions
  * compatibility with different Python versions
  * improve toolchain detection
  * generate `.pc` file for pkg-config
  * fix build with recent PulseAudio
  * fix build with recent libunwind
  * fixes for building third-parties

  [ Tests ]
  * add benchmarks
  * lots of small updates

  [ Documentation ]
  * document Android bulding and testing
  * lots of small updates

 -- Roc Streaming authors <roc@freelists.org>  Mon, 19 Dec 2022 00:00:00 +0000

roc-toolkit (0.1.5) unstable; urgency=low

  [ Portability ]
  * fix building on Manjaro Linux
  * fix building on Yocto Linux
  * add openSUSE to continuous integration and user cookbook
  * drop Xcode 7.3 from continuous integration, add Xcode 11.3

  [ Build system ]
  * correctly handle arguments in environment variables like CXX/CC/LD/etc (for
    Yocto Linux)
  * correctly handle spaces in environment variables (for Yocto Linux)
  * fix environment overrides checks
  * fix building of the host tools when cross-compiling
  * fix warnings on Clang 11
  * fix sphinx invocation
  * explicitly disable Orc when building PulseAudio using --build-3rdparty
  * explicitly enable -pthread or -lpthread for libsndfile (for Manjaro Linux)
  * user CMake instead of autotools when building libuv for Android using
    `--build-3rdparty`
  * switch to libuv 1.35.0 by default in `--build-3rdparty`
  * check for unknown names in `--build-3rdparty`

 -- Roc Streaming authors <roc@freelists.org>  Sun, 05 Apr 2020 00:00:00 +0000

roc-toolkit (0.1.4) unstable; urgency=low

  [ Internals ]
  * fix logging

  [ Build system ]
  * make `/usr/local` prefix default everywhere except Linux
  * make default compiler consistent with CXX var
  * fix handling of RAGEL, GENGETOPT, DOXYGEN, SPHINX_BUILD, and BREATHE_APIDOC
    vars
  * fix SoX download URL (again)
  * fix CPU count calculation

  [ Documentation ]
  * update PulseAudio version numbers in "User cookbook"
  * update CONTRIBUTING and "Coding guidelines"
  * update maintainers and contributors list

 -- Roc Streaming authors <roc@freelists.org>  Thu, 06 Feb 2020 00:00:00 +0000

roc-toolkit (0.1.3) unstable; urgency=low

  [ Command-line tools ]
  * add `--list-drivers` option
  * add git commit hash to version info

  [ Internals ]
  * print backtrace on Linux and macOS using libunwind instead of glibc
    backtrace module
  * print backtrace on Android using bionic backtrace module
  * colored logging

  [ Build system ]
  * add libunwind optional dependency (enabled by default)
  * add ragel required dependency
  * rename "uv" to "libuv" in `--build-3rdparty`
  * don't hide symbols in debug builds
  * strip symbols in release builds
  * fix building on recent Python versions
  * fix SoX download URL
  * fix PulseAudio version parsing
  * automatically apply memfd patch when building PulseAudio
  * automatically fix libasound includes when building PulseAudio

 -- Roc Streaming authors <roc@freelists.org>  Mon, 21 Oct 2019 00:00:00 +0000

roc-toolkit (0.1.2) unstable; urgency=low

  [ Bug fixes ]
  * fix handling of inconsistent port protocols / FEC schemes
  * fix IPv6 support
  * fix incorrect usage of SO_REUSEADDR
  * fix panic on bind error
  * fix race in port removing code
  * fix packet flushing mechanism
  * fix backtrace printing on release builds

  [ Portability ]
  * fix building on musl libc
  * continuous integration for Alpine Linux

  [ Internals ]
  * rework audio codecs interfaces (preparations for Opus and read-aheads
    support)
  * minor refactoring in FEC support
  * improve logging

  [ Build system ]
  * allow to configure installation directories
  * auto-detect system library directory and PulseAudio module directory

  [ Documentation ]
  * extend "Forward Erasure Correction codes" page
  * add new pages: "Usage", "Publications", "Licensing", "Contacts", "Authors"
  * replace "Guidelines" page with "Contribution Guidelines", "Coding
    guidelines", and "Version control"

 -- Roc Streaming authors <roc@freelists.org>  Wed, 14 Aug 2019 00:00:00 +0000

roc-toolkit (0.1.1) unstable; urgency=low

  [ Bug fixes ]
  * fix memory corruption in OpenFEC / LDPC-Staircase (fix available in our
    fork)
  * fix false positives in stream breakage detection

  [ Portability ]
  * start working on Android port; Roc PulseAudio modules are now available in
    Termux unstable repo
  * continuous integration for Android / arm64 (minimal build)
  * docker image for aarch64-linux-android toolchain

  [ Build system ]
  * fix multiple build issues on macOS
  * fix multiple build issues with cross-compilation and Android build
  * fix issues with building third-parties
  * fix issues with compilation db generation
  * set library soname/install_name and install proper symlinks
  * improve configuration options
  * improve system type detection and system tools search
  * improve scripts portability
  * better handling of build environment variables

  [ Tests ]
  * fix resampler AWGN tests
  * add travis job to run tests under valgrind

 -- Roc Streaming authors <roc@freelists.org>  Tue, 18 Jun 2019 00:00:00 +0000

roc-toolkit (0.1.0) unstable; urgency=low

  [ Features ]
  * streaming CD-quality audio using RTP (PCM 16-bit stereo)
  * maintaining pre-configured target latency
  * restoring lost packets using FECFRAME with Reed-Solomon and LDPC-Staircase
    FEC schemes
  * converting between the sender and receiver clock domains using resampler
  * converting between the network and input/output sample rates
  * configurable resampler profiles for different CPU and quality requirements
  * mixing simultaneous streams from multiple senders on the receiver
  * binding receiver to multiple ports with different protocols
  * interleaving packets to increase the chances of successful loss recovery
  * detecting and restarting broken streams

  [ C API ]
  * initial version of transport API (roc_sender, roc_receiver)

  [ Command-line tools ]
  * initial version of command-line tools (roc-send, roc-recv, roc-conv)

  [ Applications ]
  * initial version of PulseAudio transport (module-roc-sink, module-roc-sink-
    input)

  [ Portability ]
  * GNU/Linux support
  * macOS support
  * continuous integration for Ubuntu, Debian, Fedora, CentOS, Arch Linux, macOS
  * continuous integration for x86_64, ARMv6, ARMv7, ARMv8
  * toolchain docker images for arm-bcm2708hardfp-linux-gnueabi, arm-linux-
    gnueabihf, aarch64-linux-gnu
  * testing on Raspberry Pi 3 Model B, Raspberry Pi Zero W, Orange Pi Lite 2

 -- Roc Streaming authors <roc@freelists.org>  Tue, 28 May 2019 00:00:00 +0000

