- 28 Dec, 2018 3 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
- 14 Dec, 2018 2 commits
-
-
Max Kellermann authored
-
HyShai authored
-
- 04 Dec, 2018 1 commit
-
-
Max Kellermann authored
This function is sparsely documented and a look at the bluez-alsa source code shows that implementations make undocumented assumptions on the `struct pollfd` array parameter which can lead to strange effects.
-
- 20 Nov, 2018 1 commit
-
-
Max Kellermann authored
-
- 19 Nov, 2018 11 commits
-
-
Max Kellermann authored
This function implements the "group" feature on top of the Database::Visit() method.
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
Since we switched from autotools to Meson in commit 94592c14, we don't need to include `config.h` early to properly enable large file support. Meson passes the required macros on the compiler command line instead of defining them in `config.h`. This means we can include `config.h` at any time, whenever we want to check its macros, and there are no ordering constraints.
-
Max Kellermann authored
This compile-time check got lost during the Meson transition.
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
This version should have been incremented in 0.21.2 because this version added new search operators. In 0.21.4, we'll have more protocol bug fixes which may be important for clients to know.
-
Max Kellermann authored
-
- 16 Nov, 2018 2 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
Works around a problem where MPD goes into a busy loop because snd_pcm_drain() always returns `-EAGAIN` without making any progress (fixes #425). This problem was triggered by snd_pcm_drain() after snd_pcm_cancel() and snd_pcm_prepare(), but without submitting any data with snd_pcm_writei(). I believe this is a kernel bug: in non-blocking mode, the kernel's snd_pcm_drain() function returns early. In this mode, it only checks whether snd_pcm_drain_done() has been called already, but snd_pcm_drain_done() is never called if no data was submitted. In blocking mode, the following `for` loop detects this condition, so snd_pcm_drain_done() is not necessary, but without this extra check, we get `-EAGAIN` forever.
-
- 15 Nov, 2018 2 commits
-
-
Volodymyr Medvid authored
test/run_storage.cxx depends on EventThread/EventLoop from libevent.a. Depend on it explicitly. This addresses build failure with -Dtest=true -Dcurl=disabled -Ddbus=disabled
-
Max Kellermann authored
-
- 14 Nov, 2018 17 commits
-
-
Max Kellermann authored
This fixes a problem which caused a failure with snd_pcm_writei() because snd_pcm_drain() had already been called in the previous iteration. This commit makes sure that snd_pcm_drain() is only called after the final snd_pcm_writei() call. This fixes discarded samples at the end of playback.
-
Max Kellermann authored
When a playback error has occurred, MPD would never recover until one restarts MPD.
-
Max Kellermann authored
MPD's default is 100ms, which is too long for the real-time I/O thread. The OutputThread has 100us, but the real-time I/O thread might have tighter deadlines. This change has currently no effect (I believe), because nobody uses timers on the RTIO thread.
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
CancelInternal() doesn't need to be protected because it is called synchronously from Cancel().
-
Max Kellermann authored
Fixes a theoretical race condition which could occur in Drain() (but was extremely unlikely).
-
Max Kellermann authored
If our `ring_buffer` is smaller than the ALSA-PCM buffer (if the latter has more than the 4 periods we allocate), it can happen that the start threshold is crossed and ALSA switches to `SND_PCM_STATE_RUNNING`, but the `ring_buffer` is empty. In this case, MPDD will generate silence, even though the ALSA-PCM buffer has enough data. This causes stuttering (#420). This commit amends an older workaround for a similar problem (commit e08598e7) by adding a snd_pcm_avail() check, and only generate silence if there is less than one period of data in the ALSA-PCM buffer. Fixes #420
-
Max Kellermann authored
The method Cancel() assumes that the `period_buffer` must be empty when `active==false`, but that is not the case when Play() fails. Of course the assertion in Cancel() is not 100% correct, but I decided to rather fix this in LockCaughtError() because the `period_buffer` should only be accessed from within the RTIO thread, and this is the only code path where `active` can be set to `false` with a non-empty `period_buffer`. Fixes #423
-
Max Kellermann authored
This implements real error handling, and avoids calling CancelInternal() from this code path.
-
Max Kellermann authored
alsa-lib doesn't set errno, it returns errors as negative integers.
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
This check was added 9 years ago in commit 4dc25d39 to work around a dmix bug which I assume has been fixed long ago. Removing this fixes another corner case: if draining is requested before the start threshold is reached, the PCM is still in SND_PCM_STATE_PREPARED but not yet SND_PCM_STATE_RUNNING, which means the submitted data will never be played. This corner case is realistic when playing songs shorter than the ALSA buffer (if the buffer is very large).
-
Max Kellermann authored
This fixes a corner case which has probably never occurred and probably never will: if Cancel() is called, and then Play() followed by Drain(), the plugin should really play that data. However currently, this never happens, because snd_pcm_prepare() is never called.
-
- 12 Nov, 2018 1 commit
-
-
Max Kellermann authored
-