1. 23 Dec, 2019 1 commit
  2. 03 Aug, 2019 1 commit
    • Max Kellermann's avatar
      player/Thread: don't restart unseekable song after failed seek attempt · f2d8fd76
      Max Kellermann authored
      The check IsSeekableCurrentSong() was added by commit
      44b20024 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.
      f2d8fd76
  3. 31 May, 2019 1 commit
    • Max Kellermann's avatar
      Revert "player/Thread: remove unnecessary "pipe" check" · 304d45b5
      Max Kellermann authored
      This reverts commit ff3e2c05.  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
      304d45b5
  4. 20 May, 2019 2 commits
    • Max Kellermann's avatar
      player/Thread: fix "single" mode race condition · 923e6673
      Max Kellermann authored
      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
      923e6673
    • Max Kellermann's avatar
      player/Thread: remove unnecessary "pipe" check · ff3e2c05
      Max Kellermann authored
      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.
      ff3e2c05
  5. 19 Nov, 2018 1 commit
    • Max Kellermann's avatar
      check.h: remove obsolete header · ce49d99c
      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.
      ce49d99c
  6. 12 Nov, 2018 1 commit
  7. 06 Nov, 2018 1 commit
  8. 31 Oct, 2018 1 commit
  9. 29 Oct, 2018 1 commit
  10. 23 Sep, 2018 3 commits
    • Max Kellermann's avatar
      player/Thread: calculate `buffered_before_play` based on a fixed duration · 5b2374b9
      Max Kellermann authored
      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.
      5b2374b9
    • Max Kellermann's avatar
      c1600bcf
    • Max Kellermann's avatar
      player/Thread: remove `buffered_before_play` from `decoder_wakeup_threshold` formula · 2f3845ef
      Max Kellermann authored
      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.
      2f3845ef
  11. 22 Sep, 2018 2 commits
  12. 21 Sep, 2018 10 commits
  13. 02 Aug, 2018 1 commit
  14. 23 Jun, 2018 3 commits
  15. 22 Jun, 2018 3 commits
  16. 12 May, 2018 1 commit
  17. 25 Apr, 2018 1 commit
    • Max Kellermann's avatar
      player/Thread: never reuse decoder when switching radio streams · 44b20024
      Max Kellermann authored
      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".
      44b20024
  18. 25 Feb, 2018 1 commit
  19. 03 Feb, 2018 1 commit
  20. 24 Jan, 2018 1 commit
  21. 12 Jan, 2018 1 commit
  22. 07 Jan, 2018 1 commit
  23. 03 Jan, 2018 1 commit
    • Max Kellermann's avatar
      player/Thread: don't send silence if decoder is slow · 98a7c62d
      Max Kellermann authored
      The output plugin shall decide whether to insert silence or do nothing
      at all.  The ALSA output plugin has already implemented this.
      Inserting silence is not necessary or helpful for some plugins, and
      may even hurt them (e.g. "recorder").
      98a7c62d