QNX Technical Articles
QNX® Software Development Platform 6.6 io-audio Patch (Patch ID 4418): Release Notes
Date of this edition: June 21, 2016
Target OS: This patch is compatible with targets that are running the QNX® Neutrino® RTOS 6.6.
Host OS: In order to apply this patch, you must have installed the QNX Software Development Platform 6.6 on one of the following development hosts:
- Microsoft Windows 8 Professional 64-bit or Windows 7 Professional 64-bit
- Linux Red Hat Enterprise Linux 6 64-bit or Ubuntu Workstation LTS 12.04 32- and 64-bit
![]() |
|
Contents
Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.
What's in this patch?
This patch adds some new functionality to the QNX Sound Architecture (QSA), including:
- support for AMP functional modules (AFMs) with the new Low Latency Architecture (LoLAA), including snd_afm_*() APIs in libasound.
- the ability to use a configuration file rather than the command line to specify devices and options
- io-audio can now support a 24 KHz sample rate natively in hardware.
- a new pcm_logger utility that you can use to dynamically enable and disable the logging of PCM data to /dev/shmem and to configure io-audio verbosity level at run time
- support for a PCM input splitter that can be used with any PCM HW device. Note that its use requires an updated audio deva-* driver (please contact QNX)
- support for channel mappings, routing list switches, and multiselection list switches
- caching, which reduces CPU consumption
The behavioral changes include the following:
- We've improved/optimized the PCM software mixer to reduce its CPU load by a factor of 3.
- We've decoupled the client fragment size and PCM software mixer fragment size,
enabling the very low latency between speaker output and microphone input that is necessary for ICC.
Client fragment sizes can now be any multiple of the PCM software mixer's fragment size. Previously the client fragment size was forced to be equal to the PCM software mixer fragment size.
- io-audio now fails gracefully at startup if there are errors on the command line or in the configuration file specification.
- You can now specify a typed-memory object for io-audio to use as its DMA memory pool.
This patch also includes an updated version of the Audio Developer's Guide that includes:
- entries for the new snd_afm_* APIs
- an updated entry for io-audio that describes the configuration file
- entries for related utilities
Note that the afm_ctl utility is documented here, but is shipped with AMP 1.0.
Installed files
The following files are installed under $QNX_TARGET:
- armle-v7/sbin/io-audio
- armle-v7/lib/libasound.so (see below)
- armle-v7/lib/libasound.so.2
- armle-v7/usr/bin/mix_ctl
- armle-v7/usr/bin/wave
- armle-v7/usr/bin/pcm_logger
- armle-v7/usr/bin/waverec
- armle-v7/usr/lib/libaudio_manager.so (see below)
- armle-v7/usr/lib/libaudio_manager.so.2
- usr/include/ado_pcm.h
- usr/include/ado_memory.h
- usr/include/ado_pcm/dcmd_radio.h
- usr/include/ado_pcm/ipod_devctl.h
- usr/include/ado_pcm/dcmd_bluetooth.h
- usr/include/ado_debug.h
- usr/include/audio/audio_manager_event.h
- usr/include/audio/audio_manager_routing.h
- usr/include/audio/audio_manager_concurrency.h
- usr/include/audio/audio_manager_device.h
- usr/include/audio/audio_manager_voice_service.h
- usr/include/audio/audio_manager_volume.h
- usr/include/ado_isa.h
- usr/include/ado_mixer.h
- usr/include/audio_driver.h
- usr/include/sys/asound.h
- usr/include/sys/asound_common.h
- usr/include/sys/asoundlib.h
- usr/include/ado_thread.h
- usr/include/mixer/ak4531_dll.h
- usr/include/mixer/ac97_devctl.h
- usr/include/mixer/ac97_dll.h
- usr/include/mixer/hda_dll.h
- usr/include/ado_pci.h
- usr/include/ado_core.h
- armle-v7/lib/libasound.so
- armle-v7/usr/lib/libaudio_manager.so
On Linux, armle-v7/lib/libasound.so and armle-v7/usr/lib/libaudio_manager.so are symbolic links to armle-v7/lib/libasound.so.2 and armle-v7/usr/lib/libaudio_manager.so.2, respectively. On Windows, they're copies of them.
Fixed issues
- The status counts returned by snd_pcm_plugin_status() for the PCM software mixer now more closely reflect the actual audio transferred. (Ref# J1481143)
- io-audio now no longer deadlocks occasionally when interacting with audioman. (Ref# J1496576)
Known issues
- The snd_pcm_plugin_set_disable() function currently returns a copy of the bitmap that you pass to it, instead of the updated bitmap of disabled plugins. (Ref# J1506115)
- SIGTERM sometimes causes a premature exit, and io-audio doesn’t clean up fully. (Ref# J1500835)
- If the starting volume of the wave playback is less than 100% before pausing, it's too low after resuming. (Ref# J1500859)
- If you use cat to get an AFM's state information (e.g., cat /dev/snd/stateC3), the information is blank. If you get the voice AFM's state information, io-audio crashes. (Ref# J1505830)
- The fragment size calculations in the PCM software mixer and input splitter don't properly account for
sample-size conversions for 32-bit hardware.
(Ref# J1510251)
Workaround: Configure your hardware for 16-bit samples.
- If you uninstall this patch,
the applypatch utility removes the contents of the documentation plugin
but doesn't remove the directories.
The IDE then fails to load the original version of the Audio Developer's Guide.
(Ref# J1534900)
Workaround: After uninstalling this patch, go to $QNX_TARGET/usr/help/eclipse/plugins and delete com.qnx.doc.neutrino.audio_3.0.0.20160509 and its subfolders.
Technical support
To obtain technical support for any QNX product, visit the Support area on our website (www.qnx.com). You'll find a wide range of support options, including community forums.