- 16 Mar, 2019 1 commit
-
-
Max Kellermann authored
Unlike pa_channel_map_init_auto(), pa_channel_map_init_extend() does not fail if there is no valid mapping for the given channel count, but instead maps additional "AUX" channels. Closes https://github.com/MusicPlayerDaemon/MPD/issues/493
-
- 08 Mar, 2019 1 commit
-
-
Max Kellermann authored
-
- 26 Jan, 2019 1 commit
-
-
Yue Wang authored
Currently it falls back to system default device (either internal speaker or headphone) when device not found. I believe it is a better to fail in this case, to make it better aligned with platforms (such as alsa).
-
- 21 Jan, 2019 1 commit
-
-
Max Kellermann authored
Fixes build failure after commit 0cea67ee
-
- 19 Jan, 2019 1 commit
-
-
Jakob Ovrum authored
-
- 28 Dec, 2018 5 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
libwrap is an obscure artefact from a past long ago, when source IP address meant something. And its API is "interesting"; it requires the application to expose two global variables `allow_severity` and `deny_severity`. This led to bug #437. I don't want to declare those variables; instead, I'd like to remove libwrap support. Closes #437
-
- 14 Dec, 2018 1 commit
-
-
HyShai authored
-
- 19 Nov, 2018 1 commit
-
-
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.
-
- 16 Nov, 2018 1 commit
-
-
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.
-
- 14 Nov, 2018 12 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
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 6 commits
-
-
Max Kellermann authored
This fixes the assertion failure due to calling AudioOutputSource::Close() twice.
-
Max Kellermann authored
Fixes a crash bug with `always_on` outputs which occurs because the `AudioOutputSource` still has a pointer to an outdated `MusicChunk`. Fixes #415
-
Max Kellermann authored
With the new command, the decision to pause or close the output moves into the output thread.
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
- 11 Nov, 2018 2 commits
-
-
Max Kellermann authored
This call was missing, causing very high CPU usage when the ALSA output plugin was used with dmix. Closes #391
-
Max Kellermann authored
-
- 08 Nov, 2018 1 commit
-
-
Max Kellermann authored
When `metadata_sent` is `false`, the plugin assumes there is metadata which must be sent, even if no metadata page was passed to the plugin. Initializing it to `true` avoids dereferencing this `nullptr`. Fixes #412
-
- 06 Nov, 2018 1 commit
-
-
Max Kellermann authored
If the output is already open, the `current_chunk` pointer may be bogus and out of sync with `SharedPipeConsumer::chunk`, leading to an assertion failure in `SharedPipeConsumer::Consume()`. Fixes #411
-
- 31 Oct, 2018 2 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
Bugs in libroar which broke the MPD build have been annoying me for quite some time, and the newest bug has now hit my main build machine: https://github.com/MusicPlayerDaemon/MPD/issues/377 Problem is the usage of the typedef `_IO_off64_t` in libroar's `vio_stdio.h`: int roar_vio_to_stdio_lseek (void *__cookie, _IO_off64_t *__pos, int __w); This `_IO_off64_t` is an internal implementation detail of glibc and was removed in version 2.28. Nobody must ever use it. Why the **** did the RoarAudio developers use it? Not using internal typedefs isn't exactly rocket science. This annoys me enough to finally remove the plugin. Anyway, I've never heard of anybody using RoarAudio, so my best guess is that nobody will notice.
-
- 30 Oct, 2018 1 commit
-
-
Max Kellermann authored
-
- 14 Oct, 2018 1 commit
-
-
Max Kellermann authored
So long, autotools! This is my last MPD related project to migrate away from it. It has its strengths, but also very obvious weaknesses and weirdnesses. Today, many of its quirks are not needed anymore, and are cumbersome and slow. Now welcome our new Meson overlords!
-
- 22 Sep, 2018 1 commit
-
-
Max Kellermann authored
-