summaryrefslogtreecommitdiffstats
path: root/src/modules
Commit message (Collapse)AuthorAgeFilesLines
* bluetooth-discover: Remove remaining ifdef NOKIAs.Tanu Kaskinen2011-06-221-12/+3
| | | | | | These were supposed to be removed already in 13849f153, but at that time I missed the ifdefs in module-bluetooth-discover.c.
* echo-cancel: More preprocessing fixesArun Raghavan2011-06-131-2/+6
| | | | | The speex_preprocess_ctl() function takes a spx_int32_t, but we've been passing a pa_bool_t, which could potentially crash.
* echo-cancel: Fix preprocessor initialisationArun Raghavan2011-06-131-1/+1
| | | | | | 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.
* combine: Fix a crash on shutdown if the module is loaded outside of our control.Colin Guthrie2011-06-081-5/+7
| | | | By using module indexes rather than module pointers we avoid this posibility.
* device-manager: Free a hook slot to prevent segv on unloadColin Guthrie2011-06-061-0/+3
|
* module-combine-sink: Check running flag before rendering in null modeForest Bond2011-06-021-0/+4
| | | | | This makes process_render_null consistent with render_memblock and avoids introducing slight inaccuracies in early latency estimates.
* module-combine-sink: Initialize smoother in paused stateForest Bond2011-06-021-6/+9
| | | | | | | | | | | | | 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.
* module-combine-sink: Initialize smoother with offset pa_rtclock_now()Forest Bond2011-06-021-1/+1
| | | | | The smoother was being initialized with offset zero, which caused the sink latency to be unconditionally reported as zero.
* alsa-mixer: Fix the assumption that volume is always positiveLu Guanqun2011-05-301-1/+5
| | | | | | | | | | | | | | | | | 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
* echo-cancel: Fix a crash is speex cleanupArun Raghavan2011-05-281-1/+2
| | | | | | 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.
* echo-cancel: Fix echo suppression, add some knobsBart Cerneels2011-05-282-3/+36
| | | | | | | 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.
* echo-cancel: Speex preprocessor has to run *after* the AEC.Bart Cerneels2011-05-281-3/+4
| | | | This is how it is expected to be run.
* echo-cancel: Add speex preprocessingArun Raghavan2011-05-242-3/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* echo-cancel: Remove extraneous debug messageArun Raghavan2011-05-201-1/+0
| | | | This was making it impossible to run in debug mode with save_aec=1
* echo-cancel: Don't overpad variableArun Raghavan2011-05-161-1/+1
| | | | The padding was to be 16 bytes, not 16 elements.
* loopback: Add a modarg for disabling remixing.Tanu Kaskinen2011-05-151-5/+13
|
* bluetooth: Fix early return styling and add missing return valueColin Guthrie2011-05-151-5/+6
| | | | Thanks to Tanu Kaskinen for pointing out the missing return.
* suspend-on-idle: Trigger mempool vacuumingJyri Sarha2011-05-151-1/+40
| | | | | | | | 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.
* Merge branch 'passthrough'Colin Guthrie2011-05-1516-57/+127
|\
| * module-tunnel: Update for recent protocol changesArun Raghavan2011-05-151-0/+59
| | | | | | | | | | | | | | | | | | 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.
| * core: Factor out passthrough checks into their own functionsArun Raghavan2011-05-021-2/+2
| | | | | | | | | | | | | | | | | | | | 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.
| * alsa: Reconfigure sink sample rate for passthrough inputsArun Raghavan2011-05-021-0/+52
| | | | | | | | | | | | 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.
| * alsa-mixer: Remove passthrough profilesArun Raghavan2011-05-022-26/+0
| | | | | | | | | | These aren't used any more - we handle passthrough mode in the iec958* profiles now.
| * sink: Remove PASSTHROUGH flagArun Raghavan2011-05-021-7/+0
| | | | | | | | | | | | | | 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.
| * core: Add extended stream API to support compressed formatsArun Raghavan2011-05-0212-24/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
| * filter-apply: Mark modules as being autoloadedArun Raghavan2011-05-025-11/+28
| | | | | | | | | | | | | | (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.
* | echo-cancel: Remove unnecessary noalign attributeArun Raghavan2011-05-111-1/+0
| | | | | | | | | | | | | | 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.
* | echo-cancel: Handle alignment requirement manuallyArun Raghavan2011-05-112-4/+11
| | | | | | | | | | | | | | 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.
* | filter-apply: Mark modules as being autoloadedArun Raghavan2011-05-035-11/+28
|/ | | | | | | (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.
* combine: Rename module-combine to module-combine-sink.Colin Guthrie2011-04-302-1352/+1423
| | | | | This also includes a compatibility module that will ultimately be removed in a future release.
* bluetooth: Only close SCO if status has changedLuiz Augusto von Dentz2011-04-301-5/+5
| | | | | 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.
* bluetooth: Fix using pointer-pointer when appending an array as variantLuiz Augusto von Dentz2011-04-301-4/+2
| | | | | pa_dbus_append_basic_array_variant_dict_entry should take the direct pointer to the array.
* bluetooth: Fix not updating sample spec when using Media APILuiz Augusto von Dentz2011-04-301-0/+13
| | | | | | 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.
* dbus: Fix the order of freeing stuff when unloading module-dbus-protocol.Tanu Kaskinen2011-04-291-3/+9
|
* dbus: Fix connection idxset freeing when unloading the module.Tanu Kaskinen2011-04-291-13/+8
| | | | | | | | | | | | | | If u->connections isn't empty when module-dbus-protocol is unloaded, then connection_free() is called for the remaining connections when the idxset is freed. connection_free() tries to remove the connection from the idxset, but that fails, because the item has already been removed from the idxset in this scenario. The problem is solved by not trying to remove the connection from the idxset in connection_free(). Instead, whoever wants to delete connections, has to remove the connection from the idxset in addition to calling connection_free().
* match: Support for both merging and replacing proplist updates.Tanu Kaskinen2011-04-291-37/+60
| | | | | | | | | | | | | | | | | | | | | This patch adds a new update mode specifier that can be optionally given in match rules after the regexp. Property list updates triggered by the rule will honour the given mode. The two allowed modes are 'merge' and 'replace', corresponding to PA_UPDATE_MERGE and PA_UPDATE_REPLACE respectively. If omitted, the mode defaults to PA_UPDATE_MERGE, ie. to the original behavior. For example, to force 'media.role' to be overwritten with 'bar' for streams matching foo you can use an entry like this: foo replace "bar" This will really overwrite media.role to bar even if it has already been set to something else by the application. Thanks to Krisztian Litkey for the original patch and the description above. In addition to implementing the new feature, this patch fixes a number of bugs in the parsing code.
* stream-restore: Enable database dumping if DEBUG_VOLUME is defined.Tanu Kaskinen2011-04-281-2/+2
|
* module-null-source: New null-source moduleMarc-André Lureau2011-04-281-0/+294
|
* filter-heuristics: Match roles correctlyArun Raghavan2011-04-231-2/+23
|
* echo-cancel: Play nice with module-filter-*Arun Raghavan2011-04-231-2/+14
| | | | | | | | | | | | | | With automaticl filter loading by module-filter-apply, setting the virtual sink/source to have the "phone" intended role will break routing when you first connect a phone stream to an ALSA device and then turn on your Bluetooth headset. This happens because module-intended-roles doesn't move a stream if it is already on a device that provides the required role. This patch introduces a "manual_load" parameter that is meant to be used when not using module-filter-apply for loading the AEC module. If this parameter is set, the virtual devices are given the "phone" role, else we count on module-filter-heuristics to do the right thing.
* filters: Handle filters on sources as wellArun Raghavan2011-04-232-77/+283
| | | | | | This makes the core code in the filter-* modules generic enough to be used on sources or sinks. We need special handling for modules that introduce more than one sink (for now echo-cancel only).
* filters: Handle stream moves properlyArun Raghavan2011-04-232-15/+75
| | | | | | | | | | | | | | | | | | | | | | | | | This makes sure that we handle streams moving between sinks properly. To do this, we change the way the filter.* properties are handled a little bit. Firstly, this splits up the "filter.apply" property into two properties - "filter.want" and "filter.apply". "filter.apply" acts as before - it bypasses module-filter-heuristics and directly tells module-filter-apply what filters are to be applied. "filter.want" is used to tell module-filter-heuristics what filters the client wants. The module then decides whether to actually apply the filter or not (for now, this makes sure we don't apply echo-cancellation even if requested on phone sinks (where it is assumed AEC is taken care of or is not required). Next, we also make sure that we track whether the client set "filter.apply" or module-filter-heuristics did - and in the latter case, we recalculate "filter.apply" and then have module-filter-apply apply the filter if required. This introduces some evil in the form of causing the move_finish callback to possibly trigger another move, but we protect for this case (with a property) to be doubly sure of not causing an infinite loop.
* filter-heuristics: Only apply AEC if we're not already on a phone sinkArun Raghavan2011-04-231-2/+5
| | | | | | This makes sure that we don't apply AEC on sinks that are already connected to a "phone" device, the assumptiong being that anything marked as such either doesn't have need it, or handles it itself.
* match: Match rule earlier, in SINK_INPUT_NEWMarc-André Lureau2011-04-231-22/+13
|
* match: Don't double free in case of missing table fileMarc-André Lureau2011-04-231-1/+0
|
* module-coreaudio-device: Fix two build warningsDaniel Mack2011-04-231-2/+2
|
* module-coreaudio-device: Set the thread name to device nameDaniel Mack2011-04-231-1/+1
| | | | This makes gdb's "info threads" better understandable
* module-coreaudio-device: Dispatch sink/source state messages from main loopDaniel Mack2011-04-231-38/+50
| | | | | This fixes a long standing race condition when tearing down streams on Mac OS X.
* module-coreaudio-detect: Add 'ioproc_frames' parameterDaniel Mack2011-04-231-3/+20
| | | | | | This value is passed on to the instances of module-coreaudio-device that are loaded upon device detection. The value is purely optional, as the device module will fall back to to its default if it's not given.
* filter-apply: Make housekeeping optionalArun Raghavan2011-04-201-0/+14
| | | | | | | Adds an autoclean option (defaults to TRUE) that controls whether module-filter-apply cleans up unused modules or not. This is useful in cases where you know that a filter will be used often and thus can avoid overhead from repeated module load/unload.