Colin Guthrie [Sun, 20 Mar 2011 14:09:14 +0000 (14:09 +0000)]
tunnel: Fix tunnel streams with recent servers
Prompted by bug #750. Thanks to Emil Renner Berthing for the original
patch.
Colin Guthrie [Sun, 20 Mar 2011 11:44:53 +0000 (11:44 +0000)]
bluetooth: Run 'make update-sbc'
Note that changes to ipc.h from
8f3ef04b had to be manually reapplied.
Colin Guthrie [Sun, 20 Mar 2011 12:05:25 +0000 (12:05 +0000)]
build-sys: Make update-sbc, update-reserve and update-rtkit work in OOT builds
Tanu Kaskinen [Thu, 17 Mar 2011 10:23:42 +0000 (12:23 +0200)]
alsa-mixer: Refactoring: merge element_mute_volume(), element_zero_volume() and element_apply_constant_volume() into a single function.
Tanu Kaskinen [Thu, 17 Mar 2011 10:23:41 +0000 (12:23 +0200)]
alsa-mixer: Implement constant volume.
This change makes it possible to configure an arbitrary constant volume for a
volume element in the path configuration, which is applied when the path is
selected. Note: this is only useful when the exact hardware and driver are
known beforehand.
Maarten Bosmans [Sat, 19 Mar 2011 15:26:47 +0000 (16:26 +0100)]
Get rid of some warnings
Mostly warnings about unused stuff.
Furthermore, the first hunk is a fix for the change in
177948a6.
Finally, comment in AEC_dtd was translated and the code simplified slightly.
CC module_bluetooth_device_la-module-bluetooth-device.lo
modules/bluetooth/module-bluetooth-device.c: In function ‘a2dp_process_render’:
modules/bluetooth/module-bluetooth-device.c:1335:30: warning: pointer targets in passing argument 6 of ‘sbc_encode’
differ in signedness [-Wpointer-sign]
../src/modules/bluetooth/sbc/sbc.h:92:9: note: expected ‘ssize_t *’ but argument is of type ‘size_t *’
CC module_rygel_media_server_la-module-rygel-media-server.lo
modules/module-rygel-media-server.c:383:13: warning: ‘append_property_dict_entry_object_array’ defined but not used [-Wunused-function]
CC module_echo_cancel_la-adrian-aec.lo
modules/echo-cancel/adrian-aec.h:360:15: warning: ‘AEC_getambient’ defined but not used [-Wunused-function]
modules/echo-cancel/adrian-aec.h:368:14: warning: ‘AEC_setgain’ defined but not used [-Wunused-function]
modules/echo-cancel/adrian-aec.h:374:14: warning: ‘AEC_setaes’ defined but not used [-Wunused-function]
modules/echo-cancel/adrian-aec.h:377:16: warning: ‘AEC_max_dotp_xf_xf’ declared ‘static’ but never defined [-Wunused-function]
CC module_echo_cancel_la-module-echo-cancel.lo
modules/echo-cancel/module-echo-cancel.c: In function ‘time_callback’:
modules/echo-cancel/module-echo-cancel.c:266:12: warning: variable ‘fs’ set but not used [-Wunused-but-set-variable]
CC module-virtual-sink.lo
modules/module-virtual-sink.c: In function ‘sink_input_pop_cb’:
modules/module-virtual-sink.c:206:15: warning: variable ‘current_latency’ set but not used [-Wunused-but-set-variable]
Arun Raghavan [Sat, 19 Mar 2011 12:01:50 +0000 (17:31 +0530)]
daemon: Fix missing include - cpu-orc.h
Maarten Bosmans [Sat, 19 Mar 2011 12:59:16 +0000 (13:59 +0100)]
Get rid of some warnings: -Wunsafe-loop-optimizations
pulsecore/core-util.c: In function ‘pa_hexstr’:
pulsecore/core-util.c:1858: warning: cannot optimize loop, the loop counter may overflow [-Wunsafe-loop-optimizations]
modules/alsa/alsa-mixer.c: In function ‘pa_alsa_decibel_fix_dump’:
modules/alsa/alsa-mixer.c:3678: warning: cannot optimize possibly infinite loops [-Wunsafe-loop-optimizations]
modules/alsa/alsa-mixer.c: In function ‘pa_alsa_path_set_new’:
modules/alsa/alsa-mixer.c:2640: warning: cannot optimize loop, the loop counter may overflow [-Wunsafe-loop-optimizations]
Maarten Bosmans [Sat, 19 Mar 2011 12:59:15 +0000 (13:59 +0100)]
Get rid of some warnings: -Wunused-result
modules/module-default-device-restore.c: In function ‘load’:
modules/module-default-device-restore.c:67: warning: ignoring return value of ‘fgets’,
declared with attribute warn_unused_result [-Wunused-result]
modules/module-default-device-restore.c:88: warning: ignoring return value of ‘fgets’,
declared with attribute warn_unused_result [-Wunused-result]
pulsecore/authkey.c: In function ‘generate’:
pulsecore/authkey.c:58: warning: ignoring return value of ‘ftruncate’,
declared with attribute warn_unused_result [-Wunused-result]
pulsecore/core-util.c: In function ‘pa_make_secure_dir’:
pulsecore/core-util.c:261: warning: ignoring return value of ‘fchown’,
declared with attribute warn_unused_result [-Wunused-result]
Colin Guthrie [Sun, 20 Mar 2011 11:18:19 +0000 (11:18 +0000)]
Merge remote-tracking branch 'mkbosmans/mingw32-build'
Maarten Bosmans [Mon, 14 Mar 2011 09:51:11 +0000 (10:51 +0100)]
module-waveout: Fix record/playback args
Maarten Bosmans [Fri, 11 Mar 2011 14:41:29 +0000 (15:41 +0100)]
module-waveout: Move thread creation
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.
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.
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.
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.
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.
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.
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)
Maarten Bosmans [Fri, 18 Mar 2011 10:52:30 +0000 (11:52 +0100)]
Update PA_MODULE_USAGE to be in line with actual implementation
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.
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.
Colin Guthrie [Fri, 18 Mar 2011 10:01:12 +0000 (10:01 +0000)]
bluetooth: Fix build errors relating to SBC
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".
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)
~~~~~~~~~~~~^~~~~~~
Maarten Bosmans [Sat, 12 Mar 2011 18:45:02 +0000 (19:45 +0100)]
Fix up some double spaces
Maarten Bosmans [Wed, 16 Mar 2011 09:47:20 +0000 (10:47 +0100)]
build-sys: Flip default to no git pull on make dist
Colin Guthrie [Fri, 18 Mar 2011 00:10:27 +0000 (00:10 +0000)]
Merge remote-tracking branch 'vudentz/master'
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.
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
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
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.
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
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
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
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
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.
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
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
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
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/
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
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.
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.
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.
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.
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.
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.
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.
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.
Maarten Bosmans [Wed, 9 Mar 2011 09:00:21 +0000 (10:00 +0100)]
build: Use silent rules for generating files
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.
Maarten Bosmans [Wed, 2 Mar 2011 11:41:26 +0000 (12:41 +0100)]
Fix up according to Coding Style
Only whitespace changes in here
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.
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.
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.
Tanu Kaskinen [Fri, 11 Mar 2011 11:40:20 +0000 (13:40 +0200)]
dbusiface-stream: Fix crash when there's no resampling used.
Tanu Kaskinen [Fri, 11 Mar 2011 11:39:50 +0000 (13:39 +0200)]
alsa-card: Print the profile set configuration when loading the card.
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.
Tanu Kaskinen [Fri, 11 Mar 2011 11:37:49 +0000 (13:37 +0200)]
pacat: Fix memory leak when draining the context.
Tanu Kaskinen [Fri, 11 Mar 2011 11:37:17 +0000 (13:37 +0200)]
alsa-mixer: Use decibel fixes when getting and setting decibel volumes.
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.
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.
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).
Arun Raghavan [Tue, 26 Oct 2010 14:20:19 +0000 (15:20 +0100)]
volume: Make tests use only valid volumes
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.
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
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
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.
Maarten Bosmans [Wed, 2 Mar 2011 11:41:24 +0000 (12:41 +0100)]
Various fixes for build warnings
Maarten Bosmans [Wed, 2 Mar 2011 11:41:23 +0000 (12:41 +0100)]
Get rid of some unused-function compiler warnings
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
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.
Maarten Bosmans [Tue, 1 Mar 2011 17:06:28 +0000 (18:06 +0100)]
Include <time.h> where necessary
Colin Guthrie [Mon, 28 Feb 2011 19:39:10 +0000 (19:39 +0000)]
Merge remote-tracking branch 'arun/no-ramping'
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>
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)
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)
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)
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)
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)
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)
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)
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
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.
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.
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.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:42 +0000 (16:16 +0200)]
virtual-sink/source: Remove an unused variable.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:41 +0000 (16:16 +0200)]
virtual-sink/source: Use a more descriptive stream name.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:40 +0000 (16:16 +0200)]
virtual-sink: Add a modarg for forcing flat volume.
Tanu Kaskinen [Thu, 24 Feb 2011 14:16:39 +0000 (16:16 +0200)]
virtual-sink: Add a modarg for enabling volume sharing.
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.
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>
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>
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>
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>
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>
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>
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.
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.