1st part of fix for FS#10637. Correction of mpc header parsing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24408 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
4c96bb54c6
commit
db4d7a313e
2 changed files with 12 additions and 8 deletions
|
@ -223,15 +223,17 @@ mpc_streaminfo_read(mpc_streaminfo * si, mpc_reader * r)
|
||||||
#endif
|
#endif
|
||||||
si->stream_version = HeaderData[0] >> 24;
|
si->stream_version = HeaderData[0] >> 24;
|
||||||
|
|
||||||
// stream version 8
|
|
||||||
if ((si->stream_version & 15) >= 8) {
|
|
||||||
return ERROR_CODE_INVALIDSV;
|
|
||||||
}
|
|
||||||
// stream version 7
|
// stream version 7
|
||||||
else if ((si->stream_version & 15) == 7) {
|
if ((si->stream_version & 15) == 7) {
|
||||||
Error = streaminfo_read_header_sv7(si, HeaderData);
|
Error = streaminfo_read_header_sv7(si, HeaderData);
|
||||||
if (Error != ERROR_CODE_OK) return Error;
|
if (Error != ERROR_CODE_OK) return Error;
|
||||||
|
} else {
|
||||||
|
// only sv7 allowed with "MP+" signature
|
||||||
|
return ERROR_CODE_INVALIDSV;
|
||||||
}
|
}
|
||||||
|
} else if (memcmp(HeaderData, "MPCK", 4) == 0) {
|
||||||
|
// stream version 8 uses "MPCK" signature
|
||||||
|
return ERROR_CODE_INVALIDSV;
|
||||||
} else {
|
} else {
|
||||||
#ifdef MPC_SUPPORT_SV456
|
#ifdef MPC_SUPPORT_SV456
|
||||||
#ifndef MPC_LITTLE_ENDIAN
|
#ifndef MPC_LITTLE_ENDIAN
|
||||||
|
|
|
@ -66,9 +66,7 @@ bool get_musepack_metadata(int fd, struct mp3entry *id3)
|
||||||
|
|
||||||
header[0] = letoh32(header[0]);
|
header[0] = letoh32(header[0]);
|
||||||
streamversion = (header[0] >> 24) & 15;
|
streamversion = (header[0] >> 24) & 15;
|
||||||
if (streamversion >= 8) {
|
if (streamversion == 7) {
|
||||||
return false; /* SV8 or higher don't exist yet, so no support */
|
|
||||||
} else if (streamversion == 7) {
|
|
||||||
unsigned int gapless = (header[5] >> 31) & 0x0001;
|
unsigned int gapless = (header[5] >> 31) & 0x0001;
|
||||||
unsigned int last_frame_samples = (header[5] >> 20) & 0x07ff;
|
unsigned int last_frame_samples = (header[5] >> 20) & 0x07ff;
|
||||||
unsigned int bufused = 0;
|
unsigned int bufused = 0;
|
||||||
|
@ -82,7 +80,11 @@ bool get_musepack_metadata(int fd, struct mp3entry *id3)
|
||||||
|
|
||||||
bufused = set_replaygain(id3, false, header[3], bufused);
|
bufused = set_replaygain(id3, false, header[3], bufused);
|
||||||
bufused = set_replaygain(id3, true, header[4], bufused);
|
bufused = set_replaygain(id3, true, header[4], bufused);
|
||||||
|
} else {
|
||||||
|
return false; /* only SV7 is allowed within a "MP+" signature */
|
||||||
}
|
}
|
||||||
|
} else if (!memcmp(header, "MPCK", 4)) { /* Compare to sig "MPCK" */
|
||||||
|
return false; /* SV8 is not supported yet */
|
||||||
} else {
|
} else {
|
||||||
return false; /* SV4-6 is not supported anymore */
|
return false; /* SV4-6 is not supported anymore */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue