Commit graph

855 commits

Author SHA1 Message Date
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
Thomas Martitz
b1303e6d92 gccmacro: Disable printf-like format checking on mingw32 compilers.
Am 23.10.2012 08:25, schrieb Arun Raghavan:
> On Tue, 2012-08-21 at 13:32 +0200, Thomas Martitz wrote:
>> Am 21.08.2012 08:51, schrieb Rémi Denis-Courmont:
>>> Le mardi 21 août 2012 00:50:34 Thomas Martitz, vous avez écrit :
>>>> There are tons of warnings, most of them because the function is not
>>>> recognized as printf-like.
>>> Removing checks looks very fishy.
>>>
>>> To use C99 and/or GNU format specifiers on MingW, you need to use the
>>> gnuprintf attribute instead of printf. With printf, the format string is
>>> validated according to the antiquated MSVC rules.
>>>
>> Interesting, I didn't know about gnuprintf. FWIW, what are those
>> antiquated MSVC rules? I assumed the return value which isn't int for
>> some affected functions?
> Is this one going to be respun?
>

Yes, here you go.

>From c5f15eec69bf95c9a1261e0d82abbd039156e75e Mon Sep 17 00:00:00 2001
From: Thomas Martitz <kuge@rockbox.org>
Date: Wed, 8 Aug 2012 17:38:04 +0200
Subject: [PATCH 1/3] gccmacro: Work around warnings due to printf redirection
 by libintl.

Libintl defines printf as libintl_printf, which breaks the format
attribue. Unfortunately the workaround around provided by libintl
is only enabled for cygwin, but not for mingw builds. Therefore
install the workaround manually.
2012-10-23 15:50:23 +05:30
Arun Raghavan
f72a32151c stream: Allow record streams to start muted
This check was valid before we introduced per-source-output volumes, so
dropping it now. Thanks to Alban Browaeys <prahal@yahoo.com> for
catching this.
2012-09-21 15:42:37 +08:00
poljar (Damir Jelic)
529a5949fb introspect: Add functions to handle the latency offset.
This includes updating the native protocol and the client API.
A new command was added to allow setting the latency offset.

Also the card list command now shows the latency offset if there
are ports available.

Update protocol to 27.
2012-06-30 14:41:08 +03:00
Tanu Kaskinen
d3bced8bee conf-parser: Add support for parsing property lists. 2012-06-29 13:23:07 +03:00
Tanu Kaskinen
e17f18d89a proplist: Change proplist_name_valid() to be public function pa_proplist_key_valid().
I want to check the validity in pa_tagstruct_get_proplist(),
and I think also client applications might have use for this
function.
2012-06-29 12:58:44 +03:00
Tanu Kaskinen
9b3d5acbbc pulse: Use more intuitive indexing with port infos in introspect.c. 2012-06-29 12:45:52 +03:00
Arun Raghavan
8b01695a0e glib: Stop using g_source_get_current_time()
This function is now marked as deprecated. It is functionally identical
to g_get_current_time(), so we use that instead. The GLib API docs
suggest g_source_get_time(), but that does not provide wallclock time
(which is what the pa_time_event API expects), so we don't use it.
2012-06-28 20:00:00 +05:30
Lennart Poettering
87ae830705 auth: move cookie file to ~/.config/pulse/cookie
In order to follow XDG basedir, read the cookie file from
~/.config/pulse/cookie if possible, but fall back to the old file.
if it doesn't exist.
2012-05-15 23:59:33 +02:00
Lennart Poettering
3e9cd3cfcf context: get rid of really old runtime dir logic, i.e. break compat with >4y-old PA 2012-05-15 16:24:22 +02:00
Lennart Poettering
08d4f8e2c3 build-sys: readd stub makefiles to subdirectories to make building with emacs easier 2012-05-15 14:17:58 +02:00
Lennart Poettering
3173358f76 proplist: document new meaning of the session ID 2012-05-15 14:06:46 +02:00
Peter Meerwald
9e55b29c28 pulse: Fix warning in introspect.h; minor rewording and punctuation. 2012-04-17 18:15:42 +03:00
Peter Meerwald
a3513e7c9d pulse: Clarify proplist doxygen documentation. 2012-04-17 18:15:29 +03:00
Pino Toscano
8499afc36f libpulse: Cope with systems not implementing SA_NOCLDWAIT
Even though SA_NOCLDWAIT is a POSIX mandatory flag the Hurd doesn't
implement it. So let's only check for it if it's defined.
2012-03-28 16:23:52 +05:30
Arun Raghavan
5e9e0d5086 stream: Fix sample spec initialisation for extended API
This fixes pa_sample_spec init to use the correct API. Not doing so
triggers a valgrind warning as we call pa_sample_spec_valid() on this
later on, which checks the rate and channels fields. Thanks to Rémi
Denis-Courmont for reporting this.
2012-03-28 01:26:07 +05:30
David Henningsson
793f46320e introspect: Expose port info per card to clients
For volume control UIs to be able to show ports in inactive profiles,
expose all ports together with the card info. This includes updating
the protocol and the client API to show the connection between ports
and for which profiles the ports are relevant.

Update protocol to 26.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2012-03-11 12:23:46 +05:30
Tanu Kaskinen
d6755696b4 proplist: Match pa_proplist_copy argument name between header and implementation. 2012-03-09 09:20:47 +02:00
Tanu Kaskinen
6f9e651e4e proplist: Constify the pa_proplist_copy and _update input pointers. 2012-03-09 09:09:59 +02:00
Arun Raghavan
a0706e7c84 format: Allow format->sample spec conversion for compressed formats
This allows clients to get a "fake" sample space for compressed formats
that we can support. This should make size/time conversion for things
like calculating buffer attributes simpler.
2012-03-05 20:30:33 +05:30
Arun Raghavan
8baf8e90c2 format: Add API to query a property's type
Since a given property can be single-valued, an array or (in the case of
ints) a range, clients need an API to figure out what type of value a
property holds. This adds such an API. The actual property type
enumeration is kept in the PA_PROP_* namespace and not the
PA_FORMAT_INFO* namespace so that it can later be reused for properties
generically if required.
2012-03-05 20:00:31 +05:30
Arun Raghavan
8f850403c0 format: Trivial reorganisation
Moves all the property setters together
2012-03-05 20:00:31 +05:30
Arun Raghavan
59af940dd5 format: Add more property getters
This adds integer range/array and string array property getters to the
pa_format_info API. Corresponding tests added as well to ensure the code
is valgrind-clean.

The corresponding functions are added to map-file manually for now.
2012-03-05 20:00:31 +05:30
Arun Raghavan
c60f698f1e format: Expose pa_format_info<->pa_sample_spec conversion functions
These utility functions could be handy to clients.
pa_format_info_to_sample_spec_fake() isn't made public, but the return
value is changed to keep in sync with pa_format_info_to_sample_spec().
2012-03-05 20:00:31 +05:30
Arun Raghavan
63429b67c7 format: Don't assert on errors in getters
This makes handling errors in getter functions more graceful, rather
than triggering warnings/asserts. Better to be less trigger-happy about
these things since this is now public-facing API.
2012-03-05 20:00:31 +05:30
Arun Raghavan
6f20d39a1c format: Export pa_format_info int and string property getters
We currently only have setters and clients need to be able to query
these values as well. The return types for these functions needed to be
changed to int since this is public API now.
2012-03-05 20:00:31 +05:30
Maarten Lankhorst
e91e78bb54 pulse: Fix old bug in stream_free
Signed-off-by: Maarten Lankhorst<m.b.lankhorst@gmail.com>
2012-02-19 19:02:08 +02:00
Arun Raghavan
9eabf7a0cf format: Add "since 1.0" documentation tags where they were missing 2012-02-07 13:07:01 +05:30
Peter Meerwald
b351e06817 fix the ever-popular 'the the' typo
some are comments, some are user-visible doxygen text and documentation
2012-01-28 17:51:59 +02:00
Peter Meerwald
2da8b1fa63 pulse: Document general error handling. 2012-01-28 15:07:20 +02:00
Peter Meerwald
910bc7c2b4 pulse: Turn the anonymous error code enum into pa_error_code_t.
The purpose is to make it possible to link to the
enumeration in doxygen.
2012-01-14 16:30:45 +02:00
Arun Raghavan
177cfb1f1c stream: Clarify the sign of error return codes
The returned error values are all negative, but the documentation did
not explicitly mention this. Thanks to Vincent Penquerc'h for pointing
this out.
2012-01-14 10:19:32 +05:30
Arun Raghavan
0d41bcfcbf doc: Clarify pa_stream_get_latency() return value
Clarifies that the latency is returned via an inout parameter and the
return value is an error code or 0 on success.
2011-12-30 23:50:19 +05:30
Peter Meerwald
8942d2369d stream: Fix typos and formatting in stream.h doxygen documentation 2011-12-12 23:57:55 +00:00