fix same seeking past end of file issue for mp4, please test DJMario

git-svn-id: https://svn.musicpd.org/mpd/trunk@1784 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes 2004-07-03 14:49:10 +00:00
parent 643d7e77b1
commit c173c74660

View File

@ -112,6 +112,7 @@ int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char * path) {
long offset; long offset;
mpd_uint16 bitRate = 0; mpd_uint16 bitRate = 0;
InputStream inStream; InputStream inStream;
int seeking = 0;
if(openInputStream(&inStream, path) < 0) { if(openInputStream(&inStream, path) < 0) {
ERROR("failed to open %s\n", path); ERROR("failed to open %s\n", path);
@ -193,7 +194,9 @@ int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char * path) {
seekTable = malloc(sizeof(float)*numSamples); seekTable = malloc(sizeof(float)*numSamples);
for(sampleId=0; sampleId<numSamples && !eof; sampleId++) { for(sampleId=0; sampleId<numSamples && !eof; sampleId++) {
if(dc->seek && seekTableEnd>1 && if(dc->seek) seeking = 1;
if(seeking && seekTableEnd>1 &&
seekTable[seekTableEnd]>=dc->seekWhere) seekTable[seekTableEnd]>=dc->seekWhere)
{ {
int i = 2; int i = 2;
@ -215,15 +218,16 @@ int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char * path) {
else dur-=offset; else dur-=offset;
time+=((float)dur)/scale; time+=((float)dur)/scale;
if(dc->seek && time>dc->seekWhere) seekPositionFound = 1; if(seeking && time>dc->seekWhere) seekPositionFound = 1;
if(dc->seek && seekPositionFound) { if(seeking && seekPositionFound) {
seekPositionFound = 0; seekPositionFound = 0;
clearOutputBuffer(cb); clearOutputBuffer(cb);
seeking = 0;
dc->seek = 0; dc->seek = 0;
} }
if(dc->seek) continue; if(seeking) continue;
if(mp4ff_read_sample(mp4fh,track,sampleId,&mp4Buffer, if(mp4ff_read_sample(mp4fh,track,sampleId,&mp4Buffer,
&mp4BufferSize) == 0) &mp4BufferSize) == 0)
@ -287,8 +291,6 @@ int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char * path) {
} }
} }
flushOutputBuffer(cb);
free(seekTable); free(seekTable);
faacDecClose(decoder); faacDecClose(decoder);
mp4ff_close(mp4fh); mp4ff_close(mp4fh);
@ -297,10 +299,11 @@ int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char * path) {
if(dc->state != DECODE_STATE_DECODE) return -1; if(dc->state != DECODE_STATE_DECODE) return -1;
/*if(dc->seek) { if(dc->seek && seeking) {
dc->seekError = 1; clearOutputBuffer(cb);
dc->seek = 0; dc->seek = 0;
}*/ }
flushOutputBuffer(cb);
if(dc->stop) { if(dc->stop) {
dc->state = DECODE_STATE_STOP; dc->state = DECODE_STATE_STOP;