Commit graph

2205 commits

Author SHA1 Message Date
David Henningsson
732348c9d9 sink-input/source-output: Fix LFE remixing suddenly enabled
Steps to reproduce:
 1) Leave LFE remixing disabled (the default)
 2) Start playback of stereo material on e g 5.1 surround, notice nothing in LFE
 3) Now change profile to e g 4.0 surround and then back to 5.1 surround
 4) Notice that LFE channel is now remixed

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-02-28 13:42:45 +01:00
Koop Mast
b0a04d8031 sconv, svolume: Fix compilation on 32-bit FreeBSD
Don't try to compile this code on 32-bit FreeBSD, it will error out complain
about registers only being available in 64-bit mode.
2014-02-22 13:06:29 +02:00
Arun Raghavan
3152226502 Revert "protocol-native: Don't enumerate unlinked sinks and sources"
This reverts commit bd0bd9143f.
2014-02-17 16:32:40 +05:30
Arun Raghavan
bd0bd9143f protocol-native: Don't enumerate unlinked sinks and sources
This makes sure that there is no window between pa_sink/source_new()
and _put() where enumerating sinks/sources causes an assert (several
calls in sink/source_get_info need a linked sink or source).
2014-02-14 21:36:21 +05:30
Tanu Kaskinen
ee1a964994 sink-input, source-output: Don't crash if format negotiation fails
A segfault was reported on this line:

pa_return_val_if_fail(PA_SINK_IS_LINKED(pa_sink_get_state(data->sink)), -PA_ERR_BADSTATE);

After expanding the pa_sink_get_state() macro, the line looks like
this:

pa_return_val_if_fail(PA_SINK_IS_LINKED(data->sink->state), -PA_ERR_BADSTATE);

So data->sink was apparently NULL. That could happen if we try to fall
back to the default sink, but format negotiation fails.

This bug was introduced in commit
71816ecb7f.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=74646
2014-02-14 16:04:32 +02:00
Tanu Kaskinen
e9768d9aac source: Increase max outputs per source
This change is just for being symmetric with sinks, which got this
change in 26bf2df903.
2014-02-05 17:56:45 +02:00
Tanu Kaskinen
7297feb50b protocol-native: Fix a crash
Without this check pa_source_output_set_volume() crashes if
so->volume_writable is false. The same check already exists for sink
inputs.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=74529
2014-02-04 21:32:16 +02:00
Tanu Kaskinen
a64eead876 thread-win32: Implement pa_thread_free_nojoin()
This fixes a build error with mingw32:

pulsecore/.libs/libpulsecommon_4.99_la-lock-autospawn.o: In function `unref':
/home/abuild/rpmbuild/BUILD/pulseaudio-4.99.2/src/pulsecore/lock-autospawn.c:123: undefined reference to `pa_thread_free_nojoin'
collect2: error: ld returned 1 exit status

pa_thread_free_nojoin() was initially only implemented for the pthread
based pa_thread backend, because it was incorrectly assumed that
autospawning (the only user of pa_thread_free_nojoin()) is not used on
Windows.

Reported-By: Michael DePaulo <mikedep333@gmail.com>
2014-01-30 10:47:46 +02:00
Peter Meerwald
537f430c99 resampler: Resample first followed by remapping if have more out channels than in channels
Reintroduces a cleaned-up version of commit 30ce3a14e5 which
was reverted by 1ce71cbd82; for more information see
http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/17479/focus=17487

The patch intends to reduce computational load when resampling AND remapping. The PA
resampler performs the following steps:

sample format conversion -> remapping -> resampling -> sample format conversion

In case the number of output channels is higher than the number of input channels, the
resampler has to be run more often than necessary. E.g. in case of mono to 4-channel remapping,
the resampler runs on 4 channels separately.

To ímprove this, the PA resampler pipeline is made adaptive:

if out-channels <= in-channels:
  sample format conversion -> remapping -> resampling -> sample format conversion
if out-channels > in-channels:
  sample format conversion -> resampling -> remapping -> sample format conversion

Signed-off-by: Peter Meerwald <p.meerwald@bct-electronic.com>
2014-01-28 23:08:54 +02:00
Peter Meerwald
b51d28bbbf resampler: Implement leftover handling in convert_to_work_format()
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-01-28 22:49:15 +02:00
Peter Meerwald
5ad310f4f6 resampler: Extend fit_buf() helper to copy leftover data to new buffer
the patch changes the interface of the (internal) fit_buf() function:
fit_buf() manages the memblock of the buf chunk, it reallocates the memblock
if the requested number of bytes ('len') if larger than the memblock's size ('size')
and optionally preserves 'copy' bytes

the code should be in line with the comment now

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-01-28 22:41:16 +02:00
Tanu Kaskinen
eab0544f23 module: Replace rindex() with strrchr()
rindex() appears to be "non-standard" to an extent, and it caused a
build failure on mingw32.

From the man page of rindex(): "POSIX.1-2008 removes the
specifications of index() and rindex(), recommending strchr(3) and
strrchr(3) instead."
2014-01-27 21:00:58 +02:00
Tanu Kaskinen
c1c19e4d78 sink, source: Remove useless attach/detach stuff
The removed stuff wasn't used anywhere.
2014-01-15 18:59:18 +02:00
Tanu Kaskinen
f41650a550 sink-input, source-output: Interpret missing PCM parameters in format info as a request to decide those parameters at the server end
The "fix flags" (PA_SINK_INPUT_FIX_FORMAT etc.) don't work properly
with the pa_stream_new_extended() interface. This patch fixes it so
that the same effect can be achieved by leaving some of the PCM
parameters unspecified in format info objects. Also, when converting
a sample spec to a format info when using the old pa_stream_new()
interface, the "fix flags" are taken into account in that conversion.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=68952
2014-01-08 21:26:40 +02:00
Tanu Kaskinen
6cdb569b83 stream-util: Add pa_stream_get_volume_channel_map()
The new function isn't used yet, but it soon will.
2014-01-08 21:26:40 +02:00
Tanu Kaskinen
a3a795ef3d format, core-format: Constify some function parameters 2014-01-08 21:26:40 +02:00
Tanu Kaskinen
71816ecb7f sink-input, source-output: Do routing related validity checks immediately after routing
It's more logical that way.
2014-01-08 21:26:40 +02:00
Tanu Kaskinen
d78d8246b4 core-format: Add pa_format_info_from_sample_spec2()
The function will be used in pa_sink_input_new() and
pa_source_output_new() to convert the sample spec given by the client
to a format info object. The set_format, set_rate and set_channels
will be set according to the stream flags (PA_SINK_INPUT_FIX_FORMAT
etc.).
2014-01-08 21:26:39 +02:00
Tanu Kaskinen
30a32d35c8 core-format: Add pa_format_info_to_sample_spec2()
The function will be used in pa_sink_input_new() and
pa_source_output_new(). The fallback parameters are used to merge the
data in the format info with the sink/source sample spec and channel
map, when the format info is lacking some information.
2014-01-08 21:26:39 +02:00
Tanu Kaskinen
3a5a0f6652 core-format: Add pa_format_info_get_channel_map() 2014-01-08 21:26:39 +02:00
Tanu Kaskinen
066dd942aa core-format: Add pa_format_info_get_channels()
This also fixes an issue in pa_format_info_to_sample_spec(): it did
no validation for the channels value. Now the validation is taken care
of in pa_format_info_get_channels().
2014-01-08 21:26:39 +02:00
Tanu Kaskinen
85a3f560d1 core-format: Add pa_format_info_get_rate()
This also fixes an issue in pa_format_info_to_sample_spec(): it did
no validation for the rate value. Now the validation is taken care of
in pa_format_info_get_rate().
2014-01-08 21:26:39 +02:00
Tanu Kaskinen
eae16f41a4 core-format: Add pa_format_info_get_sample_format() 2014-01-08 21:26:39 +02:00
Tanu Kaskinen
d2c9b46aca Move pa_format_info_to_sample_spec_fake() to core-format
I will need to use the function from outside libpulse.

