1. 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
  2. 22 Sep, 2018 2 commits
  3. 21 Sep, 2018 10 commits
  4. 02 Aug, 2018 1 commit
  5. 23 Jun, 2018 3 commits
  6. 22 Jun, 2018 3 commits
  7. 12 May, 2018 1 commit
  8. 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
  9. 25 Feb, 2018 1 commit
  10. 03 Feb, 2018 1 commit
  11. 24 Jan, 2018 1 commit
  12. 12 Jan, 2018 1 commit
  13. 07 Jan, 2018 1 commit
  14. 03 Jan, 2018 3 commits
  15. 30 Dec, 2017 1 commit
  16. 29 Dec, 2017 2 commits
    • Max Kellermann's avatar
      player/Thread: make SEEK (partially) non-blocking · dee378b7
      Max Kellermann authored
      When the decoder is still starting up while we handle a SEEK, finish
      the "player SEEK" immediately and re-enter the player loop, being able
      to handle commands (and even cancel the pending seek).
      
      This is the first part in a series of patches to solve the "blocking
      input blocks decoder, blocks player, blocks the main thread" problem.
      There are many other blocking code locations left, and the main thread
      isn't non-blocking either because it waits for "seeking" to become
      false.
      dee378b7
    • Max Kellermann's avatar
  17. 28 Dec, 2017 2 commits
  18. 27 Dec, 2017 2 commits
  19. 22 Dec, 2017 1 commit