Commit graph

44 commits

Author SHA1 Message Date
Tanu Kaskinen
95dd90ce06 loopback: refactor proplist updating
This saves some proplist allocations and a couple of code lines. Also,
logging is better, because the set_property() functions work with
string values, while the update_proplist() functions assume opaque
binary data, and therefore can't log the property values.
2016-04-25 13:50:47 +03:00
Georg Chini
fc803b4883 loopback: Validate the rate parameter 2015-12-18 07:35:15 +02:00
Alexander E. Patrakov
c7310f8e37 loopback: Fix the obviously-wrong "buffer+=buffer" logic
Originally pointed out by Georg Chini.

Calculating buffer = buffer + (send_counter - recv_counter)
in one branch and buffer = 2 * buffer - (recv_counter - send_counter)
looks very obviously wrong. In other words, before the patch, the
contribution from the previous lines was double-counted.
2015-09-13 19:24:10 +03:00
Alexander E. Patrakov
aa3a27d5cd module-loopback: don't use 0 for custom source output message id
Message id 0 is PA_SOURCE_OUTPUT_MESSAGE_GET_LATENCY. So, every time PulseAudio
sent PA_SOURCE_OUTPUT_MESSAGE_GET_LATENCY message to the loopback source output,
it actually hit the SOURCE_OUTPUT_MESSAGE_LATENCY_SNAPSHOT handler instead. As a
result, the SOURCE_OUTPUT_MESSAGE_LATENCY_SNAPSHOT handler was called when not
intended, the default PA_SOURCE_OUTPUT_MESSAGE_GET_LATENCY handler was not called
at all, and the latency was thus evaluated incorrectly.

Reported-by: Georg Chini <georg@chini.tk>
Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
2015-02-16 15:02:12 +01:00
Georg Chini
d6ef0ec3dc loopback: Don't push zero-sized block to memblockq
During my work on module-loopback I found a bug that sometimes crashes pulse when
module-loopback is loaded due to pushing a zero-length block into the memblockq.
As there is a one-line fix I thought you might want it for 6.0.
2015-02-02 13:17:35 +02:00
Ondrej Holecek
5effc83479 update FSF addresses to FSF web page
FSF addresses used in PA sources are no longer valid and rpmlint
generates numerous warnings during packaging because of this.
This patch changes all FSF addresses to FSF web page according to
the GPL how-to: https://www.gnu.org/licenses/gpl-howto.en.html

Done automatically by sed-ing through sources.
2015-01-14 22:20:40 +02:00
Tanu Kaskinen
60f1e695fd loopback: Increase the maximum allowed latency
Currently the biggest possible sink latency is 10 seconds. The total
latency of the loopback is divided evenly for the source, an
intermediate buffer and the sink, so if I want to test 10 s sink
latency, the total needs to be three times that, i.e. 30 seconds.
2013-07-29 10:43:12 +03:00
Mikel Astiz
8c81f4d0bd loopback: Fix cork state not updated after move
The source output and sink inputs should be corked if the corresponding
sink/source is suspended, as handled during module initialization. This
also needs to be handled during stream move, because the suspend state
of the destination sink/source might be different to the previous one.

This fixes the issue with an infinite number of "Requesting rewind due
to end of underrun" traces after a stream move.
2013-07-08 17:53:28 +03:00
poljar (Damir Jelić)
d806b19714 Remove pa_bool_t and replace it with bool.
commands used for this (executed from the pulseaudio/src directory):
    find . -regex '\(.*\.[hc]\|.*\.cc\|.*\.m4\)' -not -name 'macro.h' \
        -a -not -name 'reserve.[ch]' -a -not -name 'reserve-monitor.[ch]' \
        -a -not -name 'glib-mainloop.c' -a -not -name 'gkt-test.c' \
        -a -not -name 'glib-mainloop.c' -a -not -name 'gkt-test.c' \
        -a -not -name 'poll-win32.c' -a -not -name 'thread-win32.c' \
        -a -not -name 'dllmain.c' -a -not -name 'gconf-helper.c' \
        -exec sed -i -e 's/\bpa_bool_t\b/bool/g' \
        -e 's/\bTRUE\b/true/g' -e 's/\bFALSE\b/false/g' {} \;

and:
    sed -i -e '181,194!s/\bpa_bool_t\b/bool/' \
        -e '181,194!s/\bTRUE\b/true/' -e \
        '181,194!s/\bFALSE\b/false/' pulsecore/macro.h
2013-07-04 12:25:30 +03:00
poljar (Damir Jelić)
aab63a3499 Whitespace cleanup: Remove tabs
This patch removes all tabs hidden inside the source tree and replaces
them with 4 spaces.

Command used for this:
    find . -type d \( -name bluetooth \) -prune -o
    -regex '\(.*\.[hc]\|.*\.cc\)' -a -not -name 'reserve*.[ch]'
    -a -not -name 'gnt*.h' -a -not -name 'adrian*'
    -exec sed -i -e 's/\t/    /g' {} \;

The excluded files are mirrored files from external sources containing
tabs.
2013-06-24 16:56:24 +03:00
Tanu Kaskinen
259be540e3 loopback: Flush asyncmsgq from the right context
u->asyncmsg is accessed from two IO threads. teardown() shouldn't
flush the queue from the main thread while both IO threads are still
potentially using the queue. This patch fixes that error by flushing
the queue from the sink input thread when the sink input is being
unlinked.

Flushing the queue in teardown() caused this assertion in
pa_asyncmsgq_get() to crash sometimes: pa_assert(!a->current)
2013-03-22 20:49:56 +02:00
Tanu Kaskinen
f8b57af2c8 loopback: Fix segfault in may_move_to() callbacks
The sink input may_move_to() callbacks can be called while the source
output is not connected to any source (i.e. is currently moving too),
and vice versa.

Thanks to Frédéric Dalleau for reporting this bug.
2013-03-22 20:44:52 +02:00
Tanu Kaskinen
1fc2cf8425 loopback: Don't fix the source output format/rate/channels.
Once the sink input has been routed in pa_sink_input_new(),
the sample spec and channel map have already become fixed.
The sink input and source output must use the same stream
format, because the data is copied as-is.
2012-10-30 16:27:17 +02:00
Tanu Kaskinen
a68652a42c loopback: Use the real sample spec once it's known.
When module-loopback is loaded without arguments, the ss and
map variables are initialized with dummy values. This caused
a problem, because also pa_memblockq_new() was called with
the dummy values, making it work incorrectly. The base was
set to 1 instead of the real frame size, which in turn
caused alignment related crashes.
2012-10-30 16:26:06 +02:00
Mikel Astiz
5412a69cac loopback: Disable adjust timer when suspended
Stop the rate adjustment timer when no audio is flowing.
2012-09-21 10:38:15 +03:00
Frédéric Dalleau
6c916697bc loopback: Cork source-output if sink is suspended
During initialization, the approach avoids having a needless short
period of corked state in case the sink is suspended, by always creating
the source-output corked and uncorking it immediately afterwards when
the sink is not suspended.
2012-09-21 10:32:32 +03:00
Frédéric Dalleau
e90e19f457 loopback: Cork sink-input if source is suspended
During initialization, the approach avoids having a needless short
period of corked state in case the source is suspended, by always
creating the sink-input corked and uncorking it immediately afterwards
when the source is not suspended.
2012-09-21 10:25:13 +03:00
Frédéric Dalleau
c6d8d1d7c1 loopback: Enable routing on loopback streams
At module-loopback load, if no sink is given, the default sink is used. If the
stream has a media.role property, the property cannot be used because a the
source or sink is forced to default. Both module-intended-roles and
module-device-manager are affected. The same apply to sources.

With this patch, if sink or source is missing, routing modules can be used.
2012-07-04 14:54:57 +03:00
David Henningsson
e815a1f81a module-loopback: Reset process_msg callbacks in teardown
Make sure we can't be called into by remaining references to
sink-inputs and source-outputs after we have unloaded, as
that will likely lead to segfaults.

Thanks to Tanu for providing valuable input on this patch.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2012-04-04 09:04:12 +02:00
Frédéric Dalleau
b762f4eef1 loopback: Fix crash on error during init
If an error during pa__init() causes a jump to fail: u->asyncmsgq is not
initialized.
2012-04-02 17:47:04 +03:00
David Henningsson
00c3a4958e module-loopback: Never call adjust_rates after teardown
Calling adjust_rates after teardown results in segfault, and
judging from the Ubuntu bug report, this can happen.
Actively prevent this by destroying the time event, and by
setting adjust_time to 0, we also prevent this routine being
called on max request update.

BugLink: https://bugs.launchpad.net/bugs/946400
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2012-03-20 11:44:15 +01:00
Arun Raghavan
89a49d9611 loopback: Trivial whitespace fix 2012-02-07 14:03:47 +05:30
Frédéric Dalleau
d0f1a3a770 loopback: Fix crash when moving sink-input fails 2012-02-07 14:03:28 +05:30
Maarten Lankhorst
2c652b43f9 loopback: Fix crashes
Flush the message queue before tearing down, and dest==NULL is valid in case moving failed.

