mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-11-12 14:42:31 -05:00
Now continues searching for good frames if a bad one is found. Patch by Hardeep Sidhu
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1398 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
6f75d1739f
commit
4e69f82c8f
1 changed files with 12 additions and 5 deletions
|
|
@ -396,6 +396,7 @@ static int getsonglength(int fd, struct mp3entry *entry)
|
||||||
int freqindex;
|
int freqindex;
|
||||||
int frequency;
|
int frequency;
|
||||||
int chmode;
|
int chmode;
|
||||||
|
int bytecount;
|
||||||
|
|
||||||
long bpf;
|
long bpf;
|
||||||
long tpf;
|
long tpf;
|
||||||
|
|
@ -413,12 +414,18 @@ static int getsonglength(int fd, struct mp3entry *entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Loop trough file until we find a frame header */
|
/* Loop trough file until we find a frame header */
|
||||||
|
bytecount = 0;
|
||||||
restart:
|
restart:
|
||||||
do {
|
do {
|
||||||
header <<= 8;
|
header <<= 8;
|
||||||
if(!read(fd, &tmp, 1))
|
if(!read(fd, &tmp, 1))
|
||||||
return -1;
|
return -1;
|
||||||
header |= tmp;
|
header |= tmp;
|
||||||
|
|
||||||
|
/* Quit if we haven't found a valid header within 128K */
|
||||||
|
bytecount++;
|
||||||
|
if(bytecount > 0x20000)
|
||||||
|
return -1;
|
||||||
} while(!mp3frameheader(header));
|
} while(!mp3frameheader(header));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -444,7 +451,7 @@ static int getsonglength(int fd, struct mp3entry *entry)
|
||||||
version = 1;
|
version = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -1;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Layer */
|
/* Layer */
|
||||||
|
|
@ -459,20 +466,20 @@ static int getsonglength(int fd, struct mp3entry *entry)
|
||||||
layer = 1;
|
layer = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -1;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bitrate */
|
/* Bitrate */
|
||||||
bitindex = (header & 0xF000) >> 12;
|
bitindex = (header & 0xF000) >> 12;
|
||||||
bitrate = bitrate_table[version-1][layer-1][bitindex];
|
bitrate = bitrate_table[version-1][layer-1][bitindex];
|
||||||
if(bitrate == 0)
|
if(bitrate == 0)
|
||||||
return -1;
|
goto restart;
|
||||||
|
|
||||||
/* Sampling frequency */
|
/* Sampling frequency */
|
||||||
freqindex = (header & 0x0C00) >> 10;
|
freqindex = (header & 0x0C00) >> 10;
|
||||||
frequency = freqtab[version-1][freqindex];
|
frequency = freqtab[version-1][freqindex];
|
||||||
if(frequency == 0)
|
if(frequency == 0)
|
||||||
return -1;
|
goto restart;
|
||||||
|
|
||||||
#ifdef DEBUG_VERBOSE
|
#ifdef DEBUG_VERBOSE
|
||||||
DEBUGF( "Version %i, lay %i, biti %i, bitr %i, freqi %i, freq %i, chmode %d\n",
|
DEBUGF( "Version %i, lay %i, biti %i, bitr %i, freqi %i, freq %i, chmode %d\n",
|
||||||
|
|
@ -500,7 +507,7 @@ static int getsonglength(int fd, struct mp3entry *entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate time per frame */
|
/* Calculate time per frame */
|
||||||
tpf = bs[layer] / freqtab[version-1][freqindex] << (version - 1);
|
tpf = bs[layer] / (freqtab[version-1][freqindex] << (version - 1));
|
||||||
|
|
||||||
/* OK, we have found a frame. Let's see if it has a Xing header */
|
/* OK, we have found a frame. Let's see if it has a Xing header */
|
||||||
if(read(fd, frame, sizeof frame) < 0)
|
if(read(fd, frame, sizeof frame) < 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue