summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2015-04-06sink-input: Clarify the meaning of rewrite and flush a bit in rewindsArun Raghavan1-2/+2
2015-04-02dbus: Use hooks for default sink and source changesJuho Hämäläinen1-62/+84
[Fixes by David Henningsson <david.henningsson@canonical.com>]
2015-04-02dbus: Use hooks for put and unlinkJuho Hämäläinen1-134/+239
Use hooks for all events that have core hooks defined. Some events handled in iface-core don't have hooks so leave those for later.
2015-04-02namereg: Fire hooks for default sink and source changesJuho Hämäläinen1-0/+2
2015-04-02core: Add hooks for default sink and source changesJuho Hämäläinen1-0/+2
2015-04-02dbus: Use state changed hook for sink-input and source-output rate changesJuho Hämäläinen1-0/+20
2015-04-02dbus: Use hooks for sink-input and source-output eventsJuho Hämäläinen1-55/+104
2015-04-02dbus: Use hooks for sink and source eventsJuho Hämäläinen1-30/+91
2015-04-02dbus: Use hooks for client proplist changesJuho Hämäläinen1-17/+17
2015-04-02dbus: Use hooks for card profile eventsJuho Hämäläinen1-35/+34
2015-04-01coreaudio: Change error type to OSStatusRené J. V. Bertin1-6/+7
CoreAudio routines that return an error status do so with the OSStatus type, which is not a UInt32: typical OS X errors are negative numbers. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-31sink, source: Fix a volume change leakTanu Kaskinen2-0/+4
When a sink or source is freed, there may be pending volume changes that didn't get applied before the IO thread got torn down. Those pending changes need to be freed. The memory leak was reported here: http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/23162/focus=23169 Reported-by: Alexander E. Patrakov <patrakov@gmail.com>
2015-03-31.gitignore: Add lfe-filter-testTanu Kaskinen1-0/+1
2015-03-30resampler: Rename "lfe_filter_required" to "lfe_remixed"David Henningsson1-9/+9
Just refactoring to make the variable name better. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-30resampler: Allow disabling the LFE filter by setting crossover to 0David Henningsson1-1/+1
When crossover_freq is set to 0, this restores the old behaviour of letting the LFE channel be the average of the source channels, without additional processing. This can be useful e g in case the user already has a hardware crossover. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-30daemon-conf: enable the lfe remixing by defaultasync-commandHui Wang2-2/+2
Since we have a workable lfe filter, it is time to enable the lfe remixing by default. Signed-off-by: Hui Wang <hui.wang@canonical.com>
2015-03-30tests: adding lfe-filter-testHui Wang2-1/+201
so far, this test only includes rewind test, it works as below: let lfe-filter process 2 blocks mono lfe channel audio samples, the sample format is PA_SAMPLE_S16LE, save the processed data to the temp buffer, then rewind the lfe-filter back 1 block and 1.5 blocks respectively, reprocess the audio samples from the rewind position, then comparing the output data with previously saved data. Signed-off-by: Hui Wang <hui.wang@canonical.com>
2015-03-30resampler: Make some basic functions for rewindingDavid Henningsson4-5/+22
The resampler framework just forwards the request to the lfe filter. There are no resampler impl that can rewind yet, so just reset the resampler impl instead of properly rewinding yet. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-30lfe-filter: Add rewind supportDavid Henningsson3-9/+108
Store current filter state at every normal block process. When a rewind happens, rewind back to the nearest saved state, then calculate forward to the actual sample position. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-30memblock: Change pa_memblock_new_malloced to an inline functionDavid Henningsson1-1/+4
To avoid the macro trap: I call pa_memblock_new_malloced with "pa_xmemdup" as data parameter, and that would expand to *two* calls to pa_xmemdup in case that remains a macro, which is clearly not intended. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-30lfe-filter: change the crossover frequency as a parameterHui Wang13-8/+23
Add a user defined parameter lfe-crossover-freq for the lfe-filter, to pass this parameter to the lfe-filter, we need to change the pa_resampler_new() API as well. Signed-off-by: Hui Wang <hui.wang@canonical.com>
2015-03-30lfe-filter: Cleanup and refactorDavid Henningsson4-515/+33
- Remove imported dead code - Fix compiler warnings - Fix non-GCC compiler compilation (use more portable macros) - Change lr4 struct to include a biquad struct Thanks to Alexander Patrakov for suggesting many of these changes. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-30lfe-filter: Enable LFE filter in the resamplerDavid Henningsson7-5/+265
When enable-lfe-remixing is set, an LFE channel is present in the resampler's destination channel map but not in the source channel map, we insert a low-pass filter instead of just averaging the channels. Other channels will get a high-pass filter. In this patch, the crossover frequency is hardcoded to 120Hz (to be fixed in later patches). Note that in current state the LFE filter is - not very optimised - not rewind friendly (rewinding can cause audible artifacts) Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-30lfe-filter: Import code from the Chrome OS audio serverDavid Henningsson5-0/+710
The chrome OS audio server has some already existing code, which has been made available under a BSD-style license, which should be safe to import by us. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-27Fix: Prevent calling pa_rtpoll_free() for a NULL rtpollSagar Nageshmurthy1-1/+1
Flushing the asyncmsgq can cause arbitrarily callbacks to run, potentially causing recursion into pa_thread_mq_done again. Because of this; rtpoll which is cleared in the second iteration is tried to free once again by the first iteration leading to PA crash.
2015-03-27thread-mq: Make pa_thread_mq_done more robustDavid Henningsson1-9/+23
While investigating bug 89672 it was found that pa_thread_mq_done was called recursively. Regardless of whether the recursion should be stopped by other means, it seems to make sense to make pa_thread_mq_done more robust so that it can be called twice (and even recursively) without harm. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=89672 Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-23ucm: Add support for "JackControl"Tanu Kaskinen2-5/+23
JackControl is used to indicate the kcontrol name for jack detection.
2015-03-19cpu-arm: Fix memory leak in pa_cpu_get_arm_flags()Sukesh Adiga1-0/+1
2015-03-16core-util: Make number parsing stricterTanu Kaskinen1-3/+52
pa_atou(), pa_atol() and pa_atod() are stricter than the libc counterparts (the PA functions reject strings that have trailing extra stuff in them). I have been under the impression that the PA functions only accept "obviously valid numbers", that is, I have assumed that these would be rejected: " 42" (leading whitespace), "" (empty string) and "-18446744073709551615" in case of pa_atou(). I noticed that empty strings are accepted, however, and on closer inspection I found that leading whitespace is accepted too, and even that pa_atou() thinks that "-18446744073709551615" is the same thing as "1"! This patch makes the parsing functions more strict, so that they indeed only accept "obviously valid numbers". I decided to also disallow leading plus signs, just because I don't like them.
2015-03-12core-util: Fix set_nice() to use private bus connectionsDavid Herrmann1-1/+2
In src/pulsecore/core-util.c:set_nice() we currently use a temporary dbus-connection to set the nice-level via rtkit. However, we never close that connection. This is fine, as the connection is shared and dbus-core will manage it. But no other part of pulseaudio (except set_scheduler()) uses the libdbus1 managed connections. Therefore, we effectively end up with an unused dbus-connection that is not integrated into any main-loop. dbus-daemon will send bus-notifications to the connection (as libdbus1 installs matches for those by default (it has to!)) until the outgoing queue is full. Thus, we waste several KBs (or MBs? I didn't look it up) of memory for a message queue that is never dispatched. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-11pstream: Remove unnecessary if conditionDavid Henningsson1-50/+47
Without split packets, the if condition can now be removed. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-11protocol-native: Re-enable srbchannelDavid Henningsson1-1/+1
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-03-11pstream: Don't split (non-SHM) memblocksDavid Henningsson1-36/+25
In case SHM is full or disabled, audio data is sent through the io/srbchannel. When this channel in turn gets full, memblocks could previously be split up. This could lead to crashes in case the split was on non-frame boundaries (in combination with full memblock queues). BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=88452 Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-02-26pacat: Fix comment wordingPeter Meerwald1-1/+1
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26packet: Use flist to save calls to malloc()/free()Peter Meerwald1-3/+9
a separate free-list is used to recycle memory of fixed-sized packets with up to MAX_APPENDED_SIZE of data Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26packet: Introduce pa_packet_new_data() to copy data into a newly created packetPeter Meerwald3-1/+16
v2: (thanks Alexander Patrakov) * turn check in pa_packet_new() into assert() Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26packet: Make pa_packet_new() create fixed-size packetsPeter Meerwald2-3/+18
if length exceeds maximum appended size, create a packet of type dynamic instead of type appended this is a preparation to use a separate free-list for packets document semantics of pa_packet_new_*() functions Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26packet: Hide internals of pa_packet, introduce pa_packet_data()Peter Meerwald5-24/+50
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26tagstruct: Use flist to potentially save calls to malloc()/free()Peter Meerwald1-3/+9
v2: (thanks David Henningson) * fix double assignment of data in pa_tagstruct_new_fixed(), two statements on one line Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26tagstruct: Add type _APPENDEDPeter Meerwald1-7/+19
add 128 bytes of storage in each tagstruct that will initially be used; if this storage is exceeded the type changes to _DYNAMIC v3: (thanks David Henningson) * add comments explaining how memory is handled by different tagstruct types v2: (thanks Alexander Patrakov) * replace constant 100 with GROW_TAG_SIZE (the increment in with a dynamic tagstruct grows when extend()ed) Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26tagstruct: Get rid of pa_tagstruct_free_data()Peter Meerwald3-17/+6
pa_tagstruct_free_data() is used in only one place to pass data from a tagstruct to a packet this patch is a temporary solution which introduces an extra malloc(); will be resolved shortly... Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26tagstruct: Replace dynamic flag with typePeter Meerwald1-7/+9
... in order to prepare for a new type _APPENDED remove the assert() for dynamic in pa_tagstruct_data() as the function makes sense for all tagstruct types (and the returned pointer is const) Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26tagstruct: Distinguish pa_tagstruct_new() use casesPeter Meerwald11-57/+70
pa_tagstruct_new() is called either with no data, i.e. (NULL, 0) to create a dynamic tagstruct or with a pointer to fixed data introduce a new function pa_tagstruct_new_fixed() for the latter case Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-26echo-cancel: fix the obviously-wrong "buffer+=buffer" logicAlexander E. Patrakov1-1/+1
Same bug as in module-loopback, pointed out by Georg Chini in a private email. Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
2015-02-23socket-server: add tcp support for systemd socket activationJaska Uimonen1-46/+86
2015-02-23alsa: Don't access pa_sink/source_new_data after done() has been calledTanu Kaskinen2-6/+14
This change doesn't affect behaviour, because accessing boolean fields in the new data was safe even after the done() call, but it was still bad style.
2015-02-23alsa: Fix spelling of officiallyPeter Meerwald2-2/+2
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2015-02-23tagstruct: Refactor writing/reading basic typesTanu Kaskinen1-248/+194
While adding functions for writing and reading pa_bvolume structs, I found myself wondering if I could make it simpler to write and read the basic types that a pa_bvolume consists of, without having to worry about network byte ordering, remembering to call extend() and getting the length and read index adjustments just right. This is what I came up with. There is a functional change too: previously the pa_tagstruct_get_foo() functions didn't modify the read index in case of errors, but now, due to read_tag() modifying the read index at an early stage, the read index gets modified also in case of errors. I have checked the call sites, and I believe there's no code that would rely on the "no read index modification on error" property of the old functions. If reading anything from a tagstruct fails, the whole tagstruct is considered invalid (typically resulting in a protocol error and client connection teardown).
2015-02-16module-loopback: don't use 0 for custom source output message idAlexander E. Patrakov1-1/+1
Message id 0 is PA_SOURCE_OUTPUT_MESSAGE_GET_LATENCY. So, every time PulseAudio sent PA_SOURCE_OUTPUT_MESSAGE_GET_LATENCY message to the loopback source output, it actually hit the SOURCE_OUTPUT_MESSAGE_LATENCY_SNAPSHOT handler instead. As a result, the SOURCE_OUTPUT_MESSAGE_LATENCY_SNAPSHOT handler was called when not intended, the default PA_SOURCE_OUTPUT_MESSAGE_GET_LATENCY handler was not called at all, and the latency was thus evaluated incorrectly. Reported-by: Georg Chini <georg@chini.tk> Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
2015-02-16alsa-util: Make two of the warnings "debug" instead of "error"David Henningsson1-2/+2
...because we will later try with plug:* which will probably succeed, so this is not an error. Signed-off-by: David Henningsson <david.henningsson@canonical.com>