I've seen more than one system where the volume control named
"Front" is a part of audio path for headphones. This is somewhat
of a compromise: While we don't merge it into the path, as that
would be regressing machines where "Front" isn't a part of the
audio path, it would still enable sound on these machines.
BugLink: http://bugs.launchpad.net/bugs/804178
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Unlinked streams can not be moved, so don't try.
BugLink: http://bugs.launchpad.net/bugs/837386
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
When unloading, some module may end up trin to move a sink-input or
source-output back onto our virtual sink/source, causing an infinite
loop of us moving the stream away and having it moved back.
We prevent this from happening by preventing any stream from being
attached during unload.
The priorities should be set in the approximately likeliness that someone
would like to use them. This is hard to guess of course, but this is
a better guess compared to the existing configuration.
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
This will allow for volumes to be saved separately for e.g. Headphones vs. Speakers.
At present it is possible that no volume will be saved for the device prior to the port
switch. In this case the volume will not change from the value set under the other port.
In an ideal world we would save the volume before switching port, but that would require
a new hook.
The device restore saves both the current port for a device, and the volume/mute/formats.
The latter three are really related to the device+port, not the device on it's own.
Thus we store just the port for a device in one key and the volume/mute/formats
under a different key that includes both the device and the port.
I initially included put the Speex preprocessing assuming that we'd want
to use the digital gain control and noise suppression from Speex for all
echo cancelling implementations. In practice, we're probably going to
get entire implementations all processing in one package (WebRTC, custom
modules from various vendors, etc.).
This moves out this preprocessing and related knobs into the speex
implementation, which serves to clean out all implementation-specific
details from the module-echo-cancel core.
This reverts commit ba163b8b23.
After discussion with Colin, decided that we don't want to do this
piecemeal -- need some discussion on the mailing-list and then we should
do this across the tree in one fell swoop post 1.0.
Conflicts:
src/modules/module-device-restore.c
This is required for E-AC3 streams, as well as to let receivers we're
sending non-PCM data (which avoids playing noise if the data is
incorrect for some reason).
The "Line HP Swap" element needs to be set correctly for some Dove
boards to work correctly. Thanks to Daniel T Chen for the patch.
BugLink: http://bugs.launchpad.net/bugs/451635
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
This switch needs to be off for analog output to work on several
Audigy cards.
Thanks to Daniel T Chen for the patch.
BugLink: http://bugs.launchpad.net/bugs/408370
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Removing the bit that automatically loads module-echo-cancel for phone
streams. Clients need to specifically opt in for this now with
filter.want, until we are reasonably certain this won't break other apps
(Skype for one, possibly others).
The order of freeing the hashmaps is important here, because otherwise a string used as key is freed before the hashmap
is freed.
Valgrind reports this as:
Invalid read of size 1
at 0x4107042: pa_idxset_string_hash_func (idxset.c:67)
by 0x4106026: remove_entry (hashmap.c:93)
by 0x41061BF: pa_hashmap_free (hashmap.c:110)
by 0x71DD143: pa_dbusiface_core_free (iface-core.c:2105)
by 0x71F2169: module_dbus_protocol_LTX_pa__done (module-dbus-protocol.c:595)
by 0x406DC51: pa_module_free (module.c:162)
by 0x406E01D: pa_module_unload_all (module.c:210)
by 0x4068842: core_free (core.c:169)
by 0x406FD5D: pa_object_unref (object.c:64)
by 0x805224D: pa_core_unref (core.h:184)
by 0x805560B: main (main.c:1159)
Address 0x4d099c0 is 0 bytes inside a block of size 100 free'd
at 0x4025BF0: free (vg_replace_malloc.c:366)
by 0x40F128C: pa_xfree (xmalloc.c:131)
by 0x71E4CEB: pa_dbusiface_device_free (iface-device.c:1293)
by 0x71DCD7E: free_device_cb (iface-core.c:2062)
by 0x41061D7: pa_hashmap_free (hashmap.c:113)
by 0x71DD125: pa_dbusiface_core_free (iface-core.c:2104)
by 0x71F2169: module_dbus_protocol_LTX_pa__done (module-dbus-protocol.c:595)
by 0x406DC51: pa_module_free (module.c:162)
by 0x406E01D: pa_module_unload_all (module.c:210)
by 0x4068842: core_free (core.c:169)
by 0x406FD5D: pa_object_unref (object.c:64)
by 0x805224D: pa_core_unref (core.h:184)
The commit 7ebc5033 resulted in segfaults, because format->plist was not allocated.
The solution is not to allocate pa_format_info on the stack, but to properly use pa_format_info_new().
Also a typo regarding pa_tagstruct_putu8 is corrected.
This makes the pa_bool_t members of userdata not be a single bit field
since pa_bool_t can be an int, potentially causing signedness issues in
comparisons.
This implements the sink get_formats() and set_formats() API in
alsa-sink. Modules can use this to allow users to specify what formats
their receivers support.
Note in protocol-dbus.c specifically, method_signatures needs to be freed
before method_handlers, because otherwise h->method_name is freed while it is
still in use as a key in the method_signatures hashmap.
revents marked as POLLOUT|POLLERR|POLLWRNORM in "underrun" case that will
trigger unexpected log "ALSA woke us up to write new data to the device, but
there was acturally nothing to write...".
This patch avoids this log message.
* Fix extension API function export list.
* Ensure we trigger a subscription event when things change.
* Send the index with our subscription events.
* Clear out any existing formats when saving.
* Call the correct extension command for subscriptions.
As reported in http://kpaste.net/04f1f3f
it is possible to call enumeration_is_subset with null pointers.
Handle that case instead of crashing. (It is also possible that
Tanuk's pending element_is_subset patch solves the issue, but this
nevertheless gives some extra security.)
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
We want to set the volume callbacks only if volume sharing
is not used. When volume sharing is used, we don't want to
mess with the stream volumes.
This was broken in 6c6b50