Author: sayer
Date: 2010-02-23 16:24:05 +0100 (Tue, 23 Feb 2010)
New Revision: 1627
Modified:
trunk/core/AmAudioFile.cpp
Log:
fixes loop problem with mp3 files reported by Robert Szokovacs
Modified: trunk/core/AmAudioFile.cpp
===================================================================
--- trunk/core/AmAudioFile.cpp 2009-12-07 16:40:04 UTC (rev 1626)
+++ trunk/core/AmAudioFile.cpp 2010-02-23 15:24:05 UTC (rev 1627)
@@ -354,31 +354,48 @@
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);
+ 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);
-
+ 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");
_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev