]> code.delx.au - pulseaudio/log
pulseaudio
13 years agoMerge remote-tracking branch 'mkbosmans/mingw32-build'
Colin Guthrie [Sun, 20 Mar 2011 11:18:19 +0000 (11:18 +0000)]
Merge remote-tracking branch 'mkbosmans/mingw32-build'

13 years agomodule-waveout: Fix record/playback args
Maarten Bosmans [Mon, 14 Mar 2011 09:51:11 +0000 (10:51 +0100)]
module-waveout: Fix record/playback args

13 years agomodule-waveout: Move thread creation
Maarten Bosmans [Fri, 11 Mar 2011 14:41:29 +0000 (15:41 +0100)]
module-waveout: Move thread creation

13 years agomodule-waveout: Query device for supported samplerate
Maarten Bosmans [Sat, 12 Mar 2011 18:41:07 +0000 (19:41 +0100)]
module-waveout: Query device for supported samplerate

Instead of using a fixed list list of supported rates,
ask the wave subsystem whether the rate can be used.

13 years agoFix pa_rtclock_from_wallclock
Maarten Bosmans [Tue, 15 Mar 2011 20:06:46 +0000 (21:06 +0100)]
Fix pa_rtclock_from_wallclock

The HAVE_CLOCK_GETTIME macro protects timespec and related functions, nothing of which is used in
pa_rtclock_from_wallclock.  And silently just not converting was not the proper solution anyway.

Also add an assert in pulse/mainloop.c to report the integer overflow that was triggered by the wrong
pa_rtclock_from_wallclock.  Without the assert, debugging was painful.

13 years agoUse pulsecore/arpa-inet.h to make arpa/inet.h functionality available
Maarten Bosmans [Tue, 1 Mar 2011 15:06:19 +0000 (16:06 +0100)]
Use pulsecore/arpa-inet.h to make arpa/inet.h functionality available

Automatically use replacement function on platforms (win32) where not all arpa/inet.h is available natively.

13 years agobuild: Protect some more variables by ifdefs
Maarten Bosmans [Tue, 15 Mar 2011 11:30:42 +0000 (12:30 +0100)]
build: Protect some more variables by ifdefs

This avoids empty directories being created on builds without X11, ALSA, etc.

13 years agobuild: copy instead of link pacat to other utils on win32
Maarten Bosmans [Sun, 27 Feb 2011 22:43:54 +0000 (23:43 +0100)]
build: copy instead of link pacat to other utils on win32

This is necessary as symlinks are not supported on Windows.  Also use the $(EXEEXT) variable.

13 years agoFind modules and config files relative to the installed libraries.
Maarten Bosmans [Sun, 27 Feb 2011 22:09:52 +0000 (23:09 +0100)]
Find modules and config files relative to the installed libraries.

Do not use replace %PULSE_ROOT% from the environment.

13 years agolog: Add a new log target to a file descriptor
Vincent Becker [Fri, 18 Mar 2011 10:23:46 +0000 (11:23 +0100)]
log: Add a new log target to a file descriptor

This patch enables logging of text debug messages (pa_log feature) into a file or a device driver.
Example : pulseaudio --log-target=file:./mylog.txt

(Minor tweaks by Colin + Arun)

13 years agoUpdate PA_MODULE_USAGE to be in line with actual implementation
Maarten Bosmans [Fri, 18 Mar 2011 10:52:30 +0000 (11:52 +0100)]
Update PA_MODULE_USAGE to be in line with actual implementation

13 years agobuild-sys: Fix bluetooth update-sbc now that it's in a subfolder.
Colin Guthrie [Fri, 18 Mar 2011 12:02:10 +0000 (12:02 +0000)]
build-sys: Fix bluetooth update-sbc now that it's in a subfolder.

13 years agobuild-sys: Whitespace changes
Colin Guthrie [Fri, 18 Mar 2011 11:47:06 +0000 (11:47 +0000)]
build-sys: Whitespace changes

This just makes some of the bluetooth stuff a little clearer and
standardises on two-tab indents as this seems most common.

Also added two headers to the bluetooth sbc source that were missing.

13 years agobluetooth: Fix build errors relating to SBC
Colin Guthrie [Fri, 18 Mar 2011 10:01:12 +0000 (10:01 +0000)]
bluetooth: Fix build errors relating to SBC

13 years agoalsa: Add two more ALSA audio card profiles
Daniel Mack [Mon, 14 Mar 2011 14:59:25 +0000 (15:59 +0100)]
alsa: Add two more ALSA audio card profiles

This adds profiles for Native Instruments recently announced
"Trator Audio 6" and "Traktor Audio 10".

13 years agoMake pulse compile with clang
Maarten Bosmans [Mon, 14 Mar 2011 15:27:03 +0000 (16:27 +0100)]
Make pulse compile with clang

This fixes the checking of supported compiler flags and the following error message for svolume_mmx:

pulsecore/svolume_mmx.c:157:76: error: invalid use of a cast in a inline asm context requiring an l-value:
  remove the cast or build with -fheinous-gnu-extensions
        : "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((pa_reg_x86)channel), "=&r" (temp)
                                                               ~~~~~~~~~~~~^~~~~~~

13 years agoFix up some double spaces
Maarten Bosmans [Sat, 12 Mar 2011 18:45:02 +0000 (19:45 +0100)]
Fix up some double spaces

