Detailed changes v1.1.3 v1.1.4: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (1 revision) |
(No difference)
|
Latest revision as of 13:19, 16 May 2017
Detailed changelog between 1.1.1 and 1.1.4 releases
Changelog between 1.1.3 and 1.1.4 releases
alsa-plugins
Core
- - Release v1.1.4
- - configure: Fix detection of avcodec.h
- - configure: enhancing configuration support for alsa plugins
- Following plugins are made configurable in alsa-plugins:
- * oss
- * mix
- * usbstream
- * arcamav
- * speexdsp
Detailed changelog between 1.1.3 and 1.1.4 releases
Changelog between 1.1.3 and 1.1.4 releases
alsa-lib
Core
- - Release v1.1.4
- - Drop ppc64-specific workaround for versioned symbols
- Currently aserver fails to build when using parameter
- --without-versioned, due to an workaround for ppc64
- (06221f86d207cb33ddd4867ca5301eeb247c4400). This workaround is
- not required anymore on the ppc64 ABI v2, and, in fact is breaking the
- compilation. Reverting this commit
- - conf/ucm: broxton: add broxton-rt298 conf files
- This adds the UCM conf files for broxton enabling with rt298 codec on
- I2S audio, HDMI and DMIC ports.
Config API
- - conf: Allow dynamic top-level config directory
- Currently the top-level config directory is specified only via
- configure script option, and is fixed after that. It's inconvenient
- when the library is moved to another base directory, or if you want to
- use a library code (e.g. with $LD_PRELOAD) with the incompatible
- config setups.
- This patch allows user to override the top-level config path via the
- environment varialbe, $ALSA_CONFIG_DIR. For that, a new helper
- function, snd_config_topdir(), was introduced, and the codes referring
- to the top config dir have been modified to handle it dynamically.
HWDEP API
- - hwdep: add support for MOTU FireWire series and RME Fireface series
- Drivers for MOTU FireWire series and RME Fireface series were newly added
- to v4.12 kernel. Like the other drivers in ALSA firewire stack, they also
- support HwDep interface.
- This commit add entries for the drivers.
- - hwdep: add Line6 USB series support
- Drivers for Line6 USB series was firstly added to staging directory at
- development period of v2.6.30 kernel. At v4.9 kernel development, they
- were moved to sound directory. The drivers include HwDep interface, while
- header in user space library has never been updated for an entry
- corresponding to the drivers.
- This commit adds the entry.
Mixer API
- - conf: Allow dynamic top-level config directory
- Currently the top-level config directory is specified only via
- configure script option, and is fixed after that. It's inconvenient
- when the library is moved to another base directory, or if you want to
- use a library code (e.g. with $LD_PRELOAD) with the incompatible
- config setups.
- This patch allows user to override the top-level config path via the
- environment varialbe, $ALSA_CONFIG_DIR. For that, a new helper
- function, snd_config_topdir(), was introduced, and the codes referring
- to the top config dir have been modified to handle it dynamically.
PCM API
- - ALSA: pcm: Use recursive mutex
- The recent thread-safety pthread implementation caused deadlocks in
- some situations, e.g. when an external plugin calls snd_pcm_state() in
- its callback. One can avoid the deadlock by carefully using the
- unlocked version, but it's often error-prone, and it might be still
- problem with the old binaries.
- In this patch, we initialize the pthread mutex as recursive for fixing
- such a problem.
- Suggested-by: Timo Wischer <twischer@de.adit-jv.com>
- - pcm: dmix: Disable var_periodsize as default
- The recently added variable period-size feature for dmix & co seems
- causing a regression on some old applications; e.g. Audacious aborts
- with an error:
- ALSA error: snd_pcm_hw_params_set_buffer_time_near failed: Invalid argument.
- As a quick fix, disable the feature as default. One can still enable
- it via asoundrc.
- Bugzilla: https://bugzilla.opensuse.org/show_bug.cgi?id=1033179
- - pcm:plugin: Fix sound capture via MMAP access
- Distorted sound is heard if the capture device of an ioplug plugin is used,
- which is accessed through any ALSA plugin (like copy, linear, ...) via MMAP access.
- E.g. aplay -> loop -> copy -> arecord -M -> aplay -> hw:0
- As mentioned in the ALSA API (see pcm/pcm.c:942):
- The function #snd_pcm_avail_update() have to be called
- before any mmap begin+commit operation.
- - plugin:dshare: wrong state reporting
- If plugin dshare detects underrun, it reports this to the user
- via return value -EPIPE and setting dshare state to 'xrun' which is correct.
- But, if user after this wants to check the stream state, it is misleadingly
- reported as 'running' instead of 'xrun'.
- With this behavior aplay e.g. will not do a proper underrun handling
- (restarting stream) but terminates streaming.
- This is due to plugin dshare always returns state of the slave pcm,
- in pcm_ops->state() which is not correct.
- - pcm:file: delegate htimestamping to slave instead of always getting real_htimestamp
- purpose of this fix, is to read most accurate timestamps.
- From documentation of /src/pcm/pcm.c, we can see:
- """" \par Timestamp mode
- The timestamp mode specifies, if timestamps are activated. Currently, only #SND_PCM_TSTAMP_NONE and #SND_PCM_TSTAMP_MMAP modes are known.
- The mmap mode means that timestamp is taken on every period time boundary. Corresponding position in the ring buffer assigned to timestamp can be obtained using #snd_pcm_htimestamp() function. """"
- As snd_pcm_generic_htimestamp() internally calls snd_pcm_htimestamp() to read time, so accurate timestamp can be read from snd_pcm_generic_htimestamp().
- Also, in case of pcm_file, if the underlying slave is hardware, then we would wish to read elapsed hardware time, as it will be the most accurate, as opposed to the elapsed wall time.
- This will provide pcm_file with the most accurate timestamps.
- Following are the timesamps read with timestamp enabled, for with fix and without fix scenarios:
- 1> With fix:
- :~#time aplay --enable-tstamp -Dhtstamp_test --period-time=5000 -v -fdat /dev/urandom
- Playing raw data '/dev/urandom' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
- File PCM (file=/tmp/swarate_out.wav)
- Final file PCM (file=/tmp/swarate_out.wav)
- ..
- Slave: Hardware PCM card 0 'imx6q-sabresd-wm8962' device 0 subdevice 0
- Its setup is:
- stream : PLAYBACK
- access : RW_INTERLEAVED
- format : S16_LE
- subformat : STD
- channels : 2
- rate : 48000
- exact rate : 48000 (48000/1)
- msbits : 16
- buffer_size : 24000
- period_size : 240
- period_time : 5000
- tstamp_mode : ENABLE
- .
- .
- Before sleep = 142:409.807623
- After sleep = 142:409.807623
- Before sleep = 142:414.806016 (calling snd_pcm_htimestamp(handle, &avail, &tstamp_before))
- sleep of 2 milisec
- After sleep = 142:414.806016 (calling snd_pcm_htimestamp(handle, &avail, &tstamp_after)
- From the above timestamps, we can see that slave has returned the same timestamps, as --period-time choosen is 5msec.
- 2> Without this fix:
- The timestamps are returned with realtime value.
- :~# time aplay --enable-tstamp -Dhtstamp_test --period-time=5000 -v -fdat /dev/urandom
- Playing raw data '/dev/urandom' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
- File PCM (file=/tmp/swarate_out.wav)
- Final file PCM (file=/tmp/swarate_out.wav)
- .
- .
- Slave: Hardware PCM card 0 'imx6q-sabresd-wm8962' device 0 subdevice 0
- Its setup is:
- stream : PLAYBACK
- access : RW_INTERLEAVED
- format : S16_LE
- subformat : STD
- channels : 2
- rate : 48000
- exact rate : 48000 (48000/1)
- msbits : 16
- buffer_size : 24000
- period_size : 240
- period_time : 5000
- tstamp_mode : ENABLE
- .
- .
- Before sleep = 241:136.875845 (calling snd_pcm_htimestamp(handle, &avail, &tstamp_before))
- sleep of 2 milisec
- After sleep = 241:139.076376 (calling snd_pcm_htimestamp(handle, &avail, &tstamp_after)
- We can observe here, the timestamps shows time diff of ~2ms, which is the time gap of sleep duration.
- Before sleep = 241:139.617588
- After sleep = 241:141.746845
- Before sleep = 241:142.291618
- After sleep = 241:144.406406
- Before sleep = 241:144.951421
- After sleep = 241:147.066118
- Before sleep = 241:147.623421
- After sleep = 241:149.740573
- - pcm:plug: save converter config
- Passed config is freed after call to open, thus it is invalid when
- trying to extract the converter name. So config entry is saved
- for later usage.
- Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
- - dmix plugin: drain - quickfix for the previous patch
- - dmix plugin: fix drain for nonblock mode
- - pcm file plugin: handle snd_pcm_mmap_begin() error path in snd_pcm_file_mmap_commit()
- - always handle return value from snd_config_get_id() (coverity)
- - pcm_plugin: unify the snd_pcm_mmap_begin result value checking
- - pcm: rate: Add capability to pass configuration node to plugins
- If a rate plugin uses a node (compound) instead of a plain string for
- its "converter", and that compound is not a simple string array, then
- the compound will be passed as an additional parameter to the new plugin
- open() function (SND_PCM_RATE_PLUGIN_CONF_ENTRY(XXX)). The previous
- open() function (SND_PCM_RATE_PLUGIN_ENTRY(XXX)) will be called if the
- CONF version is not found. It is up to the plugin to determine whether
- the presence of the conf parameter is mandatory.
- - pcm: extplug: refinement of masks in extplug
- It should be possible to use empty mask format with extplug.
- The refinement of mask via extplug is now modified,
- to accept empty masks as well to work properly.
- - pcm: status dump fix timestamp formatting
- nanosecond part formatted with %06 will give incorrect/confusing results:
- trigger_time: 154.9748287
- trigger_time: 154.60109090
- trigger_time: 154.110425257
- time seems to run backwards...
- This patch converts to us before printing
- which gives the correct/expected result:
- trigger_time: 154.009748
- trigger_time: 154.060109
- trigger_time: 154.110425
- - pcm: file: Enable file writing for capture path
- This commit reverts parts of commit 4081be0b87ab9fa53a8906e66bc240f18a7a9a54,
- because it is realy useful to use the file plugin in a capture path for
- debugging. Also it fixes the truncate issue mentioned in above commit.
- Additionally following MMAP access issue is considered:
- $ arecord -D teeraw -M -d5 arecord.wav
- Recording WAVE 'arecord.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono
- ALSA lib pcm/pcm_file.c:358:(snd_pcm_file_write_bytes)
- write failed: Bad file descriptor
- ALSA lib pcm/pcm_file.c:358:(snd_pcm_file_write_bytes)
- write failed: Bad file descriptor
- arecord: pcm/pcm_file.c:397: snd_pcm_file_add_frames:
- Assertion `file->wbuf_used_bytes < file->wbuf_size_bytes' failed.
- Aborted by signal Aborted...
- - pcm: direct: fix race on clearing timer events
- snd_timer handling is racy: plugins clear timer queue if avail_min
- is not reached to force a sleep on timer. The race can happen if
- the expected event arrives in between the avail check and the
- clearing of pending events. If this race happens, the user will
- unnecessarily wait for one more timer event. On low latency/realtime
- streams this can lead to xruns and must be avoided.
- As a fix we recheck avail after having cleared poll events.
- - pcm: dmix_rewind corrupts application pointer fix
- sometimes pulseaudio stops with the following assertion in libasound.so:
- alsa-lib-1.0.29/src/pcm/pcm.c:2761:
- snd_pcm_area_copy: Assertion `dst < src || dst >= src + bytes' failed.
- Application pointer is handled properly, in cases of rewind operations.
- - pcm: dmix: Allow disabling x86 optimizations
- The dmix plugin has some optimized implementations for x86 using the
- direct memory accesses, which was rather the original version, in
- addition to the "generic" implementation using the semaphore
- blocking. The x86 implementation relies on the memory coherency *and*
- the fast read/write on it.
- For other architectures, this has been always disabled just because of
- memory coherency. But, the recent LPE audio development revealed
- that, even on x86 platforms, the read/write performance might become
- extremely bad when the buffer is marked as uncached. Some drivers
- already know the buffer is uncached, we need to switch to the generic
- mode in such a case.
- This patch introduces yet another flag to dmix configuration,
- direct_memory_access, that indicates whether the x86-specific
- optimization can be used or not. Each driver can set the flag in its
- cards config namespace, and the default dmix config refers to it.
- As of this patch, only HDMI LPE Audio driver sets it.
- - pcm: Disable locking in async mode
- When PCM is operated in async mode and an async handler calls some PCM
- functions with lock during other PCM operations, we may hit a
- deadlock.
- Although async mode is rarely used, it's still a possible use case.
- Disable the locking when the stream is opened in async mode or it's
- set to async mode via snd_pcm_async().
- - pcm: Avoid lock for snd_pcm_nonblock()
- snd_pcm_nonblock() is called as snd_pcm_abort(). Since
- snd_pcm_abort() is called often from a signal handler to clean things
- up (e.g. aplay does it), we may face a deadlock if the signal is
- raised during the locked operation.
- There can be some way to check the deadlock state, but they would cost
- much. Since the race condition of snd_pcm_nonblock() is quite small,
- let's just drop the locking inside snd_pcm_nonblock() as a
- workaround.
- - pcm: multi: Drop the fixed slave_map[] in snd_pcm_multi_open()
- slave_map[] in snd_pcm_multi_open() is a fixed size array and
- obviously we have no overflow check, and eventually the program gets
- an error when more than 64 channels are used.
- Although we can modify the code to allocate the array dynamically, it
- turned out that we can drop the whole slave_map[] thingy in this
- function when looking at the code closely. In the past, it was used
- to identify the one-to-many mapping. But the check was dropped, and
- now it's nothing more than a sanity check.
- Reported-by: Jörg Müller <joerg.mueller7744@gmail.com>
- - pcm: direct: Fix deadlock in poll_descriptors
- The recent change in PCM direct plugins to check XRUN in
- poll_descriptors callback caused a regression; as consequence, the
- whole playback hangs up.
- The culprit is a mutex dead lock by the call in snd_pcm_state() inside
- the new snd_pcm_direct_poll_descriptors(). The poll_descriptors code
- path is protected with pcm mutex, thus an unlocked version
- (__snd_pcm_state()) has to be used inside the callback instead.
- Fixes: 789ee39727a1 ("pcm: direct: check state before enter poll on timer")
- - pcm: direct: don't return bogus buffer levels in xrun state
- - pcm: direct: check state before enter poll on timer
- To avoid the chances of timeout, we need to check the enter poll
- in state xrun.
- - pcm: direct: Fix for sync issue on xrun recover
- If using very short periods, DSHARE/DSNOOP/DMIX may report underruns while in
- status 'prepared'. This prohibits correct recovery. Now slave xrun conditions
- for DSHARE/DSNOOP/DMIX are being handled properly.
- - pcm: direct: returning semop error code for semaphore up/down failures
- - rate: dynamic update avail_min on slave
- - plugin: dynamically update avail_min on slave
- mmapped capture access on some plugins can fetch data from
- slave in the 'background'. A subsequent snd_pcm_wait waits
- for too long time to reach avail_min threshold again.
- Waiting too long leads to xruns on other devices waiting for
- the capture data.
- As a fix the avail_min on slave is recalculated dynamically.
- V2: updated patch to fix within 80 characters per line
- - pcm: rate: fix the hw_ptr update until the boundary available
- For long time test case, the slave_hw_ptr will exceed the boundary
- and wraparound the slave_hw_ptr. This slave boundary wraparound will
- cause the rate->hw_ptr to wraparound irrespective of the
- rate->boundary availability and due to that the available size goes
- wrong.
- Hence, to get the correct available size,
- - Its necessary to increment the rate->hw_ptr upto the rate->boundary
- and then wraparound the rate->hw_ptr.
- - While handling fraction part of slave period, rounded value will be
- introduced by input_frames(). To eliminate rounding issue on
- rate->hw_ptr, subtract last rounded value from rate->hw_ptr and add
- new rounded value of present slave_hw_ptr fraction part to
- rate->hw_ptr.
- - pcm: dshare: enable silence
- This issue depends on system load - if the process using dshare is
- scheduled fast enough, then there is no noise. A delay of e.g >~2ms
- produces hearable noise.
- Reproduction with instrumented aplay(sleep every 100th period for a
- given time):
- During the sleep time of 2000000us (2s) the hardware plays old samples
- in a loop before xrun is detected and recovered after the sleep.
- This is resolved by placing it in silence, in case of dshare plugin.
- - pcm: direct: allow users to configure different period sizes
- This patch allows the effective period size to be a multiple of the
- slave-pcm period size.
- Allowing only exact multiple of original period size is achieved by
- borrowing code from the kernel hwrules implementation.
- This patch is intended to save cpu workload when for example, the
- slave operates with very small periods but a user does not need that
- small periods.
- This feature is enabled by default and can be disabled by adding
- config option 'var_periodsize 0'.
RawMidi API
- - rawmidi: virtual: fix reading into a small buffer
- In the special case for handling partial messages, the pointer
- calculations were wrong, which would result in data corruption.
- Reviewd-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Sequencer API
- - seq: improve documentation about new get pid/card functions
- Document the technique for determining if the running kernel supports
- the new snd_seq_client_info_get_pid and snd_seq_client_info_get_card
- functions. Also add a little information about how to use these
- functions and add some cross references.
Timer API
- - timer: obsolete legacy rtctimer instance
- At v4.7 development, ALSA timer interface dropped device instance based on
- legacy rtctimer implementation. User space applications should not use the
- device instance.
- This commit adds comments to notify a corresponding macro should not be
- used anymore.
Topology API
- - topology: Fix issue in parsing routes when generating topology binary
- We missed parsing the index value, which is used as a use case indicator, when
- processing the route objects.
- This patch fixes the bug.
- Tested-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
- - conf: Allow dynamic top-level config directory
- Currently the top-level config directory is specified only via
- configure script option, and is fixed after that. It's inconvenient
- when the library is moved to another base directory, or if you want to
- use a library code (e.g. with $LD_PRELOAD) with the incompatible
- config setups.
- This patch allows user to override the top-level config path via the
- environment varialbe, $ALSA_CONFIG_DIR. For that, a new helper
- function, snd_config_topdir(), was introduced, and the codes referring
- to the top config dir have been modified to handle it dynamically.
- - topology: Allow a data section to contain multiple tuples objects
- It's easy to use a vendor tuples object to define a C structure instance as
- vendor specific parameter for kernel drivers. And sometimes the kernel drivers
- may want a group of structures. So this patch will allow user to define multiple
- vendor tuples objects in a data section, to avoid defining multiple data
- sections and each data section only has 1 vendor tuples object.
- There is no ABI change in this patch.
- - topology: Group elements with the same index value into a block
- Topology objects(widgets,controls) with different index value should be grouped
- into different blocks and the block headers contain the index value.
- Reviewed-by: Mengdong Lin <mengdong.lin@linux.intel.com>
- - topology: Look up references for an object based on its index
- We can distinguish different use cases by the object index value, the default
- value is 0, meaning applicable for all use cases, defined by macro "SND_TOLG_INDEX_ALL".
- An element can only refer to other elements for "all" use cases or the same use
- cases, i.e. it can only refer to elements with index value "SND_TOLG_INDEX_ALL"
- or the same index value as itself.
- The object list has been sorted in ascending order of index, so when we look up
- a reference for an object, we traverse the object list it depends on, if we have
- not found the reference until index of the object list is greater than index of
- the object, we give up and return an error.
- Reviewed-by: Mengdong Lin <mengdong.lin@linux.intel.com>
- - topology: Remove code parsing index value in paring each object
- We insert a new element into the object list based on its index value, so we parse
- index value in "tplg_elem_new_common" before insert it, and then remove code
- parsing index value in parsing each object.
- Reviewed-by: Mengdong Lin <mengdong.lin@linux.intel.com>
- - topology: Insert new element based on its index value
- When creating a new element, insert it into the list in the ascending order of
- index value.
- Reviewed-by: Mengdong Lin <mengdong.lin@linux.intel.com>
- - topology: coverity - remove dead code
- - always handle return value from snd_config_get_id() (coverity)
- - topology: Fix incorrect license in source comments.
- The topology source files had the wrong licence specified in the
- comments when initially upstreamed. The topology source files are all
- licensed under the LGPL-2.1 and not the GPLv2.
- All earlier versions of the alsa-lib topology source files must be
- considered LGPL-2.1 like the other source files in alsa-lib and also
- as specified in the alsa-lib COPYING file.
- - topology: fix unused-const-variable warning
- Last year, unused static const variable was added, then compiler generates
- a below warning.
- dapm.c:43:30: warning: ‘widget_control_map’ defined but not used [-Wunused-const-variable=]
- static const struct map_elem widget_control_map[] = {
- ^~~~~~~~~~~~~~~~~~
- This commit removes it.
- Fixes: 01a0e1a1c219 ("topology: Add DAPM object parser")
Use Case Manager API
- - ucm parser: fix possible string overflow in uc_mgr_import_master_config()
- - ucm: Add command 'get _file' to get the config file name of the opened card
- After opening a card, this command can show the name of the actually
- loaded configuration file, either matches the card name or card long name.
- So developers can check if there is a device-sepcific configuration file
- available for a given card.
- - ucm: Load device-specific configuration file based on the card long name
- Intel DSP platform drivers are used by many different devices. For user
- space to differentiate them, ASoC machine drivers may use the DMI info
- (vendor-product-version-board) as card long name. Possible card long names
- are:
- DellInc.-XPS139343-01-0310JH
- ASUSTeKCOMPUTERINC.-T100TA-1.0-T100TA
- Circuitco-MinnowboardMaxD0PLATFORM-D0-MinnowBoardMAX
- ...
- If we want to define a device-specific UCM config file for a card, we
- need to use the card long name as the name of both the directory that
- contains the UCM config file and the UCM config file itself, like
- longname/longname.conf
- When being asked to load configuration file of a card, UCM will try to
- find the card in the local machine and get its long name. If the card
- long name is available, try to load the file longname/longname.conf to
- get the best device-specific configuration; if this file is not available,
- fall back to load the default configuration file shortname/shortname.conf
- as before.
- This update is backward compatible, because if ASoC machine drivers don't
- explicity use DMI or other means to set the card long name, ASoC core
- will use the card short name as the long name. And so UCM will load the
- config file that matches both the card short name and the long name.
- - ucm: Assure the user input card name not to exceed max size of card long name
- Users can load a card's UCM configuration file by giving the card short
- name or long name, which should not exceed the maximum card long name
- defined by the kernel. The kernel uses an 80-character buffer to store
- the card long name.
- - ucm: parser needs limits.h
- It's using PATH_MAX which is defined there, otherwise the build fails on
- musl libc.
- - ucm: Add ATTRIBUTE_UNUSED for unused parameters of execute_component_seq()
- To fix the following warnings:
- main.c: In function ‘execute_component_seq’:
- main.c:489:24: warning: unused parameter ‘value_list1’ [-Wunused-parameter]
- struct list_head *value_list1,
- ^
- main.c:490:24: warning: unused parameter ‘value_list2’ [-Wunused-parameter]
- struct list_head *value_list2,
- ^
- main.c:491:24: warning: unused parameter ‘value_list3’ [-Wunused-parameter]
- struct list_head *value_list3,
- ^
ALSA Lisp
- - conf: Allow dynamic top-level config directory
- Currently the top-level config directory is specified only via
- configure script option, and is fixed after that. It's inconvenient
- when the library is moved to another base directory, or if you want to
- use a library code (e.g. with $LD_PRELOAD) with the incompatible
- config setups.
- This patch allows user to override the top-level config path via the
- environment varialbe, $ALSA_CONFIG_DIR. For that, a new helper
- function, snd_config_topdir(), was introduced, and the codes referring
- to the top config dir have been modified to handle it dynamically.
Configuration
- - conf: topology: Fix index mismatch for skl and bxt
- The topology index in the conf is set to 1, where the driver expects index
- set to 0. Fix the inconsistency.
- - conf: Allow dynamic top-level config directory
- Currently the top-level config directory is specified only via
- configure script option, and is fixed after that. It's inconvenient
- when the library is moved to another base directory, or if you want to
- use a library code (e.g. with $LD_PRELOAD) with the incompatible
- config setups.
- This patch allows user to override the top-level config path via the
- environment varialbe, $ALSA_CONFIG_DIR. For that, a new helper
- function, snd_config_topdir(), was introduced, and the codes referring
- to the top config dir have been modified to handle it dynamically.
- - conf: Remove dmix.direct_memory_access setup
- The commit [22eca6468b4a: pcm: dmix: Allow disabling x86
- optimizations] introduced the new flag for dmix & co,
- direct_memory_access. However, it turned out that such an addition of
- the new flag in the default pcm definition causes an error when it's
- used with old alsa-lib codes. Although the code added here is
- correct, per se, and it works as expected, it's not wise to break the
- configuration with old stuff -- even if the usage is somehow incorrect
- and should be avoided.
- Since the usage of the new flag is only for HDMI LPE audio, and the
- usage of dmix itself should be limited with that hardware, this patch
- removes the setup so that it works with the old alsa-lib again. We
- may introduce the dmix behavior change in a smarter way, e.g. passing
- some flag from the hardware driver so that it works more generically
- without the manual fiddling of config files.
- Bugzilla: http://bugzilla.opensuse.org/show_bug.cgi?id=1037021
- - conf/cards: add VC4-HDMI card
- Add a conf file for the VC4-HDMI sound card.
- Tested-by: Eric Anholt <eric@anholt.net>
- - pcm: dmix: Allow disabling x86 optimizations
- The dmix plugin has some optimized implementations for x86 using the
- direct memory accesses, which was rather the original version, in
- addition to the "generic" implementation using the semaphore
- blocking. The x86 implementation relies on the memory coherency *and*
- the fast read/write on it.
- For other architectures, this has been always disabled just because of
- memory coherency. But, the recent LPE audio development revealed
- that, even on x86 platforms, the read/write performance might become
- extremely bad when the buffer is marked as uncached. Some drivers
- already know the buffer is uncached, we need to switch to the generic
- mode in such a case.
- This patch introduces yet another flag to dmix configuration,
- direct_memory_access, that indicates whether the x86-specific
- optimization can be used or not. Each driver can set the flag in its
- cards config namespace, and the default dmix config refers to it.
- As of this patch, only HDMI LPE Audio driver sets it.
- - conf: Add card config for Intel HDMI/DP LPE audio
- It's a playback-only device with a single PCM dedicated for HDMI/DP
- output. The dmix is working with the latest driver code, so enable it
- for default, while providing the hdmi PCM dev for the accesses with
- AES bits.
- - conf/cards: add support for pistachio-card.
- The data sheet of the chip and technical reference manual can be found at https://docs.creatordev.io/ci40/guides/hardwaredocs/cXT200_datasheet2.pdf
- and https://docs.creatordev.io/ci40/guides/hardwaredocs/MIPS_Creator_cXT200_Technical_Reference_Manual_1.0.112.pdf.
- The additional information about the cards can be found in src/conf/cards/pistachio-card.conf file.
- - conf/ucm: broxton: add broxton-rt298 conf files
- This adds the UCM conf files for broxton enabling with rt298 codec on
- I2S audio, HDMI and DMIC ports.
External Rate Converter Plugin SDK
- - pcm: rate: Add capability to pass configuration node to plugins
- If a rate plugin uses a node (compound) instead of a plain string for
- its "converter", and that compound is not a simple string array, then
- the compound will be passed as an additional parameter to the new plugin
- open() function (SND_PCM_RATE_PLUGIN_CONF_ENTRY(XXX)). The previous
- open() function (SND_PCM_RATE_PLUGIN_ENTRY(XXX)) will be called if the
- CONF version is not found. It is up to the plugin to determine whether
- the presence of the conf parameter is mandatory.
Kernel Headers
- - hwdep: add support for MOTU FireWire series and RME Fireface series
- Drivers for MOTU FireWire series and RME Fireface series were newly added
- to v4.12 kernel. Like the other drivers in ALSA firewire stack, they also
- support HwDep interface.
- This commit add entries for the drivers.
- - hwdep: add Line6 USB series support
- Drivers for Line6 USB series was firstly added to staging directory at
- development period of v2.6.30 kernel. At v4.9 kernel development, they
- were moved to sound directory. The drivers include HwDep interface, while
- header in user space library has never been updated for an entry
- corresponding to the drivers.
- This commit adds the entry.
- - timer: obsolete legacy rtctimer instance
- At v4.7 development, ALSA timer interface dropped device instance based on
- legacy rtctimer implementation. User space applications should not use the
- device instance.
- This commit adds comments to notify a corresponding macro should not be
- used anymore.
alsa-utils
Core
- - Release v1.1.4
ALSA Control (alsactl)
- - alsactl: Remove standard output definition in systemd unit
- `/lib/systemd/system/alsa-restore.service` specifies
- `StandardOutput=syslog`. This overrides the `DefaultStandardOutput`
- setting from `/etc/systemd/system.conf`, which the system administrator
- can use to specify how output gets logged. In particular, the sysadmin
- may want output to go to the journal, or to syslog, or nowhere at all [1].
- This patch removes the definition entirely, so the units can use the
- system default.
- Upstream the patch from the Debian package [2].
- [1] https://bugs.debian.org/741123
- "systemd services should not use StandardOutput=syslog; should rely
- on DefaultStandardOutput"
- [2] https://sources.debian.net/src/alsa-utils/1.1.2-1/debian/patches/systemd_standardoutput.patch/
ALSA RawMidi Utility (amidi)
- - amidi: optarg might be NULL, fix 't' argument parsing
alsa-info.sh
- - alsa-info: add ACPI device status
- BIOS vendors typically reuse the same definitions between different
- platforms and expose the relevant hardware by changing the value of
- the _STA method.
- For example on the Asus T100HA, there are 3 HID values for audio
- codecs in the DSDT table but two have a zero status and will be
- ignored by the ACPI subsystem.
- $ more /sys/bus/acpi/devices/10EC*/status
- ::::::::::::::
- /sys/bus/acpi/devices/10EC3270:00/status
- ::::::::::::::
- 15
- ::::::::::::::
- /sys/bus/acpi/devices/10EC5640:00/status
- ::::::::::::::
- 0
- ::::::::::::::
- /sys/bus/acpi/devices/10EC5648:00/status
- ::::::::::::::
- 0
- This information is very useful to figure out which HIDs/quirks need
- to be supported. Add log to alsa-info.sh to only expose non-zero
- results of the ACPI _STA method, e.g.
- !!ACPI Device Status Information
- !!---------------
- /sys/bus/acpi/devices/10EC3270:00/status 15
- - alsa-info: provide more DMI information
- Some manufacturers don't provide useful information for Manufacturer
- and Product Name but instead use Board Vendor and Board Name fields,
- add them to alsa-info log
- Example on Intel NUC:
- !!DMI Information
- !!---------------
- Manufacturer:
- Product Name:
- Product Version:
- Firmware Version: KYSKLi70.86A.0042.2016.0929.1933
- Board Vendor: Intel Corporation
- Board Name: NUC6i7KYB
alsaucm
- - alsaucm: Add alsaucm.rst to EXTRA_DIST
- Otherwise it's missing in the tarball.
aplay/arecord
- - aplay: Introduce and use xwrite helper
- Write can return less then requested bytes, but we treat this as
- an error thus ending up with confusing error messages.
- Fix this by introducing xwrite helper, which makes sure all bytes
- are written or an error is returned.
- With this patch an usecase where disk is filled by recording will
- print:
- $ /mnt/msc/audio.wav: No space left on device
- instead of random messages like:
- $/mnt/msc/audio.wav: No such file or directory
tinycompress
Core
- - Release v1.1.4
Utilities
- - crecord: Add option to specify codec ID
- This patch adds a -I command line option to set the codec ID,
- either from a defined set of string values or as a number.
- After discussion with Vinod it was agreed that we should only
- allow writing to a file if we support creating the correct container
- file format for that data. As we currently only have support for
- creating WAV files only PCM data can be written to a file. Other
- formats can be sent raw to stdout.
- - crecord: Fix some minor coding style problems
- - Incorrect indenting of arguments to capture_samples()
- - Wrap long line in capture_samples()
- - Added a blank line in main() for readability
- - Deleted extra trailing blank line at end of file