Commit graph

688 commits

Author SHA1 Message Date
Peter Meerwald
402da5285a core: Remove dead code in pa_mainloop_run()
while ((r = pa_mainloop_iterate(m, 1, retval)) >= 0)
        ;

     if (r == -2)
         return 1;
     else if (r < 0)
        return -1;
     else
        return 0;

the last else is never reached, discovered by coverity

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:55:17 +01:00
Peter Meerwald
a247f7c581 simple: Enable pa_simple_flush() on record streams and amend documentation
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:50:23 +02:00
Peter Meerwald
586324f0fc doc: Document that pa_stream_flush() is applicable to playback and record streams
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:49:49 +02:00
Peter Meerwald
ca2ec3a8ef doc: Document that pa_simple_get_latency() can be used on record streams as well
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:49:27 +02:00
Peter Meerwald
acc5c29018 doc: Refer to seek parameter of pa_stream_write() in description of pa_stream_flush()
pa_stream_write() has no delta parameter, but a seek parameter

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:49:04 +02:00
Peter Meerwald
05a128c8f7 doc: Fix reference to pa_threaded_mainloop
Generating docs for file mainloop-api.h...
/home/pmeerw/src/pa-missing/src/pulse/mainloop-api.h:118: warning: Found unknown command `\pa_threaded_mainloop'

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2013-12-20 12:48:41 +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
Luiz Augusto von Dentz
85e7fbc196 introspect: Fix ABI break introduced by b98a2e1
The size of pa_card_profile_info cannot change even if it just a field
appended to end because each entry is appended to a contiguous memory
and accessed by offset this may lead clients to access invalid data.

To fix a new struct called pa_card_profile_info2 is introduced and shall
be used for now on while pa_card_profile_info shall be considered
deprecated but it is still mantained for backward compatibility.

A new field called profiles2 is introduced to pa_card_info, this new field
is an array of pointers to pa_card_profile_info2 so it should be possible
to append new fields to the end of the pa_card_profile_info2 without
breaking binary compatibility as the entries are not accessed by offset.
2013-11-05 21:26:34 +02:00
Tanu Kaskinen
073051f983 simple: Improve pa_simple_read() documentation
There was a question in IRC about whether pa_simple_read() blocks or
not. It's already documented on the simple API overview page, but it's
good to say it also in the function reference. As a bonus, I added
some additional details to the documentation too.
2013-10-29 20:53:48 +02:00
Ben Brewer
68156d3f79 mainloop, glib-mainloop: time_restart could cause incorrect event ordering
This fixes a bug where calling time_restart can leave the current event
in the cache, even though the restart scheduled the event in the future.
This would cause the event to get executed more frequently than it should.
2013-10-29 19:14:00 +02:00
Arun Raghavan
6825df8cec hashmap: Add the ability to free keys
Since the hashmap stores a pointer to the key provided at pa_hashmap_put()
time, it make sense to allow the hashmap to be given ownership of the key and
have it free it at pa_hashmap_remove/free time.

To do this cleanly, we now provide the key and value free functions at hashmap
creation time with a pa_hashmap_new_full. With this, we do away with the free
function that was provided at remove/free time for freeing the value.
2013-09-17 18:01:22 +05:30
Alexander Couzens
0157f4b25f context: add pa_context_load_cookie_from_file()
There is no function to load the authentication cookie for a context.
You can only set environment variables. This patch adds
pa_context_load_cookie_from_file().

Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
2013-08-27 16:41:58 +03:00
Alexander Couzens
dac6a74155 client-conf: refactor cookie loaders
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
2013-08-21 15:08:46 +03:00
Arun Raghavan
55e169655d sample: Apply SPARC-specific condition on SPARC only
Improves correctness, unbreaks software volume in recent Android.
2013-08-02 14:25:29 +05:30
Luiz Augusto von Dentz
b98a2e158f introspect: Expose card profile available flag
Available flag can be used by clients to disable the selection of
profiles unavailable.

Update protocol to 29
2013-07-15 19:41:07 +03:00
Tanu Kaskinen
596b2988a5 pulse: Add verbose volume printing functions
For more informative logging.
2013-07-09 17:20:28 +03:00
Tanu Kaskinen
0e8d26a6a1 channelmap, volume: Don't refer to bool in the public API documentation 2013-07-04 12:35:55 +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ć)
97da92d894 Whitespace cleanup: Remove all multiple newlines
This patch removes all occurrences of double and triple
newlines.

Command used for this:
find .  -type d \( -name ffmpeg \) -prune -o \
        -regex '\(.*\.[hc]\|.*\.cc\)' \
        -a -not -name 'adrian-aec.*' -a -not \
        -name reserve.c -a -not -name 'rtkit.*' \
        -exec sed -i -e '/^$/{N;s/^\n$//}' {} \;

Two passes were needed to remove triple newlines.
The excluded files are mirrored files from external sources.
2013-06-24 16:56:24 +03:00
poljar (Damir Jelić)
e95d054e40 Style fix: Remove new lines from opening brackets
This patch replaces every occurrence of ')\n{' with ') {'.

Command used for this:
    find .  -type d \( -name ffmpeg \) -prune -o \
        -regex '\(.*\.[hc]\|.*\.cc\)' \
        -a -not -name core-util.c -a -not \
        -name adrian-aec.c -a -not -name g711.c \
        -exec sed -i -e '/)$/{N;s/)\n{$/) {/}' {} \;

The excluded files are mirrored files from external sources.
2013-06-24 16:56:24 +03:00
poljar (Damir Jelić)
cbd274676d Style fix: Add a space between the closing/opening bracket
This patch replaces every occurrence of '){' with ') {'.
The ffmpeg source tree was excluded since it will disappear anyways.

Command used for this:
    find . -type d \( -name ffmpeg \) -prune -o \
        -regex '\(.*\.[hc]\|.*\.cc\)' \
        -exec sed -i -e 's/){/) {/' {} \;
2013-06-24 16:56:24 +03:00
Arun Raghavan
9a0dd11342 mainloop: Document need for mainloop lock around pa_mainloop_api_once
This needs us to expose a bit of implementation detail, but this seems
to be the cleanest way without an API change.

The specific problem is that pa_mainloop_api_once() needs to first
create a defer event and then set its destroy callback. If the defer
event is completed before the callback is set, an assert will be
trigerred.
2013-06-18 08:20:05 +05:30
Arun Raghavan
8d129977ca mainloop: Add API to set thread name for threaded mainloop 2013-06-04 00:38:43 +05:30
Mitchell Fang
2dcf052e13 thread-mainloop: Fix bug in example code
Checking the operation state caused a deadlock, because the state
won't change before my_drain_callback() returns, and it doesn't
return before my_drain_stream_func() calls
pa_threaded_mainloop_accept().
2013-06-04 00:38:43 +05:30
Peter Meerwald
f771bbcfa9 doc: Some more nitpicking in pulse/def.h doxygen documentation
Signed-off-by: Peter Meerwald <p.meerwald@bct-electronic.com>
2013-04-17 08:12:23 +02:00
Peter Meerwald
2cc23f2c4e doc: Mostly fixing up i.e. versus i.e.\ in doxygen documentation
same for e.g. versus e.g.\ and e.g. versus E.g.

this is ueber-nitpicking: will anybody ever notice?

Signed-off-by: Peter Meerwald <p.meerwald@bct-electronic.com>
2013-04-17 08:08:42 +02:00
David Henningsson
feeec28de4 client API: Document buffer_attr.maxlength
Let's officially support that people use maxlength to put an upper
bound on playback latency.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2013-03-25 15:44:36 +02:00
Arun Raghavan
45f8ece06e stream: Make it easier to enable debug output
This is only useful while hacking on PulseAudio.
2013-03-25 09:47:04 +00:00
Tanu Kaskinen
7e1ebf9455 pulse: Document the operation state behavior on context disconnection. 2013-03-13 16:10:16 +02:00
Tanu Kaskinen
773ca81dea format: Add #defines for enum values 2013-02-22 14:25:36 +02:00
Mikel Astiz
8851644a3c core: Internally deprecate pa_port_available_t to use pa_available_t
Generalize the availability flag in order to be used beyond the scope of
ports.

However, pa_port_availability_t is left unchanged to avoid modifying the
protocol and the client API. This should be replaced by pa_available_t
after a validation phase of this new generic enum type.
2013-02-18 17:25:53 +02:00
Akihiro Tsukada
53807e4a28 add support for MPEG-2 AAC pass-through
Some S/PDIF receivers have AAC decoder.
Only MPEG2 AAC is added,
as I don't have MPEG-4 AAC decoder and cannot test it.
2013-02-16 21:36:39 +02:00
Tanu Kaskinen
31ee1a7d54 hashmap: Add pa_hashmap_remove_all()
Slightly nicer than using pa_hashmap_steal_first() in a loop.
2013-02-16 01:17:04 +02:00
Tanu Kaskinen
061878b5a4 idxset: Use pa_free_cb_t instead of pa_free2_cb_t
There were no users for the userdata pointer.
2013-02-16 01:15:27 +02:00
Tanu Kaskinen
8872c238ba hashmap: Use pa_free_cb_t instead of pa_free2_cb_t
The previous patch removed module-gconf's dependency on the userdata
pointer of the free callback, and that was the only place where the
userdata pointer of pa_free2_cb_t was used, so now there's no need for
pa_free2_cb_t in pa_hashmap_free(). Using pa_free_cb_t instead allows
removing a significant amount of repetitive code.
2013-02-16 01:12:21 +02:00
Tanu Kaskinen
dbb94daa0b simple: Handle holes in recording streams. 2013-02-04 12:07:33 +02:00
Tanu Kaskinen
7ab0885795 pulse: Initialize pa_operation objects to all-zero.
state_callback and state_userdata fields were not initialized.
2013-01-13 03:15:23 +02:00
Paul Meng
a255c29344 pulse: Add pa_operation_set_state_callback() API
[The original commit message didn't have any explanation why this
change is made, so I'll add that information here myself.
--Tanu Kaskinen]

This change is from the developers of a Haskell binding[1]. According
to them, this change isn't strictly necessary, but their code gets
significantly cleaner if they can register an operation callback that
is called when the operation is cancelled due to the context getting
disconnected.

[1] https://github.com/favonia/pulse
2013-01-12 17:55:07 +02:00
Tanu Kaskinen
e05972ff13 pulse: Fix endianness definition on Sparc.
Patch by Brian Cameron <brian.cameron@oracle.com>.
2013-01-04 17:21:25 +02:00
Tanu Kaskinen
eb484d6c37 mainloop-signal: Explicitly ignore pa_write() return value.
Coverity warned about an ignored return value. I'm not sure
if there's something that should be done if writing fails;
at least I couldn't think of anything. Would logging an
error be acceptable here?
2012-12-19 12:31:50 +02:00
Tanu Kaskinen
3ee3b0f49b mainloop: Check pa_write() return value. 2012-12-19 12:31:47 +02:00
Tanu Kaskinen
7e94a03e0c mainloop: Remove redundant wakeup_pipe validity checks.
The pipe is opened when creating the mainloop and closed
when freeing the mainloop. The pipe fds can never be less
than zero.
2012-12-19 12:31:47 +02:00
Tanu Kaskinen
872f56dc7e mainloop: Don't care about the mainloop state variable when waking up the mainloop.
If the mainloop is just about to enter polling, but m->state
is not POLLING yet when some other thread calls
pa_mainloop_wakeup(), the mainloop will not be woken up.
It's safe to write to the wakeup pipe at any time, so let's
just remove the check.
2012-11-15 17:57:51 +02:00
Tanu Kaskinen
58de999a31 mainloop: Change wakeup_requested type from pa_bool_t to pa_atomic_t.
The variable is accessed from multiple threads, so it should
be atomic.
2012-11-15 17:52:22 +02:00
Tanu Kaskinen
dfd44036b5 pulse: Fix hole handling in pa_stream_peek().
Previously, if there was a hole in a recording stream,
pa_stream_peek() would crash. Holes could be handled silently inside
pa_stream_peek() by generating silence (wouldn't work for compressed
streams, though) or by skipping any holes. However, I think it's
better to let the caller decide how the holes should be handled, so
in case of holes, pa_stream_peek() will return NULL data pointer and
the length of the hole in the nbytes argument.

This change is technically an interface break, because previously the
documentation didn't mention the possibility of holes that need
special handling. However, since holes caused crashing anyway in the
past, it's not a regression if applications keep misbehaving due to
not handing holes properly.

Some words about when holes can appear in recording streams: I think
it would be reasonable behavior if overruns due to the application
reading data too slowly would cause holes. Currently that's not the
case - overruns will just cause audio to be skipped. But the point is
that this might change some day. I'm not sure how holes can occur
with the current code, but as the linked bug shows, they can happen.
It's most likely due to recording from a monitor source where the
thing being monitored has holes in its playback stream.

BugLink: http://bugs.launchpad.net/bugs/1058200
2012-11-08 15:38:32 +01:00
Arun Raghavan
38c650dca9 introspect: Minor documentation fix
s/pa_latency_info/pa_timing_info
2012-11-08 14:57:48 +05:30
Thomas Martitz
7e344b5ff0 core: Proper poll() emulation to fix pacat and friends on Windows
Currently, Windows versions of pacat and friends fail because the current
poll emulation is not sufficient (it only works for socket fds).

Luckily Gnulib has a much better emulation that seems to work good enough.
The implementation has been largely copied (except a few bug fix
regarding timeout handling, to be pushed upstream) and works on pipes
and files as well. The copy has been obtained through their gnulib-tool utility,
which gives a LGPLv2.1+ licensed file.

This fixes the "Assertion (!e->dead) failed" error coming and lets pacat
and friends stream happily to/from a server (I didn't actually test parec).
2012-10-30 16:22:18 +05:30
Flavio Ceolin
e98f748573 pulse: Fix for volume documentation
Fixing the documentation for the function pa_cvolume_dec().
2012-10-24 10:55:45 +05:30