13 years agobuild-sys: Flip default to no git pull on make dist
Maarten Bosmans [Wed, 16 Mar 2011 09:47:20 +0000 (10:47 +0100)]
build-sys: Flip default to no git pull on make dist

13 years agoMerge remote-tracking branch 'vudentz/master'
Colin Guthrie [Fri, 18 Mar 2011 00:10:27 +0000 (00:10 +0000)]
Merge remote-tracking branch 'vudentz/master'

13 years agomodule-waveout: Add device_name parameter
Maarten Bosmans [Sun, 27 Feb 2011 08:53:59 +0000 (09:53 +0100)]
module-waveout: Add device_name parameter

Also use the name in the source/sink description.

Based on a patch by srirams, from github.

13 years agosbc: add iwmmxt optimization for sbc for pxa series cpu
Siarhei Siamashka [Mon, 14 Mar 2011 18:37:42 +0000 (15:37 -0300)]
sbc: add iwmmxt optimization for sbc for pxa series cpu

Benchmarked on ARM PXA platform:
===  Before (4 bands) ====
$ time  ./sbcenc_orig  -s 4     long.au  > /dev/null
real    0m 2.44s
user    0m 2.39s
sys     0m 0.05s
===  After (4 bands) ====
$ time  ./sbcenc  -s 4     long.au  > /dev/null
real    0m 1.59s
user    0m 1.49s
sys     0m 0.10s

===  Before (8 bands) ====
$ time  ./sbcenc_orig   -s 8     long.au  > /dev/null
real    0m 4.05s
user    0m 3.98s
sys     0m 0.07s
===  After (8 bands) ====
$ time  ./sbcenc  -s 8     long.au  > /dev/null
real    0m 1.48s
user    0m 1.41s
sys     0m 0.06s

===  Before (a2dp usage) ====
$ time  ./sbcenc_orig   -b53 -s8 -j    long.au  > /dev/null
real    0m 4.51s
user    0m 4.41s
sys     0m 0.10s
===  After (a2dp usage) ====
$ time  ./sbcenc   -b53 -s8 -j    long.au  > /dev/null
real    0m 2.05s
user    0m 1.99s
sys     0m 0.06s

13 years agosbc: ARMv6 optimized version of analysis filter for SBC encoder
Siarhei Siamashka [Mon, 14 Mar 2011 18:35:03 +0000 (15:35 -0300)]
sbc: ARMv6 optimized version of analysis filter for SBC encoder

The optimized filter gets enabled when the code is compiled
with -mcpu=/-march options set to target the processors which
support ARMv6 instructions. This code is also disabled when
NEON is used (which is a lot better alternative). For additional
safety ARM EABI is required and thumb mode should not be used.

Benchmarks from ARM11:

== 8 subbands ==

$ time ./sbcenc -b53 -s8 -j test.au > /dev/null

real    0m 35.65s
user    0m 34.17s
sys     0m 1.28s

$ time ./sbcenc.armv6 -b53 -s8 -j test.au > /dev/null

real    0m 17.29s
user    0m 15.47s
sys     0m 0.67s

== 4 subbands ==

$ time ./sbcenc -b53 -s4 -j test.au > /dev/null

real    0m 25.28s
user    0m 23.76s
sys     0m 1.32s

$ time ./sbcenc.armv6 -b53 -s4 -j test.au > /dev/null

real    0m 18.64s
user    0m 15.78s
sys     0m 2.22s

13 years agosbc: added "cc" to the clobber list of mmx inline assembly
Siarhei Siamashka [Mon, 14 Mar 2011 18:36:07 +0000 (15:36 -0300)]
sbc: added "cc" to the clobber list of mmx inline assembly

In the case of scale factors calculation optimizations, the inline
assembly code has instructions which update flags register, but
"cc" was not mentioned in the clobber list. When optimizing code,
gcc theoretically is allowed to do a comparison before the inline
assembly block, and a conditional branch after it which would lead
to a problem if the flags register gets clobbered. While this is
apparently not happening in practice with the current versions of
gcc, the clobber list needs to be corrected.

Regarding the other inline assembly blocks. While most likely it
is actually unnecessary based on quick review, "cc" is also added
there to the clobber list because it should have no impact on
performance in practice. It's kind of cargo cult, but relieves
us from the need to track the potential updates of flags register
in all these places.

13 years agosbc: faster 'sbc_calculate_bits' function
Siarhei Siamashka [Mon, 14 Mar 2011 18:31:30 +0000 (15:31 -0300)]
sbc: faster 'sbc_calculate_bits' function

By using SBC_ALWAYS_INLINE trick, the implementation of 'sbc_calculate_bits'
function is split into two branches, each having 'subband' variable value
known at compile time. It helps the compiler to generate more optimal code
by saving at least one extra register, and also provides more obvious
opportunities for loops unrolling.

Benchmarked on ARM Cortex-A8:

== Before: ==

$ time ./sbcenc -b53 -s8 -j test.au > /dev/null

real    0m3.989s
user    0m3.602s
sys     0m0.391s

samples  %        image name               symbol name
26057    32.6128  sbcenc                   sbc_pack_frame
20003    25.0357  sbcenc                   sbc_analyze_4b_8s_neon
14220    17.7977  sbcenc                   sbc_calculate_bits
8498     10.6361  no-vmlinux               /no-vmlinux
5300      6.6335  sbcenc                   sbc_calc_scalefactors_j_neon
3235      4.0489  sbcenc                   sbc_enc_process_input_8s_be_neon
2172      2.7185  sbcenc                   sbc_encode