I added the channel map argument, because the function will be called
from another function that is expected to initialize the channel map.
I don't know if it's in practice necessary, but it shouldn't do any
harm either.
2014-01-08 21:26:38 +02:00
Tanu Kaskinen
5d2d9e5700 sink-input: Fix volume_factor_sink initialization
Source outputs handle volume_factor_source in a bit different way,
which is why this bug doesn't affect source outputs.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=72879
2013-12-20 16:10:53 +02:00
poljar (Damir Jelić)
d20ee7e7f2 log: Add support for the systemd journal
The journal is a component of systemd, that captures Syslog messages,
Kernel log messages, initial RAM disk and early boot messages as well
as messages written to STDOUT/STDERR of all services, indexes them and
makes this available to the user.

It can be used in parallel, or in place of a traditional syslog daemon,
such as rsyslog or syslog-ng.

The journal offers a couple of improvements over traditional logging
facilities (e.g. advanced filtering capabilities).

This patch adds support for logging directly to the journal using its
native API.
2013-12-20 13:06:04 +01:00
Peter Meerwald
25101b299d core: Fix check for io->output_event in enable_events()
copy-pase error discovered by coverity

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:55:17 +01:00
Peter Meerwald
e8ea0b8a79 core: Use after free in pa_sink_input_new_data_set_formats() and pa_source_output_new_data_set_formats()
intention is to free old data_req->formats before assigning
new formats, discovered by coverity

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:55:17 +01:00
Peter Meerwald
94deb3725d core: Fix asserting command in protocol-native
https://scan7.coverity.com:8443/reports.htm#v10206/p10016/fileInstanceId=8690&defectInstanceId=3688&mergedDefectId=591259

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:55:17 +01:00
Peter Meerwald
e11b699d45 core: Fix uninit pointer read in protocol-native
https://scan7.coverity.com:8443/reports.htm#v10205/p10016/fileInstanceId=8690&defectInstanceId=3703&mergedDefectId=591290&eventIds=3703-7&eventId=3703-7

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:55:17 +01:00
Peter Meerwald
ff9e9e05df core: Fix resource leak in core-util
https://scan7.coverity.com:8443/reports.htm#v10205/p10016/fileInstanceId=8477&defectInstanceId=3693&mergedDefectId=591269

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:54:18 +01:00
Jan Alexander Steffens (heftig)
8fa5bdc087 thread-mq: Initialize thread_mainloop to NULL if not in use
Fixes a crash when unloading module-zeroconf-publish.

Signed-off-by: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
2013-12-20 12:52:31 +02:00
Tanu Kaskinen
2747c96101 Add pa_channels_valid()
I think this makes the code a bit nicer to read and write. This also
reduces the chances of off-by-one errors when checking the bounds of
channel count values.
2013-12-15 11:44:35 +01:00
Tanu Kaskinen
a67318f8af Add pa_sample_rate_valid()
I think this makes the code a bit nicer to read and write. This also
reduces the chances of off-by-one errors when checking the bounds of
sample rate values.
2013-12-15 11:21:56 +01:00
Tanu Kaskinen
1cda717252 Add pa_sample_format_valid()
I think this makes the code a bit nicer to read and write. This also
reduces the chances of off-by-one errors when checking the bounds of
the sample format value.
2013-12-15 11:07:17 +01:00
Ryan Lortie
6f954c7674 core-util: set_scheduler: check for RLIMIT_RTTIME
set_scheduler() assumes that if sys/resource.h was found then we will
find RLIMIT_RTTIME there, but this is a non-POSIX extension on Linux.

Change the check to ensure that RLIMIT_RTTIME is actually defined.
Linux indeed defines this as a macro, and POSIX specifies that the other
RLIMIT_ constants must be macros, so having this as an #ifdef seems
correct.
2013-12-13 14:00:14 +02:00
Peter Meerwald
0828701146 modargs: Do not modify alternate_rate in pa_modargs_get_alternate_sample_rate() on failure
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-13 13:43:31 +02:00
Peter Meerwald
ff06e24eb5 modargs: Fix pa_modargs_get_sample_rate() if no "rate" is present in the modargs
see http://lists.freedesktop.org/archives/pulseaudio-discuss/2013-December/019471.html

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
Reported-by: "poljar (Damir Jelić)" <poljarinho@gmail.com>
2013-12-13 13:41:06 +02:00
Peter Meerwald
345de08f2b core-util: Check that we actually have regexec before we use it
Thanks to Pierre Ossman for reporting the bug and providing an initial
fix on which this patch is based.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=69708
2013-12-06 13:30:27 +02:00
Tanu Kaskinen
c00ba036dc card: Move pa_card_add_profile() implementation to a more logical place
The old place was in the middle of pa_card_new_data functions, which
made no sense.
2013-12-05 19:00:11 +02:00
Peter Meerwald
e74d4244a2 modules: Make use of new function pa_modargs_get_sample_rate()
by using pa_modargs_get_sample_rate() we avoid inconsistant validity
checking of the sample rate in various places

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-05 10:54:12 +02:00
Peter Meerwald
742b93d32c resampler: Clean up ffmpeg resampler buffering
buf in struct ffmpeg_data is reset() initially and freed, but never
actually used

when a new block is allocated ffmpeg_data->buf[c].length is used
(which is always 0) to compute the new block size

so, drop buf

Signed-off-by: Peter Meerwald <p.meerwald@bct-electronic.com>
2013-12-05 10:46:47 +02:00
Tanu Kaskinen
ce304d6208 Pass the profile object instead of the profile name to pa_card_set_profile()
When setting attribute foo, or in this case the card profile, in my
opinion the thing passed to the set_foo() function should be of the
type of foo, not a string identifier that can be used to search for
the actual foo in set_foo().

This is mostly a question of taste, but there's at least some small
benefit from passing the actual object: often the profile object is
already available when calling pa_card_set_profile(), so passing the
card name would cause unnecessary searching when pa_card_set_profile()
needs to look up the profile from the hashmap.
2013-11-29 07:25:13 +02:00
Tanu Kaskinen
d1fd31d50f idxset: Allow deep copying with pa_idxset_copy() 2013-11-29 07:14:39 +02:00
Tanu Kaskinen
5c860fe06d sink, source: Add a TODO comment about removing get_formats() 2013-11-29 07:12:16 +02:00
Scott Reeves
5ddb486a8c protocol-native: Remove written differently but functionally redundant check. 2013-11-29 06:56:10 +02:00
Tanu Kaskinen
1997f43644 source-output: Log the format negotiation result
This makes the source output code match the sink input code.
2013-11-22 19:23:48 +02:00
Stefan Sperling
d8e2b3a78c Fix undefined behaviour in pulseaudio --start.
Don't call pthread_join() to join a thread from a different
process than the thread was created in. Doing so can lead to
undefined behaviour.

On OpenBSD, the symptom was a pulseaudio process with a single
thread waiting forever for other threads to join. Since that
process also held the autospawn lock, starting new pulseaudio
processes with --start kept failing. The problem was analyzed
with help from Philip Guenther.

This patch adds a pa_thread_free_nojoin() function which can
be used to free resources for a thread without a join, as
suggested by Tanu Kaskinen.

See https://bugs.freedesktop.org/show_bug.cgi?id=71738
2013-11-22 17:31:11 +02:00
Colin Guthrie
303cff04eb sink/source: When picking the initial ports, prefer ones that are not unavailable.
This does for sinks/source ports what f434087e42 did for card profiles.
2013-11-22 11:38:38 +02:00
Colin Guthrie
84af39f289 card: Ensure we still pick a profile even if it's unavailable.
f434087e42 introduced the potential to not select a card profile if
all the profiles were marked as unavailable.

While this is very unlikely, it's a theoretical posibility, so if the
initial choice of a profile fails, try harder.
2013-11-22 11:30:33 +02:00