| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
Instead of passing individual buffers to audio_output_all_play(), pass
music_chunk objects. Append all those chunks asynchronously to a
music_pipe instance. All output threads may then read chunks from
this pipe. This reduces MPD's internal latency by an order of
magnitude.
|
|
|
|
|
|
|
| |
Sometimes, audio_output_update() isn't called for the second device
when the first one has succeeded. The patch
"audio_output_all_update() returns bool" broke it, because the boolean
evaluation ended after the first "true".
|
|
|
|
|
| |
audio_output_all_update() returns true when there is at least open
output device which is open.
|
|
|
|
| |
Do error handling with GError instead of aborting with g_error().
|
|
|
|
|
|
|
| |
time() is not a monotonic timer, and MPD might get confused by clock
skews. clock_gettime() provides a monotonic clock, but is not
portable to non-POSIX systems (i.e. Windows). This patch uses GLib's
GTimer API, which aims to be portable.
|
|
|
|
|
|
| |
When all outputs are disabled, MPD printed only a meaningless message
"problems opening audio device", although it didn't attempt to open a
device.
|
|
|
|
|
| |
After initialization, audio_outputs is always non-NULL. Don't check
that.
|
| |
|
|
|
|
|
| |
Don't include output_api.h in output_internal.h. This change requires
adding missing includes in several sources.
|
|
|
|
|
|
|
| |
When MPD explicitly starts playing, ignore the "REOPEN_AFTER" timeout.
This timeout was useful when MPD attempted to reopen a failed device
over and over, but it confuses users when they explicitly tell MPD to
start playing, while MPD insists to wait for the 10 seconds to pass.
|
|
|
|
| |
audio_output_all_finished() returns bool, not int.
|
|
|
|
| |
Renamed functions and variables.
|
|
Moved code which deals with all audio outputs at once into a separate
library.
|