== After: ==

$ time ./sbcenc -b53 -s8 -j test.au > /dev/null

real    0m3.652s
user    0m3.195s
sys     0m0.445s

samples  %        image name               symbol name
26207    36.0095  sbcenc                   sbc_pack_frame
19820    27.2335  sbcenc                   sbc_analyze_4b_8s_neon
8629     11.8566  no-vmlinux               /no-vmlinux
6988      9.6018  sbcenc                   sbc_calculate_bits
5094      6.9994  sbcenc                   sbc_calc_scalefactors_j_neon
3351      4.6044  sbcenc                   sbc_enc_process_input_8s_be_neon
2182      2.9982  sbcenc                   sbc_encode

13 years agosbc: slightly faster 'sbc_calc_scalefactors_neon'
Siarhei Siamashka [Mon, 14 Mar 2011 18:29:38 +0000 (15:29 -0300)]
sbc: slightly faster 'sbc_calc_scalefactors_neon'

Previous variant was basically derived from C and MMX implementations.
Now new variant makes use of 'vmax' instruction, which is available in
NEON and can do this job faster. The same method for calculating scale
factors is also used in 'sbc_calc_scalefactors_j_neon'.

Benchmarked without joint stereo on ARM Cortex-A8:

== Before: ==

$ time ./sbcenc -b53 -s8 test.au > /dev/null

real    0m3.851s
user    0m3.375s
sys     0m0.469s

samples  %        image name               symbol name
26260    34.2672  sbcenc                   sbc_pack_frame
20013    26.1154  sbcenc                   sbc_analyze_4b_8s_neon
13796    18.0027  sbcenc                   sbc_calculate_bits
8388     10.9457  no-vmlinux               /no-vmlinux
3229      4.2136  sbcenc                   sbc_enc_process_input_8s_be_neon
2408      3.1422  sbcenc                   sbc_calc_scalefactors_neon
2093      2.7312  sbcenc                   sbc_encode

== After: ==

$ time ./sbcenc -b53 -s8 test.au > /dev/null

real    0m3.796s
user    0m3.344s
sys     0m0.438s

samples  %        image name               symbol name
26582    34.8726  sbcenc                   sbc_pack_frame
20032    26.2797  sbcenc                   sbc_analyze_4b_8s_neon
13808    18.1146  sbcenc                   sbc_calculate_bits
8374     10.9858  no-vmlinux               /no-vmlinux
3187      4.1810  sbcenc                   sbc_enc_process_input_8s_be_neon
2027      2.6592  sbcenc                   sbc_encode
1766      2.3168  sbcenc                   sbc_calc_scalefactors_neon

13 years agosbc: ARM NEON optimizations for input permutation in SBC encoder
Siarhei Siamashka [Mon, 14 Mar 2011 18:28:31 +0000 (15:28 -0300)]
sbc: ARM NEON optimizations for input permutation in SBC encoder

Using SIMD optimizations for 'sbc_enc_process_input_*' functions provides
a modest, but consistent speedup in all SBC encoding cases.

Benchmarked on ARM Cortex-A8:

== Before: ==

$ time ./sbcenc -b53 -s8 -j test.au > /dev/null

real    0m4.389s
user    0m3.969s
sys     0m0.422s

samples  %        image name               symbol name
26234    29.9625  sbcenc                   sbc_pack_frame
20057    22.9076  sbcenc                   sbc_analyze_4b_8s_neon
14306    16.3393  sbcenc                   sbc_calculate_bits
9866     11.2682  sbcenc                   sbc_enc_process_input_8s_be
8506      9.7149  no-vmlinux               /no-vmlinux
5219      5.9608  sbcenc                   sbc_calc_scalefactors_j_neon
2280      2.6040  sbcenc                   sbc_encode
661       0.7549  libc-2.10.1.so           memcpy

== After: ==

$ time ./sbcenc -b53 -s8 -j test.au > /dev/null

real    0m3.989s
user    0m3.602s
sys     0m0.391s

samples  %        image name               symbol name
26057    32.6128  sbcenc                   sbc_pack_frame
20003    25.0357  sbcenc                   sbc_analyze_4b_8s_neon
14220    17.7977  sbcenc                   sbc_calculate_bits
8498     10.6361  no-vmlinux               /no-vmlinux
5300      6.6335  sbcenc                   sbc_calc_scalefactors_j_neon
3235      4.0489  sbcenc                   sbc_enc_process_input_8s_be_neon
2172      2.7185  sbcenc                   sbc_encode

13 years agosbc: ARM NEON optimized joint stereo processing in SBC encoder
Siarhei Siamashka [Mon, 14 Mar 2011 18:27:30 +0000 (15:27 -0300)]
sbc: ARM NEON optimized joint stereo processing in SBC encoder

Improves SBC encoding performance when joint stereo is used, which
is a typical A2DP configuration.

Benchmarked on ARM Cortex-A8:

== Before: ==

$ time ./sbcenc -b53 -s8 -j test.au > /dev/null

real    0m5.239s
user    0m4.805s
sys     0m0.430s

samples  %        image name               symbol name
26083    25.0856  sbcenc                   sbc_pack_frame
21548    20.7240  sbcenc                   sbc_calc_scalefactors_j
19910    19.1486  sbcenc                   sbc_analyze_4b_8s_neon
14377    13.8272  sbcenc                   sbc_calculate_bits
9990      9.6080  sbcenc                   sbc_enc_process_input_8s_be
8667      8.3356  no-vmlinux               /no-vmlinux
2263      2.1765  sbcenc                   sbc_encode
696       0.6694  libc-2.10.1.so           memcpy

== After: ==

$ time ./sbcenc -b53 -s8 -j test.au > /dev/null

real    0m4.389s
user    0m3.969s
sys     0m0.422s

samples  %        image name               symbol name
26234    29.9625  sbcenc                   sbc_pack_frame
20057    22.9076  sbcenc                   sbc_analyze_4b_8s_neon
14306    16.3393  sbcenc                   sbc_calculate_bits
9866     11.2682  sbcenc                   sbc_enc_process_input_8s_be
8506      9.7149  no-vmlinux               /no-vmlinux
5219      5.9608  sbcenc                   sbc_calc_scalefactors_j_neon
2280      2.6040  sbcenc                   sbc_encode
661       0.7549  libc-2.10.1.so           memcpy

13 years agosbc: fix signedness of parameters
Siarhei Siamashka [Mon, 14 Mar 2011 18:21:53 +0000 (15:21 -0300)]
sbc: fix signedness of parameters

The written parameter of sbc_encode can be negative so it should be
ssize_t instead of size_t.

13 years agosbc: ARM NEON optimization for scale factors calculation
Siarhei Siamashka [Mon, 14 Mar 2011 18:18:46 +0000 (15:18 -0300)]
sbc: ARM NEON optimization for scale factors calculation

Improves SBC encoding performance when joint stereo is not used.
Benchmarked on ARM Cortex-A8:

== Before: ==

$ time ./sbcenc -b53 -s8 test.au > /dev/null

real    0m4.756s
user    0m4.313s
sys     0m0.438s

samples  %        image name               symbol name
2569     27.6296  sbcenc                   sbc_pack_frame
1934     20.8002  sbcenc                   sbc_analyze_4b_8s_neon
1386     14.9064  sbcenc                   sbc_calculate_bits
1221     13.1319  sbcenc                   sbc_calc_scalefactors
996      10.7120  sbcenc                   sbc_enc_process_input_8s_be
878       9.4429  no-vmlinux               /no-vmlinux
204       2.1940  sbcenc                   sbc_encode
56        0.6023  libc-2.10.1.so           memcpy

== After: ==

$ time ./sbcenc -b53 -s8 test.au > /dev/null

real    0m4.220s
user    0m3.797s
sys     0m0.422s

samples  %        image name               symbol name
2563     31.3249  sbcenc                   sbc_pack_frame
1892     23.1239  sbcenc                   sbc_analyze_4b_8s_neon
1368     16.7196  sbcenc                   sbc_calculate_bits
961      11.7453  sbcenc                   sbc_enc_process_input_8s_be
836      10.2176  no-vmlinux               /no-vmlinux
262       3.2022  sbcenc                   sbc_calc_scalefactors_neon
199       2.4322  sbcenc                   sbc_encode
49        0.5989  libc-2.10.1.so           memcpy

13 years agosbc: MMX optimization for scale factors calculation
Siarhei Siamashka [Mon, 14 Mar 2011 18:17:31 +0000 (15:17 -0300)]
sbc: MMX optimization for scale factors calculation

Improves SBC encoding performance when joint stereo is not used.
Benchmarked on Pentium-M:

== Before: ==

$ time ./sbcenc -b53 -s8 test.au > /dev/null

real    0m1.439s
user    0m1.336s
sys     0m0.104s

samples  %        image name               symbol name
8642     33.7473  sbcenc                   sbc_pack_frame
5873     22.9342  sbcenc                   sbc_analyze_4b_8s_mmx
4435     17.3188  sbcenc                   sbc_calc_scalefactors
4285     16.7331  sbcenc                   sbc_calculate_bits
1942      7.5836  sbcenc                   sbc_enc_process_input_8s_be
322       1.2574  sbcenc                   sbc_encode

== After: ==

$ time ./sbcenc -b53 -s8 test.au > /dev/null

real    0m1.319s
user    0m1.220s
sys     0m0.084s

samples  %        image name               symbol name
8706     37.9959  sbcenc                   sbc_pack_frame
5740     25.0513  sbcenc                   sbc_analyze_4b_8s_mmx
4307     18.7972  sbcenc                   sbc_calculate_bits
1937      8.4537  sbcenc                   sbc_enc_process_input_8s_be
1801      7.8602  sbcenc                   sbc_calc_scalefactors_mmx
307       1.3399  sbcenc                   sbc_encode

13 years agosbc: new 'sbc_calc_scalefactors_j' function added to sbc primitives
Siarhei Siamashka [Mon, 14 Mar 2011 18:16:30 +0000 (15:16 -0300)]
sbc: new 'sbc_calc_scalefactors_j' function added to sbc primitives

The code for scale factors calculation with joint stereo support has
been moved to a separate function. It can get platform-specific
SIMD optimizations later for best possible performance.

But even this change in C code improves performance because of the
use of __builtin_clz() instead of loops similar to what was done
to sbc_calc_scalefactors earlier. Also technically it does loop
unrolling by processing two channels at once, which might be either
good or bad for performance (if the registers pressure is increased
and more data is spilled to memory). But the benchmark from 32-bit
x86 system (pentium-m) shows that it got clearly faster:

$ time ./sbcenc.old -b53 -s8 -j test.au > /dev/null

real    0m1.868s
user    0m1.808s
sys     0m0.048s

$ time ./sbcenc.new -b53 -s8 -j test.au > /dev/null

real    0m1.742s
user    0m1.668s
sys     0m0.064s

13 years agosbc: Fix redundant null check on calling free()
Gustavo F. Padovan [Mon, 14 Mar 2011 18:09:50 +0000 (15:09 -0300)]
sbc: Fix redundant null check on calling free()

Issues found by smatch static check: http://smatch.sourceforge.net/

13 years agosbc: added saturated clipping of decoder output to 16-bit
Siarhei Siamashka [Mon, 14 Mar 2011 18:07:38 +0000 (15:07 -0300)]
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

13 years agosbc: ensure 16-byte buffer position alignment for 4 subbands encoding
Siarhei Siamashka [Mon, 14 Mar 2011 18:01:19 +0000 (15:01 -0300)]
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.

13 years agobuild: move sbc related files to its own directory
Luiz Augusto von Dentz [Mon, 14 Mar 2011 17:46:10 +0000 (14:46 -0300)]
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.

13 years agobluetooth: add proper handling for bluetooth.nrec property
Luiz Augusto von Dentz [Fri, 14 Jan 2011 12:18:08 +0000 (14:18 +0200)]
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.

13 years agobluetooth: fix a2dp_process_push
Luiz Augusto von Dentz [Thu, 23 Dec 2010 13:24:39 +0000 (15:24 +0200)]
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.

13 years agobluetooth: reduce bitpool if audio start skipping
Luiz Augusto von Dentz [Thu, 23 Dec 2010 11:13:44 +0000 (13:13 +0200)]
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.

13 years agobluetooth: handle Acquire API change
Luiz Augusto von Dentz [Thu, 2 Dec 2010 12:11:13 +0000 (14:11 +0200)]
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.

13 years agobuild-sys: No need to create folder for echo-cancel module.
Colin Guthrie [Mon, 14 Mar 2011 16:31:00 +0000 (16:31 +0000)]
build-sys: No need to create folder for echo-cancel module.

The ORCC stage does this anyway (and this was buggy anyway as it had an extra
'src/' prefix so never worked properly when it was introduced in d6cdd80).

Thanks to Maarten Bosmans for pointing it out.

13 years agocork-on-phone: Only cork (and subsequently uncork) streams that are not already corked.
Colin Guthrie [Thu, 10 Mar 2011 11:11:51 +0000 (11:11 +0000)]
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.

13 years agobuild: Use silent rules for generating files
Maarten Bosmans [Wed, 9 Mar 2011 09:00:21 +0000 (10:00 +0100)]
build: Use silent rules for generating files

13 years agoFixup #include directives according to Coding Style
Maarten Bosmans [Wed, 9 Mar 2011 09:00:20 +0000 (10:00 +0100)]
Fixup #include directives according to Coding Style

Use #include "header.h" if functionality of header.h is implemented
and #include <header.h> if functionality of header.h is used.

13 years agoFix up according to Coding Style
Maarten Bosmans [Wed, 2 Mar 2011 11:41:26 +0000 (12:41 +0100)]
Fix up according to Coding Style

Only whitespace changes in here

13 years agoalsa-mixer: When figuring out the max_dB of a path, use only channels that are used...
Tanu Kaskinen [Fri, 11 Mar 2011 11:41:28 +0000 (13:41 +0200)]
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.

13 years agoalsa-mixer: Implement support for setting element specific upper limits for volume.
Tanu Kaskinen [Fri, 11 Mar 2011 11:40:51 +0000 (13:40 +0200)]
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.

13 years agodbus: Always accept mono volumes when setting device or stream volume.
Tanu Kaskinen [Fri, 11 Mar 2011 11:40:34 +0000 (13:40 +0200)]
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.

13 years agodbusiface-stream: Fix crash when there's no resampling used.
Tanu Kaskinen [Fri, 11 Mar 2011 11:40:20 +0000 (13:40 +0200)]
dbusiface-stream: Fix crash when there's no resampling used.

13 years agoalsa-card: Print the profile set configuration when loading the card.
Tanu Kaskinen [Fri, 11 Mar 2011 11:39:50 +0000 (13:39 +0200)]
alsa-card: Print the profile set configuration when loading the card.

13 years agoalsa-mixer: Add a default case for a switch, so that the compiler won't complain...
Tanu Kaskinen [Fri, 11 Mar 2011 11:38:05 +0000 (13:38 +0200)]
alsa-mixer: Add a default case for a switch, so that the compiler won't complain about unhandled cases.

13 years agopacat: Fix memory leak when draining the context.
Tanu Kaskinen [Fri, 11 Mar 2011 11:37:49 +0000 (13:37 +0200)]
pacat: Fix memory leak when draining the context.

13 years agoalsa-mixer: Use decibel fixes when getting and setting decibel volumes.
Tanu Kaskinen [Fri, 11 Mar 2011 11:37:17 +0000 (13:37 +0200)]
alsa-mixer: Use decibel fixes when getting and setting decibel volumes.

13 years agoalsa-mixer: Add DecibelFix section to the profile set config file format.
Tanu Kaskinen [Fri, 11 Mar 2011 11:34:24 +0000 (13:34 +0200)]
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.

13 years agovolume: Add Orc-based optimised volume scaling
Arun Raghavan [Mon, 25 Oct 2010 16:59:08 +0000 (17:59 +0100)]
volume: Add Orc-based optimised volume scaling

