| Commit message (Collapse) | Author | Files | Lines |
|
Reduce command latency while paused.
|
|
One large loop and only one pa_stream_get_state() call.
|
|
Pass audio_output objects around instead of void pointers. This will
give some more control to the plugin, and prepares for non-blocking
audio outputs.
|
|
Provide _lock() and _unlock() to wrap all accesses from the mixer
plugin.
|
|
|
|
Always lock the main loop when operating on PULSE objects. Document
this.
|
|
|
|
Fixes assertion failure when a stream callback is invoked too late
after a format change.
|
|
Merge common code.
|
|
Eliminate duplicate code.
|
|
Check if the stream is suspended; wake up the main loop when it
becomes suspended.
|
|
|
|
Not a bool.
|
|
Unlock the mainloop in all code paths.
|
|
|
|
When enabling the pulse device fails, clear po->mainloop after
pa_threaded_mainloop_free() has finished. This is important for the
assertions.
Two wrong g_free() calls were also removed.
|
|
|
|
This patch prepares support for floating point samples (and probably
other formats). It changes the meaning of the "bits" attribute from a
bit count to a symbolic value.
|
|
After we've been hit by Large File Support problems several times in
the past week (which only occur on 32 bit platforms, which I don't
have), this is yet another attempt to fix the issue.
|
|
This variable was uninitialized and led to crashes.
|
|
Don't connect to PulseAudio before MPD has daemonized.
|
|
With these methods, an output plugin can allocate some global
resources only if it is actually enabled. The method enable() is
called after daemonization, which allows for more sophisticated
resource allocation during that method.
|
|
Don't let the mixer plugin "override" the libpulse callbacks.
Instead, add a "mixer" attribute to the pulse_output struct, and call
the mixer on all interesting events.
|
|
This is a complete rewrite of the PulseAudio output plugin. It uses
the asynchronous API, which gives us more control over everything.
Additionally, it connects to the PulseAudio server on startup, and
keeps this connection up while MPD runs. During pause, instead of
closing the stream, it enables "cork".
|
|
This looks nicer in the PulseAudio manager than just "mpd".
|
|
|
|
This allows PulseAudio to do some advanced tweaks.
|
|
Nobody needs to modify these strings. We can make them const, and
convert config_dup_block_string() to config_get_block_string(). This
also fixes memory leaks in the pulse mixer.
|
|
The conf.h functions deal well with config_param==NULL and will return
the specified default value then.
|
|
The mixer core library is now responsible for creating and managing
the mixer object. This removes duplicated code from the output
plugins.
|
|
This patch allows the output plugins to import only mixer_list.h,
instead of the full mixer_api.h (which would expose internal
structures).
|
|
mixer_control.h should provide the functions needed to manipulate a
mixer, without exposing the internal mixer API (which is provided by
mixer_api.h).
|
|
This updates the copyright header to all be the same, which is
pretty much an update of where to mail request for a copy of the GPL
and the years of the MPD project. This also puts all committers under
'The Music Player Project' umbrella. These entries should go
individually in the AUTHORS file, for consistancy.
|
|
This patch introduces the mixer for the pulse output.
Technically speaking, the pulse index is needed to get or set
the volume. You must define callback fonctions to get this index since
the pulse output in mpd is done using the simpe api. The pulse simple api
does not provide the index of the newly defined output.
So callback fonctions are associated to the pulse context.
The list of all the sink input is then retreived.
Then we select the name of the mpd pulse output and control
its volume by its associated index number.
Signed-off-by: Patrice Linel <patnathanael@gmail.com>
Signed-off-by: David Guibert <david.guibert@gmail.com>
[mk: fixed whitespace errors and broke long lines; removed
daemonization changes from main.c]
|
|
The MPD core logs the audio format of all audio outputs. Remove the
duplicate message from the plugins.
|
|
Use GLib's GError library for reporting output device failures.
Note that some init() methods don't clean up properly after a failure,
but that's ok for now, because the MPD core will abort anyway.
|
|
The MPD core guarantees that the audio_output object is always
consistent, and our pa_simple!=NULL checks are superfluous. Also
don't manually close the device on error in pulse_play(), since the
MPD core does this automatically when the play() method returns 0.
|
|
audio_output_get_name() has been removed, which was the only function
left in output_api.h. The output plugin doesn't need the audio_output
object at all, remove the parameter from the init() method.
|
|
Use config_get_block_string("name") instead of audio_output_get_name().
|
|
The meaning of the chunk depends on the audio format; don't suggest a
specific format by declaring the pointer as "char*", pass "void*"
instead.
|
|
The old API required an output plugin to not return until all data
passed to the play() method is consumed. Some output plugins have to
loop to fulfill that requirement, and may block during that. Simplify
these, by letting them consume only part of the buffer: make play()
return the length of the consumed data.
|
|
All config_get_block_*() functions should accept constant config_param
pointers.
|
|
This replaces lots of getBlockParam() invocations.
|
|
Renamed functions, types, variables.
|
|
Use GLib's G_GNUC_UNUSED instead of gcc.h's mpd_unused.
|
|
The output thread automatically waits some time before retrying to
open the device. Don't duplicate this check in the pulse plugin.
|
|
The pulse plugin crashed with a segmentation fault when the pulse
server was killed.
|
|
Commit d692e9 broke configurations without explicit server or sink
configuration. Check for getBlockParam()==NULL.
|
|
Don't return 0/-1 on success/error, but true/false. Instead of int,
use bool for storing flags.
|
|
The pointer becomes invalid due to pa_simple_free(), which may lead to
segmentation faults when the output is reopened later.
|