fixes loop problem with mp3 files reported by Robert Szokovacs

git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1627 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 17 years ago
parent 6d7b4de9a5
commit 31a090696a

@ -354,31 +354,48 @@ int AmAudioFile::read(unsigned int user_ts, unsigned int size)
long fpos = ftell(fp);
if(data_size < 0 || fpos - begin < data_size){
if((data_size > 0) && (fpos - begin + (int)size > data_size)){
if((data_size > 0) && (fpos - begin + (int)size > data_size)) {
// last block to read
s = data_size - fpos + begin;
}
s = fread((void*)((unsigned char*)samples),1,s,fp);
ret = (!ferror(fp) ? s : -1);
if ((data_size == -1) && loop.get() && feof(fp)) {
// data size unknown, loop and eof
DBG("rewinding audio file...\n");
rewind();
goto read_block;
}
if (data_size == -1 && autorewind.get() && feof(fp)) {
// data size unknown, autorewind and eof
DBG("autorewinding audio file...\n");
rewind();
ret = -2; // eof
} else {
// read from file
s = fread((void*)((unsigned char*)samples),1,s,fp);
ret = (!ferror(fp) ? s : -1);
}
#if (defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN))
#define bswap_16(A) ((((u_int16_t)(A) & 0xff00) >> 8) | \
(((u_int16_t)(A) & 0x00ff) << 8))
unsigned int i;
for(i=0;i<=size/2;i++) {
((u_int16_t *)((unsigned char*)samples))[i]=bswap_16(((u_int16_t *)((unsigned char*)samples))[i]);
((u_int16_t *)((unsigned char*)samples))[i]=
bswap_16(((u_int16_t *)((unsigned char*)samples))[i]);
}
#endif
}
else {
if(loop.get() && data_size>0){
} else {
if (loop.get() && data_size>0) {
DBG("rewinding audio file...\n");
rewind();
goto read_block;
}
}
if (autorewind.get() && data_size>0){
DBG("autorewinding audio file...\n");

Loading…
Cancel
Save