Commit graph

2944 commits

Author SHA1 Message Date
Jurgen Kramer
e59ffbf30e pcm: add new 32-bit DSD sample format
Add the new DSD_U32_LE sample format to alsa-lib.

NB include/pcm.h and include/sound/asound.h are updated so a new sync with the
kernel headers is not needed

Signed-off-by: Jurgen Kramer <gtmkramer@xs4all.nl>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-09-10 09:10:50 +02:00
Alexander E. Patrakov
622b1b6bdb pcm: fix return value of snd_pcm_share_slave_avail
The return value was wrong for playback if slave->hw_ptr was near the
boundary and *pcm->appl.ptr was near zero. The wrong result was greater
than the boundary.

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-09-02 07:20:36 +02:00
Alexander E. Patrakov
99a2254f5f pcm: fix snd_pcm_mmap_hw_avail() near the boundary
This function returned incorrect results when hw.ptr was near the
boundary and hw.appl_ptr was near zero. Here "incorrect" means "greater
than the boundary".

The result was incorrect, because it was used as a return value of
various *_rewindable() functions and also as the delay for ioplug.

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-09-01 15:27:46 +02:00
Dmitry Voytik
5f1960e3d8 doc: fix cross-compiling example
Simplest way to configure cross-compilation with configure
script is to pass '--host' option.
Passing just '--target' doesn't work.

Signed-off-by: Dmitry Voytik <voytikd@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-08-25 14:12:38 +02:00
Jurgen Kramer
b9f58dcc6f pcm: 2nd round of pcm_misc DSD fixes
Functions 'snd_pcm_format_silence_64' and 'snd_pcm_format_size' also need to be
able to handle the DSD smaple format.

Changes from v1:
- Correct silence pattern for DSD

Signed-off-by: Jurgen Kramer <gtmkramer@xs4all.nl>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-08-22 11:15:30 +02:00
Takashi Sakamoto
dfc3bf97bf Sync enum snd_hwdep_iface_t with include/asound/asound.h
Some members in this enumerated type has not updated for 9 years, although
kernel-drivers added them during this period. This commit adds them following
to a commit 87df9f3 'sync include/asound/asound.h with 3.17-rc1 kernel'.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-08-18 12:55:42 +02:00
Takashi Iwai
e8e5481133 pcm: Add missing signed and endianess definitions for DSD formats
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-08-11 11:55:03 +02:00
Takashi Iwai
717ae3dd90 Sync include/sound/asound.h with 3.17-rc1 kernel
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-08-11 11:51:29 +02:00
Jurgen Kramer
87df9f3b7a pcm: Fix DSD formats userland usability
Support for DSD sample formats has been added a while ago. This patch makes
those sample formats beter usable from userland (e.g. aplay).

[These implementation details have been forgotten in the previous DSD
 support patch -- tiwai]

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-08-11 11:51:04 +02:00
Shengjiu Wang
f6b879e7cc pcm: pcm_local.h: include <time.h> to enable CLOCK_MONOTONIC
CLOCK_MONITONIC is defined in <bits/time.h>, add <time.h> before
<sys/time.h>.

Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-23 12:06:49 +02:00
Takashi Iwai
7a5646f58b pcm: Drop snd_pcm_linear_{get|put}32_index()
These are identical with snd_pcm_linear_{get|put}_index().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-22 14:20:40 +02:00
Takashi Iwai
fd84adc63e pcm: route: Use get32 for multi-source route calculation
The PCM route plugin can assign the destination value from average of
multiple sources with attenuation.  This requires the read of each
channel value, sums and writes the resultant value in the requested
format.

Currently, get_labels is used for reading source values while
put32_labels is used for writing the dest value.  This is, however,
a buggy implementation; get_labels gives the value as is only with
endianness and signedness conversions, but put32_labels assumes that
the value is normalized to 32bit int and it shifts down to the dest
format.  In addition, the current code lacks get_labels entries for
the 24bit formats, as Shengjiu Wang spotted out.

For fixing these bugs, this patch replaces the read with
get32_labels and use always 64bit int for sum.  This simplifies the
code a lot and drops many lines.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-22 14:06:12 +02:00
Takashi Iwai
55c5362521 pcm: Fill sw_params proto field
Fill the new proto field introduced to sw_params with the current PCM
protocol version.  This makes tstamp_type evaluated properly in the
kernel.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-22 12:14:49 +02:00
Takashi Iwai
de63b942ac pcm: route: Use get/put labels for all 3 byte formats
So far, use_getput flag is set only when the src or dest format is
24bit physical width.  But, also 18 and 20 bit physical width formats
should set the flag, too.  This patch makes the check broader to cover
all 3 bytes formats.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-21 16:30:54 +02:00
Takashi Iwai
52444bd43a test/audio_time: Set timestamp type explicitly
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-14 18:12:49 +02:00
Takashi Iwai
65ff6fdafb pcm: Implement timestamp type handling in all plugins
Now all PCM plugins do support the proper timestamp type or pass it
over slaves.  The internal monotonic flag is dropped and replaced with
tstamp_type in all places.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-14 18:12:34 +02:00
Takashi Iwai
9b716075de pcm: Implement timestamp type setup in hw plugin
This patch implements the support for sw_params timestamp type in PCM
hw layer.  As gettimestamp() is still unchanged, the resultant
timstamps may be still with CLOCK_MONOTONIC even if you pass monotonic
raw type.  More fixes will follow.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-14 18:12:25 +02:00
Takashi Iwai
0d393c29a2 pcm: Add sw_params API functions to get/set timestamp type
For obtaining / changing the timestamp type, add the corresponding
sw_params accessor API functions together with the public definitions
of timestamp types.

This patch only adds the functions and defines but doesn't bring the
functional changes yet.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-14 18:12:21 +02:00
Takashi Iwai
5250a8e212 Add timestamp type to sw_params (internal only)
This patch is just the udpate of sound/asound.h taken from the kernel
commit.  The API changes and PCM structure changes will follow after
this.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-14 17:35:07 +02:00
Mark Brown
85e4704151 pcm: Provide a CLOCK_MONOTONIC_RAW timestamp type
For applications which need to synchronise with external timebases such
as broadcast TV applications the kernel monotonic time is not optimal as
it includes adjustments from NTP and so may still include discontinuities
due to that. A raw monotonic time which does not include any adjustments
is available in the kernel from getrawmonotonic() so provide userspace with
a new timestamp type SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW which provides
timestamps based on this as an option.

Reported-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Mark Brown <broonie@linaro.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-14 17:35:07 +02:00
Shengjiu Wang
035f196bcd pcm: rate: fix hw_ptr exceed the boundary
For long time test case, the hw_ptr will exceed the boundary, then cause
the avail size wrong.

Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-14 17:34:06 +02:00
Anssi Hannula
ea865bba46 USB-Audio: Add second S/PDIF device on Phiree U2
Phiree U2 has an unusual configuration. It only has S/PDIF output, but
there are still two devices presented:
- device 0: PCM audio, subject to volume control
- device 1: non-PCM data (passthrough), not subject to volume control

It looks like the AES bits are set according to the selected device,
since outputting PCM data via device 1 will not work (silence).

Currently only the device 0 is shown via the "iec958" alias, and the
second device is not accessible via hinted aliases.

Simply provide access to both of these devices via the "iec958" alias.

Reported-by: touc @ XBMC forum
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-08 12:36:03 +02:00
Alexander E. Patrakov
27cc710b57 ICE1712: add surround71 pcm definition
The M-Audio Delta 1010 card has 7.1 analog output, but no ready-made pcm
definition to use it.

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Reported-and-tested-by: Matt Zagrabelny <mzagrabe@d.umn.edu>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-07-01 11:28:00 +02:00
Tanu Kaskinen
7a748af4db ucm: Document PlaybackPCMIsDummy and CapturePCMIsDummy values
At least PulseAudio needs special handling for dummy devices. To allow
that to happen automatically, the UCM configuration should contain the
information about which PCMs are dummy.

Signed-off-by: Tanu Kaskinen <tanu.kaskinen@linux.intel.com>
Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-06-27 14:22:28 +02:00
Jaroslav Kysela
c2f8ef7ab0 Release v1.0.28
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-17 14:34:19 +02:00
Sergey
47ee780997 alsa-lib: pcm_plug: fix float conversion for user specified ttable
Move custom ttable with equal channels case from a separate ttable_last
exception into a common plugins insertion loop.
Fixes plug with ttable for float pcms (jack, ladspa).
Example: aplay -fFLOAT_LE /dev/zero
pcm.!default {
    type plug
    slave.pcm { type null }
    ttable.0.0 1
}

Signed-off-by: Sergey <sergemp@mail.ru>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-17 14:27:37 +02:00
Jaroslav Kysela
95ab1c1c7c Loopback.conf: fix the comment 2014-06-13 19:18:43 +02:00
Jordi Mallach
8bdec31570 Add -lm to test programs to fix build failure.
Add -lm to test programs that use sin(), to fix a build failure with recent
binutils.

Signed-off-by: Jordi Mallach <jordi@debian.org>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-13 18:46:12 +02:00
Jaroslav Kysela
5256e150eb pcm: rate plugin - remove the rewind/forward implementation
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-13 11:15:17 +02:00
Alexander E. Patrakov
614a66bb2a pcm: rate: add rewindable and forwardable callbacks
This commit does not fix nonsense values returned by the rewind and
forward callbacks. E.g., with period_size = 1024 and buffer_size = 4096,
an attempt to rewind 1024 samples from the nearly-full buffer returns
4090.

Due to these nonsense values, the current rate plugin should be treated
as non-rewindable. That's why the new callbacks return 0.

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-13 11:12:23 +02:00
Jaroslav Kysela
9c3086fb74 pcm: null plugin - fix the avail count
The automatic threshold start is not activated when the wrong avail
count is returned in the prepared state.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-13 10:46:54 +02:00
Alexander E. Patrakov
084e7a91d8 pcm: null: add rewindable and forwardable callbacks
Dirty, but consistent with avail_update.

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-13 09:06:13 +02:00
Alexander E. Patrakov
fb73f310f8 pcm: multi: implement rewindable and forwardable callbacks
Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-13 09:04:29 +02:00
Alexander E. Patrakov
68ae0c72a5 pcm:file: add the missing htimestamp callback
Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-13 08:51:37 +02:00
Anssi Hannula
042223c4ee pcm: Fix channel map query when there are lots of maps
On most HDA Intel HDMI devices, the channel map list is approx. 500 ints
in size, making the 256-sized buffer used by
snd_pcm_query_chmaps_from_hw() too small and causing the query to fail
(NULL result to caller, ENOMEM).

Bump the buffer size to 2048 ints.

Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-06-08 12:02:59 +02:00
David Henningsson
84f8b976c0 pcm: route: Correctly close slave pcm when no matching chmap is found
This patch fixes a bug where the slave pcm was not correctly closed
on some error conditions, such as not finding a matching chmap.

Reported-by: Raymond Yau <superquad.vortex2@gmail.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-05-27 11:21:52 +02:00
Alexander E. Patrakov
80a43f23db pcm: Fix forward/rewind support in iec958 plugin
When forwarding or rewinding, the frame counter was not updated. This
could result in corrupted channel status words or misplaced Z-type
preamble.

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-04-28 18:09:56 +02:00
Andrew Eikum
351870fd2d pcm: rate: Don't return negative frame count on success in rewind
snd_pcm_rewind is documented to return <0 on failure and >=0 on
success.

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-04-07 12:41:58 +02:00
Matthias Larisch
8dcce52ee0 pcm: ladspa: Delay LADSPA plugin activate call
Some LADSPA Plugins rely on connected control ports on activate call.
While this is not okay by spec, the spec also encourages the activate
call happening as late as possible.

Signed-off-by: Matthias Larisch <mail@matthias-larisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-04-03 12:02:03 +02:00
Takashi Iwai
015c34bf15 Revert "pcm: route: Don't handle no matching chmap as a serious error"
This reverts commit 5b72e3d530.

With the previous fixes, it's no longer needed as a workaround for
regression with PulseAudio.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-03-19 10:55:52 +01:00
Takashi Iwai
dbe6d7f869 route: Fix invalid pointer access
An uninitialized chmap pointer value is assigned in
_snd_pcm_route_open().  Add NULL initializations appropriately, and
also avoid the possible invalid access of NULL pcmp pointer.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-03-19 10:52:24 +01:00
David Henningsson
d794af65e9 route: Return NULL in case of zero found channels in determine_chmap
This should fix the problem where the old route syntax can no longer
be opened.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-03-19 10:40:44 +01:00
Takashi Iwai
5b72e3d530 pcm: route: Don't handle no matching chmap as a serious error
When find_matching_chmap() returns an error for the non-matching
chmap, the caller, snd_pcm_route_open(), also returns an error
although it shouldn't be handled as the fatal error.  This results in
the probe error with PulseAudio and it gives no real output in the
end.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-03-18 15:23:09 +01:00
Takashi Iwai
cbcc78031b src/conf/cards: Add missing entry for Loopback.conf
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-03-11 10:59:21 +01:00
MONTANARO Luciano (MM)
688004a6ac pcm: Wrap hw_ptr to boundary in pcm_ioplug
The function snd_pcm_ioplug_hw_ptr_update() always increased the hw_ptr
by delta, without wrapping it to the boundary. This would lead to
problems when after many hours, the hw_ptr would overflow.

Signed-off-by: Luciano Montanaro <luciano.montanaro@magnetimarelli.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-03-04 13:02:29 +01:00
David Henningsson
48f1b308cc conf: Allow 2.1 surround to use different number of channels
This way, cards that support LFE on four channels (e g laptop with
internal subwoofer) can do that, and other cards on a six channel setup
can use that as well.

Well, note that there is still a reference to "pcm.surround51" left here.
In practice, for HDA Intel sound cards this does not matter as both
surround51 and surround40 reference the same definition.
(And that's the only card I currently know of that actually does
surround2.1 over four channels.)

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-02-28 09:14:21 +01:00
David Henningsson
5c4cd46810 pcm: route: Select slave chmap based on ttable information
It means we need to initialize this order:

 1) Read the ttable to figure out which channels are present
 2) Open slave pcm and find a matching chmap
 3) Determine size of ttable (this can now depend on the chmap)
 4) Read ttable coefficients
 5) At prepare time, select the matching chmap

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-02-28 09:14:09 +01:00
David Henningsson
8ad8d22216 pcm: route: Allow chmap syntax for slave channels in ttable
Instead of writing e g "0" and "1", one can now write "FL" and "FR" instead.

E g:
	ttable.0.FL 1
	ttable.1.FR 1
	ttable.2.LFE 1

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-02-28 09:13:58 +01:00
Maarten Baert
2da7b0c2c1 pcm: Insert linear-to-float conversion when rate or channel count is incorrect
This fixes a bug where snd_pcm_plug_insert_plugins fails when both
client and slave use format float, but the rate or channel count does
not match. I also removed some redundant code.

Signed-off-by: Maarten Baert <maarten-baert@hotmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-02-26 14:39:18 +01:00
Patrick Welche
b669b50de2 autotools: update style
- rename configure.in to configure.ac
- replace INCLUDES with AM_CPPFLAGS
- modernize AM_INIT_AUTOMAKE invocation

Signed-off-by: Patrick Welche <prlw1@cam.ac.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-02-26 08:16:22 +01:00