mp4 cleanups
git-svn-id: https://svn.musicpd.org/mpd/trunk@280 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
be753fb53d
commit
692dd6bc29
@ -71,8 +71,7 @@ uint32_t mp4_seekCallback(void *user_data, uint64_t position) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc)
|
int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
|
||||||
{
|
|
||||||
FILE * fh;
|
FILE * fh;
|
||||||
mp4ff_t * mp4fh;
|
mp4ff_t * mp4fh;
|
||||||
mp4ff_callback_t * mp4cb;
|
mp4ff_callback_t * mp4cb;
|
||||||
@ -93,8 +92,9 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc)
|
|||||||
long dur;
|
long dur;
|
||||||
unsigned int sampleCount;
|
unsigned int sampleCount;
|
||||||
char * sampleBuffer;
|
char * sampleBuffer;
|
||||||
unsigned int initial = 1;
|
|
||||||
size_t sampleBufferLen;
|
size_t sampleBufferLen;
|
||||||
|
unsigned int initial = 1;
|
||||||
|
int chunkLen = 0;
|
||||||
|
|
||||||
|
|
||||||
fh = fopen(dc->file,"r");
|
fh = fopen(dc->file,"r");
|
||||||
@ -200,8 +200,12 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc)
|
|||||||
if(sampleCount>0) initial =0;
|
if(sampleCount>0) initial =0;
|
||||||
sampleBufferLen = sampleCount*2;
|
sampleBufferLen = sampleCount*2;
|
||||||
while(sampleBufferLen > 0) {
|
while(sampleBufferLen > 0) {
|
||||||
size_t size = sampleBufferLen>CHUNK_SIZE ? CHUNK_SIZE:
|
size_t size = sampleBufferLen>CHUNK_SIZE-chunkLen ?
|
||||||
|
CHUNK_SIZE-chunkLen:
|
||||||
sampleBufferLen;
|
sampleBufferLen;
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
pcm_changeBufferEndianness(sampleBuffer,size,af->bits);
|
||||||
|
#endif
|
||||||
while(cb->begin==cb->end && cb->wrap &&
|
while(cb->begin==cb->end && cb->wrap &&
|
||||||
!dc->stop && !dc->seek)
|
!dc->stop && !dc->seek)
|
||||||
{
|
{
|
||||||
@ -213,25 +217,36 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc)
|
|||||||
}
|
}
|
||||||
else if(dc->seek) break;
|
else if(dc->seek) break;
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
pcm_changeBufferEndianness(sampleBuffer,size,af->bits);
|
|
||||||
#endif
|
|
||||||
sampleBufferLen-=size;
|
sampleBufferLen-=size;
|
||||||
memcpy(cb->chunks+cb->end*CHUNK_SIZE,sampleBuffer,size);
|
memcpy(cb->chunks+cb->end*CHUNK_SIZE+chunkLen,
|
||||||
cb->chunkSize[cb->end] = size;
|
sampleBuffer,size);
|
||||||
sampleBuffer+=size;
|
|
||||||
|
|
||||||
cb->times[cb->end] = time;
|
cb->times[cb->end] = time;
|
||||||
|
sampleBuffer+=size;
|
||||||
++cb->end;
|
chunkLen+=size;
|
||||||
|
if(chunkLen>=CHUNK_SIZE) {
|
||||||
|
cb->chunkSize[cb->end] = CHUNK_SIZE;
|
||||||
|
++cb->end;
|
||||||
|
|
||||||
if(cb->end>=buffered_chunks) {
|
if(cb->end>=buffered_chunks) {
|
||||||
cb->end = 0;
|
cb->end = 0;
|
||||||
cb->wrap = 1;
|
cb->wrap = 1;
|
||||||
|
}
|
||||||
|
chunkLen = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!dc->stop && !dc->seek && chunkLen) {
|
||||||
|
cb->chunkSize[cb->end] = CHUNK_SIZE;
|
||||||
|
++cb->end;
|
||||||
|
|
||||||
|
if(cb->end>=buffered_chunks) {
|
||||||
|
cb->end = 0;
|
||||||
|
cb->wrap = 1;
|
||||||
|
}
|
||||||
|
chunkLen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(dc->seek) dc->seek = 0;
|
if(dc->seek) dc->seek = 0;
|
||||||
|
|
||||||
if(dc->stop) {
|
if(dc->stop) {
|
||||||
|
Loading…
Reference in New Issue
Block a user