Update external libraries
This commit is contained in:
parent
439e73a8ec
commit
3d46297cc1
6 changed files with 1495 additions and 567 deletions
598
src/external/cgltf.h
vendored
598
src/external/cgltf.h
vendored
File diff suppressed because it is too large
Load diff
109
src/external/dr_flac.h
vendored
109
src/external/dr_flac.h
vendored
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
FLAC audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file.
|
||||
dr_flac - v0.11.7 - 2019-05-06
|
||||
dr_flac - v0.11.10 - 2019-06-26
|
||||
|
||||
David Reid - mackron@gmail.com
|
||||
*/
|
||||
|
@ -149,7 +149,7 @@ typedef drflac_uint32 drflac_bool32;
|
|||
#elif (defined(__GNUC__) && __GNUC__ >= 4) /* GCC 4 */
|
||||
#define DRFLAC_DEPRECATED __attribute__((deprecated))
|
||||
#elif defined(__has_feature) /* Clang */
|
||||
#if defined(__has_feature(attribute_deprecated))
|
||||
#if __has_feature(attribute_deprecated)
|
||||
#define DRFLAC_DEPRECATED __attribute__((deprecated))
|
||||
#else
|
||||
#define DRFLAC_DEPRECATED
|
||||
|
@ -1008,7 +1008,7 @@ static DRFLAC_INLINE drflac_bool32 drflac_has_sse2()
|
|||
return DRFLAC_FALSE;
|
||||
#else
|
||||
int info[4];
|
||||
drflac_cpuid(info, 1);
|
||||
drflac__cpuid(info, 1);
|
||||
return (info[3] & (1 << 26)) != 0;
|
||||
#endif
|
||||
#endif
|
||||
|
@ -1033,7 +1033,7 @@ static DRFLAC_INLINE drflac_bool32 drflac_has_sse41()
|
|||
return DRFLAC_FALSE;
|
||||
#else
|
||||
int info[4];
|
||||
drflac_cpuid(info, 1);
|
||||
drflac__cpuid(info, 1);
|
||||
return (info[2] & (1 << 19)) != 0;
|
||||
#endif
|
||||
#endif
|
||||
|
@ -1141,21 +1141,43 @@ reference excess prior samples.
|
|||
/* CPU caps. */
|
||||
static drflac_bool32 drflac__gIsLZCNTSupported = DRFLAC_FALSE;
|
||||
#ifndef DRFLAC_NO_CPUID
|
||||
/*
|
||||
I've had a bug report that Clang's ThreadSanitizer presents a warning in this function. Having reviewed this, this does
|
||||
actually make sense. However, since CPU caps should never differ for a running process, I don't think the trade off of
|
||||
complicating internal API's by passing around CPU caps versus just disabling the warnings is worthwhile. I'm therefore
|
||||
just going to disable these warnings.
|
||||
*/
|
||||
#if defined(__has_feature)
|
||||
#if __has_feature(thread_sanitizer)
|
||||
#define DRFLAC_NO_THREAD_SANITIZE __attribute__((no_sanitize("thread")))
|
||||
#else
|
||||
#define DRFLAC_NO_THREAD_SANITIZE
|
||||
#endif
|
||||
#else
|
||||
#define DRFLAC_NO_THREAD_SANITIZE
|
||||
#endif
|
||||
static drflac_bool32 drflac__gIsSSE2Supported = DRFLAC_FALSE;
|
||||
static drflac_bool32 drflac__gIsSSE41Supported = DRFLAC_FALSE;
|
||||
static void drflac__init_cpu_caps()
|
||||
DRFLAC_NO_THREAD_SANITIZE static void drflac__init_cpu_caps()
|
||||
{
|
||||
int info[4] = {0};
|
||||
static drflac_bool32 isCPUCapsInitialized = DRFLAC_FALSE;
|
||||
|
||||
/* LZCNT */
|
||||
drflac__cpuid(info, 0x80000001);
|
||||
drflac__gIsLZCNTSupported = (info[2] & (1 << 5)) != 0;
|
||||
if (!isCPUCapsInitialized) {
|
||||
int info[4] = {0};
|
||||
|
||||
/* SSE2 */
|
||||
drflac__gIsSSE2Supported = drflac_has_sse2();
|
||||
/* LZCNT */
|
||||
drflac__cpuid(info, 0x80000001);
|
||||
drflac__gIsLZCNTSupported = (info[2] & (1 << 5)) != 0;
|
||||
|
||||
/* SSE4.1 */
|
||||
drflac__gIsSSE41Supported = drflac_has_sse41();
|
||||
/* SSE2 */
|
||||
drflac__gIsSSE2Supported = drflac_has_sse2();
|
||||
|
||||
/* SSE4.1 */
|
||||
drflac__gIsSSE41Supported = drflac_has_sse41();
|
||||
|
||||
/* Initialized. */
|
||||
isCPUCapsInitialized = DRFLAC_TRUE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -4897,9 +4919,9 @@ typedef struct
|
|||
static DRFLAC_INLINE void drflac__decode_block_header(drflac_uint32 blockHeader, drflac_uint8* isLastBlock, drflac_uint8* blockType, drflac_uint32* blockSize)
|
||||
{
|
||||
blockHeader = drflac__be2host_32(blockHeader);
|
||||
*isLastBlock = (blockHeader & (0x01 << 31)) >> 31;
|
||||
*blockType = (blockHeader & (0x7F << 24)) >> 24;
|
||||
*blockSize = (blockHeader & 0xFFFFFF);
|
||||
*isLastBlock = (blockHeader & 0x80000000UL) >> 31;
|
||||
*blockType = (blockHeader & 0x7F000000UL) >> 24;
|
||||
*blockSize = (blockHeader & 0x00FFFFFFUL);
|
||||
}
|
||||
|
||||
static DRFLAC_INLINE drflac_bool32 drflac__read_and_decode_block_header(drflac_read_proc onRead, void* pUserData, drflac_uint8* isLastBlock, drflac_uint8* blockType, drflac_uint32* blockSize)
|
||||
|
@ -6759,10 +6781,10 @@ drflac_uint64 drflac__read_s32__misaligned(drflac* pFlac, drflac_uint64 samplesT
|
|||
case DRFLAC_CHANNEL_ASSIGNMENT_LEFT_SIDE:
|
||||
{
|
||||
if (channelIndex == 0) {
|
||||
decodedSample = pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample;
|
||||
decodedSample = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample);
|
||||
} else {
|
||||
int side = pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample;
|
||||
int left = pFlac->currentFrame.subframes[channelIndex - 1].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex - 1].wastedBitsPerSample;
|
||||
int side = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample);
|
||||
int left = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex - 1].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex - 1].wastedBitsPerSample);
|
||||
decodedSample = left - side;
|
||||
}
|
||||
} break;
|
||||
|
@ -6770,11 +6792,11 @@ drflac_uint64 drflac__read_s32__misaligned(drflac* pFlac, drflac_uint64 samplesT
|
|||
case DRFLAC_CHANNEL_ASSIGNMENT_RIGHT_SIDE:
|
||||
{
|
||||
if (channelIndex == 0) {
|
||||
int side = pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample;
|
||||
int right = pFlac->currentFrame.subframes[channelIndex + 1].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 1].wastedBitsPerSample;
|
||||
int side = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample);
|
||||
int right = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 1].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 1].wastedBitsPerSample);
|
||||
decodedSample = side + right;
|
||||
} else {
|
||||
decodedSample = pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample;
|
||||
decodedSample = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample);
|
||||
}
|
||||
} break;
|
||||
|
||||
|
@ -6783,14 +6805,14 @@ drflac_uint64 drflac__read_s32__misaligned(drflac* pFlac, drflac_uint64 samplesT
|
|||
int mid;
|
||||
int side;
|
||||
if (channelIndex == 0) {
|
||||
mid = pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample;
|
||||
side = pFlac->currentFrame.subframes[channelIndex + 1].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 1].wastedBitsPerSample;
|
||||
mid = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample);
|
||||
side = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 1].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 1].wastedBitsPerSample);
|
||||
|
||||
mid = (((unsigned int)mid) << 1) | (side & 0x01);
|
||||
decodedSample = (mid + side) >> 1;
|
||||
} else {
|
||||
mid = pFlac->currentFrame.subframes[channelIndex - 1].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex - 1].wastedBitsPerSample;
|
||||
side = pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample;
|
||||
mid = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex - 1].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex - 1].wastedBitsPerSample);
|
||||
side = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample);
|
||||
|
||||
mid = (((unsigned int)mid) << 1) | (side & 0x01);
|
||||
decodedSample = (mid - side) >> 1;
|
||||
|
@ -6800,11 +6822,11 @@ drflac_uint64 drflac__read_s32__misaligned(drflac* pFlac, drflac_uint64 samplesT
|
|||
case DRFLAC_CHANNEL_ASSIGNMENT_INDEPENDENT:
|
||||
default:
|
||||
{
|
||||
decodedSample = pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample;
|
||||
decodedSample = (int)((drflac_uint32)pFlac->currentFrame.subframes[channelIndex + 0].pDecodedSamples[nextSampleInFrame] << pFlac->currentFrame.subframes[channelIndex + 0].wastedBitsPerSample);
|
||||
} break;
|
||||
}
|
||||
|
||||
decodedSample <<= (32 - pFlac->bitsPerSample);
|
||||
decodedSample = (int)((drflac_uint32)decodedSample << (32 - pFlac->bitsPerSample));
|
||||
|
||||
if (bufferOut) {
|
||||
*bufferOut++ = decodedSample;
|
||||
|
@ -6876,8 +6898,8 @@ drflac_uint64 drflac_read_s32(drflac* pFlac, drflac_uint64 samplesToRead, drflac
|
|||
const drflac_int32* pDecodedSamples1 = pFlac->currentFrame.subframes[1].pDecodedSamples + firstAlignedSampleInFrame;
|
||||
|
||||
for (i = 0; i < alignedSampleCountPerChannel; ++i) {
|
||||
int left = pDecodedSamples0[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[0].wastedBitsPerSample);
|
||||
int side = pDecodedSamples1[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[1].wastedBitsPerSample);
|
||||
int left = (int)((drflac_uint32)pDecodedSamples0[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[0].wastedBitsPerSample));
|
||||
int side = (int)((drflac_uint32)pDecodedSamples1[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[1].wastedBitsPerSample));
|
||||
int right = left - side;
|
||||
|
||||
bufferOut[i*2+0] = left;
|
||||
|
@ -6892,8 +6914,8 @@ drflac_uint64 drflac_read_s32(drflac* pFlac, drflac_uint64 samplesToRead, drflac
|
|||
const drflac_int32* pDecodedSamples1 = pFlac->currentFrame.subframes[1].pDecodedSamples + firstAlignedSampleInFrame;
|
||||
|
||||
for (i = 0; i < alignedSampleCountPerChannel; ++i) {
|
||||
int side = pDecodedSamples0[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[0].wastedBitsPerSample);
|
||||
int right = pDecodedSamples1[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[1].wastedBitsPerSample);
|
||||
int side = (int)((drflac_uint32)pDecodedSamples0[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[0].wastedBitsPerSample));
|
||||
int right = (int)((drflac_uint32)pDecodedSamples1[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[1].wastedBitsPerSample));
|
||||
int left = right + side;
|
||||
|
||||
bufferOut[i*2+0] = left;
|
||||
|
@ -6908,13 +6930,13 @@ drflac_uint64 drflac_read_s32(drflac* pFlac, drflac_uint64 samplesToRead, drflac
|
|||
const drflac_int32* pDecodedSamples1 = pFlac->currentFrame.subframes[1].pDecodedSamples + firstAlignedSampleInFrame;
|
||||
|
||||
for (i = 0; i < alignedSampleCountPerChannel; ++i) {
|
||||
int mid = pDecodedSamples0[i] << pFlac->currentFrame.subframes[0].wastedBitsPerSample;
|
||||
int side = pDecodedSamples1[i] << pFlac->currentFrame.subframes[1].wastedBitsPerSample;
|
||||
int mid = (int)((drflac_uint32)pDecodedSamples0[i] << pFlac->currentFrame.subframes[0].wastedBitsPerSample);
|
||||
int side = (int)((drflac_uint32)pDecodedSamples1[i] << pFlac->currentFrame.subframes[1].wastedBitsPerSample);
|
||||
|
||||
mid = (((drflac_uint32)mid) << 1) | (side & 0x01);
|
||||
|
||||
bufferOut[i*2+0] = ((mid + side) >> 1) << (unusedBitsPerSample);
|
||||
bufferOut[i*2+1] = ((mid - side) >> 1) << (unusedBitsPerSample);
|
||||
bufferOut[i*2+0] = (drflac_int32)((drflac_uint32)((mid + side) >> 1) << (unusedBitsPerSample));
|
||||
bufferOut[i*2+1] = (drflac_int32)((drflac_uint32)((mid - side) >> 1) << (unusedBitsPerSample));
|
||||
}
|
||||
} break;
|
||||
|
||||
|
@ -6929,8 +6951,8 @@ drflac_uint64 drflac_read_s32(drflac* pFlac, drflac_uint64 samplesToRead, drflac
|
|||
const drflac_int32* pDecodedSamples1 = pFlac->currentFrame.subframes[1].pDecodedSamples + firstAlignedSampleInFrame;
|
||||
|
||||
for (i = 0; i < alignedSampleCountPerChannel; ++i) {
|
||||
bufferOut[i*2+0] = pDecodedSamples0[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[0].wastedBitsPerSample);
|
||||
bufferOut[i*2+1] = pDecodedSamples1[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[1].wastedBitsPerSample);
|
||||
bufferOut[i*2+0] = (drflac_int32)((drflac_uint32)pDecodedSamples0[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[0].wastedBitsPerSample));
|
||||
bufferOut[i*2+1] = (drflac_int32)((drflac_uint32)pDecodedSamples1[i] << (unusedBitsPerSample + pFlac->currentFrame.subframes[1].wastedBitsPerSample));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -6940,7 +6962,7 @@ drflac_uint64 drflac_read_s32(drflac* pFlac, drflac_uint64 samplesToRead, drflac
|
|||
for (i = 0; i < alignedSampleCountPerChannel; ++i) {
|
||||
unsigned int j;
|
||||
for (j = 0; j < channelCount; ++j) {
|
||||
bufferOut[(i*channelCount)+j] = (pFlac->currentFrame.subframes[j].pDecodedSamples[firstAlignedSampleInFrame + i]) << (unusedBitsPerSample + pFlac->currentFrame.subframes[j].wastedBitsPerSample);
|
||||
bufferOut[(i*channelCount)+j] = (drflac_int32)((drflac_uint32)(pFlac->currentFrame.subframes[j].pDecodedSamples[firstAlignedSampleInFrame + i]) << (unusedBitsPerSample + pFlac->currentFrame.subframes[j].wastedBitsPerSample));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8649,6 +8671,15 @@ drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterator* pIter,
|
|||
/*
|
||||
REVISION HISTORY
|
||||
================
|
||||
v0.11.10 - 2019-06-26
|
||||
- Fix a compiler error.
|
||||
|
||||
v0.11.9 - 2019-06-16
|
||||
- Silence some ThreadSanitizer warnings.
|
||||
|
||||
v0.11.8 - 2019-05-21
|
||||
- Fix warnings.
|
||||
|
||||
v0.11.7 - 2019-05-06
|
||||
- C89 fixes.
|
||||
|
||||
|
|
114
src/external/dr_mp3.h
vendored
114
src/external/dr_mp3.h
vendored
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
MP3 audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file.
|
||||
dr_mp3 - v0.4.4 - 2019-05-06
|
||||
dr_mp3 - v0.4.7 - 2019-07-28
|
||||
|
||||
David Reid - mackron@gmail.com
|
||||
|
||||
|
@ -1143,41 +1143,72 @@ static void drmp3_L3_huffman(float *dst, drmp3_bs *bs, const drmp3_L3_gr_info *g
|
|||
int sfb_cnt = gr_info->region_count[ireg++];
|
||||
const drmp3_int16 *codebook = tabs + tabindex[tab_num];
|
||||
int linbits = g_linbits[tab_num];
|
||||
do
|
||||
if (linbits)
|
||||
{
|
||||
np = *sfb++ / 2;
|
||||
pairs_to_decode = DRMP3_MIN(big_val_cnt, np);
|
||||
one = *scf++;
|
||||
do
|
||||
{
|
||||
int j, w = 5;
|
||||
int leaf = codebook[DRMP3_PEEK_BITS(w)];
|
||||
while (leaf < 0)
|
||||
np = *sfb++ / 2;
|
||||
pairs_to_decode = DRMP3_MIN(big_val_cnt, np);
|
||||
one = *scf++;
|
||||
do
|
||||
{
|
||||
DRMP3_FLUSH_BITS(w);
|
||||
w = leaf & 7;
|
||||
leaf = codebook[DRMP3_PEEK_BITS(w) - (leaf >> 3)];
|
||||
}
|
||||
DRMP3_FLUSH_BITS(leaf >> 8);
|
||||
|
||||
for (j = 0; j < 2; j++, dst++, leaf >>= 4)
|
||||
{
|
||||
int lsb = leaf & 0x0F;
|
||||
if (lsb == 15 && linbits)
|
||||
int j, w = 5;
|
||||
int leaf = codebook[DRMP3_PEEK_BITS(w)];
|
||||
while (leaf < 0)
|
||||
{
|
||||
lsb += DRMP3_PEEK_BITS(linbits);
|
||||
DRMP3_FLUSH_BITS(linbits);
|
||||
DRMP3_CHECK_BITS;
|
||||
*dst = one*drmp3_L3_pow_43(lsb)*((drmp3_int32)bs_cache < 0 ? -1: 1);
|
||||
} else
|
||||
{
|
||||
*dst = g_drmp3_pow43[16 + lsb - 16*(bs_cache >> 31)]*one;
|
||||
DRMP3_FLUSH_BITS(w);
|
||||
w = leaf & 7;
|
||||
leaf = codebook[DRMP3_PEEK_BITS(w) - (leaf >> 3)];
|
||||
}
|
||||
DRMP3_FLUSH_BITS(lsb ? 1 : 0);
|
||||
}
|
||||
DRMP3_CHECK_BITS;
|
||||
} while (--pairs_to_decode);
|
||||
} while ((big_val_cnt -= np) > 0 && --sfb_cnt >= 0);
|
||||
DRMP3_FLUSH_BITS(leaf >> 8);
|
||||
|
||||
for (j = 0; j < 2; j++, dst++, leaf >>= 4)
|
||||
{
|
||||
int lsb = leaf & 0x0F;
|
||||
if (lsb == 15)
|
||||
{
|
||||
lsb += DRMP3_PEEK_BITS(linbits);
|
||||
DRMP3_FLUSH_BITS(linbits);
|
||||
DRMP3_CHECK_BITS;
|
||||
*dst = one*drmp3_L3_pow_43(lsb)*((drmp3_int32)bs_cache < 0 ? -1: 1);
|
||||
} else
|
||||
{
|
||||
*dst = g_drmp3_pow43[16 + lsb - 16*(bs_cache >> 31)]*one;
|
||||
}
|
||||
DRMP3_FLUSH_BITS(lsb ? 1 : 0);
|
||||
}
|
||||
DRMP3_CHECK_BITS;
|
||||
} while (--pairs_to_decode);
|
||||
} while ((big_val_cnt -= np) > 0 && --sfb_cnt >= 0);
|
||||
} else
|
||||
{
|
||||
do
|
||||
{
|
||||
np = *sfb++ / 2;
|
||||
pairs_to_decode = DRMP3_MIN(big_val_cnt, np);
|
||||
one = *scf++;
|
||||
do
|
||||
{
|
||||
int j, w = 5;
|
||||
int leaf = codebook[DRMP3_PEEK_BITS(w)];
|
||||
while (leaf < 0)
|
||||
{
|
||||
DRMP3_FLUSH_BITS(w);
|
||||
w = leaf & 7;
|
||||
leaf = codebook[DRMP3_PEEK_BITS(w) - (leaf >> 3)];
|
||||
}
|
||||
DRMP3_FLUSH_BITS(leaf >> 8);
|
||||
|
||||
for (j = 0; j < 2; j++, dst++, leaf >>= 4)
|
||||
{
|
||||
int lsb = leaf & 0x0F;
|
||||
*dst = g_drmp3_pow43[16 + lsb - 16*(bs_cache >> 31)]*one;
|
||||
DRMP3_FLUSH_BITS(lsb ? 1 : 0);
|
||||
}
|
||||
DRMP3_CHECK_BITS;
|
||||
} while (--pairs_to_decode);
|
||||
} while ((big_val_cnt -= np) > 0 && --sfb_cnt >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
for (np = 1 - big_val_cnt;; dst += 4)
|
||||
|
@ -2133,14 +2164,14 @@ void drmp3dec_f32_to_s16(const float *in, drmp3_int16 *out, int num_samples)
|
|||
int aligned_count = num_samples & ~7;
|
||||
for(; i < aligned_count; i+=8)
|
||||
{
|
||||
static const drmp3_f4 g_scale = { 32768.0f, 32768.0f, 32768.0f, 32768.0f };
|
||||
drmp3_f4 a = DRMP3_VMUL(DRMP3_VLD(&in[i ]), g_scale);
|
||||
drmp3_f4 b = DRMP3_VMUL(DRMP3_VLD(&in[i+4]), g_scale);
|
||||
drmp3_f4 scale = DRMP3_VSET(32768.0f);
|
||||
drmp3_f4 a = DRMP3_VMUL(DRMP3_VLD(&in[i ]), scale);
|
||||
drmp3_f4 b = DRMP3_VMUL(DRMP3_VLD(&in[i+4]), scale);
|
||||
#if DRMP3_HAVE_SSE
|
||||
static const drmp3_f4 g_max = { 32767.0f, 32767.0f, 32767.0f, 32767.0f };
|
||||
static const drmp3_f4 g_min = { -32768.0f, -32768.0f, -32768.0f, -32768.0f };
|
||||
__m128i pcm8 = _mm_packs_epi32(_mm_cvtps_epi32(_mm_max_ps(_mm_min_ps(a, g_max), g_min)),
|
||||
_mm_cvtps_epi32(_mm_max_ps(_mm_min_ps(b, g_max), g_min)));
|
||||
drmp3_f4 s16max = DRMP3_VSET( 32767.0f);
|
||||
drmp3_f4 s16min = DRMP3_VSET(-32768.0f);
|
||||
__m128i pcm8 = _mm_packs_epi32(_mm_cvtps_epi32(_mm_max_ps(_mm_min_ps(a, s16max), s16min)),
|
||||
_mm_cvtps_epi32(_mm_max_ps(_mm_min_ps(b, s16max), s16min)));
|
||||
out[i ] = (drmp3_int16)_mm_extract_epi16(pcm8, 0);
|
||||
out[i+1] = (drmp3_int16)_mm_extract_epi16(pcm8, 1);
|
||||
out[i+2] = (drmp3_int16)_mm_extract_epi16(pcm8, 2);
|
||||
|
@ -3779,6 +3810,15 @@ DIFFERENCES BETWEEN minimp3 AND dr_mp3
|
|||
/*
|
||||
REVISION HISTORY
|
||||
================
|
||||
v0.4.7 - 2019-07-28
|
||||
- Fix a compiler error.
|
||||
|
||||
v0.4.6 - 2019-06-14
|
||||
- Fix a compiler error.
|
||||
|
||||
v0.4.5 - 2019-06-06
|
||||
- Bring up to date with minimp3.
|
||||
|
||||
v0.4.4 - 2019-05-06
|
||||
- Fixes to the VC6 build.
|
||||
|
||||
|
|
17
src/external/dr_wav.h
vendored
17
src/external/dr_wav.h
vendored
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
WAV audio loader and writer. Choice of public domain or MIT-0. See license statements at the end of this file.
|
||||
dr_wav - v0.9.1 - 2019-05-05
|
||||
dr_wav - v0.9.2 - 2019-05-21
|
||||
|
||||
David Reid - mackron@gmail.com
|
||||
*/
|
||||
|
@ -2040,7 +2040,7 @@ drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc
|
|||
|
||||
drwav_uint32 drwav_riff_chunk_size_riff(drwav_uint64 dataChunkSize)
|
||||
{
|
||||
if (dataChunkSize <= (0xFFFFFFFF - 36)) {
|
||||
if (dataChunkSize <= (0xFFFFFFFFUL - 36)) {
|
||||
return 36 + (drwav_uint32)dataChunkSize;
|
||||
} else {
|
||||
return 0xFFFFFFFF;
|
||||
|
@ -2049,10 +2049,10 @@ drwav_uint32 drwav_riff_chunk_size_riff(drwav_uint64 dataChunkSize)
|
|||
|
||||
drwav_uint32 drwav_data_chunk_size_riff(drwav_uint64 dataChunkSize)
|
||||
{
|
||||
if (dataChunkSize <= 0xFFFFFFFF) {
|
||||
if (dataChunkSize <= 0xFFFFFFFFUL) {
|
||||
return (drwav_uint32)dataChunkSize;
|
||||
} else {
|
||||
return 0xFFFFFFFF;
|
||||
return 0xFFFFFFFFUL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2121,7 +2121,7 @@ drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pF
|
|||
so for the sake of simplicity I'm not doing any validation for that.
|
||||
*/
|
||||
if (pFormat->container == drwav_container_riff) {
|
||||
if (initialDataChunkSize > (0xFFFFFFFF - 36)) {
|
||||
if (initialDataChunkSize > (0xFFFFFFFFUL - 36)) {
|
||||
return DRWAV_FALSE; /* Not enough room to store every sample. */
|
||||
}
|
||||
}
|
||||
|
@ -3195,8 +3195,8 @@ void drwav_u8_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCou
|
|||
size_t i;
|
||||
for (i = 0; i < sampleCount; ++i) {
|
||||
int x = pIn[i];
|
||||
r = x - 128;
|
||||
r = r << 8;
|
||||
r = x << 8;
|
||||
r = r - 32768;
|
||||
pOut[i] = (short)r;
|
||||
}
|
||||
}
|
||||
|
@ -4675,6 +4675,9 @@ void drwav_free(void* pDataReturnedByOpenAndRead)
|
|||
/*
|
||||
REVISION HISTORY
|
||||
================
|
||||
v0.9.2 - 2019-05-21
|
||||
- Fix warnings.
|
||||
|
||||
v0.9.1 - 2019-05-05
|
||||
- Add support for C89.
|
||||
- Change license to choice of public domain or MIT-0.
|
||||
|
|
1219
src/external/miniaudio.h
vendored
1219
src/external/miniaudio.h
vendored
File diff suppressed because it is too large
Load diff
5
src/external/stb_image_write.h
vendored
5
src/external/stb_image_write.h
vendored
|
@ -10,11 +10,6 @@
|
|||
|
||||
Will probably not work correctly with strict-aliasing optimizations.
|
||||
|
||||
If using a modern Microsoft Compiler, non-safe versions of CRT calls may cause
|
||||
compilation warnings or even errors. To avoid this, also before #including,
|
||||
|
||||
#define STBI_MSC_SECURE_CRT
|
||||
|
||||
ABOUT:
|
||||
|
||||
This header file is a library for writing images to C stdio or a callback.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue