Commit graph

2631 commits

Author SHA1 Message Date
Siarhei Siamashka
84d91fb708 sbc: added saturated clipping of decoder output to 16-bit
This prevents overflows and audible artefacts for the audio files which
originally had loudness maximized. Music from audio CD disks is an
example of such files, see http://en.wikipedia.org/wiki/Loudness_war
2011-03-14 15:07:38 -03:00
Siarhei Siamashka
4d2f0daba1 sbc: ensure 16-byte buffer position alignment for 4 subbands encoding
Buffer position in X array was not always 16-bytes aligned.
Strict 16-byte alignment is strictly required for powerpc altivec
simd optimizations because altivec does not have support for
unaligned vector loads at all.
2011-03-14 15:01:19 -03:00
Luiz Augusto von Dentz
e4eb467010 build: move sbc related files to its own directory
This should make it easier to apply patches from BlueZ which also uses
sbc subdir for this files.
2011-03-14 14:52:52 -03:00
Luiz Augusto von Dentz
ad85624527 bluetooth: add proper handling for bluetooth.nrec property
NREC stands for Noise Reduction and Echo Cancelation, it can be changed
at any point by the headset.

When set to "1" indicates that those algorithms shall be enabled by
default and "0" means the headset probably have them active so they
should be disabled in PA side.
2011-03-14 14:52:52 -03:00
Luiz Augusto von Dentz
97f7c5759e bluetooth: fix a2dp_process_push
Use minimum bitpool configured to get the maximum block_size possible,
also remove checks for how much has been written when decoding sbc frames
since the block size may change due to bitpool changes.
2011-03-14 13:52:29 -03:00
Luiz Augusto von Dentz
1c388f977a bluetooth: reduce bitpool if audio start skipping
When audio skips it could be that there is some bandwidth limitation in
the link e.g. headset doesn't support EDR (< 2.0), and by reducing
the bitpool it may find a better rate that either prevent the skips
completely or at least reduce them.
2011-03-14 13:51:48 -03:00
Luiz Augusto von Dentz
8c982a4afe bluetooth: handle Acquire API change
Acquire now return input and output MTU of the file descriptor so it is
no longer necessary to get those after acquiring the fd, which less round
trips and faster response time when switching profiles.
2011-03-14 13:36:55 -03:00
Colin Guthrie
dda564f50b cork-on-phone: Only cork (and subsequently uncork) streams that are not already corked.
Although by "cork" I really mean "cork+mute" as that's what the module
does.

If e.g. Rhythmbox is paused when a phone call comes in, the current
stream state will be corked and thus we should not track it for future
uncorking when the phone call ends.

Likewise if the stream is just muted (manually) we will not take any
action either when the phone stream is seen first, nor when it
disappears.

Also add some additional debug messages.
2011-03-12 13:09:00 +00:00
Maarten Bosmans
ecf09f2cd6 Fix up according to Coding Style
Only whitespace changes in here
2011-03-11 11:49:35 +00:00
Tanu Kaskinen
5715b2af30 alsa-mixer: When figuring out the max_dB of a path, use only channels that are used by the path elements.
Without this, p->max_dB could never be less than 0 dB, because the loop at the
end of pa_alsa_path_probe() would reset p->max_dB to 0 as soon as the loop
encountered a channel that wasn't touched by any element.

There was a similar issue for p->min_dB too (it could never be more than 0 dB),
which is also fixed by this patch.
2011-03-11 13:41:28 +02:00
Tanu Kaskinen
064780d9de alsa-mixer: Implement support for setting element specific upper limits for volume.
This feature is mainly useful in embedded systems that have built-in speakers.
In such situations the full audio path is known beforehand, so it's possible to
know what is the maximum sensible volume, and any higher volume can be
disabled.

The volume limit is set in path configuration files in the [Element] section,
using option "volume-limit". The value is the desired maximum volume step of
the volume element.
2011-03-11 13:40:51 +02:00
Tanu Kaskinen
68e6340394 dbus: Always accept mono volumes when setting device or stream volume.
pa_sink_set_volume() and friends accept mono volumes too, so no need to impose
unneeded restrictions in the D-Bus API.
2011-03-11 13:40:34 +02:00
Tanu Kaskinen
6c5e3af275 dbusiface-stream: Fix crash when there's no resampling used. 2011-03-11 13:40:20 +02:00
Tanu Kaskinen
973813485f alsa-card: Print the profile set configuration when loading the card. 2011-03-11 13:39:50 +02:00
Tanu Kaskinen
00a05a8272 alsa-mixer: Add a default case for a switch, so that the compiler won't complain about unhandled cases. 2011-03-11 13:38:05 +02:00
Tanu Kaskinen
e01a28cd53 alsa-mixer: Use decibel fixes when getting and setting decibel volumes. 2011-03-11 13:37:17 +02:00
Tanu Kaskinen
4842077a1e alsa-mixer: Add DecibelFix section to the profile set config file format.
This commit only implements the parser, the decibel fix data is not yet used
for anything.
2011-03-11 13:34:24 +02:00
Colin Guthrie
f4a2a8ebfe alsa-mixer: Fix a git-am cockup in b0f72311
It seems git managed to mess up a git-am with a patch from
David which moved where this function was called element_probe
to within itself (recursive which could normally lead to an
infinite loop, but as it was now never called from anywhere else,
this didn't happen).

Thank you to Maarten for spotting and following up the issue.
2011-03-04 09:50:27 +00:00
Maarten Bosmans
9cbf19b59b Various fixes for build warnings 2011-03-02 15:02:42 +00:00
Maarten Bosmans
38d0f4d15f Include <time.h> where necessary 2011-03-01 18:06:28 +01:00
David Henningsson
7b366a52c3 alsa-mixer: Add support for "Line Boost" element
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-02-28 13:30:51 +00:00
Tanu Kaskinen
bed4b73cfe Add src/*-symdef.h to .gitignore.
Also remove src/module/.gitignore as this is no longer needed
as pointed out by Arun Raghavan
2011-02-28 09:56:08 +00:00
Tanu Kaskinen
6bd34156b1 virtual-sink: Fix a crash when moving the sink to a new master right after setup.
If the virtual sink is moved to a new master right after it has been created,
then the virtual sink input's memblockq can be rewound to a negative read
index. The data written prior to the move starts from index zero, so after the
rewind there's a bit of silence. If the memblockq doesn't have a silence
memchunk set, then pa_memblockq_peek() will return zero in such case, and the
returned memchunk's memblock pointer will be NULL.

That scenario wasn't taken into account in the implementation of
sink_input_pop_cb. Setting a silence memchunk for the memblockq solves this
problem, because pa_memblock_peek() will now return a valid memblock if the
read index happens to point to a hole in the memblockq.

I believe this isn't the best possible solution, though. It doesn't really make
sense to rewind the sink input's memblockq beyond index 0 in the first place,
because now when the stream starts to play to the new master sink, there's some
unnecessary silence before the actual data starts. This is a small problem,
though, and I don't grok the rewinding system well enough to know how to fix
this issue properly.

I went through all files that call pa_memblockq_peek() to see if there are more
similar bugs. play-memblockq.c was the only one that looked to me like it might
be broken in the same way. I didn't try reproducing the bug with
play-memblockq.c, though, so I just added a FIXME comment there.
2011-02-26 10:40:06 +00:00
Tanu Kaskinen
b3644c1bcd virtual-sink/source: Remove an unused variable. 2011-02-26 10:39:53 +00:00
Tanu Kaskinen
1fda23c02c virtual-sink/source: Use a more descriptive stream name. 2011-02-26 10:39:38 +00:00
Tanu Kaskinen
d2d36beb80 virtual-sink: Add a modarg for forcing flat volume. 2011-02-26 10:38:28 +00:00
Tanu Kaskinen
8702d15d03 virtual-sink: Add a modarg for enabling volume sharing. 2011-02-26 10:38:15 +00:00
David Henningsson
dbdb4607b0 alsa-mixer: Make sure capture source and input source use right path
Make sure that mic and line (with common names) use the specific
path instead of the analog-input one.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-02-25 15:55:55 +00:00
David Henningsson
65317c8241 alsa-mixer: Fixup "Mic"/"Line"/"analog-input" paths to work with the new paths
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-02-25 15:55:39 +00:00
David Henningsson
3618268757 alsa-mixer: Add new paths for Internal Mic, Front Mic, Rear Mic and Dock Mic
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-02-25 15:54:59 +00:00
David Henningsson
ade0a6f884 alsa-mixer: always round towards 0 dB
Always round towards 0 dB. Also add a few debug comments to aid
troubleshooting.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-02-25 15:54:48 +00:00
David Henningsson
b0f72311cf alsa-mixer: add required-any and required-* for enum options
Now you can add required-any to elements in a path and the path
will be valid as long as at least one of the elements are present.
Also you can have required, required-any and required-absent in
element options, causing a path to be unsupported if an option is
(not) present (simplified example: to skip line in path if
"Capture source" doesn't have a "Line In" option).

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-02-25 15:48:11 +00:00
David Henningsson
0ce3017b74 alsa-mixer: Add a few well-known descriptions
Add front mic, rear mic, and docking line-in. These are likely to be
present on modern hda chips, for reference see
linux-2.6/sound/pci/hda/hda_codec.c:hda_get_input_pin_label

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-02-25 15:47:56 +00:00
Tanu Kaskinen
624152dac3 alsa-card: Add a new modarg "profile_set" for giving the card a custom profile set configuration file. 2011-02-25 15:44:57 +00:00
Tanu Kaskinen
46359043c4 alsa-mixer: Fix path set building when using the element-output or element-input mapping options in profile set configuration.
When creating synthesized paths, pa_alsa_path_set_new() created duplicate
elements for each path, and one of the duplicate elements would be marked as
required absent. That made path probing fail. While debugging this, I noticed
also that pa_alsa_path_synthesize() didn't initialize p->last_element properly.
2011-02-25 15:44:44 +00:00
Kim Therkelsen
6bd32ee2d9 Support for multichannel DSP processing in module-ladspa-sink 2011-02-25 09:55:31 +00:00
Colin Guthrie
a3dbdb0446 Merge remote-tracking branch 'mkbosmans/mingw32-build' 2011-02-25 09:24:07 +00:00
Edward Rudd
ee4a33b586 solaris: update call of pa_thread_new to new prototype 2011-02-22 21:32:53 +00:00
Edward Rudd
03c4fd5c4c coreaudio: Fix call to pa_thread_new 2011-02-22 21:32:09 +00:00
Tanu Kaskinen
99ddca89cd Allow read-only or non-existing sink input volume.
There are two known cases where read-only or non-existing sink input volume is
relevant: passthrough streams and the planned volume sharing logic.
Passthrough streams don't have volume at all, and the volume sharing logic
requires read-only sink input volume. This commit is primarily working towards
the volume sharing feature, but support for non-existing sink input volume is
also added, because it is so closely related to read-only volume.

Some unrelated refactoring in iface-stream.c creeped into this commit too (new
function: stream_to_string()).
2011-02-22 20:12:31 +00:00
Tanu Kaskinen
fa12d2a8a8 dbusiface-stream: Send the Device property in the GetAll handler. 2011-02-22 20:10:17 +00:00
Tanu Kaskinen
969c7c80fe core: Link virtual sinks and sources to their streams.
This change doesn't add any functionality in itself, but it will be useful in
the future for operating on chains of sinks or sources that are piggy-backing
on each other.

For example, the PA_PROP_DEVICE_MASTER_DEVICE property could
be handled in the core so that each virtual device doesn't have to maintain it
separately. By using the origin_sink and destination_source pointers the core
is able to see at stream creation time that the stream is created by a virtual
device, and then update that device's property list using the name of the
master device that the stream is being connected to. The same thing can be done
also when the stream is being moved from a device to another, in which case the
_MASTER_DEVICE property needs updating.
2011-02-22 10:10:48 +00:00
Maarten Bosmans
110b14ec21 module-waveout: Adapted to updated API
Waveout sink works again, Wavein source still needs some work.
2011-02-17 12:02:31 +01:00
Maarten Bosmans
a951c779c6 Use PCRE if POSIX regex.h is not available 2011-02-17 11:58:22 +01:00
Maarten Bosmans
bb12ff8356 Apply #ifdefs around functionality not available on win32
And also the reverse: around some win32 specific functionality
2011-02-17 11:58:22 +01:00
Maarten Bosmans
4f1d4044f8 Use <pulsecore/socket.h> instead of <sys/socket.h>
The check whether POSIX socket.h or WIN32 winsock2.h must be included can be
made centrally.  The downside is that some functionality of e.g. arpa/inet.h is
also implemented in winsock.h, so that some files that don't use socket
functions, but do use inet.h functions, must also include pulsecore/socket.h.
(as well as arpa/inet.h)
2011-02-17 11:58:21 +01:00
Maarten Bosmans
d6d9fb295d Clean up <poll.h> includes
Instead <pulsecore/poll.h> should be included.  That file includes poll.h on
platform where it is appropriate.  Also remove some unnecessary <ioctl.h>
includes.
2011-02-17 11:58:21 +01:00
Pierre-Louis Bossart
051d82133f alsa: disable period wakeups in tsched mode if possible
This patch reflects a new capability that Lennart was wishing
for. Wish granted...

Re-submitting it now that alsa-lib 1.0.24
provides additional entry points to disable period
wakeups in timer-scheduling mode if hardware can
work without it (HDAudio, oxygen and Intel SST).

    Example with standard playback on HDAudio output
    Before change:

    Top causes for wakeups:
       3.8% (  5.4)   [hda_intel] <interrupt>
       2.8% (  4.0)   alsa-sink

    After change:
    Top causes for wakeups:
       2.3% (  3.0)   alsa-sink

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@intel.com>
2011-02-01 09:41:02 +00:00
Arun Raghavan
9498440dc6 echo-cancel: Make Orc file names less silly
The naming was what it was because of the way orc.mak was originally
written. This has changed now.
2011-02-01 11:51:46 +05:30
Arun Raghavan
a9d824925d build: Simplify Orc-related make rules
This greatly simplifies the Orc-related make rules. The old system of
distributing generated files is gone, which means that anyone who wants
to build with Orc support enabled needs to have the orcc compiler
installed (presumably the orc 'devel' package in most distros).
2011-02-01 11:51:46 +05:30