From 832bbf72a8c9822e00e74d29eee293ef2eff67c1 Mon Sep 17 00:00:00 2001 From: Magnus Holmgren Date: Thu, 26 Apr 2007 17:59:24 +0000 Subject: [PATCH] AAC: More adjustments to how the frequency is read. Still not perfect, but this is probably as good as it can get. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13274 a1c6a512-1295-4272-9138-f99709370657 --- apps/metadata.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/metadata.c b/apps/metadata.c index b544a0c410..70e7c0542e 100644 --- a/apps/metadata.c +++ b/apps/metadata.c @@ -1306,10 +1306,10 @@ static bool read_mp4_esds(int fd, struct mp3entry* id3, id3->frequency *= 2; } } - /* TODO: Should check that there is at least 16 bits left */ /* Skip 13 bits from above, plus 3 bits, then read 11 bits */ - else if (((bits >> 5) & 0x7ff) == 0x2b7) /* extensionAudioObjectType */ + else if ((length >= 4) && (((bits >> 5) & 0x7ff) == 0x2b7)) { + /* extensionAudioObjectType */ DEBUGF("MP4: extensionAudioType\n"); type = bits & 0x1f; /* Object type - 5 bits*/ bits = get_long_be(&buf[4]); @@ -1343,6 +1343,17 @@ static bool read_mp4_esds(int fd, struct mp3entry* id3, } } } + + if (!sbr && (id3->frequency <= 24000) && (length <= 2)) + { + /* Double the frequency for low-frequency files without a "long" + * DecSpecificConfig header. The file may or may not contain SBR, + * but here we guess it does if the header is short. This can + * fail on some files, but it's the best we can do, short of + * decoding (parts of) the file. + */ + id3->frequency *= 2; + } } return sbr; -- 2.11.4.GIT