| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
This event is emitted if the sink-input could not be moved to a new sink
because it doesn't support the format of the sink-input. Clients can
reconnect their stream with a different format if they wish or
gracefully exit.
|
| |
|
|
|
|
|
|
| |
The assertion message is misleading, since the passthrough connection
can fail for reasons the client has no control over (like other sink
inputs being connected).
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
This gets the negotiated format of sink inputs in
pa_context_get_sink_input*(). Also prints the format in 'pactl list'.
|
|
|
|
|
| |
This gets the list of supported formats for a sink in
pa_context_get_sink_info*(). Also prints these in 'pactl list'.
|
|
|
|
|
|
|
|
|
|
|
| |
In most cases it is expected that clients cannot consume compressed
data from monitor sources, so we suspend the monitor source when the
sink goes into passthrough mode.
Eventually, when the extended API includes client notifications for
changed formats, we should emit a notification on the monitor so that
clients can decide what they want to do when this happens (disconnect or
consume the data anyway).
|
| |
|
|
|
|
|
|
| |
This adds some checks that I'd postponed and adds a
"should-be-good-enough" guess for tlength when using a compressed
format.
|
|
|
|
|
|
| |
This will eventually be replaced by a hook to let clients know that the
stream has moved so that they can gracefully reconnect and renegotiate a
supported format.
|
|
|
|
| |
We weren't freeing the sink formats idxset.
|
|
|
|
|
|
| |
We frequently need to free an idxset containing pa_format_infos, so
define an internal free function that can be used directly with this
(instead of defining it once-per-file).
|
|
|
|
| |
Handles bad format input more gracefully and returns an error instead.
|
|
|
|
| |
This is easier for clients to grok than INVALID.
|
|
|
|
|
| |
Removes a couple of warnings and simplifies the assertion logic that
verifies format negotiation was successful.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
This adds a get_formats() vfunc for sinks to provide a list of formats
they can support. pa_sink_check_formats() can be used during or after
routing to determine what formats from a stream the sink can support.
|
|
|
|
|
| |
This will be used to represent the format of data provided by the client
for both compressed and PCM formats in a new extended API.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Commit 65ef80b fixed building with xcb-util >= 0.3.8, but the reply is never
checked (possible SIGSEGV if the reply is NULL) nor freed (memory leak at each
call of the functions).
Also, remove include and dependencies on xcb-atom, as it was only meaningful
for xcb_atom_get() and STRING, and depend instead on xcb >= 1.6 for
XCB_ATOM_STRING.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It's possible that the memblockq of a sink input is rewound to a negative read
index if the sink input is moved between sinks shortly after its creation. When
this happens, pa_memblockq_peek() returns a memchunk whose 'memblock' field is
NULL and whose 'length' field indicates the length of the gap caused by the
negative read index. This will trigger an assert in play-memblockq.c.
If the memblockq had a silence memchunk, pa_memblockq_peek() would return
silence for the duration of the gap and the assert would be avoided. However,
this approach would prevent the sink input from being drained and is thus not
possible. Instead, we handle the aforementioned situation by dropping the gap
indicated by the 'length' field of the memchunk and by peeking the actual data
that comes after the gap.
This scenario seems to be quite rare in everyday use, but it causes a severe
bug in the handheld world. The assert can be triggered e.g. by loading two null
sinks, playing a sample from the cache to one of them and then moving the
created sink input between the two sinks. The rewinds done by the null sinks
seem to be quite long (I don't know if this is normal behaviour or something
fishy in module-null-sink).
See also:
6bd34156b130c07b130de10111a12ef6dab18b52
virtual-sink: Fix a crash when moving the sink to a new master right after setup.
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2011-February/009105.html
Reproduce:
This problem can be reproduced with the following script:
SAMPLE_PATH="/usr/share/sounds/alsa/"
SAMPLE="Front_Left"
pactl remove-sample $SAMPLE 2> /dev/null
pactl upload-sample $SAMPLE_PATH$SAMPLE.wav
mod1=`pactl load-module module-null-sink sink_name=null1`
mod2=`pactl load-module module-null-sink sink_name=null2`
pactl play-sample $SAMPLE null1
input=`pactl list | grep "Sink Input #" | tail -n 1 | cut -d# -f2`
echo "Sample $SAMPLE playing as Sink Input #$input"
pactl move-sink-input $input null2
pactl move-sink-input $input null1
pactl unload-module $mod1
pactl unload-module $mod2
|
|
|
|
|
|
| |
The xcb_atom_get functions were removed from xcb-util. Changed these to
xcb_intern_atom/xcb_intern_atom_reply. Also, STRING is now
XCB_ATOM_STRING.
|
|
|
|
|
|
|
|
| |
There were several memory leaks. In addition to those,
pa_dbus_protocol_add_interface() used a string from the
caller as a key to a hashmap, instead of a copy of the
string. This caused trouble when the caller freed the
string while the key was still in use in the hashmap.
|
|
|
|
|
| |
Newer generations of libpthread have functions to set and get the thread
names. If available, use them.
|
|
|
|
|
|
| |
Defining this macro on a global level is disadvantageous for other APIs,
and as we need it for clock_gettime() only on Mac OS X, define it
locally in pulsecore/core-rtclock.c only.
|
|
|
|
|
| |
This fixes asserts beeing hit when see requests are posted via the
native protocol.
|
|
|
|
|
|
|
| |
This makes the volume tests run in two loops and print the minimum,
maximum and standard deviation of readings from the inner loop. This
makes it easier to reason out performance drops (i.e. algorithmic
problems vs. other system issues such as processor contention).
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For systems which have a fcntl() implementation, we can simplify the
code which determines whether a file selector is valid in pa_poll().
The old code, which is harder to read and more expensive, stays around
for all platforms we need to emulate poll() for using select(), and
which don't provide fcntl(). IOW, for Windows.
On Mac OS X, however, the detection for bad fds via more select() calls
doesn't work, resulting in hung main loops, so the patch fixes a real
bug there.
|
|
|
|
|
| |
Checking just the flag doesn't work if the sink uses volume sharing, because
such sinks never have PA_SINK_FLAT_VOLUME set.
|
|
|
|
|
|
|
|
|
|
| |
This is pretty cosmetic change; there's no actual functionality added.
Previously the volume_writable information was available through the
pa_sink_input_is_volume_writable() function, but I find it cleaner to have a
real variable.
The sink input introspection variable name was also changed from
read_only_volume to volume_writable for consistency.
|
|
|
|
|
|
|
|
|
|
| |
On 64-bit systems LONG_MAX is greater than the largest possible value of a
uint32_t variable, which caused the compiler to warn about a comparison that is
always false. On 32-bit systems pa_atou() can return a value that will overflow
when assigned to e->volume_limit, which has type long, so the comparison was
necessary.
This dilemma is resolved by using pa_atol() instead of pa_atou().
|
|
|
|
|
|
|
| |
We should not call pa_core_ref() anywhere in the code. Doing so
will prevent proper daemon shutdown as the only call (in daemon/main.c)
to pa_core_unref() should always call free_core() and perform a normal
shutdown (i.e. unload all modules gracefully).
|
|
|
|
| |
To make the code cleaner and have the checks all in one place.
|
|\ |
|
| |
| |
| |
| |
| | |
Code sniplets are based on examples provided by Apple. See
http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KernelProgramming/scheduler/scheduler.html
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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]
|
|\ \
| |/
|/| |
|
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| |
| |
| |
| | |
Automatically use replacement function on platforms (win32) where not all arpa/inet.h is available natively.
|
| |
| |
| |
| | |
Do not use replace %PULSE_ROOT% from the environment.
|
| |
| |
| |
| |
| |
| |
| | |
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)
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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)
~~~~~~~~~~~~^~~~~~~
|
| | |
|
| |
| |
| |
| |
| | |
Use #include "header.h" if functionality of header.h is implemented
and #include <header.h> if functionality of header.h is used.
|
| |
| |
| |
| | |
Only whitespace changes in here
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| |
| |
| |
| |
| |
| | |
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).
|