Age | Commit message (Collapse) | Author |
|
Works around build failures with ccache which may feed processed code
to GCC, which doesn't have the "fall through" code comments.
|
|
The check IsSeekableCurrentSong() was added by commit
44b200240f1f4b8394dd2e58fec72da3d3ec448f in version 0.20.19, but it
caused a regression: by doing the branch only if the current song is
seekable, the player would restart the current song if it was not
seekable, and later the initial seek would fail; but we already know
it's not seekable, and so we should fail early.
|
|
This reverts commit ff3e2c05142c94efadee00812ec348c15f1be1ba. The
check was necessary, after all, because this is what checked whether
the decoder had finished the current or the next song.
> The "queued" flag can only possibly be set if the decoder is still
> decoding the current song or if the decoder is stopped.
That was wrong because ProcessCommand() sets `queued=true` and also
starts the decoder (if it was idle).
> This is also what the following assert() checks.
That was also wrong, because the assert() has two conditions.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/566
|
|
If the decoder finishes decoding the current song between the two
IsIdle() checks, MPD stops playback instead of starting the decoder
for the next song.
This is usually not visible problem, because the main thread restarts
it via playlist::ResumePlayback(), but that way it, ignores "single"
mode.
As a workaround, this commit adds another "queued" check which
re-enters the player loop and checks again whether to start the
decoder.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/556
|
|
The "queued" flag can only possibly be set if the decoder is still
decoding the current song or if the decoder is stopped. This is also
what the following assert() checks. This check was not necessary.
|
|
Since we switched from autotools to Meson in commit
94592c14062d5afc9482d11baa401648082022c0, 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.
|
|
|
|
This fixes a valgrind warning because `buffer_before_play`
initialization needs to know the audio format from the decoder.
|
|
|
|
|
|
This emits the event even if PlayerControl::Play() is used to replay
the current song, which emits the missing "player" idle event.
Closes #381
|
|
Keep MPD's footprint small until playback is requested.
|
|
|
|
|
|
|
|
|
|
|
|
Previously, there was the setting `buffered_before_play` which
specified a percentage of the audio buffer, defaulting to `10%`. That
was working well enough for quite some time, until high-quality audio
formats became common.
At 44.1 kHz, 16 bit stereo, MPD collected 2.3 seconds worth of data in
the buffer before starting playback. With the same default settings
and 192 kHz, 24 bit stereo, that was only 0.27 seconds.
Making this depend on the byte size only leads to high latency at low
quality, and too little data at high quality. The natural choice
would be to use a duration instead of a byte size, which should give
the same good experience with all audio formats.
Since the `buffered_before_play` configuration setting was not
understood well by users and caused more harm than good, this commit
deprecates it. It has now no effect.
|
|
|
|
formula
Simplify the formula, and I guess this makes the formula more
reliable. Imagine somebody configured `buffered_before_play` larger
than 25%; then the decoder would be woken up all the time. This
doesn't seem logical. On the other hand, it's easy to understand that
the decoder should be woken up below 75% buffer fill.
|
|
Calculate the value only once.
|
|
|
|
|
|
|
|
|
|
|
|
Shouldn't ever happen, but who knows...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Since commit e81b089612833b61c566b482640615e182949ac6, this is the
same code as in ReplacePipe().
|
|
This requires re-adding the reference to struct DecoderControl, which
was removed recently by commit
9f14e7a98d8be5cc4b916456df0124b65ece8ae4
|
|
Make all uses of MusicChunk safe.
|
|
We can implement this now that we have a MusicBuffer reference.
|
|
This tiny amount of overhead allows omitting the MusicBuffer in
Clear().
|
|
release v0.20.20
|
|
This mostly affects the Pulse output plugin which needs to "cork" the
stream (closes #278).
|
|
release v0.20.19
|
|
When switching to another song manually, the player checks if the
decoder is already decoding that song; if so, it will attempt to reuse
it by seeking it to the new position. That however fails if the
decoder is not seekable (e.g. a radio stream) which leaves the user
unable to switch to that song with the bogus error message "Not
seekable".
|
|
|
|
Fixes deadlock bug. Closes #210
|
|
Closes #203
|