This adds volume scaling for 1- and 2-channel software volume scaling
using Orc. While testing the MMX and SSE backends on a Core2, I see an
~2x performance benefit over the hand-rolled MMX and SSE code. Since I
haven't been able to test on other architectures, the Orc code is only
used when MMX/SSE* is present. This can be changed in the future after
testing on AMD and ARM machines.

13 years agovolume: Fix sample array size for tests
Arun Raghavan [Wed, 27 Oct 2010 10:30:14 +0000 (11:30 +0100)]
volume: Fix sample array size for tests

Somewhere in the history of the MMX tests, the number of channels was
changed from 1 to 2, but the number of samples was not increased to make
it even (multiple of the frame size).

13 years agovolume: Make tests use only valid volumes
Arun Raghavan [Tue, 26 Oct 2010 14:20:19 +0000 (15:20 +0100)]
volume: Make tests use only valid volumes

13 years agoalsa-mixer: Fix a git-am cockup in b0f72311
Colin Guthrie [Fri, 4 Mar 2011 09:43:41 +0000 (09:43 +0000)]
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.

13 years agovolume: Add a PA_VOLUME_UI_MAX define for the recommended max volume to show in UIs
Colin Guthrie [Thu, 3 Mar 2011 12:04:31 +0000 (12:04 +0000)]
volume: Add a PA_VOLUME_UI_MAX define for the recommended max volume to show in UIs

This value is not a technical upper limit, it's just a 'sensible'
value that is not crazy high, but also allows software amplification
above 0dB (aka 100%) for very quiet audio sources.

We recommend that a comprehensive volume control UI should allow
users to set volumes up to this limit, although of course should
deal gracefully if the user has set the volume even higher than this
without resulting in a feedback loop that effectively limits the
upper volume.

The value chosen is +11dB. This was selected somewhat subjectively
and is very similar to the current 150% that gnome-volume-control
uses (which is ~+10.57dB).

On the plus side, we now recommend that everyone allows
'Volumes up to 11' which is pretty awesome.
http://en.wikipedia.org/wiki/Up_to_eleven

https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-April/006945.html
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-April/006950.html

13 years agoconf: Make system.pa use udev-detect and not hal-detect.
Colin Guthrie [Thu, 3 Mar 2011 09:37:16 +0000 (09:37 +0000)]
conf: Make system.pa use udev-detect and not hal-detect.

Also fix a left over reference to HAL in default.pa

13 years agoconfigure: Drop some warnings
Maarten Bosmans [Wed, 2 Mar 2011 11:41:25 +0000 (12:41 +0100)]
configure: Drop some warnings

Drop -Winline and set -Wstrict-aliasing level to its default.

13 years agoVarious fixes for build warnings
Maarten Bosmans [Wed, 2 Mar 2011 11:41:24 +0000 (12:41 +0100)]
Various fixes for build warnings

13 years agoGet rid of some unused-function compiler warnings
Maarten Bosmans [Wed, 2 Mar 2011 11:41:23 +0000 (12:41 +0100)]
Get rid of some unused-function compiler warnings

13 years agointrospect: Client-side implementation for has_volume/read_only_volume
Arun Raghavan [Tue, 1 Mar 2011 20:08:38 +0000 (01:38 +0530)]
introspect: Client-side implementation for has_volume/read_only_volume

This completes the client-side changes to the protocol extension
introduced by commit 99ddca89cdca9b0b92ab9870764f9211e6a82e31

13 years agox11: Make pax11publish -r remove PULSE_SESSION_ID
Colin Guthrie [Tue, 1 Mar 2011 18:15:28 +0000 (18:15 +0000)]
x11: Make pax11publish -r remove PULSE_SESSION_ID

This is not set by pax11publish, but module-x11-publish does so this tool
should tidy that up. It is only removed when passing -r and is
ignored when actually setting up it's own properties from the conf
files/guesswork.

13 years agoInclude <time.h> where necessary
Maarten Bosmans [Tue, 1 Mar 2011 17:06:28 +0000 (18:06 +0100)]
Include <time.h> where necessary

13 years agoMerge remote-tracking branch 'arun/no-ramping'
Colin Guthrie [Mon, 28 Feb 2011 19:39:10 +0000 (19:39 +0000)]
Merge remote-tracking branch 'arun/no-ramping'

13 years agoalsa-mixer: Add support for "Line Boost" element
David Henningsson [Wed, 16 Feb 2011 12:33:03 +0000 (13:33 +0100)]
alsa-mixer: Add support for "Line Boost" element

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
13 years agoRemove remaining ramping/envelope references
Arun Raghavan [Sun, 27 Feb 2011 17:36:16 +0000 (23:06 +0530)]
Remove remaining ramping/envelope references

(part of a patch series removing all ramping code)

13 years agoRevert "Add new subsystem for applying envelopes (such as volume ramps) to audio...
Arun Raghavan [Sun, 27 Feb 2011 17:32:25 +0000 (23:02 +0530)]
Revert "Add new subsystem for applying envelopes (such as volume ramps) to audio signals"

This reverts commit 95a98fe6f2002c9dd448b70bb6944541b5616df3.

Conflicts:

src/Makefile.am
src/pulsecore/envelope.c
src/pulsecore/envelope.h
src/tests/envelope-test.c

(part of a patch series removing all ramping code)

13 years agoRevert "Add volume ramping feature - envelop fix"
Arun Raghavan [Sun, 27 Feb 2011 17:32:21 +0000 (23:02 +0530)]
Revert "Add volume ramping feature - envelop fix"

This reverts commit 8eaa40b6f4cae749610770c85ba500f326d59b50.

Conflicts:

src/pulsecore/envelope.c

(part of a patch series removing all ramping code)

13 years agoRevert "Add volume ramping feature - sink-input modification"
Arun Raghavan [Sun, 27 Feb 2011 17:32:17 +0000 (23:02 +0530)]
Revert "Add volume ramping feature - sink-input modification"

This reverts commit 5318eb35ef3f91836084382a4f3d5ef08d322554.

Conflicts:

src/pulsecore/sink-input.c

(part of a patch series removing all ramping code)

13 years agoRevert "Add volume ramping feature - sink modification"
Arun Raghavan [Sun, 27 Feb 2011 17:32:10 +0000 (23:02 +0530)]
Revert "Add volume ramping feature - sink modification"

This reverts commit 897ef86b7fbb87ef17d30c584e6cd93abfc342bc.

Conflicts:

src/pulsecore/sink.c

(part of a patch series removing all ramping code)

13 years agoRevert "ramping: minor cleanups"
Arun Raghavan [Sun, 27 Feb 2011 17:32:03 +0000 (23:02 +0530)]
Revert "ramping: minor cleanups"

This reverts commit f202af17b717f5b383ac072f80a6c1327bc3143b.

(part of a patch series removing all ramping code)

13 years agoRevert "core: volume ramping fix"
Arun Raghavan [Sun, 27 Feb 2011 17:31:54 +0000 (23:01 +0530)]
Revert "core: volume ramping fix"

This reverts commit aa9348441db34b787784711f19882d6c42fa315d.

(part of a patch series removing all ramping code)

