Changelog

Version 0.2.4 (May 13, 2023)

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

Version 0.2.3 (Mar 9, 2023)

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

Version 0.2.2 (Feb 27, 2023)

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

Version 0.2.1 (Dec 26, 2022)

Build system

  • install to /usr by default (except macOS)

Documentation

  • minor updates

Version 0.2.0 (Dec 19, 2022)

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

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

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

Version 0.1.5 (Apr 5, 2020)

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

Version 0.1.4 (Feb 6, 2020)

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

Version 0.1.3 (Oct 21, 2019)

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

Version 0.1.2 (Aug 14, 2019)

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”

Version 0.1.1 (Jun 18, 2019)

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

Version 0.1.0 (May 28, 2019)

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