Fix aac song length in files with a duration expressed in time intervals other than 10th of a second
This commit is contained in:
parent
7cc249142e
commit
9bf4087971
|
@ -46,7 +46,7 @@
|
||||||
/*
|
/*
|
||||||
* Defines
|
* Defines
|
||||||
*/
|
*/
|
||||||
#define DB_VERSION 3
|
#define DB_VERSION 4
|
||||||
#define STRLEN(a) (a) ? strlen((a)) + 1 : 1
|
#define STRLEN(a) (a) ? strlen((a)) + 1 : 1
|
||||||
#define MAYBEFREE(a) { if((a)) free((a)); };
|
#define MAYBEFREE(a) { if((a)) free((a)); };
|
||||||
|
|
||||||
|
|
|
@ -953,8 +953,10 @@ int scan_get_aacfileinfo(char *file, MP3FILE *pmp3) {
|
||||||
FILE *infile;
|
FILE *infile;
|
||||||
long atom_offset;
|
long atom_offset;
|
||||||
int atom_length;
|
int atom_length;
|
||||||
int temp_int;
|
int sample_size;
|
||||||
|
int samples;
|
||||||
off_t file_size;
|
off_t file_size;
|
||||||
|
int ms;
|
||||||
|
|
||||||
DPRINTF(ERR_DEBUG,"Getting AAC file info\n");
|
DPRINTF(ERR_DEBUG,"Getting AAC file info\n");
|
||||||
|
|
||||||
|
@ -972,11 +974,22 @@ int scan_get_aacfileinfo(char *file, MP3FILE *pmp3) {
|
||||||
/* now, hunt for the mvhd atom */
|
/* now, hunt for the mvhd atom */
|
||||||
atom_offset = aac_drilltoatom(infile, "moov:mvhd", &atom_length);
|
atom_offset = aac_drilltoatom(infile, "moov:mvhd", &atom_length);
|
||||||
if(atom_offset != -1) {
|
if(atom_offset != -1) {
|
||||||
fseek(infile,16,SEEK_CUR);
|
fseek(infile,12,SEEK_CUR);
|
||||||
fread((void*)&temp_int,1,sizeof(int),infile);
|
fread((void*)&sample_size,1,sizeof(int),infile);
|
||||||
temp_int=ntohl(temp_int);
|
fread((void*)&samples,1,sizeof(int),infile);
|
||||||
|
|
||||||
|
sample_size=ntohl(sample_size);
|
||||||
|
samples=ntohl(samples);
|
||||||
|
|
||||||
|
/* avoid overflowing on large sample_sizes (90000) */
|
||||||
|
ms=1000;
|
||||||
|
while((ms > 9) && (!(sample_size % 10))) {
|
||||||
|
sample_size /= 10;
|
||||||
|
ms /= 10;
|
||||||
|
}
|
||||||
|
|
||||||
/* DWB: use ms time instead of sec */
|
/* DWB: use ms time instead of sec */
|
||||||
pmp3->song_length=temp_int * 1000 / 600;
|
pmp3->song_length=(int)((samples * ms) / sample_size);
|
||||||
|
|
||||||
DPRINTF(ERR_DEBUG,"Song length: %d seconds\n", pmp3->song_length / 1000);
|
DPRINTF(ERR_DEBUG,"Song length: %d seconds\n", pmp3->song_length / 1000);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue