forked from Ports/perfect_dark
port: 64-bit: shrink audio bank allocation after loading
This commit is contained in:
1 parent
d5482f3453
commit
3f887b2ecf
4 files changed
+21
-4
No files matched your search
@@ -32,6 +32,7 @@ void sysGetHomePath(char *outPath, const u32 outLen);
|
||||
|
||||
void *sysMemAlloc(const u32 size);
|
||||
void *sysMemZeroAlloc(const u32 size);
|
||||
void *sysMemRealloc(void *ptr, const u32 newSize);
|
||||
void sysMemFree(void *ptr);
|
||||
|
||||
// hns is specified in 100ns units
|
||||
|
||||
@@ -31,7 +31,7 @@ static int getNumStrings(u8 *src, size_t len)
|
||||
return 1;
|
||||
}
|
||||
|
||||
u32 convertLangFile(u8 *dst, u8 *src, size_t srclen)
|
||||
static u32 convertLangFile(u8 *dst, u8 *src, size_t srclen)
|
||||
{
|
||||
// Convert it
|
||||
u32 *src_offsets = (u32 *) src;
|
||||
|
||||
@@ -316,11 +316,22 @@ static u32 convertAudioBankFile(u8 *dst, u8 *src)
|
||||
u8 *preprocessALBankFile(u8 *src, u32 size, u32 *outSize)
|
||||
{
|
||||
ptrReset();
|
||||
u32 dstlen = size * 3;
|
||||
|
||||
const u32 dstlen = size * 3; // this should overshoot any possible bank size, but * 2 also works for vanilla banks
|
||||
u8 *dst = sysMemZeroAlloc(dstlen);
|
||||
|
||||
*outSize = convertAudioBankFile(dst, src);
|
||||
*outSize = ALIGN16(*outSize);
|
||||
u32 reallen = convertAudioBankFile(dst, src);
|
||||
if (reallen > dstlen || ALIGN16(reallen) > dstlen) {
|
||||
sysFatalError("overflow when trying to preprocess an ALBankFile, size %u dstlen %u reallen %u", size, dstlen, reallen);
|
||||
}
|
||||
|
||||
reallen = ALIGN16(reallen);
|
||||
|
||||
if (reallen < dstlen) {
|
||||
dst = sysMemRealloc(dst, reallen);
|
||||
}
|
||||
|
||||
*outSize = reallen;
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
@@ -288,6 +288,11 @@ void *sysMemZeroAlloc(const u32 size)
|
||||
return calloc(1, size);
|
||||
}
|
||||
|
||||
void *sysMemRealloc(void *ptr, const u32 newSize)
|
||||
{
|
||||
return realloc(ptr, newSize);
|
||||
}
|
||||
|
||||
void sysMemFree(void *ptr)
|
||||
{
|
||||
free(ptr);
|
||||
|
||||
Reference in new issue
Block a user