1. 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
  2. 25 Mar, 2009 2 commits
  3. 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
  4. 10 Mar, 2009 1 commit
    • Max Kellermann's avatar
      output_thread: check commands while playing · 5dfad1d5
      Max Kellermann authored
      Check audio_output.command after each sub-chunk has been played.  It
      discards the rest of the chunk, but since all commands make the device
      stop anyway, this is not a problem, but part of the improvement.  This
      improves the latency of audio output commands.
      5dfad1d5
  5. 09 Mar, 2009 2 commits
    • 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
    • Max Kellermann's avatar
      output_thread: wait 10 seconds before reopening after play failure · 71e88271
      Max Kellermann authored
      This is similar to the MPD 0.14 patch "wait 10 seconds before
      reopening a failed device", which only covered open() failures.  This
      patch adds the same feature for play().
      71e88271
  6. 08 Mar, 2009 1 commit
  7. 01 Mar, 2009 1 commit
  8. 28 Feb, 2009 1 commit
  9. 26 Feb, 2009 2 commits
    • Max Kellermann's avatar
      output_plugin: report errors with GError · ec926539
      Max Kellermann authored
      Use GLib's GError library for reporting output device failures.
      
      Note that some init() methods don't clean up properly after a failure,
      but that's ok for now, because the MPD core will abort anyway.
      ec926539
    • Max Kellermann's avatar
      output_thread: use the right audio_format in assert() · a7b0cfcc
      Max Kellermann authored
      ao_play() gets PCM data in the in_audio_format, and converts it to
      out_audio_format.  Comparing the input data with out_audio_format is
      wrong.
      
      prefixed with "STG:" will be automatically removed.  STG: Trailing
      empty lines will be automatically removed.  STG: vi: set textwidth=75
      filetype=diff nobackup:
      a7b0cfcc
  10. 25 Feb, 2009 1 commit
  11. 23 Feb, 2009 1 commit
    • Max Kellermann's avatar
      output_api: play() returns a length · 5a898c15
      Max Kellermann authored
      The old API required an output plugin to not return until all data
      passed to the play() method is consumed.  Some output plugins have to
      loop to fulfill that requirement, and may block during that.  Simplify
      these, by letting them consume only part of the buffer: make play()
      return the length of the consumed data.
      5a898c15
  12. 16 Feb, 2009 1 commit
  13. 10 Feb, 2009 4 commits
  14. 30 Jan, 2009 1 commit
  15. 17 Jan, 2009 1 commit
  16. 07 Jan, 2009 2 commits
  17. 04 Jan, 2009 1 commit
  18. 28 Dec, 2008 1 commit
  19. 24 Dec, 2008 1 commit
    • Max Kellermann's avatar
      pcm_utils: check pcm_convert()==0 · 0d9d82a9
      Max Kellermann authored
      It is illegal to pass an empty audio buffer around.  pcm_resample()
      sometimes seems to result in 0 samples, maybe related to
      libsamplerate.  To work around that problem, add special checks after
      both pcm_convert() invocations.  Removed the pcm_resample()==0 checks
      from pcm_convert().
      0d9d82a9
  20. 25 Nov, 2008 1 commit
  21. 02 Nov, 2008 1 commit
  22. 29 Oct, 2008 5 commits
  23. 21 Oct, 2008 1 commit
  24. 08 Oct, 2008 1 commit
  25. 29 Sep, 2008 1 commit
    • Max Kellermann's avatar
      audio_output: added method pause() · 6e21e24c
      Max Kellermann authored
      pause() puts the audio output into pause mode: if supported, it may
      perform a special action, which keeps the device open, but does not
      play anything.  Output plugins like "shout" might want to play silence
      during pause, so their clients won't be disconnected.  Plugins which
      do not support pausing will simply be closed, and have to be reopened
      when unpaused.
      
      This pach includes an implementation for the shout plugin, which
      sends silence chunks.
      6e21e24c
  26. 26 Sep, 2008 1 commit
    • Max Kellermann's avatar
      notify: protect notify->pending with the mutex · 58554e14
      Max Kellermann authored
      There was a known deadlocking bug in the notify library: when the
      other thread set notify->pending after the according check in
      notify_wait(), the latter thread was deadlocked.  Resolve this by
      synchronizing all accesses to notify->pending with the notify object's
      mutex.  Since notify_signal_sync() was never used, we can remove it.
      As a consequence, we don't need notify_enter() and notify_leave()
      anymore; eliminate them, too.
      58554e14
  27. 24 Sep, 2008 3 commits
    • Max Kellermann's avatar
      output: make "struct audio_output" opaque for output plugins · acc4a0ba
      Max Kellermann authored
      We have eliminated direct accesses to the audio_output struct from
      the all output plugins.  Make it opaque for them, and move its real
      declaration to output_internal.h, similar to decoder_internal.h.
      
      Pass the opaque structure to plugin.init() only, which will return the
      plugin's data pointer on success, and NULL on failure.  This data
      pointer will be passed to all other methods instead of the
      audio_output struct.
      acc4a0ba
    • Max Kellermann's avatar
      output: set audio_output->open=1 in audio_output_task() · 2403d32a
      Max Kellermann authored
      Since the output plugin returns a value indicating success or error,
      we can have the output core code assign the "open" flag.
      2403d32a
    • Max Kellermann's avatar
      output: pass audio_format to plugin.init() and plugin.open() · 3cae6856
      Max Kellermann authored
      Pass the globally configured audio_format as a const pointer to
      plugin.init().  plugin.open() gets a writable pointer which contains
      the audio_format requested by the plugin.  Its initial value is either
      the configured audio_format or the input file's audio_format.
      3cae6856