aboutsummaryrefslogblamecommitdiffstats
path: root/TODO
blob: 62814c3d81f0efd6b553746ca510aabeab409b3a (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
               














                                                                              

                                                                     
                                   




                                                                              


                                                                      


                                                        
                                                                          












                                                                             
                                              
                                                                             
 

                                                                       
 
                                                                            


                                                                          
 
                  
 
                 
 
                           
 
                                                                              

                                                
                                                              
 



                                                                              

                                                                               



                                                         
1) play streams
	a) make seekings non-blocking:
		1) player:
			a) first check that seekWhere isn't already buffered
			b) if not current song, stop it and play the song to 
				seek
			c) set dc->seek and dc->seekWhere if not already set
				and set elapsed time to seekWhere and
				then set pc->seek = 0
			d) while seeking just continue to play buffer
				until seek is done
		2) decoder:
			a) seek no longer blocks so don't worry about checking
				seek in blocking portions, only check stop!
			b) yay, less code mess!
	b) bufferInput in outputBuffer waiting!
		1) implement some sort of callback mechanism for this
			for abstraction sake
	c) deal with pausing better
		1) seekable, on resuming pause, check if we need to reconnect,
			jumping to offset
		2) if seekable, at some point after init, mark this!
		3) if not seekable, reset buffer, and elapsedTime when
			unpaused
	d) put some sort of error reporting for streaming/inputStream!
	e) ogg streams
	f) fetch metadata and store in DecoderControl and pass to 
		PlayerControl
		1) eventually deal with icy-metadata
		2) parse metadata on the fly in decoders
	g) command for dealing with the changing metadata, currentsonginfo
		or something

2) how to deal with streams and the db
	a) should streams be stored in the db?
	b) handle url playlists!
		1) have one fd for opening playlists in a url (allow only
			loading of one of these at a time).
		2) check for new data on it in the main while(select()) loop
		3) block client requesting the log until the load is finished
		4) need a timeout for this, 10 seconds, configurable?

3) streaming and playing in general
	a) put errors in error stuff of PlayerControl and report this to
		status and print to error logs
	b) make sure all decoders can handle bad seeks well (need to fix mp3)

4) resampling audio for compatibility, and better gapless/crossfading
	a) use resampling from oggenc (is it fast enough for realtime?)

5) when writing combined interface for all decodes to use, be sure to add a 
common function and abstrct dealing with DecoderControl * and put
cycleLogFiles in there, so we cycleLogFiles while decoding, not just when 
decoding has stopped.

6) ACK error codes

7) cleanup main()

8) handle '\n' in filenames

9) allow "add" command to load playlists, then depricate "load" command, this 
	will be benneficial for adding m3u url's

10) compute average replaygain to use for non-replaygain songs


Post-1.0
--------
1) crosslink "list" stuff, for example, artists are crosslinked to alubms and 
vice versa, this way you can do list album artists or list artist albums, this 
will make life easier when we add genre and other metadata

2) rewrite linked list impelmentation to be more flexible
	a) remove "key" stuff
	b) allow assigning a compare function for a list