diff options
-rw-r--r-- | apps/codecs/libmusepack/streaminfo.c | 7 | ||||
-rw-r--r-- | apps/metadata.c | 21 |
2 files changed, 25 insertions, 3 deletions
diff --git a/apps/codecs/libmusepack/streaminfo.c b/apps/codecs/libmusepack/streaminfo.c index 5475c6f0f6..d9c925dbfb 100644 --- a/apps/codecs/libmusepack/streaminfo.c +++ b/apps/codecs/libmusepack/streaminfo.c | |||
@@ -234,8 +234,15 @@ mpc_streaminfo_read(mpc_streaminfo * si, mpc_reader * r) | |||
234 | } | 234 | } |
235 | } else { | 235 | } else { |
236 | #ifdef MPC_SUPPORT_SV456 | 236 | #ifdef MPC_SUPPORT_SV456 |
237 | #ifndef MPC_LITTLE_ENDIAN | ||
238 | mpc_uint32_t ptr; | ||
239 | for (ptr = 0; ptr < 8; ptr++) { | ||
240 | HeaderData[ptr] = mpc_swap32(HeaderData[ptr]); | ||
241 | } | ||
242 | #endif | ||
237 | // stream version 4-6 | 243 | // stream version 4-6 |
238 | Error = streaminfo_read_header_sv6(si, HeaderData); | 244 | Error = streaminfo_read_header_sv6(si, HeaderData); |
245 | if (Error != ERROR_CODE_OK) return Error; | ||
239 | #else | 246 | #else |
240 | return ERROR_CODE_INVALIDSV; | 247 | return ERROR_CODE_INVALIDSV; |
241 | #endif | 248 | #endif |
diff --git a/apps/metadata.c b/apps/metadata.c index 1563466eda..8838a83aa4 100644 --- a/apps/metadata.c +++ b/apps/metadata.c | |||
@@ -1260,9 +1260,24 @@ static bool get_musepack_metadata(int fd, struct mp3entry *id3) | |||
1260 | "%d.%d dB", album_gain/100, abs(album_gain)%100); | 1260 | "%d.%d dB", album_gain/100, abs(album_gain)%100); |
1261 | } | 1261 | } |
1262 | } else { | 1262 | } else { |
1263 | /* There's no certain way to detect these pre-sv7 streams, apparently */ | 1263 | header[0] = letoh32(header[0]); |
1264 | /* TODO: add sv6 parsing here */ | 1264 | unsigned int streamversion = (header[0] >> 11) & 0x03FF; |
1265 | return false; | 1265 | if (streamversion != 4 && streamversion != 5 && streamversion != 6) |
1266 | return false; | ||
1267 | id3->frequency = 44100; | ||
1268 | id3->track_gain = 0; | ||
1269 | id3->track_peak = 0; | ||
1270 | id3->album_gain = 0; | ||
1271 | id3->album_peak = 0; | ||
1272 | |||
1273 | if (streamversion >= 5) | ||
1274 | samples = (uint64_t)header[1]*1152; // 32 bit | ||
1275 | else | ||
1276 | samples = (uint64_t)(header[1] >> 16)*1152; // 16 bit | ||
1277 | |||
1278 | samples -= 576; | ||
1279 | if (streamversion < 6) | ||
1280 | samples -= 1152; | ||
1266 | } | 1281 | } |
1267 | 1282 | ||
1268 | id3->vbr = true; | 1283 | id3->vbr = true; |