Mercurial > audlegacy
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 |