todo update and make firstFrame in mp3_decode less blocky!

git-svn-id: https://svn.musicpd.org/mpd/trunk@1098 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes 2004-05-19 22:03:27 +00:00
parent 3e659738ba
commit c1fbcd03f0
2 changed files with 31 additions and 15 deletions

28
TODO
View File

@ -1,22 +1,34 @@
1) play streams
a) for mp3, remember to turn off IGNORECRC for mp3 streams
b) deal with non-blocking in decodeFirstFrame (mp3) better!
c) bufferInput in outputBuffer waiting!
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
d) deal with pausing better
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
e) put some sort of error reporting for streaming/inputStream!
f) ogg streams
g) fetch metadata and store in DecoderControl and pass to
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
h) command for dealing with the changing metadata, currentsonginfo
g) command for dealing with the changing metadata, currentsonginfo
or something
2) how to deal with streams and the db

View File

@ -332,7 +332,7 @@ fail:
return 0;
}
int decodeFirstFrame(mp3DecodeData * data) {
int decodeFirstFrame(mp3DecodeData * data, DecoderControl * dc) {
struct xing xing;
int ret;
int skip;
@ -342,10 +342,12 @@ int decodeFirstFrame(mp3DecodeData * data) {
while(1) {
skip = 0;
while((ret = decodeNextFrameHeader(data))==DECODE_CONT);
while((ret = decodeNextFrameHeader(data))==DECODE_CONT &&
(!dc || !dc->stop));
if(ret==DECODE_SKIP) skip = 1;
else if(ret==DECODE_BREAK) return -1;
while((ret = decodeNextFrame(data))==DECODE_CONT);
while((ret = decodeNextFrame(data))==DECODE_CONT &&
(!dc || !dc->stop));
if(ret==DECODE_BREAK) return -1;
if(!skip && ret==DECODE_OK) break;
}
@ -407,16 +409,18 @@ int getMp3TotalTime(char * file) {
if(openInputStream(&inStream, file) < 0) return -1;
initMp3DecodeData(&data,&inStream);
if(decodeFirstFrame(&data)<0) ret = -1;
if(decodeFirstFrame(&data, NULL)<0) ret = -1;
else ret = data.totalTime+0.5;
mp3DecodeDataFinalize(&data);
return ret;
}
int openMp3FromInputStream(InputStream * inStream, mp3DecodeData * data) {
int openMp3FromInputStream(InputStream * inStream, mp3DecodeData * data,
DecoderControl * dc)
{
initMp3DecodeData(data, inStream);
if(decodeFirstFrame(data)<0) {
if(decodeFirstFrame(data, dc)<0) {
mp3DecodeDataFinalize(data);
return -1;
}
@ -550,7 +554,7 @@ void initAudioFormatFromMp3DecodeData(mp3DecodeData * data, AudioFormat * af) {
int mp3_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream) {
mp3DecodeData data;
if(openMp3FromInputStream(inStream, &data) < 0) {
if(openMp3FromInputStream(inStream, &data, dc) < 0) {
ERROR("Input does not appear to be a mp3 bit stream.\n");
closeInputStream(inStream);
return -1;