summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/metadata/flac.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/apps/metadata/flac.c b/apps/metadata/flac.c
index b8f440c3ed..29937173fd 100644
--- a/apps/metadata/flac.c
+++ b/apps/metadata/flac.c
@@ -86,17 +86,24 @@ bool get_flac_metadata(int fd, struct mp3entry* id3)
86 86
87 /* totalsamples is a 36-bit field, but we assume <= 32 bits are used */ 87 /* totalsamples is a 36-bit field, but we assume <= 32 bits are used */
88 totalsamples = get_long_be(&buf[14]); 88 totalsamples = get_long_be(&buf[14]);
89 89
90 /* Calculate track length (in ms) and estimate the bitrate (in kbit/s) */ 90 if(totalsamples > 0)
91 id3->length = ((int64_t) totalsamples * 1000) / id3->frequency; 91 {
92 92 /* Calculate track length (in ms) and estimate the bitrate (in kbit/s) */
93 if (id3->length <= 0) 93 id3->length = ((int64_t) totalsamples * 1000) / id3->frequency;
94 id3->bitrate = (id3->filesize * 8) / id3->length;
95 }
96 else if (totalsamples == 0)
97 {
98 id3->length = 0;
99 id3->bitrate = 0;
100 }
101 else
94 { 102 {
95 logf("flac length invalid!"); 103 logf("flac length invalid!");
96 return false; 104 return false;
97 } 105 }
98 106
99 id3->bitrate = ((int64_t) id3->filesize * 8) / id3->length;
100 } 107 }
101 else if (type == 4) /* 4 is the VORBIS_COMMENT block */ 108 else if (type == 4) /* 4 is the VORBIS_COMMENT block */
102 { 109 {