Commit graph

1610 commits

Author SHA1 Message Date
Colin Guthrie
0698d223a6 alsa-mixer: Add UAC1.0 Sennheiser Dongle to the usb-headset profile.
Reported by Sean McNamara
2011-06-26 14:22:06 +01:00
Colin Guthrie
9352898b72 alsa-mixer: Add an mixer profile exception for a BT Agile handset 2011-06-25 13:02:02 +01:00
David Henningsson
1c38b5d478 alsa-mixer: Add workaround for some USB headsets
This is a workaround - these usb headsets have one output volume
control only, labeled "Speaker". This causes the default profile
set to not control the volume at all, which is a bug. Workaround
that by creating a separate profile set.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2011-06-25 12:53:44 +01:00
Maarten Bosmans
5818a2c63e win32: Make some unused-variable warnings go away 2011-06-24 00:34:05 +01:00
Maarten Bosmans
f0eab391df Remove obsolete description property from modules 2011-06-24 00:29:24 +01:00
Bryan Gleeson
c8f0a649cf raop: Change socket buffer size handling to avoid playback underruns
When a TCP socket is created the size of the send buffer (SO_SNDBUF) used is
determined by the OS, using the net.ipv4.tcp_wmem sysctl parameter. Previously
a call to setsockopt set the buffer size to a value that was too small, and
that in some cases could result in underruns and choppy playback. This
setsockopt call has now been removed so that the value determined by the OS
is used unchanged.

Note that the value used for the send buffer size is the 2nd value in
net.ipv4.tcp_wmem, e.g. if this is set to "4096 65536 8388608" the send buffer
size is set to 65536.
2011-06-22 23:15:57 +01:00
Maarten Bosmans
dd9265ac78 Remove unnecessary #includes 2011-06-22 23:12:20 +01:00
Colin Guthrie
9ffa9382dd database: Support legacy format database entries.
This adds code to specifically support legacy entries.
I kept this code in a separate commit so that it can be (relatively)
easily removed at some point in the future.
2011-06-22 23:12:20 +01:00
Colin Guthrie
35f99c6e31 device-restore: Add a new protocol extension for device-restore.
This simply exposes the formats that a device supports
via a simple protocol extension that will allow clients
to setup what a connected receiver supports format wise.
2011-06-22 23:12:19 +01:00
Colin Guthrie
695d536380 database: Convert our use of database files to save in tagstruct format.
This has the advantage of allowing versioned updates in the future,
thus allowing us to be more user friendly going forward (as opposed
to just ignoring entries from old versions).

The primary motivation for this, however, is to allow variable length
storage in each entry which will be needed for upcoming work.

At present this commit will ignore any legacy entries but support
for reading and subsequently converting legacy entries will be added
shortly.
2011-06-22 22:47:55 +01:00
Juho Hämäläinen
4eb513cbf4 alsa-mixer: select nearest alsa volume step in sync-volume mode 2011-06-22 22:45:27 +01:00
Colin Guthrie
1e7c4dd3e6 alsa-mixer: When setting hw volume, always round up with playback and down with capture.
The previous logic in ade0a6f884
does not work with for input volumes.

This was discussed on the mailing list:

https://tango.0pointer.de/pipermail/pulseaudio-discuss/2011-May/010091.html

This approach can introduce a problem when setting the volumes
for sources. What follows is Tanu Kaskinen's analysis:

[quote]
I'll quote the log:

D: protocol-native.c: Client pavucontrol changes volume of source alsa_input.pci-0000_00_1b.0.analog-stereo.
D: alsa-source.c: Requested volume: 0:  45% 1:  45%
D: alsa-source.c:            in dB: 0: -20.71 dB 1: -20.71 dB
D: alsa-source.c: Got hardware volume: 0:  45% 1:  45%
D: alsa-source.c:               in dB: 0: -21.00 dB 1: -21.00 dB
D: alsa-source.c: Calculated software volume: 0: 101% 1: 101% (accurate-enough=no)
D: alsa-source.c:                      in dB: 0: 0.29 dB 1: 0.29 dB
D: source.c: Volume going up to 29273 at 270475970821
D: source.c: Volume change to 29273 at 270475970821 was written 34 usec late
D: alsa-source.c: Written HW volume did not match with the request: 0: 45% 1:  45% (request) != 0:  42% 1:  42%
D: alsa-source.c:                                            in dB: 0: -21.00 dB 1: -21.00 dB (request) != 0: -22.50 dB 1: -22.50 dB

Looking at the last line, the requested volume seems to hit exactly the
right step (-21.00dB), but for some reason Alsa decides to choose
something else. I'm pretty sure that this happens because of rounding
errors. In the first phase we ask Alsa what dB value we should set, and
it returns -21.00 dB. The value is given as a long int, but we convert
that to pa_cvolume. Then when we set the volume, we convert the
pa_cvolume value back to a long integer. At this point I believe it gets
converted to -2101. This is not visible in the debug message for some
reason - the rounding algorithm must be different from what was used
with the pa_cvolume -> long conversion.
[/quote]

The commit after this contains a patch that addresses this issue.
2011-06-22 22:45:27 +01:00
Colin Guthrie
d1a628855d alsa: Remove unneeded include 2011-06-22 22:45:27 +01:00
Colin Guthrie
dffc4d18d3 capture: Implement per-stream volume control for capture streams.
This piggy backs onto the previous changes for protocol 22 and
thus does not bump the version. This and the previous commits should be
seen as mostly atomic. Apologies for any bisecting issues this causes
(although I would expect these to be minimal)
2011-06-22 22:45:27 +01:00
Colin Guthrie
5d35375aa7 capture: Add the passthrough format negotiation to capture streams.
This helps to keep the API more symmetrical and also potentially
allows support for passthrough monitor sources at some point in the future.
2011-06-22 21:55:27 +01:00
Colin Guthrie
dc6c272625 alsa-sink: Some trivial tidyups
Mostly typo fixes but also a change to make a function relating
to sink inputs use more generic variable names.
2011-06-22 21:53:19 +01:00
Tanu Kaskinen
62e43f9181 bluetooth-discover: Remove remaining ifdef NOKIAs.
These were supposed to be removed already in 13849f153, but
at that time I missed the ifdefs in
module-bluetooth-discover.c.
2011-06-22 14:56:32 +01:00
Arun Raghavan
4e9328cb93 echo-cancel: More preprocessing fixes
The speex_preprocess_ctl() function takes a spx_int32_t, but we've been
passing a pa_bool_t, which could potentially crash.
2011-06-13 15:25:54 -07:00
Arun Raghavan
b2f83b2502 echo-cancel: Fix preprocessor initialisation
We were using the block size in bytes instead of samples, which meant
preprocessing was broken. This fix makes a large-ish difference in the
quality of echo-cancellation with speex.
2011-06-13 15:25:32 -07:00
Colin Guthrie
1c6e5d4e81 combine: Fix a crash on shutdown if the module is loaded outside of our control.
By using module indexes rather than module pointers we avoid this posibility.
2011-06-08 20:27:51 +01:00
Colin Guthrie
b865999126 device-manager: Free a hook slot to prevent segv on unload 2011-06-06 21:16:28 +02:00
Forest Bond
21ac93e4eb module-combine-sink: Check running flag before rendering in null mode
This makes process_render_null consistent with render_memblock and
avoids introducing slight inaccuracies in early latency estimates.
2011-06-02 11:53:15 +02:00
Forest Bond
249218b944 module-combine-sink: Initialize smoother in paused state
The smoother is paused on initialization and resumed when the sink
state is set to running.  Otherwise, early latency estimates are
too low since there is some delay between module initialization and
entering the running state.

After the smoother is initially resumed, it is paused when the sink
state is not running.  The previous behavior was to pause only when
the sink enters suspended state, however, this would lead to large
errors in latency estimates after the sink has been idle for some
time.
2011-06-02 11:52:01 +02:00
Forest Bond
ab808930ef module-combine-sink: Initialize smoother with offset pa_rtclock_now()
The smoother was being initialized with offset zero, which caused
the sink latency to be unconditionally reported as zero.
2011-06-02 11:46:59 +02:00
Lu Guanqun
6efa693fe7 alsa-mixer: Fix the assumption that volume is always positive
Add a variable to track whether the actual volume is set or not.
Suppose this:
	min volume: -126	max volume: 0
then when user wants to set some constant volume to -10, it would fail.

While the alsa values are typically positive, some values are "funky"
and have negative values. It is desirable to fix this at the alsa
level so that the numbers are positive, but it's not technically
invalid, and thus we have to support it.

Discussed here:
http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/9832
and
http://thread.gmane.org/gmane.linux.alsa.devel/85459
2011-05-30 11:22:21 +01:00
Arun Raghavan
b0f5b8d2fa echo-cancel: Fix a crash is speex cleanup
If module initialisation fails, the speex done() function might try to
free a value that's not been allocated yet. Adding protection for this
condition.
2011-05-28 07:59:49 +05:30
Bart Cerneels
9e78de2da2 echo-cancel: Fix echo suppression, add some knobs
The echo suppress attenuation value was being incorrectly modified.
Fixed and added 2 arguments to change the attenuation of the residual
echo filter. Default values of the speex preprocessor will be used when
omitted.
2011-05-28 07:59:07 +05:30
Bart Cerneels
4fd3efa46b echo-cancel: Speex preprocessor has to run *after* the AEC.
This is how it is expected to be run.
2011-05-28 07:56:00 +05:30
Arun Raghavan
0ecf51119a echo-cancel: Add speex preprocessing
This allows the selective enabling of speex' preprocessing algorithms
before running the echo-canceller -- for now this includes automatic
gain control, noise suppression and echo suppression. It's all off by
default for now, though at some point in the near future we might want
to enable at least denoising by default.

The denoising works pretty well, though we might want to add a way to
tweak the noise-suppression knob that libspeex provides.

The AGC option is just a stop-gap -- we need a real AGC mechanism that
tweaks the source volume rather than doing this in software.

The speex documentation mentions VAD and dereverb, but it appears that
these are not complete yet.

We don't do all this in a separate module from module-echo-cancel to
avoid the overhead of adding another virtual source. It makes more sense
to make a separate virtual source module that can be used for cases
where preprocessing is useful but AEC is not (for e.g. noise suppression
for fan noise in a recording application).

Another reason to keep this integrated with the AEC module is that the
echo suppression bits use the speex echo canceller state. This does leak
some information about the AEC implementation into module-echo-cancel,
but this is unavoidable.
2011-05-24 13:51:28 +05:30
Arun Raghavan
f4eccad1e6 echo-cancel: Remove extraneous debug message
This was making it impossible to run in debug mode with save_aec=1
2011-05-20 10:01:57 +05:30
Arun Raghavan
8305284cd2 echo-cancel: Don't overpad variable
The padding was to be 16 bytes, not 16 elements.
2011-05-16 20:22:10 +05:30
Tanu Kaskinen
3c4accfde2 loopback: Add a modarg for disabling remixing. 2011-05-15 15:11:36 +01:00
Colin Guthrie
ce8b03bb26 bluetooth: Fix early return styling and add missing return value
Thanks to Tanu Kaskinen for pointing out the missing return.
2011-05-15 15:05:55 +01:00
Jyri Sarha
ff79b3147c suspend-on-idle: Trigger mempool vacuuming
In a setup with one or more filter sinks or sources there is always at
least one stream existing. In such a situation normal mempool
vacuuming never happens. This patch causes suspend-on-idle module to
vacuum memory when ever it notices that all sinks and sources are
suspended. The behavior can be enabled with a module parameter.
2011-05-15 14:59:35 +01:00
Colin Guthrie
26b4bd74aa Merge branch 'passthrough' 2011-05-15 13:14:33 +01:00
Arun Raghavan
7ebc503363 module-tunnel: Update for recent protocol changes
This updates the tunnel module for protocol version >= 19.

module-tunnel-sink does not proxy server-side passthrough support (yet).
This would require a few more changes, namely keeping track of what
formats are available and if any other sink inputs are connected on the
server-side.
2011-05-15 10:09:35 +05:30
Arun Raghavan
be4208d079 echo-cancel: Remove unnecessary noalign attribute
This was just introduced for debugging and should not have been in the
final commit. Won't make a difference at the moment since this function
is used as a pointer, but removing this in case we change this in the
future.
2011-05-11 10:30:38 +01:00
Arun Raghavan
e678beaf14 echo-cancel: Handle alignment requirement manually
PA_ALIGNED can't always guarantee that the alignment we want (the GCC
man page suggests that the linker might not be able to meet the
alignment requirements we desire). Instead, we now allocate some extra
memory and guaratee that the alignment we require is met.
2011-05-11 10:30:38 +01:00
Arun Raghavan
320b70e94e filter-apply: Mark modules as being autoloaded
(Based on Colin's review) We mark modules as being autoloaded so that
they can handle this as a special case if needed (which is required by
module-echo-cancel for now). This inverts how things were done and makes
using these modules manually less error-prone.
2011-05-03 09:13:00 +01:00
Arun Raghavan
4fb68b91ac core: Factor out passthrough checks into their own functions
Since we currently have two mechanisms to signal a passthrough
connection (non-PCM format or PA_SINK_INPUT_PASSTHROUGH flag), we move
all the related checks into functions and use those everywhere.

This makes things more consistent, and should we decide to get rid of
the flag, we only need to change pa_sink_input_*_is_passthrough()
accordingly.
2011-05-02 11:55:39 +05:30
Arun Raghavan
49b10ba694 alsa: Reconfigure sink sample rate for passthrough inputs
When a passthrough sink-input is added, we need to reconfigure the
sink's sample rate since no resampling occurs. We revert to the original
rate when the passthrough sink-input is removed.
2011-05-02 11:55:38 +05:30
Arun Raghavan
20f1fa17be alsa-mixer: Remove passthrough profiles
These aren't used any more - we handle passthrough mode in the iec958*
profiles now.
2011-05-02 11:55:38 +05:30
Arun Raghavan
71ec9577cf sink: Remove PASSTHROUGH flag
This removes the passthrough flag from sinks since we will drop
exclusively passthrough sinks in favour of providing a list of formats
supported by each sink. We can still determine whether a sink is in
passthrough mode by checking if any non-PCM streams are attached to it.
2011-05-02 11:54:48 +05:30
Arun Raghavan
0ac2cfce6d core: Add extended stream API to support compressed formats
This is the beginning of work to support compressed formats natively in
PulseAudio. This adds a pa_stream_new_extended() that takes a format
structure, sends it to the server (=> protocol extension) and has the
server negotiate with the appropropriate sink to figure out what format
it should use.

This is work in progress, and works only with PCM streams. Actual
compressed format support in some sink needs to be implemented, and
extensive testing is required.

More details on how this is supposed to work is available at:
http://pulseaudio.org/wiki/PassthroughSupport
2011-05-02 11:54:43 +05:30
Arun Raghavan
233ef98bf1 filter-apply: Mark modules as being autoloaded
(Based on Colin's review) We mark modules as being autoloaded so that
they can handle this as a special case if needed (which is required by
module-echo-cancel for now). This inverts how things were done and makes
using these modules manually less error-prone.
2011-05-02 10:08:27 +05:30
Colin Guthrie
512baa1a1f combine: Rename module-combine to module-combine-sink.
This also includes a compatibility module that will ultimately be removed in
a future release.
2011-04-30 15:12:45 +01:00
Luiz Augusto von Dentz
94e12b9aec bluetooth: Only close SCO if status has changed
In case the io thread is starting there is no point on closing SCO just
to resume it latter when the source/sink changes to opened state.
2011-04-30 14:26:46 +01:00
Luiz Augusto von Dentz
6f99198c41 bluetooth: Fix using pointer-pointer when appending an array as variant
pa_dbus_append_basic_array_variant_dict_entry should take the direct
pointer to the array.
2011-04-30 14:26:45 +01:00
Luiz Augusto von Dentz
95422110ba bluetooth: Fix not updating sample spec when using Media API
When using transport configured via Media API sample spec needs to be
updated since codec configuration may affect it when e.g. headset
configure a different frequency or number of channels from default.
2011-04-30 14:26:45 +01:00
Tanu Kaskinen
2f7eb35f37 dbus: Fix the order of freeing stuff when unloading module-dbus-protocol. 2011-04-29 12:38:43 +01:00