With this my module-loopback finally no longer causes frequent crashes.
2012-01-30 11:17:08 +00:00
Tanu Kaskinen
666261ece8 memblockq: Improve debuggability by storing a name and a sample spec.
These are not used for anything at this point, but this
makes it easy to add ad-hoc debug prints that show the
memblockq name and to convert between bytes and usecs.
2011-10-01 13:25:16 +01:00
Tanu Kaskinen
badc32adb9 loopback: New modargs: sink_input_properties and source_output_properties.
The new modargs replace sink_input_name, sink_input_role,
source_output_name and source_output_role.
2011-09-07 20:31:50 +01:00
Maarten Bosmans
dd9265ac78 Remove unnecessary #includes 2011-06-22 23:12:20 +01:00
Colin Guthrie
5d35375aa7 capture: Add the passthrough format negotiation to capture streams.
This helps to keep the API more symmetrical and also potentially
allows support for passthrough monitor sources at some point in the future.
2011-06-22 21:55:27 +01:00
Tanu Kaskinen
3c4accfde2 loopback: Add a modarg for disabling remixing. 2011-05-15 15:11:36 +01:00
Arun Raghavan
0ac2cfce6d core: Add extended stream API to support compressed formats
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
2011-05-02 11:54:43 +05:30
Maarten Bosmans
ecf09f2cd6 Fix up according to Coding Style
Only whitespace changes in here
2011-03-11 11:49:35 +00:00
Colin Guthrie
8534149fbe Merge remote branch 'mkbosmans/rate-adjustment' 2011-01-31 11:45:50 +00:00
Maarten Bosmans
8b4cb54595 Limit rate adjustments to small, inaudible jumps
The same logic is applied to the sample rate adjustments in module-rtp-recv,
module-loopback and module-combine:
 - Each time an adjustment is made, the new rate can differ at most 2‰ from the
   old rate.  Such a step is equal to 3.5 cents (a cent is 1/100th of a
   semitone) and as 5 cents is generally considered the smallest observable
   difference in pitch, this results in inaudible adjustments.
 - The sample rate of the stream can only differ from the rate of the
   corresponding sink by 25%.  As these adjustments are meant to account for
   very small clock drifts, any large deviation from the base rate suggests
   something is seriously wrong.
 - If the calculated rate is within 20Hz of the base rate, set it to the base
   rate.  This saves CPU because no resampling is necessary.
2011-01-16 02:14:41 +01:00
Maarten Bosmans
11dbe30bfa module-loopback: Add adjust_time to valid args 2011-01-16 02:02:55 +01:00
Cai Yuanqing
95ccbf7346 loopback: Add new arguments to disable stream move
The arguments sink_dont_move and source_dont_move have been added to toggle
module automatic unloading when the sink or source were no longer
available, rather than just moving them to the next available
sink/source (via rescue streams).

Reviewed and tweaked by Colin Guthrie.
2011-01-03 09:42:12 +00:00
Maarten Lankhorst
971bbe04a8 module-loopback: Prevent an infinite loop when rate adjusting is disabled 2010-12-12 20:30:36 +00:00
Tanu Kaskinen
614eef8331 loopback: Make stream names and roles configurable. 2010-08-19 12:08:43 +03:00
Lennart Poettering
66cfa72eb4 native: rework handling of seeks that depend on variables the client does not know anything about
All seeks/flushes that depend on the playback buffer read pointer cannot
be accounted for properly in the client since it does not know the
actual read pointer. Due to that the clients do not account for it at
all. We need do the same on the server side. And we did, but a little
bit too extreme. While we properly have not applied the changes to the
"request" counter we still do have to apply it to the "missing" counter.
This patch fixes that.
2010-02-09 22:45:59 +00:00
Tor-Björn Claesson
7b682c9690 loopback: Setting latency of module-loopback
I checked the source code, and latency_msec is missing from the list
of valid module arguments. Attaching a patch to add it.
2009-10-05 23:24:20 +02:00
Lennart Poettering
84eb6614eb core: move 'flags' field into 'pa_sink_input_new_data' structure so that hooks can access it 2009-08-28 23:24:09 +02:00
Lennart Poettering
368c3e3f90 loopback: quieten gcc on 32bit 2009-08-26 20:05:19 +02:00
Lennart Poettering
4614412f94 loopback: update description and icons when moving loopback streams 2009-08-26 02:17:37 +02:00
Lennart Poettering
d909f59389 loopback: make sure a monitor can't be looped back to its sink 2009-08-26 01:52:02 +02:00
Lennart Poettering
ea4b65b8e0 loopback: add loopback module for direct connections of sinks and sources 2009-08-26 01:42:17 +02:00