As a header-only C++ library, synced OSS operation (sosso) is used to
clean up and separate the low-level handling of FreeBSD OSS devices
in JACK. Features include:
* Supports both read() / write() and mmap() IO operation.
* Adaptive polling, better suited for low-latency requirements.
* Internal double buffer to avoid troubles with OSS buffer resize.
* Closely monitors progress and drift for each channel (+/- 1ms).
* Facilitates drift correction through buffer offsets.
* Depends on C++ standard library and system headers, nothing else.
Although the sosso library is somewhat tailored to the needs of JACK,
it was developed separately and will eventually be published and / or
used in other projects. Therefore the headers follow a different
formatting style and are more liberally licensed (ISC).
Reduce the base latencies for capture and playback by half a period,
and let the update method account for the additional playback latency
introduced by OSS buffer management.
This fits actual OSS latencies better, so the same settings for the
extra input-latency and output-latency parameters should apply to
different period lengths.
Beware that this change invalidates current input-latency and
output-latency values, they have to be measured again.
Features:
* Internal workings more in line with other Jack drivers.
* Use poll() for wait and sync instead of blocking I/O.
* Allows to use Jack in "async" mode.
* Calculate DSP usage correctly.
* OSS buffer management to achieve stable latencies.
* Latency correction for asymmetric OSS buffer use.
* More robust handling of over- and underruns.
* Handle format changes forced by the OSS interface.
* FreeBSD 24bit samples are always packed.
No changes to the driver parameters or the user interface.