comparison doc/TODO @ 4778:dde7262d0a35

Moved HACKING and TODO under doc/.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 22 Sep 2008 20:14:12 +0300
parents TODO@e36c207de2c1
children
comparison
equal deleted inserted replaced
4777:1f03f17e263e 4778:dde7262d0a35
1 Long-term "TODO"
2 ================
3 - output plugins should have some kind of (optional) "query available formats"
4 function, so that the core could determine what should be used. perhaps
5 offer users this info?
6
7 - remove the idiotic XMMS compatibility output plugin hack.
8
9 - all audio plugins (input, output, effect) should be made completely
10 re-entrant. this probably means severely breaking the API. not very
11 trivial either :(
12 * basically plugin init() should allocate / init a state struct to
13 be used in all operations, etc.
14
15
16 - the equalizer should be fixed .. in more than one way:
17 * equalizer was broken by asphyx's libSAD
18 * lots of things are hardcoded, like number of EQ bands. this should
19 be changed.
20
21
22 - URIs with "?" are stripped (the subtune support uses that), which is bad,
23 because some (a lot) of real-world URLs use 'GET' arguments. this breaks
24 probing, but current input probing is confusing (and possibly broken anyway)
25 and should be refactored.
26
27
28 - mime-types support:
29 * there is already code for mime support, but I think it may not be
30 sufficient as it is designed for input plugins only --
31 also playlist containers etc. need this (IMHO)
32
33 * might be nicer to have the type registrations in plugin struct
34 instead of a separate function, a'la vfs_extensions.
35
36
37 - document the different APIs via Doxygen
38
39
40 - unified debugging/message system, for core and plugins
41 * something like glib logging system, with logging levels
42 * hardcoded "debugging" levels and/or macro-wrappers that would
43 disable superfluous debugging output compile-time.
44 --- being planned by ccr
45
46
47 - audacious VFS is not 64-bit offset safe, breakage will most likely occur,
48 if files larger than 2^31 are used (rather unlikely, tho, but still...)
49
50 * nenolod says: current vfs sucks, it needs a "rewrite":
51 - buffering support
52 - non-blocking I/O support
53
54
55 - {core,plugins}/configure.ac need some cleanup loving.
56 * make session management (SM) optional. (done)
57 * build system cleanups .. extra.mk.in? wtf? (done in core, progressing
58 for plugins)
59 --- this is in progress, worked on by ccr
60
61
62 - plugin rewrites:
63 * madplug
64 * modplug (in progress by ccr)
65 * scrobbler
66
67
68 Playlist code issues
69 ====================
70 It's been determined that the playlist code should be completely refactored.
71
72 ATTENTION! Add more stuff here! Issues that you can think of, suggestions
73 for solutions, etc. References to algorithms...
74
75
76 - code (mostly in playlist.c) is unnecessarily complex in some places and
77 there is lots of useless duplication.
78
79 - what data structures should be used? things that factor in are
80 efficiency and scalability - memory usage and speed.
81 see also below and notice the manipulation bottleneck(s).
82
83 (different structures typically have bottlenecks in different places.)
84
85 - playlist_clear() is VERY slow with large playlists, possible reasons?
86 * GList scalability sucks? (it does, but is it the real reason here? need
87 to profile this...)
88 * maybe playlist_entry_free() is at fault instead? (see also below)
89 * mowgli_heap_free()?
90
91 possible solutions?
92 * mempools for playlist data? not sure if possible, the tuple heaps
93 should then somehow be collected into pools...
94 * storing the playlist as a GtkTreeModel seems to be fairly fast (at least
95 in mudkip-player it is) --nenolod
96
97 - current implementation has a nasty racecondition in scanner thread vs. playlist
98 manipulation (playlist_clear(), free, etc.)
99
100 * new code should be water-tight when it comes to locking. simpler code
101 with more "atomic operations" should help.
102
103
104 ccr rants:
105 ----------
106 I suggest that the whole playlist manipulation should be moved into separate
107 thread. What I mean, is that the playlist scanning (e.g. probing for
108 metadata) AND adding files into playlist should be in a thread.
109
110 Adding files would work like this:
111 1) feed URIs to playlist handler thread
112 2) playlist handler notices new URIs and starts checking if they are valid
113 aka probing or other checks.
114 3) valid files/URIs get added to the playlist. unsupported files get discarded.
115
116 Possible benefits of this approach:
117 - checking for "can we play this?", which currently happens in main
118 thread and blocks the GUI etc, would now happen asynchronously.
119 - improved user experience: less blocking generally, and it would be even
120 possible to _parallelize_ probing, if we wanted to, getting metadata
121 for multiple files at the same time. (this could be a user-settable
122 option.)
123
124 Bad sides:
125 - requires careful design and thread locking .. but that we need anyway.
126 - possibly might make playlist GUI representation harder. I am not sure
127 what effects this might have, feel free to pitch in thoughts...
128
129