I'm estimating 0.14.0 will be one to two months out.  Of course,
timelines are always subject to change.  I'll try to update this
every few weeks here.  Feel free to link or copy (with attribution)
to this in the wiki.

Do NOT consider the TODO distributed in tarballs or git to be accurate.
It'll be removed from the git distro very soon now.

0.14.0 TODO
-----------

  * Cleanup and fix bugs introduced during the pthreads switch
    and core rewrite.

  * Fix ALSA CPU usage problem.  We'll definitely need help gathering
    information on this as no developer has a setup that can reproduce
    the problem that I know of...

  * Lower pthreads stack size where possible and safe to do so.  The
    current 2M default stack size from Linux NPTL is amazingly wasteful.
    The 64K PTHREAD_STACK_MIN NPTL imposes is already more than sufficient
    in most cases.  Needs testing on 64-bit (also, keep in mind some
    more exotic architectures use 64-bit ints as well as 64-bit longs).

  * Merge published optimizations, cleanups, AAC streaming from Max.

  * Hopefully merge tag database rewrite/memory reductions from Max.

  * Merge shout_mp3 plugin.  Needs cleanup.

  * revamp inputStream and separate out transport layers

    The goal of the inputStream revamp is to fully support asynchronous
    operation and never block the main thread that talks to clients.
    Currently, open() on a slow disk/filesystem (especially networked
    ones) can be extremely sluggish.

    + There will be two distinct transport layers: HTTP and file
      (this is nothing new)

    + A pure "peek" method will be supported
      (a la pread() or recv()+MSG_PEEK)

    + open() methods will be non-blocking.  This will have to be done
      via pthreads for file transport.  This is necessary for networked
      filesystems (whether via FUSE, NFS or like).

    + All I/O methods will be cancellable (by dc_intr() or dc_seek())

    + read/peek methods will be always return the specified read
      amount unless timed-out (stopping the decoder) or explicitly
      cancelled.  No partial reads will ever be returned.  This should
      clean up the decoders and remove my_usleep() entirely.

    + There will most likely be two runtime choices for file readahead:

      1) read/write I/O with readahead using ringbuffer + pthreads.
         This will be the most portable one, and will probably be
         better all around if avoiding hard disk spinups is needed
         on large FLAC files.  pthreads will be needed anyways for
         asynchronous open...

      2) read/write file I/O with readahead done entirely with
         posix_fadvise().  This is aimed at modern Linux 2.6 desktop
         machines.  Not many other OSes support posix_fadvise, yet.

      - stdio routines will NOT be used for this any longer

    + HTTP readahead is also doable without threads on machines that
      support large kernel-side buffers using large SO_RCVBUF settings.
      Of course, the current pthreads+ringbuf code will continue to be
      supported and improved for machines that don't support large
      enough SO_RCVBUF.

  * Configurable state_file updating.  Unfortunately 0.14.0
    will undoubtedly be less error-tolerant because of the switch to
    threads; so the state_file is more important.


0.15.0 (early-mid 2009)
-----------------------

  This only contains that are definitely going into 0.15.0.  Depending
  on the release quality of 0.14.0, this may come soon after 0.14.0.

  * New commands to control replaygain/normalization.
    (maybe 0.14.0)

  * audio output (maybe 0.14.0)

    + while pausing, play silence for the devices that don't support
      "pausing"

    + Per-audio output threads.  These will all share a common
      condition variable but each output will have its own mutex.
      If at least one output succeeds in playing, then playAudio() will
      return and continue.

        * mixer (possible in 0.14.0, audio output improvements first)

    + allow binding mixers to a specific audio output
      This needs to be done in a backwards compatible way for
      volume changes.

    + allow mixers to be disabled when audio outputs are disabled
      (for device disconnection)

        * Listener protocol
    Some (possibly obsolete/incomplete) documentation here:
          http://mpd.wikia.com/wiki/MusicPlayerDaemonListenerProtocol

  * NO_FPU support.  Allow all internal time to be kept track of
    in milliseconds, and things like software volume, replaygain,
    normalization to be compiled out on machines that can't run
    them anyways.

        * AAC seeking (maybe moved to 0.14.0) if it's easy

  * User-configurable arbitrary tags (maybe in 0.14.0 depending
    on how Max's tag DB rewrite works out).

  * Replaygain/normalization via "hardware" volume control
    I think somebody was talking about this the other day but
    this would help people on slow machines out a lot.


Post-0.15.0 (some of this is just copied from the TODO)
-------------------------------------------------------

  * data structures

    + remove changes made to linked list for TagTracker (will probably
      be done in 0.14.0 anyways).

    + cleanup linked list code (may be done in 0.14.0 or pushed back)

  * Add support for 24-bit audio - need hardware for testing,
    Could be pushed back if we don't have hardware or pushed
    forward if we do...

  * add error codes for status->error (from old TODO,
    haven't looked into this yet)

  * cleanup config file code (from old TODO)

  * audio outputs

          + more accurate time reporting by determining how much of
      audio_device buffer has been played. (from old TODO, not sure
      if this one is worth it..).

  * state

    + abstract out state code from playlist.c
    + put MPD Version in statefile

  * mixer

    + OS X support (if somebody supplies a patch, I don't have a Mac)

  * support for dynamically loading plugins

    + cleanup input plugins "API" (partially done by Max already)

    + cleanup output plugins "API"

    I don't think a stable API nor ABI should be a goal, a consistent
    one, yes.  Linking to non-GPL-compatible code is not allowed and
    should not be encouraged or made *easy*.  Out-of-tree modules
    (GPL-compatible or not) leads to quality control issues regardless
    and should be discouraged.

  * dynamic metadata, add support for
    - last time played
    - times played
    - times skipped
    - ranking

    Need to consider memory footprint/overhead of adding these
    to 30K song databases.  It'll probably be optional for
    embedded devices, and may be even done in a separate
    daemon independent of mpd.


Probably Never
--------------

  * add playlistreplace command
    (replace current playlist with saved playlist and keep playing)

    This was from the 0.14 TODO in the source tree, but is it really
    needed?  I don't see the need for this to be done atomically
    since it'll likely end up playing new songs anyways.

  * mixer

    * add SUN support[1]

  * audio output

    * write a nas native audio output[1]

    * write a SUN native audio output[1]

  [1] - I'm not sure who cared about these in the first place, I haven't
        heard much demand to support these and PulseAudio
        should be able to replace NAS...

-- 
Eric Wong

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to