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
[email protected]
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team