Commit 8d15aa27 authored by David Reid's avatar David Reid

Update external libraries and fix C++ on older versions of GCC.

parent 88a694af
// FLAC audio decoder. Public domain. See "unlicense" statement at the end of this file. // FLAC audio decoder. Public domain. See "unlicense" statement at the end of this file.
// dr_flac - v0.9.8 - 2018-07-24 // dr_flac - v0.9.9 - 2018-08-05
// //
// David Reid - mackron@gmail.com // David Reid - mackron@gmail.com
...@@ -162,7 +162,7 @@ extern "C" { ...@@ -162,7 +162,7 @@ extern "C" {
#endif #endif
#if defined(__GNUC__) #if defined(__GNUC__)
#if defined(__x86_64__) || defined(__ppc64__) #if defined(__x86_64__) || defined(__ppc64__) || defined(__aarch64__)
#define DRFLAC_64BIT #define DRFLAC_64BIT
#endif #endif
#endif #endif
...@@ -5504,15 +5504,17 @@ drflac_bool32 drflac_seek_to_sample(drflac* pFlac, drflac_uint64 sampleIndex) ...@@ -5504,15 +5504,17 @@ drflac_bool32 drflac_seek_to_sample(drflac* pFlac, drflac_uint64 sampleIndex)
//// High Level APIs //// //// High Level APIs ////
// I couldn't figure out where SIZE_MAX was defined for VC6. If anybody knows, let me know. #if defined(SIZE_MAX)
#if defined(_MSC_VER) && _MSC_VER <= 1200 #define DRFLAC_SIZE_MAX SIZE_MAX
#ifdef DRFLAC_64BIT
#define SIZE_MAX ((drflac_uint64)0xFFFFFFFFFFFFFFFF)
#else #else
#define SIZE_MAX 0xFFFFFFFF #if defined(DRFLAC_64BIT)
#endif #define DRFLAC_SIZE_MAX ((drflac_uint64)0xFFFFFFFFFFFFFFFF)
#else
#define DRFLAC_SIZE_MAX 0xFFFFFFFF
#endif
#endif #endif
// Using a macro as the definition of the drflac__full_decode_and_close_*() API family. Sue me. // Using a macro as the definition of the drflac__full_decode_and_close_*() API family. Sue me.
#define DRFLAC_DEFINE_FULL_DECODE_AND_CLOSE(extension, type) \ #define DRFLAC_DEFINE_FULL_DECODE_AND_CLOSE(extension, type) \
static type* drflac__full_decode_and_close_ ## extension (drflac* pFlac, unsigned int* channelsOut, unsigned int* sampleRateOut, drflac_uint64* totalSampleCountOut)\ static type* drflac__full_decode_and_close_ ## extension (drflac* pFlac, unsigned int* channelsOut, unsigned int* sampleRateOut, drflac_uint64* totalSampleCountOut)\
...@@ -5553,7 +5555,7 @@ static type* drflac__full_decode_and_close_ ## extension (drflac* pFlac, unsigne ...@@ -5553,7 +5555,7 @@ static type* drflac__full_decode_and_close_ ## extension (drflac* pFlac, unsigne
drflac_zero_memory(pSampleData + totalSampleCount, (size_t)(sampleDataBufferSize - totalSampleCount*sizeof(type))); \ drflac_zero_memory(pSampleData + totalSampleCount, (size_t)(sampleDataBufferSize - totalSampleCount*sizeof(type))); \
} else { \ } else { \
drflac_uint64 dataSize = totalSampleCount * sizeof(type); \ drflac_uint64 dataSize = totalSampleCount * sizeof(type); \
if (dataSize > SIZE_MAX) { \ if (dataSize > DRFLAC_SIZE_MAX) { \
goto on_error; /* The decoded data is too big. */ \ goto on_error; /* The decoded data is too big. */ \
} \ } \
\ \
...@@ -5754,6 +5756,9 @@ const char* drflac_next_vorbis_comment(drflac_vorbis_comment_iterator* pIter, dr ...@@ -5754,6 +5756,9 @@ const char* drflac_next_vorbis_comment(drflac_vorbis_comment_iterator* pIter, dr
// REVISION HISTORY // REVISION HISTORY
// //
// v0.9.9 - 2018-08-05
// - Fix C++ build on older versions of GCC.
//
// v0.9.8 - 2018-07-24 // v0.9.8 - 2018-07-24
// - Fix compilation errors. // - Fix compilation errors.
// //
......
// MP3 audio decoder. Public domain. See "unlicense" statement at the end of this file. // MP3 audio decoder. Public domain. See "unlicense" statement at the end of this file.
// dr_mp3 - v0.2.8 - 2018-08-02 // dr_mp3 - v0.2.9 - 2018-08-05
// //
// David Reid - mackron@gmail.com // David Reid - mackron@gmail.com
// //
...@@ -1915,6 +1915,11 @@ int drmp3dec_decode_frame(drmp3dec *dec, const unsigned char *mp3, int mp3_bytes ...@@ -1915,6 +1915,11 @@ int drmp3dec_decode_frame(drmp3dec *dec, const unsigned char *mp3, int mp3_bytes
info->layer = 4 - DRMP3_HDR_GET_LAYER(hdr); info->layer = 4 - DRMP3_HDR_GET_LAYER(hdr);
info->bitrate_kbps = drmp3_hdr_bitrate_kbps(hdr); info->bitrate_kbps = drmp3_hdr_bitrate_kbps(hdr);
if (!pcm)
{
return drmp3_hdr_frame_samples(hdr);
}
drmp3_bs_init(bs_frame, hdr + DRMP3_HDR_SIZE, frame_size - DRMP3_HDR_SIZE); drmp3_bs_init(bs_frame, hdr + DRMP3_HDR_SIZE, frame_size - DRMP3_HDR_SIZE);
if (DRMP3_HDR_IS_CRC(hdr)) if (DRMP3_HDR_IS_CRC(hdr))
{ {
...@@ -1979,6 +1984,16 @@ int drmp3dec_decode_frame(drmp3dec *dec, const unsigned char *mp3, int mp3_bytes ...@@ -1979,6 +1984,16 @@ int drmp3dec_decode_frame(drmp3dec *dec, const unsigned char *mp3, int mp3_bytes
// //
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#if defined(SIZE_MAX)
#define DRMP3_SIZE_MAX SIZE_MAX
#else
#if defined(_WIN64) || defined(__ppc64__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_ARM64) || defined(__aarch64__)
#define DRMP3_SIZE_MAX ((drmp3_uint64)0xFFFFFFFFFFFFFFFF)
#else
#define DRMP3_SIZE_MAX 0xFFFFFFFF
#endif
#endif
// Options. // Options.
#ifndef DR_MP3_DEFAULT_CHANNELS #ifndef DR_MP3_DEFAULT_CHANNELS
#define DR_MP3_DEFAULT_CHANNELS 2 #define DR_MP3_DEFAULT_CHANNELS 2
...@@ -2656,7 +2671,7 @@ float* drmp3__full_decode_and_close_f32(drmp3* pMP3, drmp3_config* pConfig, drmp ...@@ -2656,7 +2671,7 @@ float* drmp3__full_decode_and_close_f32(drmp3* pMP3, drmp3_config* pConfig, drmp
} }
drmp3_uint64 newFramesBufferSize = framesCapacity*pMP3->channels*sizeof(float); drmp3_uint64 newFramesBufferSize = framesCapacity*pMP3->channels*sizeof(float);
if (newFramesBufferSize > SIZE_MAX) { if (newFramesBufferSize > DRMP3_SIZE_MAX) {
break; break;
} }
...@@ -2746,6 +2761,10 @@ void drmp3_free(void* p) ...@@ -2746,6 +2761,10 @@ void drmp3_free(void* p)
// REVISION HISTORY // REVISION HISTORY
// =============== // ===============
// //
// v0.2.9 - 2018-08-05
// - Fix C++ build on older versions of GCC.
// - Bring up to date with minimp3.
//
// v0.2.8 - 2018-08-02 // v0.2.8 - 2018-08-02
// - Fix compilation errors with older versions of GCC. // - Fix compilation errors with older versions of GCC.
// //
......
// WAV audio loader and writer. Public domain. See "unlicense" statement at the end of this file. // WAV audio loader and writer. Public domain. See "unlicense" statement at the end of this file.
// dr_wav - v0.8.2 - 2018-08-02 // dr_wav - v0.8.3 - 2018-08-05
// //
// David Reid - mackron@gmail.com // David Reid - mackron@gmail.com
...@@ -740,12 +740,13 @@ void drwav_free(void* pDataReturnedByOpenAndRead); ...@@ -740,12 +740,13 @@ void drwav_free(void* pDataReturnedByOpenAndRead);
#endif #endif
#endif #endif
// I couldn't figure out where SIZE_MAX was defined for VC6. If anybody knows, let me know. #if defined(SIZE_MAX)
#if defined(_MSC_VER) && _MSC_VER <= 1200 #define DRWAV_SIZE_MAX SIZE_MAX
#if defined(_WIN64) #else
#define SIZE_MAX ((drwav_uint64)0xFFFFFFFFFFFFFFFF) #if defined(_WIN64) || defined(__ppc64__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_ARM64) || defined(__aarch64__)
#define DRWAV_SIZE_MAX ((drwav_uint64)0xFFFFFFFFFFFFFFFF)
#else #else
#define SIZE_MAX 0xFFFFFFFF #define DRWAV_SIZE_MAX 0xFFFFFFFF
#endif #endif
#endif #endif
...@@ -1890,8 +1891,8 @@ drwav_uint64 drwav_read(drwav* pWav, drwav_uint64 samplesToRead, void* pBufferOu ...@@ -1890,8 +1891,8 @@ drwav_uint64 drwav_read(drwav* pWav, drwav_uint64 samplesToRead, void* pBufferOu
} }
// Don't try to read more samples than can potentially fit in the output buffer. // Don't try to read more samples than can potentially fit in the output buffer.
if (samplesToRead * pWav->bytesPerSample > SIZE_MAX) { if (samplesToRead * pWav->bytesPerSample > DRWAV_SIZE_MAX) {
samplesToRead = SIZE_MAX / pWav->bytesPerSample; samplesToRead = DRWAV_SIZE_MAX / pWav->bytesPerSample;
} }
size_t bytesRead = drwav_read_raw(pWav, (size_t)(samplesToRead * pWav->bytesPerSample), pBufferOut); size_t bytesRead = drwav_read_raw(pWav, (size_t)(samplesToRead * pWav->bytesPerSample), pBufferOut);
...@@ -2031,7 +2032,7 @@ drwav_uint64 drwav_write(drwav* pWav, drwav_uint64 samplesToWrite, const void* p ...@@ -2031,7 +2032,7 @@ drwav_uint64 drwav_write(drwav* pWav, drwav_uint64 samplesToWrite, const void* p
} }
drwav_uint64 bytesToWrite = ((samplesToWrite * pWav->bitsPerSample) / 8); drwav_uint64 bytesToWrite = ((samplesToWrite * pWav->bitsPerSample) / 8);
if (bytesToWrite > SIZE_MAX) { if (bytesToWrite > DRWAV_SIZE_MAX) {
return 0; return 0;
} }
...@@ -2039,8 +2040,8 @@ drwav_uint64 drwav_write(drwav* pWav, drwav_uint64 samplesToWrite, const void* p ...@@ -2039,8 +2040,8 @@ drwav_uint64 drwav_write(drwav* pWav, drwav_uint64 samplesToWrite, const void* p
const drwav_uint8* pRunningData = (const drwav_uint8*)pData; const drwav_uint8* pRunningData = (const drwav_uint8*)pData;
while (bytesToWrite > 0) { while (bytesToWrite > 0) {
drwav_uint64 bytesToWriteThisIteration = bytesToWrite; drwav_uint64 bytesToWriteThisIteration = bytesToWrite;
if (bytesToWriteThisIteration > SIZE_MAX) { if (bytesToWriteThisIteration > DRWAV_SIZE_MAX) {
bytesToWriteThisIteration = SIZE_MAX; bytesToWriteThisIteration = DRWAV_SIZE_MAX;
} }
size_t bytesJustWritten = drwav_write_raw(pWav, (size_t)bytesToWriteThisIteration, pRunningData); size_t bytesJustWritten = drwav_write_raw(pWav, (size_t)bytesToWriteThisIteration, pRunningData);
...@@ -2567,8 +2568,8 @@ drwav_uint64 drwav_read_s16(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16 ...@@ -2567,8 +2568,8 @@ drwav_uint64 drwav_read_s16(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16
} }
// Don't try to read more samples than can potentially fit in the output buffer. // Don't try to read more samples than can potentially fit in the output buffer.
if (samplesToRead * sizeof(drwav_int16) > SIZE_MAX) { if (samplesToRead * sizeof(drwav_int16) > DRWAV_SIZE_MAX) {
samplesToRead = SIZE_MAX / sizeof(drwav_int16); samplesToRead = DRWAV_SIZE_MAX / sizeof(drwav_int16);
} }
if (pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM) { if (pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM) {
...@@ -2889,8 +2890,8 @@ drwav_uint64 drwav_read_f32(drwav* pWav, drwav_uint64 samplesToRead, float* pBuf ...@@ -2889,8 +2890,8 @@ drwav_uint64 drwav_read_f32(drwav* pWav, drwav_uint64 samplesToRead, float* pBuf
} }
// Don't try to read more samples than can potentially fit in the output buffer. // Don't try to read more samples than can potentially fit in the output buffer.
if (samplesToRead * sizeof(float) > SIZE_MAX) { if (samplesToRead * sizeof(float) > DRWAV_SIZE_MAX) {
samplesToRead = SIZE_MAX / sizeof(float); samplesToRead = DRWAV_SIZE_MAX / sizeof(float);
} }
if (pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM) { if (pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM) {
...@@ -3230,8 +3231,8 @@ drwav_uint64 drwav_read_s32(drwav* pWav, drwav_uint64 samplesToRead, drwav_int32 ...@@ -3230,8 +3231,8 @@ drwav_uint64 drwav_read_s32(drwav* pWav, drwav_uint64 samplesToRead, drwav_int32
} }
// Don't try to read more samples than can potentially fit in the output buffer. // Don't try to read more samples than can potentially fit in the output buffer.
if (samplesToRead * sizeof(drwav_int32) > SIZE_MAX) { if (samplesToRead * sizeof(drwav_int32) > DRWAV_SIZE_MAX) {
samplesToRead = SIZE_MAX / sizeof(drwav_int32); samplesToRead = DRWAV_SIZE_MAX / sizeof(drwav_int32);
} }
...@@ -3351,7 +3352,7 @@ drwav_int16* drwav__read_and_close_s16(drwav* pWav, unsigned int* channels, unsi ...@@ -3351,7 +3352,7 @@ drwav_int16* drwav__read_and_close_s16(drwav* pWav, unsigned int* channels, unsi
drwav_assert(pWav != NULL); drwav_assert(pWav != NULL);
drwav_uint64 sampleDataSize = pWav->totalSampleCount * sizeof(drwav_int16); drwav_uint64 sampleDataSize = pWav->totalSampleCount * sizeof(drwav_int16);
if (sampleDataSize > SIZE_MAX) { if (sampleDataSize > DRWAV_SIZE_MAX) {
drwav_uninit(pWav); drwav_uninit(pWav);
return NULL; // File's too big. return NULL; // File's too big.
} }
...@@ -3382,7 +3383,7 @@ float* drwav__read_and_close_f32(drwav* pWav, unsigned int* channels, unsigned i ...@@ -3382,7 +3383,7 @@ float* drwav__read_and_close_f32(drwav* pWav, unsigned int* channels, unsigned i
drwav_assert(pWav != NULL); drwav_assert(pWav != NULL);
drwav_uint64 sampleDataSize = pWav->totalSampleCount * sizeof(float); drwav_uint64 sampleDataSize = pWav->totalSampleCount * sizeof(float);
if (sampleDataSize > SIZE_MAX) { if (sampleDataSize > DRWAV_SIZE_MAX) {
drwav_uninit(pWav); drwav_uninit(pWav);
return NULL; // File's too big. return NULL; // File's too big.
} }
...@@ -3413,7 +3414,7 @@ drwav_int32* drwav__read_and_close_s32(drwav* pWav, unsigned int* channels, unsi ...@@ -3413,7 +3414,7 @@ drwav_int32* drwav__read_and_close_s32(drwav* pWav, unsigned int* channels, unsi
drwav_assert(pWav != NULL); drwav_assert(pWav != NULL);
drwav_uint64 sampleDataSize = pWav->totalSampleCount * sizeof(drwav_int32); drwav_uint64 sampleDataSize = pWav->totalSampleCount * sizeof(drwav_int32);
if (sampleDataSize > SIZE_MAX) { if (sampleDataSize > DRWAV_SIZE_MAX) {
drwav_uninit(pWav); drwav_uninit(pWav);
return NULL; // File's too big. return NULL; // File's too big.
} }
...@@ -3580,6 +3581,9 @@ void drwav_free(void* pDataReturnedByOpenAndRead) ...@@ -3580,6 +3581,9 @@ void drwav_free(void* pDataReturnedByOpenAndRead)
// REVISION HISTORY // REVISION HISTORY
// //
// v0.8.3 - 2018-08-05
// - Fix C++ build on older versions of GCC.
//
// v0.8.2 - 2018-08-02 // v0.8.2 - 2018-08-02
// - Fix some big-endian bugs. // - Fix some big-endian bugs.
// //
......
...@@ -85,7 +85,7 @@ void* open_and_read_file_data(const char* filePath, size_t* pSizeOut) ...@@ -85,7 +85,7 @@ void* open_and_read_file_data(const char* filePath, size_t* pSizeOut)
mal_uint64 fileSize = ftell(pFile); mal_uint64 fileSize = ftell(pFile);
fseek(pFile, 0, SEEK_SET); fseek(pFile, 0, SEEK_SET);
if (fileSize > SIZE_MAX) { if (fileSize > MAL_SIZE_MAX) {
fclose(pFile); fclose(pFile);
return NULL; return NULL;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment