- 21 Aug, 2019 1 commit
-
-
Max Kellermann authored
-
- 13 Aug, 2019 1 commit
-
-
Max Kellermann authored
-
- 06 Aug, 2019 3 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
Without this, the compiler may optimize accesses away.
-
Max Kellermann authored
-
- 05 Aug, 2019 5 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
- 04 Aug, 2019 3 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
Without this, the compiler may optimize accesses away.
-
Max Kellermann authored
-
- 03 Aug, 2019 3 commits
-
-
Max Kellermann authored
-
ckdo authored
This is useful in multiple mpd instances scenario, or multiple pulse outputs defined on the same mpd instance. It is actually a more flexible way to route flows than the "sink" parameter, letting the PulseAudio routing do its job, but with the ability to isolate routing for each output. If not specified, the role remains like it was before this commit, ie "music"
-
Richard Dodd authored
-
- 02 Aug, 2019 1 commit
-
-
Diomendius authored
The JACK output plugin would not correctly upmix mono input files when exactly 2 output ports were configured. This fixes that.
-
- 30 Jul, 2019 1 commit
-
-
Max Kellermann authored
Applying software volume to S16 samples means several bits of precision are lost; at 25% volume, two bits are lost. Additionally, dithering adds some noise. The problem gets worse when you apply the software volume code twice: for the software mixer volume, and again for the replay gain. This loses some more precision and adds even more dithering noise, which can become audible (see https://github.com/MusicPlayerDaemon/MPD/issues/542). By converting everything to 24 bit, we need to shift only two bits to the right instead of ten, losing nearly no precision, and dithering is not needed. Even if the output device is unable to play S24 directly, we can convert back to S16 with only one stage of dithering. Closes https://github.com/MusicPlayerDaemon/MPD/issues/542
-
- 12 Jul, 2019 1 commit
-
-
Max Kellermann authored
-
- 08 Jul, 2019 1 commit
-
-
Max Kellermann authored
Just in case.
-
- 05 Jul, 2019 1 commit
-
-
Max Kellermann authored
-
- 04 Jul, 2019 5 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
It's not a tri-state anymore since we introduced C++ exceptions.
-
Max Kellermann authored
-
Max Kellermann authored
Pass only the amount of data to PcmExport::Export() when its full output fits into the ring buffer. Using only a part of the PcmExport::Export() result may cause data corruption because PcmExport's internal state may contain partial blocks which would need to be rolled back when only some of its output data was used. As a side effect, this fixes an assertion failure because PcmExport::CalcInputSize() considered partial block data and could cause Play() to return a number larger than the "size" parameter.
-
Max Kellermann authored
If snd_pcm_writei() fails, throw an error and stop playback instead of going into an endless busy loop.
-
- 03 Jul, 2019 3 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
- 28 Jun, 2019 10 commits
-
-
Max Kellermann authored
MPD used to do that when this code lived in the player thread, but it was removed by commit 98a7c62d; and the replacement code in the ALSA output plugin didn't have it.
-
Max Kellermann authored
Without this timer, DispatchSockets() may disable the MultiSocketMonitor and if Play() doesn't get called soon, it never gets a chance to generate silence. However if Play() gets called, generating silence isn't necessary anymore... Resulting from this misdesign (added by commit ccafe3f3 in 0.21.3), the silence generator didn't work reliably.
-
Max Kellermann authored
In DispatchSockets(), when there was not enough data, but enough for current playback, the method would disable the "active" flag so the next Play() call would re-enable the MultiSocketMonitor. This was an abuse of the flag which could result in a crash in Cancel(), because that method asserts that the period_buffer is empty, which it may be not. The solution is to add anther flag called "waiting" which shares some behavior with the old flag.
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
Really drain all data from the period_buffer in any case.
-
Max Kellermann authored
This assertion is not about whether all data has been consumed, but about whether there has been any data at all.
-
Max Kellermann authored
Draining isn't finished just because the period_buffer has run empty. It is only finished after snd_pcm_drain() has succeeded.
-
Max Kellermann authored
Apparently, if snd_pcm_drain() returns EAGAIN, it does not actually want to be called again; the next call will snd_pcm_drain() will also return EAGAIN, forever, even though the PCM state has meanwhile switched to SND_PCM_STATE_SETUP. This causes a busy loop; to fix this, we should always check snd_pcm_state() to see if draining is really required.
-
- 27 Jun, 2019 1 commit
-
-
Max Kellermann authored
-