13 years agoAdd src/*-symdef.h to .gitignore.
Tanu Kaskinen [Sun, 27 Feb 2011 10:50:16 +0000 (12:50 +0200)]
Add src/*-symdef.h to .gitignore.

Also remove src/module/.gitignore as this is no longer needed
as pointed out by Arun Raghavan

13 years agosink: Add casts to some printf arguments to get rid of compiler warnings.
Tanu Kaskinen [Sun, 27 Feb 2011 11:21:41 +0000 (13:21 +0200)]
sink: Add casts to some printf arguments to get rid of compiler warnings.

13 years agosink: Don't send unnecessary PA_SINK_MESSAGE_SET_SHARED_VOLUME messages.
Tanu Kaskinen [Sun, 27 Feb 2011 11:20:42 +0000 (13:20 +0200)]
sink: Don't send unnecessary PA_SINK_MESSAGE_SET_SHARED_VOLUME messages.

If send_msg is false, the message will be sent by the caller.

13 years agovirtual-sink: Fix a crash when moving the sink to a new master right after setup.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:43 +0000 (16:16 +0200)]
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.

13 years agovirtual-sink/source: Remove an unused variable.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:42 +0000 (16:16 +0200)]
virtual-sink/source: Remove an unused variable.

13 years agovirtual-sink/source: Use a more descriptive stream name.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:41 +0000 (16:16 +0200)]
virtual-sink/source: Use a more descriptive stream name.

13 years agovirtual-sink: Add a modarg for forcing flat volume.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:40 +0000 (16:16 +0200)]
virtual-sink: Add a modarg for forcing flat volume.

13 years agovirtual-sink: Add a modarg for enabling volume sharing.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:39 +0000 (16:16 +0200)]
virtual-sink: Add a modarg for enabling volume sharing.

13 years agoImplement the "volume sharing" feature.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:38 +0000 (16:16 +0200)]
Implement the "volume sharing" feature.

When we have a filter sink that does some processing, currently the
benefits of the flat volume feature are not really available. That's
because if you have a music player that is connected to the filter sink,
the hardware sink doesn't have any idea of the music player's stream
volume.

This problem is solved by this "volume sharing" feature. The volume
sharing feature works so that the filter sinks that want to avoid the
previously described problem declare that they don't want to have
independent volume, but they follow the master sink volume instead.
The PA_SINK_SHARE_VOLUME_WITH_MASTER sink flag is used for that
declaration. Then the volume logic is changed so that the hardware
sink calculates its real volume using also the streams connected to the
filter sink in addition to the streams that are connected directly to
the hardware sink. Basically we're trying to create an illusion that
from volume point of view all streams are connected directly to the
hardware sink.

For that illusion to work, the volumes of the filter sinks and their
virtual streams have to be managed carefully according to a set of
rules:

If a filter sink follows the hardware sink volume, then the filter sink's
 * reference_volume always equals the hw sink's reference_volume
 * real_volume always equals the hw sink's real_volume
 * soft_volume is always 0dB (ie. no soft volume)

If a filter sink doesn't follow the hardware sink volume, then the filter
sink's
 * reference_volume can be whatever (completely independent from the hw sink)
 * real_volume always equals reference_volume
 * soft_volume always equals real_volume (and reference_volume)

If a filter sink follows the hardware sink volume, and the hardware sink
supports flat volume, then the filter sink's virtual stream's
 * volume always equals the hw sink's real_volume
 * reference_ratio is calculated normally from the stream volume and the hw
   sink's reference_volume
 * real_ratio always equals 0dB (follows from the first point)
 * soft_volume always equals volume_factor (follows from the previous point)

If a filter sink follows the hardware sink volume, and the hardware sink
doesn't support flat volume, then the filter sink's virtual stream's
 * volume is always 0dB
 * reference_ratio is always 0dB
 * real_ratio is always 0dB
 * soft_volume always equals volume_factor

If a filter sink doesn't follow the hardware sink volume, then the filter
sink's virtual stream is handled as a regular stream.

Since the volumes of the virtual streams are controlled by a set of rules,
the user is not allowed to change the virtual streams' volumes. It would
probably also make sense to forbid changing the filter sinks' volume, but
that's not strictly necessary, and currently changing a filter sink's volume
changes actually the hardware sink's volume, and from there it propagates to
all filter sinks ("funny" effects are expected when adjusting a single
channel in cases where all sinks don't have the same channel maps).

This patch is based on the work of Marc-AndrĂ© Lureau, who did the
initial implementation for Pulseaudio 0.9.15.

13 years agoalsa-mixer: Make sure capture source and input source use right path
David Henningsson [Wed, 19 Jan 2011 14:40:56 +0000 (15:40 +0100)]
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>
13 years agoalsa-mixer: Fixup "Mic"/"Line"/"analog-input" paths to work with the new paths
David Henningsson [Wed, 5 Jan 2011 13:03:15 +0000 (14:03 +0100)]
alsa-mixer: Fixup "Mic"/"Line"/"analog-input" paths to work with the new paths

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
13 years agoalsa-mixer: Add new paths for Internal Mic, Front Mic, Rear Mic and Dock Mic
David Henningsson [Wed, 5 Jan 2011 12:27:53 +0000 (13:27 +0100)]
alsa-mixer: Add new paths for Internal Mic, Front Mic, Rear Mic and Dock Mic

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
13 years agoalsa-mixer: always round towards 0 dB
David Henningsson [Wed, 5 Jan 2011 11:36:59 +0000 (12:36 +0100)]
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>
13 years agoalsa-mixer: add required-any and required-* for enum options
David Henningsson [Mon, 20 Dec 2010 11:29:27 +0000 (12:29 +0100)]
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>
13 years agoalsa-mixer: Add a few well-known descriptions
David Henningsson [Mon, 20 Dec 2010 10:13:37 +0000 (11:13 +0100)]
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>
13 years agoalsa-card: Add a new modarg "profile_set" for giving the card a custom profile set...
Tanu Kaskinen [Fri, 25 Feb 2011 14:28:10 +0000 (16:28 +0200)]
alsa-card: Add a new modarg "profile_set" for giving the card a custom profile set configuration file.

13 years agoalsa-mixer: Fix path set building when using the element-output or element-input...
Tanu Kaskinen [Fri, 25 Feb 2011 14:27:27 +0000 (16:27 +0200)]
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.

13 years agocore: Add a new hook PA_CORE_HOOK_CARD_PROFILE_CHANGED
Colin Guthrie [Fri, 25 Feb 2011 10:27:23 +0000 (10:27 +0000)]
core: Add a new hook PA_CORE_HOOK_CARD_PROFILE_CHANGED

This will allow modules to know when a card profile has changed
and take appropriate action. This might prove useful when developing
UCM so that the appropriate verb can be set.

13 years agocore: Added new hooks: PA_CORE_HOOK_SOURCE_PORT_CHANGED and PA_CORE_HOOK_SINK_PORT_CH...
Kim Therkelsen [Fri, 15 Oct 2010 07:25:12 +0000 (09:25 +0200)]
core: Added new hooks: PA_CORE_HOOK_SOURCE_PORT_CHANGED and PA_CORE_HOOK_SINK_PORT_CHANGED

This allows modules to know when certain ports are changed.
This will allow e.g. a filter module (or LADSAP) to only load
when a certain port is used on the device (e.g. to only filter
headphones and not normal speakers).

(Comment from Colin Guthrie: This may also have use in UCM)

13 years agoSupport for multichannel DSP processing in module-ladspa-sink
Kim Therkelsen [Fri, 15 Oct 2010 07:14:31 +0000 (09:14 +0200)]
Support for multichannel DSP processing in module-ladspa-sink

13 years agoMerge remote-tracking branch 'mkbosmans/mingw32-build'
Colin Guthrie [Fri, 25 Feb 2011 09:24:07 +0000 (09:24 +0000)]
Merge remote-tracking branch 'mkbosmans/mingw32-build'

13 years agosconv_sse: Exclude SSE optimizations for Mac OS X
Edward Rudd [Tue, 22 Feb 2011 15:14:07 +0000 (10:14 -0500)]
sconv_sse: Exclude SSE optimizations for Mac OS X

At least on 32bit compiles, there are not enough registers.

13 years agosolaris: update call of pa_thread_new to new prototype
Edward Rudd [Tue, 22 Feb 2011 16:04:19 +0000 (11:04 -0500)]
solaris: update call of pa_thread_new to new prototype

13 years agocoreaudio: Fix call to pa_thread_new
Edward Rudd [Tue, 22 Feb 2011 15:13:05 +0000 (10:13 -0500)]
coreaudio: Fix call to pa_thread_new

13 years agoAllow read-only or non-existing sink input volume.
Tanu Kaskinen [Mon, 14 Feb 2011 11:41:06 +0000 (13:41 +0200)]
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()).

13 years agodbusiface-stream: Send the Device property in the GetAll handler.
Tanu Kaskinen [Tue, 22 Feb 2011 15:19:44 +0000 (17:19 +0200)]
dbusiface-stream: Send the Device property in the GetAll handler.