forked from len0rd/rockbox
make mp3info() better return true on bad mp3 files, also make
getsonglength() return 0 if the length is unknown git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1923 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
22633d66a2
commit
ae3952ec90
1 changed files with 10 additions and 5 deletions
|
|
@ -379,7 +379,7 @@ static bool mp3frameheader(unsigned long head)
|
||||||
* entry - the entry to update with the length
|
* entry - the entry to update with the length
|
||||||
*
|
*
|
||||||
* Returns: the song length in milliseconds,
|
* Returns: the song length in milliseconds,
|
||||||
* -1 means that it couldn't be calculated
|
* 0 means that it couldn't be calculated
|
||||||
*/
|
*/
|
||||||
static int getsonglength(int fd, struct mp3entry *entry)
|
static int getsonglength(int fd, struct mp3entry *entry)
|
||||||
{
|
{
|
||||||
|
|
@ -408,13 +408,13 @@ static int getsonglength(int fd, struct mp3entry *entry)
|
||||||
|
|
||||||
/* Start searching after ID3v2 header */
|
/* Start searching after ID3v2 header */
|
||||||
if(-1 == lseek(fd, entry->id3v2len, SEEK_SET))
|
if(-1 == lseek(fd, entry->id3v2len, SEEK_SET))
|
||||||
return -1;
|
return 0;
|
||||||
|
|
||||||
/* Fill up header with first 24 bits */
|
/* Fill up header with first 24 bits */
|
||||||
for(version = 0; version < 3; version++) {
|
for(version = 0; version < 3; version++) {
|
||||||
header <<= 8;
|
header <<= 8;
|
||||||
if(!read(fd, &tmp, 1))
|
if(!read(fd, &tmp, 1))
|
||||||
return -1;
|
return 0;
|
||||||
header |= tmp;
|
header |= tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -424,13 +424,13 @@ static int getsonglength(int fd, struct mp3entry *entry)
|
||||||
do {
|
do {
|
||||||
header <<= 8;
|
header <<= 8;
|
||||||
if(!read(fd, &tmp, 1))
|
if(!read(fd, &tmp, 1))
|
||||||
return -1;
|
return 0;
|
||||||
header |= tmp;
|
header |= tmp;
|
||||||
|
|
||||||
/* Quit if we haven't found a valid header within 128K */
|
/* Quit if we haven't found a valid header within 128K */
|
||||||
bytecount++;
|
bytecount++;
|
||||||
if(bytecount > 0x20000)
|
if(bytecount > 0x20000)
|
||||||
return -1;
|
return 0;
|
||||||
} while(!mp3frameheader(header));
|
} while(!mp3frameheader(header));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -631,6 +631,11 @@ bool mp3info(struct mp3entry *entry, char *filename)
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
|
if(!entry->length || (entry->filesize < 8 ))
|
||||||
|
/* no song length or less than 8 bytes is hereby considered to be an
|
||||||
|
invalid mp3 and won't be played by us! */
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue