1. 06 Jul, 2009 2 commits
    • Max Kellermann's avatar
      output: attach a filter chain to each audio_output · e47bdfe8
      Max Kellermann authored
      This patch adds initial filter support for audio outputs.  Each audio
      output gets a "filter" attribute, which is used by ao_play_chunk().
      
      The PCM conversion is now performed by convert_filter_plugin.
      audio_output.convert_state has been removed.
      e47bdfe8
    • Max Kellermann's avatar
      output: added command REOPEN · 78fa3f06
      Max Kellermann authored
      REOPEN is called when the input audio format changes.  The output
      thread may be reconfigure the PCM converter.
      78fa3f06
  2. 21 Apr, 2009 1 commit
  3. 26 Mar, 2009 2 commits
    • Max Kellermann's avatar
      mixer: added flag "open" · 617a4fd2
      Max Kellermann authored
      Remember if a mixer object is open or closed.  Don't call open() again
      if it is already open.  This guarantees that the mixer plugin is
      always called in a consistent state, and we will be able to remove
      lots of checks from the implementations.
      
      To support mixers which are automatically opened even if the audio
      output is still closed (to set the volume before playback starts),
      this patch also adds the "global" flag to the mixer_plugin struct.
      Both ALSA and OSS set this flag, while PULSE does not.
      617a4fd2
    • Max Kellermann's avatar
      output_plugin: replaced output_plugin.get_mixer() with mixer_plugin · 66a2c566
      Max Kellermann authored
      The mixer core library is now responsible for creating and managing
      the mixer object.  This removes duplicated code from the output
      plugins.
      66a2c566
  4. 20 Mar, 2009 2 commits
  5. 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
  6. 10 Mar, 2009 1 commit
  7. 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_control: make audio_output_open() static · 8de179ef
      Max Kellermann authored
      audio_output_open() is only called by audio_output_update().  Don't
      export it.
      8de179ef
  8. 07 Mar, 2009 1 commit
  9. 28 Feb, 2009 1 commit
  10. 23 Feb, 2009 1 commit
  11. 16 Feb, 2009 1 commit
  12. 15 Feb, 2009 1 commit
  13. 10 Feb, 2009 1 commit
  14. 17 Jan, 2009 1 commit
  15. 07 Jan, 2009 3 commits
  16. 28 Dec, 2008 2 commits
  17. 27 Dec, 2008 1 commit
  18. 02 Nov, 2008 1 commit
  19. 29 Oct, 2008 4 commits
  20. 08 Oct, 2008 1 commit
  21. 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
  22. 26 Sep, 2008 1 commit
    • Max Kellermann's avatar
      audio_output: workaround for deadlock · e2a12dee
      Max Kellermann authored
      During debugging, I found a deadlock between flushAudioBuffer() and
      the audio_output_task(): audio_output_task() didn't notice that there
      is a command, and flushAudioBuffer() waited forever in notify_wait().
      I am not sure yet what is the real cause; work around this for now by
      waking up non-finished audio outputs in every iteration.
      e2a12dee
  23. 24 Sep, 2008 3 commits
    • Max Kellermann's avatar
      output: semi-asynchronous playback · 2b782b82
      Max Kellermann authored
      Send an output buffer to all output plugins at the same time, instead
      of waiting for each of them separately.  Make several functions
      non-blocking, and introduce the new function audio_output_wait_all()
      to synchronize with all audio output threads.
      2b782b82
    • 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: one thread per audio output · d32f49a9
      Max Kellermann authored
      To keep I/O nastiness and latencies away from the core, move the audio
      output code to a separate thread, one per output.  The thread is
      created on demand, and currently runs until mpd exits.
      d32f49a9
  24. 11 Sep, 2008 3 commits
  25. 09 Sep, 2008 2 commits