1. 19 Sep, 2011 1 commit
  2. 01 Sep, 2011 2 commits
    • Max Kellermann's avatar
      output_all: move _lock_signal() to output_control.c · 2be6184c
      Max Kellermann authored
      Better name, better documentation.
      2be6184c
    • Max Kellermann's avatar
      output_thread: reimplement CANCEL synchronization · 8b0b4ff0
      Max Kellermann authored
      The output thread could hang indefinitely after finishing CANCEL,
      because it could have missed the signal while the output was not
      unlocked in ao_command_finished().
      
      This patch removes the wait() call after CANCEL, and adds the flag
      "allow_play" instead.  While this flag is set, playback is skipped.
      With this flag, there will not be any excess wait() call after the
      pipe has been cleared.
      
      This patch fixes a bug that causes mpd to discontinue playback after
      seeking, due to the race condition described above.
      8b0b4ff0
  3. 29 Jan, 2011 1 commit
  4. 10 Jan, 2011 2 commits
  5. 05 Nov, 2010 1 commit
  6. 05 Oct, 2010 1 commit
  7. 28 Sep, 2010 1 commit
  8. 25 Sep, 2010 1 commit
    • Thomas Jansen's avatar
      eliminate g_error() usage · 28bcb8bd
      Thomas Jansen authored
      Replaced all occurrences of g_error() with MPD_ERROR() located in a new header
      file 'mpd_error.h'. This macro uses g_critical() to print the error message
      and then exits gracefully in contrast to g_error() which would internally call
      abort() to produce a core dump.
      
      The macro name is distinctive and allows to find all places with dubious error
      handling. The long-term goal is to get rid of MPD_ERROR() altogether. To
      facilitate the eventual removal of this macro it was added in a new header
      file rather than to an existing header file.
      
      This fixes #2995 and #3007.
      28bcb8bd
  9. 10 Mar, 2010 1 commit
    • Max Kellermann's avatar
      output: added option "always_on" for radio stations · e686d191
      Max Kellermann authored
      Did you ever accidently click "stop" while feeding a radio station?
      This option sets the output device to "pause" to disable the "close"
      method.  It falls back to "pause" then, which is specific to the
      plugin.  Some plugins implement it by feeding silence.
      e686d191
  10. 02 Jan, 2010 1 commit
    • Max Kellermann's avatar
      output_all: reset elapsed_time at song border · 915182bc
      Max Kellermann authored
      Another quirk fixed: after the last chunk of a song has been played,
      the "elapsed_time" variable is set to the chunk's time stamp.  When
      the client receives the PLAYER idle event and asks MPD for the current
      time stamp, MPD will return the last time stamp of the previous song
      when it hasn't played the first chunk of the current song yet.
      915182bc
  11. 01 Jan, 2010 1 commit
  12. 12 Nov, 2009 2 commits
    • Max Kellermann's avatar
      player_thread: initialize chunk->times in silence generator · 76283c25
      Max Kellermann authored
      When waiting for the decoder to provide more data, the player thread
      generates silence chunks if needed.  However, it forgot to initialize
      the chunk.times attribute, which had now an undefined value.  This
      patch sets it to -1.0, meaning "value is undefined".  Add a ">= 0.0"
      check to audio_output_all_check().  This fixes spurious relative
      seeking errors, because sometimes, the "elapsed" value falls back to
      0.0.
      76283c25
    • Max Kellermann's avatar
      include config.h in all sources · 5b82ffc2
      Max Kellermann authored
      After we've been hit by Large File Support problems several times in
      the past week (which only occur on 32 bit platforms, which I don't
      have), this is yet another attempt to fix the issue.
      5b82ffc2
  13. 09 Nov, 2009 1 commit
  14. 07 Nov, 2009 1 commit
  15. 02 Nov, 2009 1 commit
    • Max Kellermann's avatar
      output: signal the output thread when CANCEL is finished · b9013944
      Max Kellermann authored
      After CANCEL, the output thread waits for another signal before it
      continues playback, to synchronize with the caller.  There were some
      situations where this signal wasn't sent properly.  This patch adds an
      explicit g_cond_signal() at two code positions.
      b9013944
  16. 31 Oct, 2009 1 commit
  17. 30 Oct, 2009 1 commit
    • Max Kellermann's avatar
      {player,output}_thread: fixed elapsed_time quirks · 73cff374
      Max Kellermann authored
      Right after seeking and song change, the elapsed_time shows old
      information, because the output thread didn't finish a full chunk
      yet.  This patch re-adds a second elapsed_time variable, and keeps
      track of a fallback value, in case the output thread can't provide a
      reliable value.
      73cff374
  18. 29 Oct, 2009 1 commit
  19. 23 Oct, 2009 1 commit
    • Max Kellermann's avatar
      output_plugin: added methods enable() and disable() · e53ca368
      Max Kellermann authored
      With these methods, an output plugin can allocate some global
      resources only if it is actually enabled.  The method enable() is
      called after daemonization, which allows for more sophisticated
      resource allocation during that method.
      e53ca368
  20. 08 Oct, 2009 1 commit
    • Max Kellermann's avatar
      player_thread: get "elapsed" from audio outputs · 448aefaa
      Max Kellermann authored
      Tracking the "elapsed" time from the chunks which we have sent to the
      output pipe is very imprecise: since we have implemented the music
      pipe, we're sending large number of chunks at once, giving the
      "elapsed" time stamp a resolution of usually more than a second.
      
      This patch changes the source of this information to the outputs.  If
      a chunk has been played by all outputs, the "elapsed" time stamp is
      updated.
      
      The new command PLAYER_COMMAND_REFRESH makes the player thread update
      its status information: it tells the outputs to update the chunk time
      stamp.  After that, player_control.elapsed_time is current.
      448aefaa
  21. 29 Jun, 2009 1 commit
    • Max Kellermann's avatar
      output_all: don't resume playback when stopping during pause · 40851b7c
      Max Kellermann authored
      When MPD was paused, and the client sent the "stop" command (or
      "clear"), a glitch caused MPD to continue playback for a split second.
      This was because audio_output_all_cancel() calls
      audio_output_all_update(), which reopens all output devices, and
      re-ignites the playback loop.
      40851b7c
  22. 29 May, 2009 1 commit
  23. 26 Mar, 2009 1 commit
    • Max Kellermann's avatar
      output_all: synchronize playback with player_control.notify · 207786ff
      Max Kellermann authored
      This patch fixes a longer delay when moving around songs in the
      playlist.  The main thread wants to enqueue a new "next" song into the
      player thread, but the player thread is waiting inside
      audio_output_all_wait() for the output threads.  Use
      player_control.notify there, so audio_output_all_wait() gets woken up
      by the main thread, too.
      207786ff
  24. 25 Mar, 2009 3 commits
  25. 16 Mar, 2009 1 commit
  26. 14 Mar, 2009 2 commits
  27. 13 Mar, 2009 1 commit
    • Avuton Olrich's avatar
      all: Update copyright header. · 0aee49bd
      Avuton Olrich authored
      This updates the copyright header to all be the same, which is
      pretty much an update of where to mail request for a copy of the GPL
      and the years of the MPD project. This also puts all committers under
      'The Music Player Project' umbrella. These entries should go
      individually in the AUTHORS file, for consistancy.
      0aee49bd
  28. 12 Mar, 2009 1 commit
    • Max Kellermann's avatar
      output_all: fix off-by-one error in audio_output_all_check() · e3b9b57e
      Max Kellermann authored
      When there are chunks which are not yet finished,
      audio_output_all_check() returned the size of its music pipe minus
      one.  I can't remember exactly why I subtracted 1 from the return
      value, it must have had something to do with a former meaning of this
      function.  Now it induces assertion failures.
      e3b9b57e
  29. 10 Mar, 2009 2 commits
  30. 09 Mar, 2009 1 commit
    • Max Kellermann's avatar
      output: play from a music_pipe object · 3291666b
      Max Kellermann authored
      Instead of passing individual buffers to audio_output_all_play(), pass
      music_chunk objects.  Append all those chunks asynchronously to a
      music_pipe instance.  All output threads may then read chunks from
      this pipe.  This reduces MPD's internal latency by an order of
      magnitude.
      3291666b
  31. 07 Mar, 2009 2 commits
  32. 01 Mar, 2009 1 commit