Commit 045fd9e7 authored by David Reid's avatar David Reid

Update dr_libs.

parent 361983f7
/* /*
FLAC audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file. FLAC audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file.
dr_flac - v0.12.25 - 2020-12-26 dr_flac - v0.12.26 - 2021-01-17
David Reid - mackron@gmail.com David Reid - mackron@gmail.com
...@@ -232,7 +232,7 @@ extern "C" { ...@@ -232,7 +232,7 @@ extern "C" {
#define DRFLAC_VERSION_MAJOR 0 #define DRFLAC_VERSION_MAJOR 0
#define DRFLAC_VERSION_MINOR 12 #define DRFLAC_VERSION_MINOR 12
#define DRFLAC_VERSION_REVISION 25 #define DRFLAC_VERSION_REVISION 26
#define DRFLAC_VERSION_STRING DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MAJOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MINOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_REVISION) #define DRFLAC_VERSION_STRING DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MAJOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MINOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_REVISION)
#include <stddef.h> /* For size_t. */ #include <stddef.h> /* For size_t. */
...@@ -1340,6 +1340,9 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat ...@@ -1340,6 +1340,9 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat
#ifndef _BSD_SOURCE #ifndef _BSD_SOURCE
#define _BSD_SOURCE #define _BSD_SOURCE
#endif #endif
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#ifndef __USE_BSD #ifndef __USE_BSD
#define __USE_BSD #define __USE_BSD
#endif #endif
...@@ -11802,6 +11805,9 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat ...@@ -11802,6 +11805,9 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat
/* /*
REVISION HISTORY REVISION HISTORY
================ ================
v0.12.26 - 2021-01-17
- Fix a compilation warning due to _BSD_SOURCE being deprecated.
v0.12.25 - 2020-12-26 v0.12.25 - 2020-12-26
- Update documentation. - Update documentation.
......
/* /*
WAV audio loader and writer. Choice of public domain or MIT-0. See license statements at the end of this file. WAV audio loader and writer. Choice of public domain or MIT-0. See license statements at the end of this file.
dr_wav - v0.12.16 - 2020-12-02 dr_wav - v0.12.17 - 2021-01-17
David Reid - mackron@gmail.com David Reid - mackron@gmail.com
...@@ -65,7 +65,7 @@ If you just want to quickly open and read the audio data in a single operation y ...@@ -65,7 +65,7 @@ If you just want to quickly open and read the audio data in a single operation y
... ...
drwav_free(pSampleData); drwav_free(pSampleData, NULL);
``` ```
The examples above use versions of the API that convert the audio data to a consistent format (32-bit signed PCM, in this case), but you can still output the The examples above use versions of the API that convert the audio data to a consistent format (32-bit signed PCM, in this case), but you can still output the
...@@ -144,7 +144,7 @@ extern "C" { ...@@ -144,7 +144,7 @@ extern "C" {
#define DRWAV_VERSION_MAJOR 0 #define DRWAV_VERSION_MAJOR 0
#define DRWAV_VERSION_MINOR 12 #define DRWAV_VERSION_MINOR 12
#define DRWAV_VERSION_REVISION 16 #define DRWAV_VERSION_REVISION 17
#define DRWAV_VERSION_STRING DRWAV_XSTRINGIFY(DRWAV_VERSION_MAJOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_MINOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_REVISION) #define DRWAV_VERSION_STRING DRWAV_XSTRINGIFY(DRWAV_VERSION_MAJOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_MINOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_REVISION)
#include <stddef.h> /* For size_t. */ #include <stddef.h> /* For size_t. */
...@@ -1105,28 +1105,6 @@ static const drwav_uint8 drwavGUID_W64_FACT[16] = {0x66,0x61,0x63,0x74, 0xF3,0xA ...@@ -1105,28 +1105,6 @@ static const drwav_uint8 drwavGUID_W64_FACT[16] = {0x66,0x61,0x63,0x74, 0xF3,0xA
static const drwav_uint8 drwavGUID_W64_DATA[16] = {0x64,0x61,0x74,0x61, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 61746164-ACF3-11D3-8CD1-00C04F8EDB8A */ static const drwav_uint8 drwavGUID_W64_DATA[16] = {0x64,0x61,0x74,0x61, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 61746164-ACF3-11D3-8CD1-00C04F8EDB8A */
static const drwav_uint8 drwavGUID_W64_SMPL[16] = {0x73,0x6D,0x70,0x6C, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 6C706D73-ACF3-11D3-8CD1-00C04F8EDB8A */ static const drwav_uint8 drwavGUID_W64_SMPL[16] = {0x73,0x6D,0x70,0x6C, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 6C706D73-ACF3-11D3-8CD1-00C04F8EDB8A */
static DRWAV_INLINE drwav_bool32 drwav__guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16])
{
int i;
for (i = 0; i < 16; i += 1) {
if (a[i] != b[i]) {
return DRWAV_FALSE;
}
}
return DRWAV_TRUE;
}
static DRWAV_INLINE drwav_bool32 drwav__fourcc_equal(const drwav_uint8* a, const char* b)
{
return
a[0] == b[0] &&
a[1] == b[1] &&
a[2] == b[2] &&
a[3] == b[3];
}
static DRWAV_INLINE int drwav__is_little_endian(void) static DRWAV_INLINE int drwav__is_little_endian(void)
{ {
...@@ -1140,37 +1118,6 @@ static DRWAV_INLINE int drwav__is_little_endian(void) ...@@ -1140,37 +1118,6 @@ static DRWAV_INLINE int drwav__is_little_endian(void)
#endif #endif
} }
static DRWAV_INLINE drwav_uint16 drwav__bytes_to_u16(const drwav_uint8* data)
{
return (data[0] << 0) | (data[1] << 8);
}
static DRWAV_INLINE drwav_int16 drwav__bytes_to_s16(const drwav_uint8* data)
{
return (short)drwav__bytes_to_u16(data);
}
static DRWAV_INLINE drwav_uint32 drwav__bytes_to_u32(const drwav_uint8* data)
{
return (data[0] << 0) | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
}
static DRWAV_INLINE drwav_int32 drwav__bytes_to_s32(const drwav_uint8* data)
{
return (drwav_int32)drwav__bytes_to_u32(data);
}
static DRWAV_INLINE drwav_uint64 drwav__bytes_to_u64(const drwav_uint8* data)
{
return
((drwav_uint64)data[0] << 0) | ((drwav_uint64)data[1] << 8) | ((drwav_uint64)data[2] << 16) | ((drwav_uint64)data[3] << 24) |
((drwav_uint64)data[4] << 32) | ((drwav_uint64)data[5] << 40) | ((drwav_uint64)data[6] << 48) | ((drwav_uint64)data[7] << 56);
}
static DRWAV_INLINE drwav_int64 drwav__bytes_to_s64(const drwav_uint8* data)
{
return (drwav_int64)drwav__bytes_to_u64(data);
}
static DRWAV_INLINE void drwav__bytes_to_guid(const drwav_uint8* data, drwav_uint8* guid) static DRWAV_INLINE void drwav__bytes_to_guid(const drwav_uint8* data, drwav_uint8* guid)
{ {
...@@ -1422,26 +1369,26 @@ static DRWAV_INLINE void drwav__bswap_samples(void* pSamples, drwav_uint64 sampl ...@@ -1422,26 +1369,26 @@ static DRWAV_INLINE void drwav__bswap_samples(void* pSamples, drwav_uint64 sampl
} }
static void* drwav__malloc_default(size_t sz, void* pUserData) DRWAV_PRIVATE void* drwav__malloc_default(size_t sz, void* pUserData)
{ {
(void)pUserData; (void)pUserData;
return DRWAV_MALLOC(sz); return DRWAV_MALLOC(sz);
} }
static void* drwav__realloc_default(void* p, size_t sz, void* pUserData) DRWAV_PRIVATE void* drwav__realloc_default(void* p, size_t sz, void* pUserData)
{ {
(void)pUserData; (void)pUserData;
return DRWAV_REALLOC(p, sz); return DRWAV_REALLOC(p, sz);
} }
static void drwav__free_default(void* p, void* pUserData) DRWAV_PRIVATE void drwav__free_default(void* p, void* pUserData)
{ {
(void)pUserData; (void)pUserData;
DRWAV_FREE(p); DRWAV_FREE(p);
} }
static void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks == NULL) { if (pAllocationCallbacks == NULL) {
return NULL; return NULL;
...@@ -1459,7 +1406,7 @@ static void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_call ...@@ -1459,7 +1406,7 @@ static void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_call
return NULL; return NULL;
} }
static void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks == NULL) { if (pAllocationCallbacks == NULL) {
return NULL; return NULL;
...@@ -1489,7 +1436,7 @@ static void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld, ...@@ -1489,7 +1436,7 @@ static void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld,
return NULL; return NULL;
} }
static void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (p == NULL || pAllocationCallbacks == NULL) { if (p == NULL || pAllocationCallbacks == NULL) {
return; return;
...@@ -1501,7 +1448,7 @@ static void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks ...@@ -1501,7 +1448,7 @@ static void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks
} }
static drwav_allocation_callbacks drwav_copy_allocation_callbacks_or_defaults(const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_allocation_callbacks drwav_copy_allocation_callbacks_or_defaults(const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks != NULL) { if (pAllocationCallbacks != NULL) {
/* Copy. */ /* Copy. */
...@@ -1525,21 +1472,21 @@ static DRWAV_INLINE drwav_bool32 drwav__is_compressed_format_tag(drwav_uint16 fo ...@@ -1525,21 +1472,21 @@ static DRWAV_INLINE drwav_bool32 drwav__is_compressed_format_tag(drwav_uint16 fo
formatTag == DR_WAVE_FORMAT_DVI_ADPCM; formatTag == DR_WAVE_FORMAT_DVI_ADPCM;
} }
static unsigned int drwav__chunk_padding_size_riff(drwav_uint64 chunkSize) DRWAV_PRIVATE unsigned int drwav__chunk_padding_size_riff(drwav_uint64 chunkSize)
{ {
return (unsigned int)(chunkSize % 2); return (unsigned int)(chunkSize % 2);
} }
static unsigned int drwav__chunk_padding_size_w64(drwav_uint64 chunkSize) DRWAV_PRIVATE unsigned int drwav__chunk_padding_size_w64(drwav_uint64 chunkSize)
{ {
return (unsigned int)(chunkSize % 8); return (unsigned int)(chunkSize % 8);
} }
static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut); DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut);
static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut); DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut);
static drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount); DRWAV_PRIVATE drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount);
static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_chunk_header* pHeaderOut) DRWAV_PRIVATE drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_chunk_header* pHeaderOut)
{ {
if (container == drwav_container_riff || container == drwav_container_rf64) { if (container == drwav_container_riff || container == drwav_container_rf64) {
drwav_uint8 sizeInBytes[4]; drwav_uint8 sizeInBytes[4];
...@@ -1552,7 +1499,7 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser ...@@ -1552,7 +1499,7 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser
return DRWAV_INVALID_FILE; return DRWAV_INVALID_FILE;
} }
pHeaderOut->sizeInBytes = drwav__bytes_to_u32(sizeInBytes); pHeaderOut->sizeInBytes = drwav_bytes_to_u32(sizeInBytes);
pHeaderOut->paddingSize = drwav__chunk_padding_size_riff(pHeaderOut->sizeInBytes); pHeaderOut->paddingSize = drwav__chunk_padding_size_riff(pHeaderOut->sizeInBytes);
*pRunningBytesReadOut += 8; *pRunningBytesReadOut += 8;
} else { } else {
...@@ -1566,7 +1513,7 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser ...@@ -1566,7 +1513,7 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser
return DRWAV_INVALID_FILE; return DRWAV_INVALID_FILE;
} }
pHeaderOut->sizeInBytes = drwav__bytes_to_u64(sizeInBytes) - 24; /* <-- Subtract 24 because w64 includes the size of the header. */ pHeaderOut->sizeInBytes = drwav_bytes_to_u64(sizeInBytes) - 24; /* <-- Subtract 24 because w64 includes the size of the header. */
pHeaderOut->paddingSize = drwav__chunk_padding_size_w64(pHeaderOut->sizeInBytes); pHeaderOut->paddingSize = drwav__chunk_padding_size_w64(pHeaderOut->sizeInBytes);
*pRunningBytesReadOut += 24; *pRunningBytesReadOut += 24;
} }
...@@ -1574,7 +1521,7 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser ...@@ -1574,7 +1521,7 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser
return DRWAV_SUCCESS; return DRWAV_SUCCESS;
} }
static drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData) DRWAV_PRIVATE drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData)
{ {
drwav_uint64 bytesRemainingToSeek = offset; drwav_uint64 bytesRemainingToSeek = offset;
while (bytesRemainingToSeek > 0) { while (bytesRemainingToSeek > 0) {
...@@ -1594,7 +1541,7 @@ static drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 off ...@@ -1594,7 +1541,7 @@ static drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 off
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData) DRWAV_PRIVATE drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData)
{ {
if (offset <= 0x7FFFFFFF) { if (offset <= 0x7FFFFFFF) {
return onSeek(pUserData, (int)offset, drwav_seek_origin_start); return onSeek(pUserData, (int)offset, drwav_seek_origin_start);
...@@ -1622,7 +1569,7 @@ static drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64 ...@@ -1622,7 +1569,7 @@ static drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64
} }
static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_fmt* fmtOut) DRWAV_PRIVATE drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_fmt* fmtOut)
{ {
drwav_chunk_header header; drwav_chunk_header header;
drwav_uint8 fmt[16]; drwav_uint8 fmt[16];
...@@ -1633,7 +1580,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -1633,7 +1580,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
/* Skip non-fmt chunks. */ /* Skip non-fmt chunks. */
while (((container == drwav_container_riff || container == drwav_container_rf64) && !drwav__fourcc_equal(header.id.fourcc, "fmt ")) || (container == drwav_container_w64 && !drwav__guid_equal(header.id.guid, drwavGUID_W64_FMT))) { while (((container == drwav_container_riff || container == drwav_container_rf64) && !drwav_fourcc_equal(header.id.fourcc, "fmt ")) || (container == drwav_container_w64 && !drwav_guid_equal(header.id.guid, drwavGUID_W64_FMT))) {
if (!drwav__seek_forward(onSeek, header.sizeInBytes + header.paddingSize, pUserData)) { if (!drwav__seek_forward(onSeek, header.sizeInBytes + header.paddingSize, pUserData)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
...@@ -1648,11 +1595,11 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -1648,11 +1595,11 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
/* Validation. */ /* Validation. */
if (container == drwav_container_riff || container == drwav_container_rf64) { if (container == drwav_container_riff || container == drwav_container_rf64) {
if (!drwav__fourcc_equal(header.id.fourcc, "fmt ")) { if (!drwav_fourcc_equal(header.id.fourcc, "fmt ")) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} else { } else {
if (!drwav__guid_equal(header.id.guid, drwavGUID_W64_FMT)) { if (!drwav_guid_equal(header.id.guid, drwavGUID_W64_FMT)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} }
...@@ -1663,12 +1610,12 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -1663,12 +1610,12 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
} }
*pRunningBytesReadOut += sizeof(fmt); *pRunningBytesReadOut += sizeof(fmt);
fmtOut->formatTag = drwav__bytes_to_u16(fmt + 0); fmtOut->formatTag = drwav_bytes_to_u16(fmt + 0);
fmtOut->channels = drwav__bytes_to_u16(fmt + 2); fmtOut->channels = drwav_bytes_to_u16(fmt + 2);
fmtOut->sampleRate = drwav__bytes_to_u32(fmt + 4); fmtOut->sampleRate = drwav_bytes_to_u32(fmt + 4);
fmtOut->avgBytesPerSec = drwav__bytes_to_u32(fmt + 8); fmtOut->avgBytesPerSec = drwav_bytes_to_u32(fmt + 8);
fmtOut->blockAlign = drwav__bytes_to_u16(fmt + 12); fmtOut->blockAlign = drwav_bytes_to_u16(fmt + 12);
fmtOut->bitsPerSample = drwav__bytes_to_u16(fmt + 14); fmtOut->bitsPerSample = drwav_bytes_to_u16(fmt + 14);
fmtOut->extendedSize = 0; fmtOut->extendedSize = 0;
fmtOut->validBitsPerSample = 0; fmtOut->validBitsPerSample = 0;
...@@ -1686,7 +1633,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -1686,7 +1633,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
bytesReadSoFar = 18; bytesReadSoFar = 18;
fmtOut->extendedSize = drwav__bytes_to_u16(fmt_cbSize); fmtOut->extendedSize = drwav_bytes_to_u16(fmt_cbSize);
if (fmtOut->extendedSize > 0) { if (fmtOut->extendedSize > 0) {
/* Simple validation. */ /* Simple validation. */
if (fmtOut->formatTag == DR_WAVE_FORMAT_EXTENSIBLE) { if (fmtOut->formatTag == DR_WAVE_FORMAT_EXTENSIBLE) {
...@@ -1701,8 +1648,8 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -1701,8 +1648,8 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
return DRWAV_FALSE; /* Expecting more data. */ return DRWAV_FALSE; /* Expecting more data. */
} }
fmtOut->validBitsPerSample = drwav__bytes_to_u16(fmtext + 0); fmtOut->validBitsPerSample = drwav_bytes_to_u16(fmtext + 0);
fmtOut->channelMask = drwav__bytes_to_u32(fmtext + 2); fmtOut->channelMask = drwav_bytes_to_u32(fmtext + 2);
drwav__bytes_to_guid(fmtext + 6, fmtOut->subFormat); drwav__bytes_to_guid(fmtext + 6, fmtOut->subFormat);
} else { } else {
if (!onSeek(pUserData, fmtOut->extendedSize, drwav_seek_origin_current)) { if (!onSeek(pUserData, fmtOut->extendedSize, drwav_seek_origin_current)) {
...@@ -1732,7 +1679,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -1732,7 +1679,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
} }
static size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBufferOut, size_t bytesToRead, drwav_uint64* pCursor) DRWAV_PRIVATE size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBufferOut, size_t bytesToRead, drwav_uint64* pCursor)
{ {
size_t bytesRead; size_t bytesRead;
...@@ -1745,7 +1692,7 @@ static size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBuf ...@@ -1745,7 +1692,7 @@ static size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBuf
} }
#if 0 #if 0
static drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int offset, drwav_seek_origin origin, drwav_uint64* pCursor) DRWAV_PRIVATE drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int offset, drwav_seek_origin origin, drwav_uint64* pCursor)
{ {
DRWAV_ASSERT(onSeek != NULL); DRWAV_ASSERT(onSeek != NULL);
DRWAV_ASSERT(pCursor != NULL); DRWAV_ASSERT(pCursor != NULL);
...@@ -1766,7 +1713,7 @@ static drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int ...@@ -1766,7 +1713,7 @@ static drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int
static drwav_uint32 drwav_get_bytes_per_pcm_frame(drwav* pWav) DRWAV_PRIVATE drwav_uint32 drwav_get_bytes_per_pcm_frame(drwav* pWav)
{ {
/* /*
The bytes per frame is a bit ambiguous. It can be either be based on the bits per sample, or the block align. The way I'm doing it here The bytes per frame is a bit ambiguous. It can be either be based on the bits per sample, or the block align. The way I'm doing it here
...@@ -1789,11 +1736,11 @@ DRWAV_API drwav_uint16 drwav_fmt_get_format(const drwav_fmt* pFMT) ...@@ -1789,11 +1736,11 @@ DRWAV_API drwav_uint16 drwav_fmt_get_format(const drwav_fmt* pFMT)
if (pFMT->formatTag != DR_WAVE_FORMAT_EXTENSIBLE) { if (pFMT->formatTag != DR_WAVE_FORMAT_EXTENSIBLE) {
return pFMT->formatTag; return pFMT->formatTag;
} else { } else {
return drwav__bytes_to_u16(pFMT->subFormat); /* Only the first two bytes are required. */ return drwav_bytes_to_u16(pFMT->subFormat); /* Only the first two bytes are required. */
} }
} }
static drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pReadSeekUserData, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pReadSeekUserData, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pWav == NULL || onRead == NULL || onSeek == NULL) { if (pWav == NULL || onRead == NULL || onSeek == NULL) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -1812,7 +1759,7 @@ static drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_see ...@@ -1812,7 +1759,7 @@ static drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_see
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags) DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags)
{ {
/* This function assumes drwav_preinit() has been called beforehand. */ /* This function assumes drwav_preinit() has been called beforehand. */
...@@ -1838,9 +1785,9 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1838,9 +1785,9 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
The first 4 bytes can be used to identify the container. For RIFF files it will start with "RIFF" and for The first 4 bytes can be used to identify the container. For RIFF files it will start with "RIFF" and for
w64 it will start with "riff". w64 it will start with "riff".
*/ */
if (drwav__fourcc_equal(riff, "RIFF")) { if (drwav_fourcc_equal(riff, "RIFF")) {
pWav->container = drwav_container_riff; pWav->container = drwav_container_riff;
} else if (drwav__fourcc_equal(riff, "riff")) { } else if (drwav_fourcc_equal(riff, "riff")) {
int i; int i;
drwav_uint8 riff2[12]; drwav_uint8 riff2[12];
...@@ -1856,7 +1803,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1856,7 +1803,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} }
} else if (drwav__fourcc_equal(riff, "RF64")) { } else if (drwav_fourcc_equal(riff, "RF64")) {
pWav->container = drwav_container_rf64; pWav->container = drwav_container_rf64;
} else { } else {
return DRWAV_FALSE; /* Unknown or unsupported container. */ return DRWAV_FALSE; /* Unknown or unsupported container. */
...@@ -1873,11 +1820,11 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1873,11 +1820,11 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
} }
if (pWav->container == drwav_container_riff) { if (pWav->container == drwav_container_riff) {
if (drwav__bytes_to_u32(chunkSizeBytes) < 36) { if (drwav_bytes_to_u32(chunkSizeBytes) < 36) {
return DRWAV_FALSE; /* Chunk size should always be at least 36 bytes. */ return DRWAV_FALSE; /* Chunk size should always be at least 36 bytes. */
} }
} else { } else {
if (drwav__bytes_to_u32(chunkSizeBytes) != 0xFFFFFFFF) { if (drwav_bytes_to_u32(chunkSizeBytes) != 0xFFFFFFFF) {
return DRWAV_FALSE; /* Chunk size should always be set to -1/0xFFFFFFFF for RF64. The actual size is retrieved later. */ return DRWAV_FALSE; /* Chunk size should always be set to -1/0xFFFFFFFF for RF64. The actual size is retrieved later. */
} }
} }
...@@ -1886,7 +1833,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1886,7 +1833,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (!drwav__fourcc_equal(wave, "WAVE")) { if (!drwav_fourcc_equal(wave, "WAVE")) {
return DRWAV_FALSE; /* Expecting "WAVE". */ return DRWAV_FALSE; /* Expecting "WAVE". */
} }
} else { } else {
...@@ -1898,7 +1845,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1898,7 +1845,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (drwav__bytes_to_u64(chunkSizeBytes) < 80) { if (drwav_bytes_to_u64(chunkSizeBytes) < 80) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
...@@ -1906,7 +1853,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1906,7 +1853,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (!drwav__guid_equal(wave, drwavGUID_W64_WAVE)) { if (!drwav_guid_equal(wave, drwavGUID_W64_WAVE)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} }
...@@ -1922,7 +1869,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1922,7 +1869,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (!drwav__fourcc_equal(header.id.fourcc, "ds64")) { if (!drwav_fourcc_equal(header.id.fourcc, "ds64")) {
return DRWAV_FALSE; /* Expecting "ds64". */ return DRWAV_FALSE; /* Expecting "ds64". */
} }
...@@ -1941,7 +1888,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1941,7 +1888,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
bytesRemainingInChunk -= 8; bytesRemainingInChunk -= 8;
dataChunkSize = drwav__bytes_to_u64(sizeBytes); dataChunkSize = drwav_bytes_to_u64(sizeBytes);
/* Next 8 bytes is the same count which we would usually derived from the FACT chunk if it was available. */ /* Next 8 bytes is the same count which we would usually derived from the FACT chunk if it was available. */
...@@ -1949,7 +1896,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1949,7 +1896,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
bytesRemainingInChunk -= 8; bytesRemainingInChunk -= 8;
sampleCountFromFactChunk = drwav__bytes_to_u64(sizeBytes); sampleCountFromFactChunk = drwav_bytes_to_u64(sizeBytes);
/* Skip over everything else. */ /* Skip over everything else. */
...@@ -1977,7 +1924,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -1977,7 +1924,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
/* Translate the internal format. */ /* Translate the internal format. */
translatedFormatTag = fmt.formatTag; translatedFormatTag = fmt.formatTag;
if (translatedFormatTag == DR_WAVE_FORMAT_EXTENSIBLE) { if (translatedFormatTag == DR_WAVE_FORMAT_EXTENSIBLE) {
translatedFormatTag = drwav__bytes_to_u16(fmt.subFormat + 0); translatedFormatTag = drwav_bytes_to_u16(fmt.subFormat + 0);
} }
...@@ -2025,14 +1972,14 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -2025,14 +1972,14 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
chunkSize = header.sizeInBytes; chunkSize = header.sizeInBytes;
if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) {
if (drwav__fourcc_equal(header.id.fourcc, "data")) { if (drwav_fourcc_equal(header.id.fourcc, "data")) {
foundDataChunk = DRWAV_TRUE; foundDataChunk = DRWAV_TRUE;
if (pWav->container != drwav_container_rf64) { /* The data chunk size for RF64 will always be set to 0xFFFFFFFF here. It was set to it's true value earlier. */ if (pWav->container != drwav_container_rf64) { /* The data chunk size for RF64 will always be set to 0xFFFFFFFF here. It was set to it's true value earlier. */
dataChunkSize = chunkSize; dataChunkSize = chunkSize;
} }
} }
} else { } else {
if (drwav__guid_equal(header.id.guid, drwavGUID_W64_DATA)) { if (drwav_guid_equal(header.id.guid, drwavGUID_W64_DATA)) {
foundDataChunk = DRWAV_TRUE; foundDataChunk = DRWAV_TRUE;
dataChunkSize = chunkSize; dataChunkSize = chunkSize;
} }
...@@ -2048,7 +1995,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -2048,7 +1995,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
/* Optional. Get the total sample count from the FACT chunk. This is useful for compressed formats. */ /* Optional. Get the total sample count from the FACT chunk. This is useful for compressed formats. */
if (pWav->container == drwav_container_riff) { if (pWav->container == drwav_container_riff) {
if (drwav__fourcc_equal(header.id.fourcc, "fact")) { if (drwav_fourcc_equal(header.id.fourcc, "fact")) {
drwav_uint32 sampleCount; drwav_uint32 sampleCount;
if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCount, 4, &cursor) != 4) { if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCount, 4, &cursor) != 4) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -2070,7 +2017,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -2070,7 +2017,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
} }
} }
} else if (pWav->container == drwav_container_w64) { } else if (pWav->container == drwav_container_w64) {
if (drwav__guid_equal(header.id.guid, drwavGUID_W64_FACT)) { if (drwav_guid_equal(header.id.guid, drwavGUID_W64_FACT)) {
if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCountFromFactChunk, 8, &cursor) != 8) { if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCountFromFactChunk, 8, &cursor) != 8) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
...@@ -2086,7 +2033,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -2086,7 +2033,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
/* "smpl" chunk. */ /* "smpl" chunk. */
if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) {
if (drwav__fourcc_equal(header.id.fourcc, "smpl")) { if (drwav_fourcc_equal(header.id.fourcc, "smpl")) {
drwav_uint8 smplHeaderData[36]; /* 36 = size of the smpl header section, not including the loop data. */ drwav_uint8 smplHeaderData[36]; /* 36 = size of the smpl header section, not including the loop data. */
if (chunkSize >= sizeof(smplHeaderData)) { if (chunkSize >= sizeof(smplHeaderData)) {
drwav_uint64 bytesJustRead = drwav__on_read(pWav->onRead, pWav->pUserData, smplHeaderData, sizeof(smplHeaderData), &cursor); drwav_uint64 bytesJustRead = drwav__on_read(pWav->onRead, pWav->pUserData, smplHeaderData, sizeof(smplHeaderData), &cursor);
...@@ -2095,15 +2042,15 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -2095,15 +2042,15 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
if (bytesJustRead == sizeof(smplHeaderData)) { if (bytesJustRead == sizeof(smplHeaderData)) {
drwav_uint32 iLoop; drwav_uint32 iLoop;
pWav->smpl.manufacturer = drwav__bytes_to_u32(smplHeaderData+0); pWav->smpl.manufacturer = drwav_bytes_to_u32(smplHeaderData+0);
pWav->smpl.product = drwav__bytes_to_u32(smplHeaderData+4); pWav->smpl.product = drwav_bytes_to_u32(smplHeaderData+4);
pWav->smpl.samplePeriod = drwav__bytes_to_u32(smplHeaderData+8); pWav->smpl.samplePeriod = drwav_bytes_to_u32(smplHeaderData+8);
pWav->smpl.midiUnityNotes = drwav__bytes_to_u32(smplHeaderData+12); pWav->smpl.midiUnityNotes = drwav_bytes_to_u32(smplHeaderData+12);
pWav->smpl.midiPitchFraction = drwav__bytes_to_u32(smplHeaderData+16); pWav->smpl.midiPitchFraction = drwav_bytes_to_u32(smplHeaderData+16);
pWav->smpl.smpteFormat = drwav__bytes_to_u32(smplHeaderData+20); pWav->smpl.smpteFormat = drwav_bytes_to_u32(smplHeaderData+20);
pWav->smpl.smpteOffset = drwav__bytes_to_u32(smplHeaderData+24); pWav->smpl.smpteOffset = drwav_bytes_to_u32(smplHeaderData+24);
pWav->smpl.numSampleLoops = drwav__bytes_to_u32(smplHeaderData+28); pWav->smpl.numSampleLoops = drwav_bytes_to_u32(smplHeaderData+28);
pWav->smpl.samplerData = drwav__bytes_to_u32(smplHeaderData+32); pWav->smpl.samplerData = drwav_bytes_to_u32(smplHeaderData+32);
for (iLoop = 0; iLoop < pWav->smpl.numSampleLoops && iLoop < drwav_countof(pWav->smpl.loops); ++iLoop) { for (iLoop = 0; iLoop < pWav->smpl.numSampleLoops && iLoop < drwav_countof(pWav->smpl.loops); ++iLoop) {
drwav_uint8 smplLoopData[24]; /* 24 = size of a loop section in the smpl chunk. */ drwav_uint8 smplLoopData[24]; /* 24 = size of a loop section in the smpl chunk. */
...@@ -2111,12 +2058,12 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -2111,12 +2058,12 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
chunkSize -= bytesJustRead; chunkSize -= bytesJustRead;
if (bytesJustRead == sizeof(smplLoopData)) { if (bytesJustRead == sizeof(smplLoopData)) {
pWav->smpl.loops[iLoop].cuePointId = drwav__bytes_to_u32(smplLoopData+0); pWav->smpl.loops[iLoop].cuePointId = drwav_bytes_to_u32(smplLoopData+0);
pWav->smpl.loops[iLoop].type = drwav__bytes_to_u32(smplLoopData+4); pWav->smpl.loops[iLoop].type = drwav_bytes_to_u32(smplLoopData+4);
pWav->smpl.loops[iLoop].start = drwav__bytes_to_u32(smplLoopData+8); pWav->smpl.loops[iLoop].start = drwav_bytes_to_u32(smplLoopData+8);
pWav->smpl.loops[iLoop].end = drwav__bytes_to_u32(smplLoopData+12); pWav->smpl.loops[iLoop].end = drwav_bytes_to_u32(smplLoopData+12);
pWav->smpl.loops[iLoop].fraction = drwav__bytes_to_u32(smplLoopData+16); pWav->smpl.loops[iLoop].fraction = drwav_bytes_to_u32(smplLoopData+16);
pWav->smpl.loops[iLoop].playCount = drwav__bytes_to_u32(smplLoopData+20); pWav->smpl.loops[iLoop].playCount = drwav_bytes_to_u32(smplLoopData+20);
} else { } else {
break; /* Break from the smpl loop for loop. */ break; /* Break from the smpl loop for loop. */
} }
...@@ -2127,7 +2074,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -2127,7 +2074,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
} }
} }
} else { } else {
if (drwav__guid_equal(header.id.guid, drwavGUID_W64_SMPL)) { if (drwav_guid_equal(header.id.guid, drwavGUID_W64_SMPL)) {
/* /*
This path will be hit when a W64 WAV file contains a smpl chunk. I don't have a sample file to test this path, so a contribution This path will be hit when a W64 WAV file contains a smpl chunk. I don't have a sample file to test this path, so a contribution
is welcome to add support for this. is welcome to add support for this.
...@@ -2251,7 +2198,7 @@ DRWAV_API drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead, drwav_ ...@@ -2251,7 +2198,7 @@ DRWAV_API drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead, drwav_
} }
static drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize)
{ {
drwav_uint64 chunkSize = 4 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize); /* 4 = "WAVE". 24 = "fmt " chunk. */ drwav_uint64 chunkSize = 4 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize); /* 4 = "WAVE". 24 = "fmt " chunk. */
if (chunkSize > 0xFFFFFFFFUL) { if (chunkSize > 0xFFFFFFFFUL) {
...@@ -2261,7 +2208,7 @@ static drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize) ...@@ -2261,7 +2208,7 @@ static drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize)
return (drwav_uint32)chunkSize; /* Safe cast due to the clamp above. */ return (drwav_uint32)chunkSize; /* Safe cast due to the clamp above. */
} }
static drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize)
{ {
if (dataChunkSize <= 0xFFFFFFFFUL) { if (dataChunkSize <= 0xFFFFFFFFUL) {
return (drwav_uint32)dataChunkSize; return (drwav_uint32)dataChunkSize;
...@@ -2270,19 +2217,19 @@ static drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize) ...@@ -2270,19 +2217,19 @@ static drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize)
} }
} }
static drwav_uint64 drwav__riff_chunk_size_w64(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint64 drwav__riff_chunk_size_w64(drwav_uint64 dataChunkSize)
{ {
drwav_uint64 dataSubchunkPaddingSize = drwav__chunk_padding_size_w64(dataChunkSize); drwav_uint64 dataSubchunkPaddingSize = drwav__chunk_padding_size_w64(dataChunkSize);
return 80 + 24 + dataChunkSize + dataSubchunkPaddingSize; /* +24 because W64 includes the size of the GUID and size fields. */ return 80 + 24 + dataChunkSize + dataSubchunkPaddingSize; /* +24 because W64 includes the size of the GUID and size fields. */
} }
static drwav_uint64 drwav__data_chunk_size_w64(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint64 drwav__data_chunk_size_w64(drwav_uint64 dataChunkSize)
{ {
return 24 + dataChunkSize; /* +24 because W64 includes the size of the GUID and size fields. */ return 24 + dataChunkSize; /* +24 because W64 includes the size of the GUID and size fields. */
} }
static drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize)
{ {
drwav_uint64 chunkSize = 4 + 36 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize); /* 4 = "WAVE". 36 = "ds64" chunk. 24 = "fmt " chunk. */ drwav_uint64 chunkSize = 4 + 36 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize); /* 4 = "WAVE". 36 = "ds64" chunk. 24 = "fmt " chunk. */
if (chunkSize > 0xFFFFFFFFUL) { if (chunkSize > 0xFFFFFFFFUL) {
...@@ -2292,13 +2239,13 @@ static drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize) ...@@ -2292,13 +2239,13 @@ static drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize)
return chunkSize; return chunkSize;
} }
static drwav_uint64 drwav__data_chunk_size_rf64(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint64 drwav__data_chunk_size_rf64(drwav_uint64 dataChunkSize)
{ {
return dataChunkSize; return dataChunkSize;
} }
static size_t drwav__write(drwav* pWav, const void* pData, size_t dataSize) DRWAV_PRIVATE size_t drwav__write(drwav* pWav, const void* pData, size_t dataSize)
{ {
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
DRWAV_ASSERT(pWav->onWrite != NULL); DRWAV_ASSERT(pWav->onWrite != NULL);
...@@ -2307,7 +2254,7 @@ static size_t drwav__write(drwav* pWav, const void* pData, size_t dataSize) ...@@ -2307,7 +2254,7 @@ static size_t drwav__write(drwav* pWav, const void* pData, size_t dataSize)
return pWav->onWrite(pWav->pUserData, pData, dataSize); return pWav->onWrite(pWav->pUserData, pData, dataSize);
} }
static size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value) DRWAV_PRIVATE size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value)
{ {
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
DRWAV_ASSERT(pWav->onWrite != NULL); DRWAV_ASSERT(pWav->onWrite != NULL);
...@@ -2319,7 +2266,7 @@ static size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value) ...@@ -2319,7 +2266,7 @@ static size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value)
return drwav__write(pWav, &value, 2); return drwav__write(pWav, &value, 2);
} }
static size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value) DRWAV_PRIVATE size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value)
{ {
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
DRWAV_ASSERT(pWav->onWrite != NULL); DRWAV_ASSERT(pWav->onWrite != NULL);
...@@ -2331,7 +2278,7 @@ static size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value) ...@@ -2331,7 +2278,7 @@ static size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value)
return drwav__write(pWav, &value, 4); return drwav__write(pWav, &value, 4);
} }
static size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value) DRWAV_PRIVATE size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value)
{ {
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
DRWAV_ASSERT(pWav->onWrite != NULL); DRWAV_ASSERT(pWav->onWrite != NULL);
...@@ -2344,7 +2291,7 @@ static size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value) ...@@ -2344,7 +2291,7 @@ static size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value)
} }
static drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pFormat, drwav_bool32 isSequential, drwav_write_proc onWrite, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pFormat, drwav_bool32 isSequential, drwav_write_proc onWrite, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pWav == NULL || onWrite == NULL) { if (pWav == NULL || onWrite == NULL) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -2384,7 +2331,7 @@ static drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pF ...@@ -2384,7 +2331,7 @@ static drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pF
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount) DRWAV_PRIVATE drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount)
{ {
/* The function assumes drwav_preinit_write() was called beforehand. */ /* The function assumes drwav_preinit_write() was called beforehand. */
...@@ -2551,7 +2498,7 @@ DRWAV_API drwav_uint64 drwav_target_write_size_bytes(const drwav_data_format* pF ...@@ -2551,7 +2498,7 @@ DRWAV_API drwav_uint64 drwav_target_write_size_bytes(const drwav_data_format* pF
/* drwav_result_from_errno() is only used for fopen() and wfopen() so putting it inside DR_WAV_NO_STDIO for now. If something else needs this later we can move it out. */ /* drwav_result_from_errno() is only used for fopen() and wfopen() so putting it inside DR_WAV_NO_STDIO for now. If something else needs this later we can move it out. */
#include <errno.h> #include <errno.h>
static drwav_result drwav_result_from_errno(int e) DRWAV_PRIVATE drwav_result drwav_result_from_errno(int e)
{ {
switch (e) switch (e)
{ {
...@@ -2953,7 +2900,7 @@ static drwav_result drwav_result_from_errno(int e) ...@@ -2953,7 +2900,7 @@ static drwav_result drwav_result_from_errno(int e)
} }
} }
static drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, const char* pOpenMode) DRWAV_PRIVATE drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, const char* pOpenMode)
{ {
#if _MSC_VER && _MSC_VER >= 1400 #if _MSC_VER && _MSC_VER >= 1400
errno_t err; errno_t err;
...@@ -3013,7 +2960,7 @@ fallback, so if you notice your compiler not detecting this properly I'm happy t ...@@ -3013,7 +2960,7 @@ fallback, so if you notice your compiler not detecting this properly I'm happy t
#endif #endif
#endif #endif
static drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const wchar_t* pOpenMode, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const wchar_t* pOpenMode, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (ppFile != NULL) { if (ppFile != NULL) {
*ppFile = NULL; /* Safety. */ *ppFile = NULL; /* Safety. */
...@@ -3096,17 +3043,17 @@ static drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const ...@@ -3096,17 +3043,17 @@ static drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const
} }
static size_t drwav__on_read_stdio(void* pUserData, void* pBufferOut, size_t bytesToRead) DRWAV_PRIVATE size_t drwav__on_read_stdio(void* pUserData, void* pBufferOut, size_t bytesToRead)
{ {
return fread(pBufferOut, 1, bytesToRead, (FILE*)pUserData); return fread(pBufferOut, 1, bytesToRead, (FILE*)pUserData);
} }
static size_t drwav__on_write_stdio(void* pUserData, const void* pData, size_t bytesToWrite) DRWAV_PRIVATE size_t drwav__on_write_stdio(void* pUserData, const void* pData, size_t bytesToWrite)
{ {
return fwrite(pData, 1, bytesToWrite, (FILE*)pUserData); return fwrite(pData, 1, bytesToWrite, (FILE*)pUserData);
} }
static drwav_bool32 drwav__on_seek_stdio(void* pUserData, int offset, drwav_seek_origin origin) DRWAV_PRIVATE drwav_bool32 drwav__on_seek_stdio(void* pUserData, int offset, drwav_seek_origin origin)
{ {
return fseek((FILE*)pUserData, offset, (origin == drwav_seek_origin_current) ? SEEK_CUR : SEEK_SET) == 0; return fseek((FILE*)pUserData, offset, (origin == drwav_seek_origin_current) ? SEEK_CUR : SEEK_SET) == 0;
} }
...@@ -3117,7 +3064,7 @@ DRWAV_API drwav_bool32 drwav_init_file(drwav* pWav, const char* filename, const ...@@ -3117,7 +3064,7 @@ DRWAV_API drwav_bool32 drwav_init_file(drwav* pWav, const char* filename, const
} }
static drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pFile, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pFile, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
drwav_bool32 result; drwav_bool32 result;
...@@ -3164,7 +3111,7 @@ DRWAV_API drwav_bool32 drwav_init_file_ex_w(drwav* pWav, const wchar_t* filename ...@@ -3164,7 +3111,7 @@ DRWAV_API drwav_bool32 drwav_init_file_ex_w(drwav* pWav, const wchar_t* filename
} }
static drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFile, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFile, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
drwav_bool32 result; drwav_bool32 result;
...@@ -3183,7 +3130,7 @@ static drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFil ...@@ -3183,7 +3130,7 @@ static drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFil
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
FILE* pFile; FILE* pFile;
if (drwav_fopen(&pFile, filename, "wb") != DRWAV_SUCCESS) { if (drwav_fopen(&pFile, filename, "wb") != DRWAV_SUCCESS) {
...@@ -3194,7 +3141,7 @@ static drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* fil ...@@ -3194,7 +3141,7 @@ static drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* fil
return drwav_init_file_write__internal_FILE(pWav, pFile, pFormat, totalSampleCount, isSequential, pAllocationCallbacks); return drwav_init_file_write__internal_FILE(pWav, pFile, pFormat, totalSampleCount, isSequential, pAllocationCallbacks);
} }
static drwav_bool32 drwav_init_file_write_w__internal(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_file_write_w__internal(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
FILE* pFile; FILE* pFile;
if (drwav_wfopen(&pFile, filename, L"wb", pAllocationCallbacks) != DRWAV_SUCCESS) { if (drwav_wfopen(&pFile, filename, L"wb", pAllocationCallbacks) != DRWAV_SUCCESS) {
...@@ -3245,7 +3192,7 @@ DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames_w(drwav* pWav ...@@ -3245,7 +3192,7 @@ DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames_w(drwav* pWav
#endif /* DR_WAV_NO_STDIO */ #endif /* DR_WAV_NO_STDIO */
static size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t bytesToRead) DRWAV_PRIVATE size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t bytesToRead)
{ {
drwav* pWav = (drwav*)pUserData; drwav* pWav = (drwav*)pUserData;
size_t bytesRemaining; size_t bytesRemaining;
...@@ -3266,7 +3213,7 @@ static size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t by ...@@ -3266,7 +3213,7 @@ static size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t by
return bytesToRead; return bytesToRead;
} }
static drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_seek_origin origin) DRWAV_PRIVATE drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_seek_origin origin)
{ {
drwav* pWav = (drwav*)pUserData; drwav* pWav = (drwav*)pUserData;
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
...@@ -3295,7 +3242,7 @@ static drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_see ...@@ -3295,7 +3242,7 @@ static drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_see
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_t bytesToWrite) DRWAV_PRIVATE size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_t bytesToWrite)
{ {
drwav* pWav = (drwav*)pUserData; drwav* pWav = (drwav*)pUserData;
size_t bytesRemaining; size_t bytesRemaining;
...@@ -3335,7 +3282,7 @@ static size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_ ...@@ -3335,7 +3282,7 @@ static size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_
return bytesToWrite; return bytesToWrite;
} }
static drwav_bool32 drwav__on_seek_memory_write(void* pUserData, int offset, drwav_seek_origin origin) DRWAV_PRIVATE drwav_bool32 drwav__on_seek_memory_write(void* pUserData, int offset, drwav_seek_origin origin)
{ {
drwav* pWav = (drwav*)pUserData; drwav* pWav = (drwav*)pUserData;
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
...@@ -3387,7 +3334,7 @@ DRWAV_API drwav_bool32 drwav_init_memory_ex(drwav* pWav, const void* data, size_ ...@@ -3387,7 +3334,7 @@ DRWAV_API drwav_bool32 drwav_init_memory_ex(drwav* pWav, const void* data, size_
} }
static drwav_bool32 drwav_init_memory_write__internal(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_memory_write__internal(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (ppData == NULL || pDataSize == NULL) { if (ppData == NULL || pDataSize == NULL) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -3640,7 +3587,7 @@ DRWAV_API drwav_uint64 drwav_read_pcm_frames(drwav* pWav, drwav_uint64 framesToR ...@@ -3640,7 +3587,7 @@ DRWAV_API drwav_uint64 drwav_read_pcm_frames(drwav* pWav, drwav_uint64 framesToR
DRWAV_API drwav_bool32 drwav_seek_to_first_pcm_frame(drwav* pWav) DRWAV_PRIVATE drwav_bool32 drwav_seek_to_first_pcm_frame(drwav* pWav)
{ {
if (pWav->onWrite != NULL) { if (pWav->onWrite != NULL) {
return DRWAV_FALSE; /* No seeking in write mode. */ return DRWAV_FALSE; /* No seeking in write mode. */
...@@ -3890,7 +3837,7 @@ DRWAV_API drwav_uint64 drwav_write_pcm_frames(drwav* pWav, drwav_uint64 framesTo ...@@ -3890,7 +3837,7 @@ DRWAV_API drwav_uint64 drwav_write_pcm_frames(drwav* pWav, drwav_uint64 framesTo
} }
static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
...@@ -3911,9 +3858,9 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 ...@@ -3911,9 +3858,9 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64
pWav->msadpcm.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header); pWav->msadpcm.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header);
pWav->msadpcm.predictor[0] = header[0]; pWav->msadpcm.predictor[0] = header[0];
pWav->msadpcm.delta[0] = drwav__bytes_to_s16(header + 1); pWav->msadpcm.delta[0] = drwav_bytes_to_s16(header + 1);
pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav__bytes_to_s16(header + 3); pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav_bytes_to_s16(header + 3);
pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav__bytes_to_s16(header + 5); pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav_bytes_to_s16(header + 5);
pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][0]; pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][0];
pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[0][1]; pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[0][1];
pWav->msadpcm.cachedFrameCount = 2; pWav->msadpcm.cachedFrameCount = 2;
...@@ -3927,12 +3874,12 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 ...@@ -3927,12 +3874,12 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64
pWav->msadpcm.predictor[0] = header[0]; pWav->msadpcm.predictor[0] = header[0];
pWav->msadpcm.predictor[1] = header[1]; pWav->msadpcm.predictor[1] = header[1];
pWav->msadpcm.delta[0] = drwav__bytes_to_s16(header + 2); pWav->msadpcm.delta[0] = drwav_bytes_to_s16(header + 2);
pWav->msadpcm.delta[1] = drwav__bytes_to_s16(header + 4); pWav->msadpcm.delta[1] = drwav_bytes_to_s16(header + 4);
pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav__bytes_to_s16(header + 6); pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav_bytes_to_s16(header + 6);
pWav->msadpcm.prevFrames[1][1] = (drwav_int32)drwav__bytes_to_s16(header + 8); pWav->msadpcm.prevFrames[1][1] = (drwav_int32)drwav_bytes_to_s16(header + 8);
pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav__bytes_to_s16(header + 10); pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav_bytes_to_s16(header + 10);
pWav->msadpcm.prevFrames[1][0] = (drwav_int32)drwav__bytes_to_s16(header + 12); pWav->msadpcm.prevFrames[1][0] = (drwav_int32)drwav_bytes_to_s16(header + 12);
pWav->msadpcm.cachedFrames[0] = pWav->msadpcm.prevFrames[0][0]; pWav->msadpcm.cachedFrames[0] = pWav->msadpcm.prevFrames[0][0];
pWav->msadpcm.cachedFrames[1] = pWav->msadpcm.prevFrames[1][0]; pWav->msadpcm.cachedFrames[1] = pWav->msadpcm.prevFrames[1][0];
...@@ -4070,7 +4017,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 ...@@ -4070,7 +4017,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64
} }
static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_uint32 iChannel; drwav_uint32 iChannel;
...@@ -4114,7 +4061,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 fra ...@@ -4114,7 +4061,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 fra
return totalFramesRead; /* Invalid data. */ return totalFramesRead; /* Invalid data. */
} }
pWav->ima.predictor[0] = drwav__bytes_to_s16(header + 0); pWav->ima.predictor[0] = drwav_bytes_to_s16(header + 0);
pWav->ima.stepIndex[0] = header[2]; pWav->ima.stepIndex[0] = header[2];
pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[0]; pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[0];
pWav->ima.cachedFrameCount = 1; pWav->ima.cachedFrameCount = 1;
...@@ -4132,9 +4079,9 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 fra ...@@ -4132,9 +4079,9 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 fra
return totalFramesRead; /* Invalid data. */ return totalFramesRead; /* Invalid data. */
} }
pWav->ima.predictor[0] = drwav__bytes_to_s16(header + 0); pWav->ima.predictor[0] = drwav_bytes_to_s16(header + 0);
pWav->ima.stepIndex[0] = header[2]; pWav->ima.stepIndex[0] = header[2];
pWav->ima.predictor[1] = drwav__bytes_to_s16(header + 4); pWav->ima.predictor[1] = drwav_bytes_to_s16(header + 4);
pWav->ima.stepIndex[1] = header[6]; pWav->ima.stepIndex[1] = header[6];
pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 2] = pWav->ima.predictor[0]; pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 2] = pWav->ima.predictor[0];
...@@ -4278,7 +4225,7 @@ static DRWAV_INLINE drwav_int16 drwav__mulaw_to_s16(drwav_uint8 sampleIn) ...@@ -4278,7 +4225,7 @@ static DRWAV_INLINE drwav_int16 drwav__mulaw_to_s16(drwav_uint8 sampleIn)
static void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample)
{ {
unsigned int i; unsigned int i;
...@@ -4330,7 +4277,7 @@ static void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t ...@@ -4330,7 +4277,7 @@ static void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t
} }
} }
static void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample)
{ {
if (bytesPerSample == 4) { if (bytesPerSample == 4) {
drwav_f32_to_s16(pOut, (const float*)pIn, totalSampleCount); drwav_f32_to_s16(pOut, (const float*)pIn, totalSampleCount);
...@@ -4345,11 +4292,11 @@ static void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t ...@@ -4345,11 +4292,11 @@ static void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t
} }
} }
static drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint32 bytesPerFrame;
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
drwav_uint32 bytesPerFrame;
/* Fast path. */ /* Fast path. */
if ((pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM && pWav->bitsPerSample == 16) || pBufferOut == NULL) { if ((pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM && pWav->bitsPerSample == 16) || pBufferOut == NULL) {
...@@ -4379,7 +4326,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 fra ...@@ -4379,7 +4326,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 fra
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -4412,7 +4359,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 fr ...@@ -4412,7 +4359,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 fr
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -4445,7 +4392,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 fr ...@@ -4445,7 +4392,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 fr
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s16__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -4623,7 +4570,7 @@ DRWAV_API void drwav_mulaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, siz ...@@ -4623,7 +4570,7 @@ DRWAV_API void drwav_mulaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, siz
static void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample)
{ {
unsigned int i; unsigned int i;
...@@ -4672,7 +4619,7 @@ static void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sample ...@@ -4672,7 +4619,7 @@ static void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sample
} }
} }
static void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample)
{ {
if (bytesPerSample == 4) { if (bytesPerSample == 4) {
unsigned int i; unsigned int i;
...@@ -4691,12 +4638,12 @@ static void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampl ...@@ -4691,12 +4638,12 @@ static void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampl
} }
static drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav);
if (bytesPerFrame == 0) { if (bytesPerFrame == 0) {
return 0; return 0;
} }
...@@ -4719,7 +4666,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 fra ...@@ -4719,7 +4666,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 fra
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
/* /*
We're just going to borrow the implementation from the drwav_read_s16() since ADPCM is a little bit more complicated than other formats and I don't We're just going to borrow the implementation from the drwav_read_s16() since ADPCM is a little bit more complicated than other formats and I don't
...@@ -4727,6 +4674,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64 ...@@ -4727,6 +4674,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64
*/ */
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_int16 samples16[2048]; drwav_int16 samples16[2048];
while (framesToRead > 0) { while (framesToRead > 0) {
drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16); drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16);
if (framesRead == 0) { if (framesRead == 0) {
...@@ -4743,7 +4691,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64 ...@@ -4743,7 +4691,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
/* /*
We're just going to borrow the implementation from the drwav_read_s16() since IMA-ADPCM is a little bit more complicated than other formats and I don't We're just going to borrow the implementation from the drwav_read_s16() since IMA-ADPCM is a little bit more complicated than other formats and I don't
...@@ -4751,6 +4699,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 fra ...@@ -4751,6 +4699,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 fra
*/ */
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_int16 samples16[2048]; drwav_int16 samples16[2048];
while (framesToRead > 0) { while (framesToRead > 0) {
drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16); drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16);
if (framesRead == 0) { if (framesRead == 0) {
...@@ -4767,7 +4716,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 fra ...@@ -4767,7 +4716,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 fra
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -4801,11 +4750,12 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 fr ...@@ -4801,11 +4750,12 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 fr
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav);
if (bytesPerFrame == 0) { if (bytesPerFrame == 0) {
return 0; return 0;
} }
...@@ -4828,12 +4778,12 @@ static drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 fr ...@@ -4828,12 +4778,12 @@ static drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 fr
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__mulaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__mulaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav);
if (bytesPerFrame == 0) { if (bytesPerFrame == 0) {
return 0; return 0;
} }
...@@ -5033,7 +4983,7 @@ DRWAV_API void drwav_mulaw_to_f32(float* pOut, const drwav_uint8* pIn, size_t sa ...@@ -5033,7 +4983,7 @@ DRWAV_API void drwav_mulaw_to_f32(float* pOut, const drwav_uint8* pIn, size_t sa
static void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample)
{ {
unsigned int i; unsigned int i;
...@@ -5084,7 +5034,7 @@ static void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t ...@@ -5084,7 +5034,7 @@ static void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t
} }
} }
static void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample)
{ {
if (bytesPerSample == 4) { if (bytesPerSample == 4) {
drwav_f32_to_s32(pOut, (const float*)pIn, totalSampleCount); drwav_f32_to_s32(pOut, (const float*)pIn, totalSampleCount);
...@@ -5100,7 +5050,7 @@ static void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t ...@@ -5100,7 +5050,7 @@ static void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t
} }
static drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -5134,7 +5084,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 fra ...@@ -5134,7 +5084,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 fra
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
/* /*
We're just going to borrow the implementation from the drwav_read_s16() since ADPCM is a little bit more complicated than other formats and I don't We're just going to borrow the implementation from the drwav_read_s16() since ADPCM is a little bit more complicated than other formats and I don't
...@@ -5142,6 +5092,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64 ...@@ -5142,6 +5092,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64
*/ */
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_int16 samples16[2048]; drwav_int16 samples16[2048];
while (framesToRead > 0) { while (framesToRead > 0) {
drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16); drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16);
if (framesRead == 0) { if (framesRead == 0) {
...@@ -5158,7 +5109,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64 ...@@ -5158,7 +5109,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
/* /*
We're just going to borrow the implementation from the drwav_read_s16() since IMA-ADPCM is a little bit more complicated than other formats and I don't We're just going to borrow the implementation from the drwav_read_s16() since IMA-ADPCM is a little bit more complicated than other formats and I don't
...@@ -5166,6 +5117,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 fra ...@@ -5166,6 +5117,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 fra
*/ */
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_int16 samples16[2048]; drwav_int16 samples16[2048];
while (framesToRead > 0) { while (framesToRead > 0) {
drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16); drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16);
if (framesRead == 0) { if (framesRead == 0) {
...@@ -5182,12 +5134,12 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 fra ...@@ -5182,12 +5134,12 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 fra
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav);
if (bytesPerFrame == 0) { if (bytesPerFrame == 0) {
return 0; return 0;
} }
...@@ -5210,12 +5162,12 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 fr ...@@ -5210,12 +5162,12 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 fr
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav);
if (bytesPerFrame == 0) { if (bytesPerFrame == 0) {
return 0; return 0;
} }
...@@ -5238,12 +5190,12 @@ static drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 fr ...@@ -5238,12 +5190,12 @@ static drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 fr
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav);
if (bytesPerFrame == 0) { if (bytesPerFrame == 0) {
return 0; return 0;
} }
...@@ -5427,7 +5379,7 @@ DRWAV_API void drwav_mulaw_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, siz ...@@ -5427,7 +5379,7 @@ DRWAV_API void drwav_mulaw_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, siz
static drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) DRWAV_PRIVATE drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount)
{ {
drwav_uint64 sampleDataSize; drwav_uint64 sampleDataSize;
drwav_int16* pSampleData; drwav_int16* pSampleData;
...@@ -5469,7 +5421,7 @@ static drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned i ...@@ -5469,7 +5421,7 @@ static drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned i
return pSampleData; return pSampleData;
} }
static float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) DRWAV_PRIVATE float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount)
{ {
drwav_uint64 sampleDataSize; drwav_uint64 sampleDataSize;
float* pSampleData; float* pSampleData;
...@@ -5511,7 +5463,7 @@ static float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* ch ...@@ -5511,7 +5463,7 @@ static float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* ch
return pSampleData; return pSampleData;
} }
static drwav_int32* drwav__read_pcm_frames_and_close_s32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) DRWAV_PRIVATE drwav_int32* drwav__read_pcm_frames_and_close_s32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount)
{ {
drwav_uint64 sampleDataSize; drwav_uint64 sampleDataSize;
drwav_int32* pSampleData; drwav_int32* pSampleData;
...@@ -5823,43 +5775,56 @@ DRWAV_API void drwav_free(void* p, const drwav_allocation_callbacks* pAllocation ...@@ -5823,43 +5775,56 @@ DRWAV_API void drwav_free(void* p, const drwav_allocation_callbacks* pAllocation
DRWAV_API drwav_uint16 drwav_bytes_to_u16(const drwav_uint8* data) DRWAV_API drwav_uint16 drwav_bytes_to_u16(const drwav_uint8* data)
{ {
return drwav__bytes_to_u16(data); return (data[0] << 0) | (data[1] << 8);
} }
DRWAV_API drwav_int16 drwav_bytes_to_s16(const drwav_uint8* data) DRWAV_API drwav_int16 drwav_bytes_to_s16(const drwav_uint8* data)
{ {
return drwav__bytes_to_s16(data); return (short)drwav_bytes_to_u16(data);
} }
DRWAV_API drwav_uint32 drwav_bytes_to_u32(const drwav_uint8* data) DRWAV_API drwav_uint32 drwav_bytes_to_u32(const drwav_uint8* data)
{ {
return drwav__bytes_to_u32(data); return (data[0] << 0) | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
} }
DRWAV_API drwav_int32 drwav_bytes_to_s32(const drwav_uint8* data) DRWAV_API drwav_int32 drwav_bytes_to_s32(const drwav_uint8* data)
{ {
return drwav__bytes_to_s32(data); return (drwav_int32)drwav_bytes_to_u32(data);
} }
DRWAV_API drwav_uint64 drwav_bytes_to_u64(const drwav_uint8* data) DRWAV_API drwav_uint64 drwav_bytes_to_u64(const drwav_uint8* data)
{ {
return drwav__bytes_to_u64(data); return
((drwav_uint64)data[0] << 0) | ((drwav_uint64)data[1] << 8) | ((drwav_uint64)data[2] << 16) | ((drwav_uint64)data[3] << 24) |
((drwav_uint64)data[4] << 32) | ((drwav_uint64)data[5] << 40) | ((drwav_uint64)data[6] << 48) | ((drwav_uint64)data[7] << 56);
} }
DRWAV_API drwav_int64 drwav_bytes_to_s64(const drwav_uint8* data) DRWAV_API drwav_int64 drwav_bytes_to_s64(const drwav_uint8* data)
{ {
return drwav__bytes_to_s64(data); return (drwav_int64)drwav_bytes_to_u64(data);
} }
DRWAV_API drwav_bool32 drwav_guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16]) DRWAV_API drwav_bool32 drwav_guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16])
{ {
return drwav__guid_equal(a, b); int i;
for (i = 0; i < 16; i += 1) {
if (a[i] != b[i]) {
return DRWAV_FALSE;
}
}
return DRWAV_TRUE;
} }
DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b) DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b)
{ {
return drwav__fourcc_equal(a, b); return
a[0] == b[0] &&
a[1] == b[1] &&
a[2] == b[2] &&
a[3] == b[3];
} }
#endif /* dr_wav_c */ #endif /* dr_wav_c */
...@@ -6053,6 +6018,11 @@ two different ways to initialize a drwav object. ...@@ -6053,6 +6018,11 @@ two different ways to initialize a drwav object.
/* /*
REVISION HISTORY REVISION HISTORY
================ ================
v0.12.17 - 2021-01-17
- Minor fix to sample code in documentation.
- Correctly qualify a private API as private rather than public.
- Code cleanup.
v0.12.16 - 2020-12-02 v0.12.16 - 2020-12-02
- Fix a bug when trying to read more bytes than can fit in a size_t. - Fix a bug when trying to read more bytes than can fit in a size_t.
......
...@@ -44714,7 +44714,7 @@ extern "C" { ...@@ -44714,7 +44714,7 @@ extern "C" {
#define DRWAV_XSTRINGIFY(x) DRWAV_STRINGIFY(x) #define DRWAV_XSTRINGIFY(x) DRWAV_STRINGIFY(x)
#define DRWAV_VERSION_MAJOR 0 #define DRWAV_VERSION_MAJOR 0
#define DRWAV_VERSION_MINOR 12 #define DRWAV_VERSION_MINOR 12
#define DRWAV_VERSION_REVISION 16 #define DRWAV_VERSION_REVISION 17
#define DRWAV_VERSION_STRING DRWAV_XSTRINGIFY(DRWAV_VERSION_MAJOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_MINOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_REVISION) #define DRWAV_VERSION_STRING DRWAV_XSTRINGIFY(DRWAV_VERSION_MAJOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_MINOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_REVISION)
#include <stddef.h> #include <stddef.h>
typedef signed char drwav_int8; typedef signed char drwav_int8;
...@@ -45087,7 +45087,7 @@ extern "C" { ...@@ -45087,7 +45087,7 @@ extern "C" {
#define DRFLAC_XSTRINGIFY(x) DRFLAC_STRINGIFY(x) #define DRFLAC_XSTRINGIFY(x) DRFLAC_STRINGIFY(x)
#define DRFLAC_VERSION_MAJOR 0 #define DRFLAC_VERSION_MAJOR 0
#define DRFLAC_VERSION_MINOR 12 #define DRFLAC_VERSION_MINOR 12
#define DRFLAC_VERSION_REVISION 25 #define DRFLAC_VERSION_REVISION 26
#define DRFLAC_VERSION_STRING DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MAJOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MINOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_REVISION) #define DRFLAC_VERSION_STRING DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MAJOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MINOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_REVISION)
#include <stddef.h> #include <stddef.h>
typedef signed char drflac_int8; typedef signed char drflac_int8;
...@@ -49406,24 +49406,6 @@ static const drwav_uint8 drwavGUID_W64_FMT [16] = {0x66,0x6D,0x74,0x20, 0xF3,0xA ...@@ -49406,24 +49406,6 @@ static const drwav_uint8 drwavGUID_W64_FMT [16] = {0x66,0x6D,0x74,0x20, 0xF3,0xA
static const drwav_uint8 drwavGUID_W64_FACT[16] = {0x66,0x61,0x63,0x74, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; static const drwav_uint8 drwavGUID_W64_FACT[16] = {0x66,0x61,0x63,0x74, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A};
static const drwav_uint8 drwavGUID_W64_DATA[16] = {0x64,0x61,0x74,0x61, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; static const drwav_uint8 drwavGUID_W64_DATA[16] = {0x64,0x61,0x74,0x61, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A};
static const drwav_uint8 drwavGUID_W64_SMPL[16] = {0x73,0x6D,0x70,0x6C, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; static const drwav_uint8 drwavGUID_W64_SMPL[16] = {0x73,0x6D,0x70,0x6C, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A};
static DRWAV_INLINE drwav_bool32 drwav__guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16])
{
int i;
for (i = 0; i < 16; i += 1) {
if (a[i] != b[i]) {
return DRWAV_FALSE;
}
}
return DRWAV_TRUE;
}
static DRWAV_INLINE drwav_bool32 drwav__fourcc_equal(const drwav_uint8* a, const char* b)
{
return
a[0] == b[0] &&
a[1] == b[1] &&
a[2] == b[2] &&
a[3] == b[3];
}
static DRWAV_INLINE int drwav__is_little_endian(void) static DRWAV_INLINE int drwav__is_little_endian(void)
{ {
#if defined(DRWAV_X86) || defined(DRWAV_X64) #if defined(DRWAV_X86) || defined(DRWAV_X64)
...@@ -49435,32 +49417,6 @@ static DRWAV_INLINE int drwav__is_little_endian(void) ...@@ -49435,32 +49417,6 @@ static DRWAV_INLINE int drwav__is_little_endian(void)
return (*(char*)&n) == 1; return (*(char*)&n) == 1;
#endif #endif
} }
static DRWAV_INLINE drwav_uint16 drwav__bytes_to_u16(const drwav_uint8* data)
{
return (data[0] << 0) | (data[1] << 8);
}
static DRWAV_INLINE drwav_int16 drwav__bytes_to_s16(const drwav_uint8* data)
{
return (short)drwav__bytes_to_u16(data);
}
static DRWAV_INLINE drwav_uint32 drwav__bytes_to_u32(const drwav_uint8* data)
{
return (data[0] << 0) | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
}
static DRWAV_INLINE drwav_int32 drwav__bytes_to_s32(const drwav_uint8* data)
{
return (drwav_int32)drwav__bytes_to_u32(data);
}
static DRWAV_INLINE drwav_uint64 drwav__bytes_to_u64(const drwav_uint8* data)
{
return
((drwav_uint64)data[0] << 0) | ((drwav_uint64)data[1] << 8) | ((drwav_uint64)data[2] << 16) | ((drwav_uint64)data[3] << 24) |
((drwav_uint64)data[4] << 32) | ((drwav_uint64)data[5] << 40) | ((drwav_uint64)data[6] << 48) | ((drwav_uint64)data[7] << 56);
}
static DRWAV_INLINE drwav_int64 drwav__bytes_to_s64(const drwav_uint8* data)
{
return (drwav_int64)drwav__bytes_to_u64(data);
}
static DRWAV_INLINE void drwav__bytes_to_guid(const drwav_uint8* data, drwav_uint8* guid) static DRWAV_INLINE void drwav__bytes_to_guid(const drwav_uint8* data, drwav_uint8* guid)
{ {
int i; int i;
...@@ -49675,22 +49631,22 @@ static DRWAV_INLINE void drwav__bswap_samples(void* pSamples, drwav_uint64 sampl ...@@ -49675,22 +49631,22 @@ static DRWAV_INLINE void drwav__bswap_samples(void* pSamples, drwav_uint64 sampl
} break; } break;
} }
} }
static void* drwav__malloc_default(size_t sz, void* pUserData) DRWAV_PRIVATE void* drwav__malloc_default(size_t sz, void* pUserData)
{ {
(void)pUserData; (void)pUserData;
return DRWAV_MALLOC(sz); return DRWAV_MALLOC(sz);
} }
static void* drwav__realloc_default(void* p, size_t sz, void* pUserData) DRWAV_PRIVATE void* drwav__realloc_default(void* p, size_t sz, void* pUserData)
{ {
(void)pUserData; (void)pUserData;
return DRWAV_REALLOC(p, sz); return DRWAV_REALLOC(p, sz);
} }
static void drwav__free_default(void* p, void* pUserData) DRWAV_PRIVATE void drwav__free_default(void* p, void* pUserData)
{ {
(void)pUserData; (void)pUserData;
DRWAV_FREE(p); DRWAV_FREE(p);
} }
static void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks == NULL) { if (pAllocationCallbacks == NULL) {
return NULL; return NULL;
...@@ -49703,7 +49659,7 @@ static void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_call ...@@ -49703,7 +49659,7 @@ static void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_call
} }
return NULL; return NULL;
} }
static void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks == NULL) { if (pAllocationCallbacks == NULL) {
return NULL; return NULL;
...@@ -49725,7 +49681,7 @@ static void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld, ...@@ -49725,7 +49681,7 @@ static void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld,
} }
return NULL; return NULL;
} }
static void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (p == NULL || pAllocationCallbacks == NULL) { if (p == NULL || pAllocationCallbacks == NULL) {
return; return;
...@@ -49734,7 +49690,7 @@ static void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks ...@@ -49734,7 +49690,7 @@ static void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks
pAllocationCallbacks->onFree(p, pAllocationCallbacks->pUserData); pAllocationCallbacks->onFree(p, pAllocationCallbacks->pUserData);
} }
} }
static drwav_allocation_callbacks drwav_copy_allocation_callbacks_or_defaults(const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_allocation_callbacks drwav_copy_allocation_callbacks_or_defaults(const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks != NULL) { if (pAllocationCallbacks != NULL) {
return *pAllocationCallbacks; return *pAllocationCallbacks;
...@@ -49753,18 +49709,18 @@ static DRWAV_INLINE drwav_bool32 drwav__is_compressed_format_tag(drwav_uint16 fo ...@@ -49753,18 +49709,18 @@ static DRWAV_INLINE drwav_bool32 drwav__is_compressed_format_tag(drwav_uint16 fo
formatTag == DR_WAVE_FORMAT_ADPCM || formatTag == DR_WAVE_FORMAT_ADPCM ||
formatTag == DR_WAVE_FORMAT_DVI_ADPCM; formatTag == DR_WAVE_FORMAT_DVI_ADPCM;
} }
static unsigned int drwav__chunk_padding_size_riff(drwav_uint64 chunkSize) DRWAV_PRIVATE unsigned int drwav__chunk_padding_size_riff(drwav_uint64 chunkSize)
{ {
return (unsigned int)(chunkSize % 2); return (unsigned int)(chunkSize % 2);
} }
static unsigned int drwav__chunk_padding_size_w64(drwav_uint64 chunkSize) DRWAV_PRIVATE unsigned int drwav__chunk_padding_size_w64(drwav_uint64 chunkSize)
{ {
return (unsigned int)(chunkSize % 8); return (unsigned int)(chunkSize % 8);
} }
static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut); DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut);
static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut); DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut);
static drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount); DRWAV_PRIVATE drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount);
static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_chunk_header* pHeaderOut) DRWAV_PRIVATE drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_chunk_header* pHeaderOut)
{ {
if (container == drwav_container_riff || container == drwav_container_rf64) { if (container == drwav_container_riff || container == drwav_container_rf64) {
drwav_uint8 sizeInBytes[4]; drwav_uint8 sizeInBytes[4];
...@@ -49774,7 +49730,7 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser ...@@ -49774,7 +49730,7 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser
if (onRead(pUserData, sizeInBytes, 4) != 4) { if (onRead(pUserData, sizeInBytes, 4) != 4) {
return DRWAV_INVALID_FILE; return DRWAV_INVALID_FILE;
} }
pHeaderOut->sizeInBytes = drwav__bytes_to_u32(sizeInBytes); pHeaderOut->sizeInBytes = drwav_bytes_to_u32(sizeInBytes);
pHeaderOut->paddingSize = drwav__chunk_padding_size_riff(pHeaderOut->sizeInBytes); pHeaderOut->paddingSize = drwav__chunk_padding_size_riff(pHeaderOut->sizeInBytes);
*pRunningBytesReadOut += 8; *pRunningBytesReadOut += 8;
} else { } else {
...@@ -49785,13 +49741,13 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser ...@@ -49785,13 +49741,13 @@ static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUser
if (onRead(pUserData, sizeInBytes, 8) != 8) { if (onRead(pUserData, sizeInBytes, 8) != 8) {
return DRWAV_INVALID_FILE; return DRWAV_INVALID_FILE;
} }
pHeaderOut->sizeInBytes = drwav__bytes_to_u64(sizeInBytes) - 24; pHeaderOut->sizeInBytes = drwav_bytes_to_u64(sizeInBytes) - 24;
pHeaderOut->paddingSize = drwav__chunk_padding_size_w64(pHeaderOut->sizeInBytes); pHeaderOut->paddingSize = drwav__chunk_padding_size_w64(pHeaderOut->sizeInBytes);
*pRunningBytesReadOut += 24; *pRunningBytesReadOut += 24;
} }
return DRWAV_SUCCESS; return DRWAV_SUCCESS;
} }
static drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData) DRWAV_PRIVATE drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData)
{ {
drwav_uint64 bytesRemainingToSeek = offset; drwav_uint64 bytesRemainingToSeek = offset;
while (bytesRemainingToSeek > 0) { while (bytesRemainingToSeek > 0) {
...@@ -49809,7 +49765,7 @@ static drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 off ...@@ -49809,7 +49765,7 @@ static drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 off
} }
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData) DRWAV_PRIVATE drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData)
{ {
if (offset <= 0x7FFFFFFF) { if (offset <= 0x7FFFFFFF) {
return onSeek(pUserData, (int)offset, drwav_seek_origin_start); return onSeek(pUserData, (int)offset, drwav_seek_origin_start);
...@@ -49828,14 +49784,14 @@ static drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64 ...@@ -49828,14 +49784,14 @@ static drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64
offset -= 0x7FFFFFFF; offset -= 0x7FFFFFFF;
} }
} }
static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_fmt* fmtOut) DRWAV_PRIVATE drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_fmt* fmtOut)
{ {
drwav_chunk_header header; drwav_chunk_header header;
drwav_uint8 fmt[16]; drwav_uint8 fmt[16];
if (drwav__read_chunk_header(onRead, pUserData, container, pRunningBytesReadOut, &header) != DRWAV_SUCCESS) { if (drwav__read_chunk_header(onRead, pUserData, container, pRunningBytesReadOut, &header) != DRWAV_SUCCESS) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
while (((container == drwav_container_riff || container == drwav_container_rf64) && !drwav__fourcc_equal(header.id.fourcc, "fmt ")) || (container == drwav_container_w64 && !drwav__guid_equal(header.id.guid, drwavGUID_W64_FMT))) { while (((container == drwav_container_riff || container == drwav_container_rf64) && !drwav_fourcc_equal(header.id.fourcc, "fmt ")) || (container == drwav_container_w64 && !drwav_guid_equal(header.id.guid, drwavGUID_W64_FMT))) {
if (!drwav__seek_forward(onSeek, header.sizeInBytes + header.paddingSize, pUserData)) { if (!drwav__seek_forward(onSeek, header.sizeInBytes + header.paddingSize, pUserData)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
...@@ -49845,11 +49801,11 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -49845,11 +49801,11 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
} }
} }
if (container == drwav_container_riff || container == drwav_container_rf64) { if (container == drwav_container_riff || container == drwav_container_rf64) {
if (!drwav__fourcc_equal(header.id.fourcc, "fmt ")) { if (!drwav_fourcc_equal(header.id.fourcc, "fmt ")) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} else { } else {
if (!drwav__guid_equal(header.id.guid, drwavGUID_W64_FMT)) { if (!drwav_guid_equal(header.id.guid, drwavGUID_W64_FMT)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} }
...@@ -49857,12 +49813,12 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -49857,12 +49813,12 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
return DRWAV_FALSE; return DRWAV_FALSE;
} }
*pRunningBytesReadOut += sizeof(fmt); *pRunningBytesReadOut += sizeof(fmt);
fmtOut->formatTag = drwav__bytes_to_u16(fmt + 0); fmtOut->formatTag = drwav_bytes_to_u16(fmt + 0);
fmtOut->channels = drwav__bytes_to_u16(fmt + 2); fmtOut->channels = drwav_bytes_to_u16(fmt + 2);
fmtOut->sampleRate = drwav__bytes_to_u32(fmt + 4); fmtOut->sampleRate = drwav_bytes_to_u32(fmt + 4);
fmtOut->avgBytesPerSec = drwav__bytes_to_u32(fmt + 8); fmtOut->avgBytesPerSec = drwav_bytes_to_u32(fmt + 8);
fmtOut->blockAlign = drwav__bytes_to_u16(fmt + 12); fmtOut->blockAlign = drwav_bytes_to_u16(fmt + 12);
fmtOut->bitsPerSample = drwav__bytes_to_u16(fmt + 14); fmtOut->bitsPerSample = drwav_bytes_to_u16(fmt + 14);
fmtOut->extendedSize = 0; fmtOut->extendedSize = 0;
fmtOut->validBitsPerSample = 0; fmtOut->validBitsPerSample = 0;
fmtOut->channelMask = 0; fmtOut->channelMask = 0;
...@@ -49875,7 +49831,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -49875,7 +49831,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
} }
*pRunningBytesReadOut += sizeof(fmt_cbSize); *pRunningBytesReadOut += sizeof(fmt_cbSize);
bytesReadSoFar = 18; bytesReadSoFar = 18;
fmtOut->extendedSize = drwav__bytes_to_u16(fmt_cbSize); fmtOut->extendedSize = drwav_bytes_to_u16(fmt_cbSize);
if (fmtOut->extendedSize > 0) { if (fmtOut->extendedSize > 0) {
if (fmtOut->formatTag == DR_WAVE_FORMAT_EXTENSIBLE) { if (fmtOut->formatTag == DR_WAVE_FORMAT_EXTENSIBLE) {
if (fmtOut->extendedSize != 22) { if (fmtOut->extendedSize != 22) {
...@@ -49887,8 +49843,8 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -49887,8 +49843,8 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
if (onRead(pUserData, fmtext, fmtOut->extendedSize) != fmtOut->extendedSize) { if (onRead(pUserData, fmtext, fmtOut->extendedSize) != fmtOut->extendedSize) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
fmtOut->validBitsPerSample = drwav__bytes_to_u16(fmtext + 0); fmtOut->validBitsPerSample = drwav_bytes_to_u16(fmtext + 0);
fmtOut->channelMask = drwav__bytes_to_u32(fmtext + 2); fmtOut->channelMask = drwav_bytes_to_u32(fmtext + 2);
drwav__bytes_to_guid(fmtext + 6, fmtOut->subFormat); drwav__bytes_to_guid(fmtext + 6, fmtOut->subFormat);
} else { } else {
if (!onSeek(pUserData, fmtOut->extendedSize, drwav_seek_origin_current)) { if (!onSeek(pUserData, fmtOut->extendedSize, drwav_seek_origin_current)) {
...@@ -49911,7 +49867,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe ...@@ -49911,7 +49867,7 @@ static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSe
} }
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBufferOut, size_t bytesToRead, drwav_uint64* pCursor) DRWAV_PRIVATE size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBufferOut, size_t bytesToRead, drwav_uint64* pCursor)
{ {
size_t bytesRead; size_t bytesRead;
DRWAV_ASSERT(onRead != NULL); DRWAV_ASSERT(onRead != NULL);
...@@ -49921,7 +49877,7 @@ static size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBuf ...@@ -49921,7 +49877,7 @@ static size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBuf
return bytesRead; return bytesRead;
} }
#if 0 #if 0
static drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int offset, drwav_seek_origin origin, drwav_uint64* pCursor) DRWAV_PRIVATE drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int offset, drwav_seek_origin origin, drwav_uint64* pCursor)
{ {
DRWAV_ASSERT(onSeek != NULL); DRWAV_ASSERT(onSeek != NULL);
DRWAV_ASSERT(pCursor != NULL); DRWAV_ASSERT(pCursor != NULL);
...@@ -49936,7 +49892,7 @@ static drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int ...@@ -49936,7 +49892,7 @@ static drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int
return DRWAV_TRUE; return DRWAV_TRUE;
} }
#endif #endif
static drwav_uint32 drwav_get_bytes_per_pcm_frame(drwav* pWav) DRWAV_PRIVATE drwav_uint32 drwav_get_bytes_per_pcm_frame(drwav* pWav)
{ {
if ((pWav->bitsPerSample & 0x7) == 0) { if ((pWav->bitsPerSample & 0x7) == 0) {
return (pWav->bitsPerSample * pWav->fmt.channels) >> 3; return (pWav->bitsPerSample * pWav->fmt.channels) >> 3;
...@@ -49952,10 +49908,10 @@ DRWAV_API drwav_uint16 drwav_fmt_get_format(const drwav_fmt* pFMT) ...@@ -49952,10 +49908,10 @@ DRWAV_API drwav_uint16 drwav_fmt_get_format(const drwav_fmt* pFMT)
if (pFMT->formatTag != DR_WAVE_FORMAT_EXTENSIBLE) { if (pFMT->formatTag != DR_WAVE_FORMAT_EXTENSIBLE) {
return pFMT->formatTag; return pFMT->formatTag;
} else { } else {
return drwav__bytes_to_u16(pFMT->subFormat); return drwav_bytes_to_u16(pFMT->subFormat);
} }
} }
static drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pReadSeekUserData, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pReadSeekUserData, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pWav == NULL || onRead == NULL || onSeek == NULL) { if (pWav == NULL || onRead == NULL || onSeek == NULL) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -49970,7 +49926,7 @@ static drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_see ...@@ -49970,7 +49926,7 @@ static drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_see
} }
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags) DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags)
{ {
drwav_uint64 cursor; drwav_uint64 cursor;
drwav_bool32 sequential; drwav_bool32 sequential;
...@@ -49986,9 +49942,9 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -49986,9 +49942,9 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
if (drwav__on_read(pWav->onRead, pWav->pUserData, riff, sizeof(riff), &cursor) != sizeof(riff)) { if (drwav__on_read(pWav->onRead, pWav->pUserData, riff, sizeof(riff), &cursor) != sizeof(riff)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (drwav__fourcc_equal(riff, "RIFF")) { if (drwav_fourcc_equal(riff, "RIFF")) {
pWav->container = drwav_container_riff; pWav->container = drwav_container_riff;
} else if (drwav__fourcc_equal(riff, "riff")) { } else if (drwav_fourcc_equal(riff, "riff")) {
int i; int i;
drwav_uint8 riff2[12]; drwav_uint8 riff2[12];
pWav->container = drwav_container_w64; pWav->container = drwav_container_w64;
...@@ -50000,7 +49956,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50000,7 +49956,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} }
} else if (drwav__fourcc_equal(riff, "RF64")) { } else if (drwav_fourcc_equal(riff, "RF64")) {
pWav->container = drwav_container_rf64; pWav->container = drwav_container_rf64;
} else { } else {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -50012,18 +49968,18 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50012,18 +49968,18 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (pWav->container == drwav_container_riff) { if (pWav->container == drwav_container_riff) {
if (drwav__bytes_to_u32(chunkSizeBytes) < 36) { if (drwav_bytes_to_u32(chunkSizeBytes) < 36) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} else { } else {
if (drwav__bytes_to_u32(chunkSizeBytes) != 0xFFFFFFFF) { if (drwav_bytes_to_u32(chunkSizeBytes) != 0xFFFFFFFF) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} }
if (drwav__on_read(pWav->onRead, pWav->pUserData, wave, sizeof(wave), &cursor) != sizeof(wave)) { if (drwav__on_read(pWav->onRead, pWav->pUserData, wave, sizeof(wave), &cursor) != sizeof(wave)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (!drwav__fourcc_equal(wave, "WAVE")) { if (!drwav_fourcc_equal(wave, "WAVE")) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} else { } else {
...@@ -50032,13 +49988,13 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50032,13 +49988,13 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
if (drwav__on_read(pWav->onRead, pWav->pUserData, chunkSizeBytes, sizeof(chunkSizeBytes), &cursor) != sizeof(chunkSizeBytes)) { if (drwav__on_read(pWav->onRead, pWav->pUserData, chunkSizeBytes, sizeof(chunkSizeBytes), &cursor) != sizeof(chunkSizeBytes)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (drwav__bytes_to_u64(chunkSizeBytes) < 80) { if (drwav_bytes_to_u64(chunkSizeBytes) < 80) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (drwav__on_read(pWav->onRead, pWav->pUserData, wave, sizeof(wave), &cursor) != sizeof(wave)) { if (drwav__on_read(pWav->onRead, pWav->pUserData, wave, sizeof(wave), &cursor) != sizeof(wave)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (!drwav__guid_equal(wave, drwavGUID_W64_WAVE)) { if (!drwav_guid_equal(wave, drwavGUID_W64_WAVE)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
} }
...@@ -50050,7 +50006,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50050,7 +50006,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
if (result != DRWAV_SUCCESS) { if (result != DRWAV_SUCCESS) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
if (!drwav__fourcc_equal(header.id.fourcc, "ds64")) { if (!drwav_fourcc_equal(header.id.fourcc, "ds64")) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
bytesRemainingInChunk = header.sizeInBytes + header.paddingSize; bytesRemainingInChunk = header.sizeInBytes + header.paddingSize;
...@@ -50063,12 +50019,12 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50063,12 +50019,12 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
return DRWAV_FALSE; return DRWAV_FALSE;
} }
bytesRemainingInChunk -= 8; bytesRemainingInChunk -= 8;
dataChunkSize = drwav__bytes_to_u64(sizeBytes); dataChunkSize = drwav_bytes_to_u64(sizeBytes);
if (drwav__on_read(pWav->onRead, pWav->pUserData, sizeBytes, sizeof(sizeBytes), &cursor) != sizeof(sizeBytes)) { if (drwav__on_read(pWav->onRead, pWav->pUserData, sizeBytes, sizeof(sizeBytes), &cursor) != sizeof(sizeBytes)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
bytesRemainingInChunk -= 8; bytesRemainingInChunk -= 8;
sampleCountFromFactChunk = drwav__bytes_to_u64(sizeBytes); sampleCountFromFactChunk = drwav_bytes_to_u64(sizeBytes);
if (!drwav__seek_forward(pWav->onSeek, bytesRemainingInChunk, pWav->pUserData)) { if (!drwav__seek_forward(pWav->onSeek, bytesRemainingInChunk, pWav->pUserData)) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
...@@ -50085,7 +50041,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50085,7 +50041,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
} }
translatedFormatTag = fmt.formatTag; translatedFormatTag = fmt.formatTag;
if (translatedFormatTag == DR_WAVE_FORMAT_EXTENSIBLE) { if (translatedFormatTag == DR_WAVE_FORMAT_EXTENSIBLE) {
translatedFormatTag = drwav__bytes_to_u16(fmt.subFormat + 0); translatedFormatTag = drwav_bytes_to_u16(fmt.subFormat + 0);
} }
foundDataChunk = DRWAV_FALSE; foundDataChunk = DRWAV_FALSE;
for (;;) for (;;)
...@@ -50112,14 +50068,14 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50112,14 +50068,14 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
} }
chunkSize = header.sizeInBytes; chunkSize = header.sizeInBytes;
if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) {
if (drwav__fourcc_equal(header.id.fourcc, "data")) { if (drwav_fourcc_equal(header.id.fourcc, "data")) {
foundDataChunk = DRWAV_TRUE; foundDataChunk = DRWAV_TRUE;
if (pWav->container != drwav_container_rf64) { if (pWav->container != drwav_container_rf64) {
dataChunkSize = chunkSize; dataChunkSize = chunkSize;
} }
} }
} else { } else {
if (drwav__guid_equal(header.id.guid, drwavGUID_W64_DATA)) { if (drwav_guid_equal(header.id.guid, drwavGUID_W64_DATA)) {
foundDataChunk = DRWAV_TRUE; foundDataChunk = DRWAV_TRUE;
dataChunkSize = chunkSize; dataChunkSize = chunkSize;
} }
...@@ -50128,7 +50084,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50128,7 +50084,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
break; break;
} }
if (pWav->container == drwav_container_riff) { if (pWav->container == drwav_container_riff) {
if (drwav__fourcc_equal(header.id.fourcc, "fact")) { if (drwav_fourcc_equal(header.id.fourcc, "fact")) {
drwav_uint32 sampleCount; drwav_uint32 sampleCount;
if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCount, 4, &cursor) != 4) { if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCount, 4, &cursor) != 4) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -50144,7 +50100,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50144,7 +50100,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
} }
} }
} else if (pWav->container == drwav_container_w64) { } else if (pWav->container == drwav_container_w64) {
if (drwav__guid_equal(header.id.guid, drwavGUID_W64_FACT)) { if (drwav_guid_equal(header.id.guid, drwavGUID_W64_FACT)) {
if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCountFromFactChunk, 8, &cursor) != 8) { if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCountFromFactChunk, 8, &cursor) != 8) {
return DRWAV_FALSE; return DRWAV_FALSE;
} }
...@@ -50156,33 +50112,33 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50156,33 +50112,33 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
} else if (pWav->container == drwav_container_rf64) { } else if (pWav->container == drwav_container_rf64) {
} }
if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) {
if (drwav__fourcc_equal(header.id.fourcc, "smpl")) { if (drwav_fourcc_equal(header.id.fourcc, "smpl")) {
drwav_uint8 smplHeaderData[36]; drwav_uint8 smplHeaderData[36];
if (chunkSize >= sizeof(smplHeaderData)) { if (chunkSize >= sizeof(smplHeaderData)) {
drwav_uint64 bytesJustRead = drwav__on_read(pWav->onRead, pWav->pUserData, smplHeaderData, sizeof(smplHeaderData), &cursor); drwav_uint64 bytesJustRead = drwav__on_read(pWav->onRead, pWav->pUserData, smplHeaderData, sizeof(smplHeaderData), &cursor);
chunkSize -= bytesJustRead; chunkSize -= bytesJustRead;
if (bytesJustRead == sizeof(smplHeaderData)) { if (bytesJustRead == sizeof(smplHeaderData)) {
drwav_uint32 iLoop; drwav_uint32 iLoop;
pWav->smpl.manufacturer = drwav__bytes_to_u32(smplHeaderData+0); pWav->smpl.manufacturer = drwav_bytes_to_u32(smplHeaderData+0);
pWav->smpl.product = drwav__bytes_to_u32(smplHeaderData+4); pWav->smpl.product = drwav_bytes_to_u32(smplHeaderData+4);
pWav->smpl.samplePeriod = drwav__bytes_to_u32(smplHeaderData+8); pWav->smpl.samplePeriod = drwav_bytes_to_u32(smplHeaderData+8);
pWav->smpl.midiUnityNotes = drwav__bytes_to_u32(smplHeaderData+12); pWav->smpl.midiUnityNotes = drwav_bytes_to_u32(smplHeaderData+12);
pWav->smpl.midiPitchFraction = drwav__bytes_to_u32(smplHeaderData+16); pWav->smpl.midiPitchFraction = drwav_bytes_to_u32(smplHeaderData+16);
pWav->smpl.smpteFormat = drwav__bytes_to_u32(smplHeaderData+20); pWav->smpl.smpteFormat = drwav_bytes_to_u32(smplHeaderData+20);
pWav->smpl.smpteOffset = drwav__bytes_to_u32(smplHeaderData+24); pWav->smpl.smpteOffset = drwav_bytes_to_u32(smplHeaderData+24);
pWav->smpl.numSampleLoops = drwav__bytes_to_u32(smplHeaderData+28); pWav->smpl.numSampleLoops = drwav_bytes_to_u32(smplHeaderData+28);
pWav->smpl.samplerData = drwav__bytes_to_u32(smplHeaderData+32); pWav->smpl.samplerData = drwav_bytes_to_u32(smplHeaderData+32);
for (iLoop = 0; iLoop < pWav->smpl.numSampleLoops && iLoop < drwav_countof(pWav->smpl.loops); ++iLoop) { for (iLoop = 0; iLoop < pWav->smpl.numSampleLoops && iLoop < drwav_countof(pWav->smpl.loops); ++iLoop) {
drwav_uint8 smplLoopData[24]; drwav_uint8 smplLoopData[24];
bytesJustRead = drwav__on_read(pWav->onRead, pWav->pUserData, smplLoopData, sizeof(smplLoopData), &cursor); bytesJustRead = drwav__on_read(pWav->onRead, pWav->pUserData, smplLoopData, sizeof(smplLoopData), &cursor);
chunkSize -= bytesJustRead; chunkSize -= bytesJustRead;
if (bytesJustRead == sizeof(smplLoopData)) { if (bytesJustRead == sizeof(smplLoopData)) {
pWav->smpl.loops[iLoop].cuePointId = drwav__bytes_to_u32(smplLoopData+0); pWav->smpl.loops[iLoop].cuePointId = drwav_bytes_to_u32(smplLoopData+0);
pWav->smpl.loops[iLoop].type = drwav__bytes_to_u32(smplLoopData+4); pWav->smpl.loops[iLoop].type = drwav_bytes_to_u32(smplLoopData+4);
pWav->smpl.loops[iLoop].start = drwav__bytes_to_u32(smplLoopData+8); pWav->smpl.loops[iLoop].start = drwav_bytes_to_u32(smplLoopData+8);
pWav->smpl.loops[iLoop].end = drwav__bytes_to_u32(smplLoopData+12); pWav->smpl.loops[iLoop].end = drwav_bytes_to_u32(smplLoopData+12);
pWav->smpl.loops[iLoop].fraction = drwav__bytes_to_u32(smplLoopData+16); pWav->smpl.loops[iLoop].fraction = drwav_bytes_to_u32(smplLoopData+16);
pWav->smpl.loops[iLoop].playCount = drwav__bytes_to_u32(smplLoopData+20); pWav->smpl.loops[iLoop].playCount = drwav_bytes_to_u32(smplLoopData+20);
} else { } else {
break; break;
} }
...@@ -50192,7 +50148,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, ...@@ -50192,7 +50148,7 @@ static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk,
} }
} }
} else { } else {
if (drwav__guid_equal(header.id.guid, drwavGUID_W64_SMPL)) { if (drwav_guid_equal(header.id.guid, drwavGUID_W64_SMPL)) {
} }
} }
chunkSize += header.paddingSize; chunkSize += header.paddingSize;
...@@ -50272,7 +50228,7 @@ DRWAV_API drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead, drwav_ ...@@ -50272,7 +50228,7 @@ DRWAV_API drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead, drwav_
} }
return drwav_init__internal(pWav, onChunk, pChunkUserData, flags); return drwav_init__internal(pWav, onChunk, pChunkUserData, flags);
} }
static drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize)
{ {
drwav_uint64 chunkSize = 4 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize); drwav_uint64 chunkSize = 4 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize);
if (chunkSize > 0xFFFFFFFFUL) { if (chunkSize > 0xFFFFFFFFUL) {
...@@ -50280,7 +50236,7 @@ static drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize) ...@@ -50280,7 +50236,7 @@ static drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize)
} }
return (drwav_uint32)chunkSize; return (drwav_uint32)chunkSize;
} }
static drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize)
{ {
if (dataChunkSize <= 0xFFFFFFFFUL) { if (dataChunkSize <= 0xFFFFFFFFUL) {
return (drwav_uint32)dataChunkSize; return (drwav_uint32)dataChunkSize;
...@@ -50288,16 +50244,16 @@ static drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize) ...@@ -50288,16 +50244,16 @@ static drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize)
return 0xFFFFFFFFUL; return 0xFFFFFFFFUL;
} }
} }
static drwav_uint64 drwav__riff_chunk_size_w64(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint64 drwav__riff_chunk_size_w64(drwav_uint64 dataChunkSize)
{ {
drwav_uint64 dataSubchunkPaddingSize = drwav__chunk_padding_size_w64(dataChunkSize); drwav_uint64 dataSubchunkPaddingSize = drwav__chunk_padding_size_w64(dataChunkSize);
return 80 + 24 + dataChunkSize + dataSubchunkPaddingSize; return 80 + 24 + dataChunkSize + dataSubchunkPaddingSize;
} }
static drwav_uint64 drwav__data_chunk_size_w64(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint64 drwav__data_chunk_size_w64(drwav_uint64 dataChunkSize)
{ {
return 24 + dataChunkSize; return 24 + dataChunkSize;
} }
static drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize)
{ {
drwav_uint64 chunkSize = 4 + 36 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize); drwav_uint64 chunkSize = 4 + 36 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize);
if (chunkSize > 0xFFFFFFFFUL) { if (chunkSize > 0xFFFFFFFFUL) {
...@@ -50305,17 +50261,17 @@ static drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize) ...@@ -50305,17 +50261,17 @@ static drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize)
} }
return chunkSize; return chunkSize;
} }
static drwav_uint64 drwav__data_chunk_size_rf64(drwav_uint64 dataChunkSize) DRWAV_PRIVATE drwav_uint64 drwav__data_chunk_size_rf64(drwav_uint64 dataChunkSize)
{ {
return dataChunkSize; return dataChunkSize;
} }
static size_t drwav__write(drwav* pWav, const void* pData, size_t dataSize) DRWAV_PRIVATE size_t drwav__write(drwav* pWav, const void* pData, size_t dataSize)
{ {
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
DRWAV_ASSERT(pWav->onWrite != NULL); DRWAV_ASSERT(pWav->onWrite != NULL);
return pWav->onWrite(pWav->pUserData, pData, dataSize); return pWav->onWrite(pWav->pUserData, pData, dataSize);
} }
static size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value) DRWAV_PRIVATE size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value)
{ {
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
DRWAV_ASSERT(pWav->onWrite != NULL); DRWAV_ASSERT(pWav->onWrite != NULL);
...@@ -50324,7 +50280,7 @@ static size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value) ...@@ -50324,7 +50280,7 @@ static size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value)
} }
return drwav__write(pWav, &value, 2); return drwav__write(pWav, &value, 2);
} }
static size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value) DRWAV_PRIVATE size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value)
{ {
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
DRWAV_ASSERT(pWav->onWrite != NULL); DRWAV_ASSERT(pWav->onWrite != NULL);
...@@ -50333,7 +50289,7 @@ static size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value) ...@@ -50333,7 +50289,7 @@ static size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value)
} }
return drwav__write(pWav, &value, 4); return drwav__write(pWav, &value, 4);
} }
static size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value) DRWAV_PRIVATE size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value)
{ {
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
DRWAV_ASSERT(pWav->onWrite != NULL); DRWAV_ASSERT(pWav->onWrite != NULL);
...@@ -50342,7 +50298,7 @@ static size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value) ...@@ -50342,7 +50298,7 @@ static size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value)
} }
return drwav__write(pWav, &value, 8); return drwav__write(pWav, &value, 8);
} }
static drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pFormat, drwav_bool32 isSequential, drwav_write_proc onWrite, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pFormat, drwav_bool32 isSequential, drwav_write_proc onWrite, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (pWav == NULL || onWrite == NULL) { if (pWav == NULL || onWrite == NULL) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -50374,7 +50330,7 @@ static drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pF ...@@ -50374,7 +50330,7 @@ static drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pF
pWav->isSequentialWrite = isSequential; pWav->isSequentialWrite = isSequential;
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount) DRWAV_PRIVATE drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount)
{ {
size_t runningPos = 0; size_t runningPos = 0;
drwav_uint64 initialDataChunkSize = 0; drwav_uint64 initialDataChunkSize = 0;
...@@ -50489,7 +50445,7 @@ DRWAV_API drwav_uint64 drwav_target_write_size_bytes(const drwav_data_format* pF ...@@ -50489,7 +50445,7 @@ DRWAV_API drwav_uint64 drwav_target_write_size_bytes(const drwav_data_format* pF
} }
#ifndef DR_WAV_NO_STDIO #ifndef DR_WAV_NO_STDIO
#include <errno.h> #include <errno.h>
static drwav_result drwav_result_from_errno(int e) DRWAV_PRIVATE drwav_result drwav_result_from_errno(int e)
{ {
switch (e) switch (e)
{ {
...@@ -50890,7 +50846,7 @@ static drwav_result drwav_result_from_errno(int e) ...@@ -50890,7 +50846,7 @@ static drwav_result drwav_result_from_errno(int e)
default: return DRWAV_ERROR; default: return DRWAV_ERROR;
} }
} }
static drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, const char* pOpenMode) DRWAV_PRIVATE drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, const char* pOpenMode)
{ {
#if _MSC_VER && _MSC_VER >= 1400 #if _MSC_VER && _MSC_VER >= 1400
errno_t err; errno_t err;
...@@ -50931,7 +50887,7 @@ static drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, const char ...@@ -50931,7 +50887,7 @@ static drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, const char
#define DRWAV_HAS_WFOPEN #define DRWAV_HAS_WFOPEN
#endif #endif
#endif #endif
static drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const wchar_t* pOpenMode, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const wchar_t* pOpenMode, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (ppFile != NULL) { if (ppFile != NULL) {
*ppFile = NULL; *ppFile = NULL;
...@@ -50993,15 +50949,15 @@ static drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const ...@@ -50993,15 +50949,15 @@ static drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const
#endif #endif
return DRWAV_SUCCESS; return DRWAV_SUCCESS;
} }
static size_t drwav__on_read_stdio(void* pUserData, void* pBufferOut, size_t bytesToRead) DRWAV_PRIVATE size_t drwav__on_read_stdio(void* pUserData, void* pBufferOut, size_t bytesToRead)
{ {
return fread(pBufferOut, 1, bytesToRead, (FILE*)pUserData); return fread(pBufferOut, 1, bytesToRead, (FILE*)pUserData);
} }
static size_t drwav__on_write_stdio(void* pUserData, const void* pData, size_t bytesToWrite) DRWAV_PRIVATE size_t drwav__on_write_stdio(void* pUserData, const void* pData, size_t bytesToWrite)
{ {
return fwrite(pData, 1, bytesToWrite, (FILE*)pUserData); return fwrite(pData, 1, bytesToWrite, (FILE*)pUserData);
} }
static drwav_bool32 drwav__on_seek_stdio(void* pUserData, int offset, drwav_seek_origin origin) DRWAV_PRIVATE drwav_bool32 drwav__on_seek_stdio(void* pUserData, int offset, drwav_seek_origin origin)
{ {
return fseek((FILE*)pUserData, offset, (origin == drwav_seek_origin_current) ? SEEK_CUR : SEEK_SET) == 0; return fseek((FILE*)pUserData, offset, (origin == drwav_seek_origin_current) ? SEEK_CUR : SEEK_SET) == 0;
} }
...@@ -51009,7 +50965,7 @@ DRWAV_API drwav_bool32 drwav_init_file(drwav* pWav, const char* filename, const ...@@ -51009,7 +50965,7 @@ DRWAV_API drwav_bool32 drwav_init_file(drwav* pWav, const char* filename, const
{ {
return drwav_init_file_ex(pWav, filename, NULL, NULL, 0, pAllocationCallbacks); return drwav_init_file_ex(pWav, filename, NULL, NULL, 0, pAllocationCallbacks);
} }
static drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pFile, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pFile, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
drwav_bool32 result; drwav_bool32 result;
result = drwav_preinit(pWav, drwav__on_read_stdio, drwav__on_seek_stdio, (void*)pFile, pAllocationCallbacks); result = drwav_preinit(pWav, drwav__on_read_stdio, drwav__on_seek_stdio, (void*)pFile, pAllocationCallbacks);
...@@ -51044,7 +51000,7 @@ DRWAV_API drwav_bool32 drwav_init_file_ex_w(drwav* pWav, const wchar_t* filename ...@@ -51044,7 +51000,7 @@ DRWAV_API drwav_bool32 drwav_init_file_ex_w(drwav* pWav, const wchar_t* filename
} }
return drwav_init_file__internal_FILE(pWav, pFile, onChunk, pChunkUserData, flags, pAllocationCallbacks); return drwav_init_file__internal_FILE(pWav, pFile, onChunk, pChunkUserData, flags, pAllocationCallbacks);
} }
static drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFile, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFile, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
drwav_bool32 result; drwav_bool32 result;
result = drwav_preinit_write(pWav, pFormat, isSequential, drwav__on_write_stdio, drwav__on_seek_stdio, (void*)pFile, pAllocationCallbacks); result = drwav_preinit_write(pWav, pFormat, isSequential, drwav__on_write_stdio, drwav__on_seek_stdio, (void*)pFile, pAllocationCallbacks);
...@@ -51059,7 +51015,7 @@ static drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFil ...@@ -51059,7 +51015,7 @@ static drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFil
} }
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
FILE* pFile; FILE* pFile;
if (drwav_fopen(&pFile, filename, "wb") != DRWAV_SUCCESS) { if (drwav_fopen(&pFile, filename, "wb") != DRWAV_SUCCESS) {
...@@ -51067,7 +51023,7 @@ static drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* fil ...@@ -51067,7 +51023,7 @@ static drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* fil
} }
return drwav_init_file_write__internal_FILE(pWav, pFile, pFormat, totalSampleCount, isSequential, pAllocationCallbacks); return drwav_init_file_write__internal_FILE(pWav, pFile, pFormat, totalSampleCount, isSequential, pAllocationCallbacks);
} }
static drwav_bool32 drwav_init_file_write_w__internal(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_file_write_w__internal(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
FILE* pFile; FILE* pFile;
if (drwav_wfopen(&pFile, filename, L"wb", pAllocationCallbacks) != DRWAV_SUCCESS) { if (drwav_wfopen(&pFile, filename, L"wb", pAllocationCallbacks) != DRWAV_SUCCESS) {
...@@ -51106,7 +51062,7 @@ DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames_w(drwav* pWav ...@@ -51106,7 +51062,7 @@ DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames_w(drwav* pWav
return drwav_init_file_write_sequential_w(pWav, filename, pFormat, totalPCMFrameCount*pFormat->channels, pAllocationCallbacks); return drwav_init_file_write_sequential_w(pWav, filename, pFormat, totalPCMFrameCount*pFormat->channels, pAllocationCallbacks);
} }
#endif #endif
static size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t bytesToRead) DRWAV_PRIVATE size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t bytesToRead)
{ {
drwav* pWav = (drwav*)pUserData; drwav* pWav = (drwav*)pUserData;
size_t bytesRemaining; size_t bytesRemaining;
...@@ -51122,7 +51078,7 @@ static size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t by ...@@ -51122,7 +51078,7 @@ static size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t by
} }
return bytesToRead; return bytesToRead;
} }
static drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_seek_origin origin) DRWAV_PRIVATE drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_seek_origin origin)
{ {
drwav* pWav = (drwav*)pUserData; drwav* pWav = (drwav*)pUserData;
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
...@@ -51146,7 +51102,7 @@ static drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_see ...@@ -51146,7 +51102,7 @@ static drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_see
} }
return DRWAV_TRUE; return DRWAV_TRUE;
} }
static size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_t bytesToWrite) DRWAV_PRIVATE size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_t bytesToWrite)
{ {
drwav* pWav = (drwav*)pUserData; drwav* pWav = (drwav*)pUserData;
size_t bytesRemaining; size_t bytesRemaining;
...@@ -51174,7 +51130,7 @@ static size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_ ...@@ -51174,7 +51130,7 @@ static size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_
*pWav->memoryStreamWrite.pDataSize = pWav->memoryStreamWrite.dataSize; *pWav->memoryStreamWrite.pDataSize = pWav->memoryStreamWrite.dataSize;
return bytesToWrite; return bytesToWrite;
} }
static drwav_bool32 drwav__on_seek_memory_write(void* pUserData, int offset, drwav_seek_origin origin) DRWAV_PRIVATE drwav_bool32 drwav__on_seek_memory_write(void* pUserData, int offset, drwav_seek_origin origin)
{ {
drwav* pWav = (drwav*)pUserData; drwav* pWav = (drwav*)pUserData;
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
...@@ -51215,7 +51171,7 @@ DRWAV_API drwav_bool32 drwav_init_memory_ex(drwav* pWav, const void* data, size_ ...@@ -51215,7 +51171,7 @@ DRWAV_API drwav_bool32 drwav_init_memory_ex(drwav* pWav, const void* data, size_
pWav->memoryStream.currentReadPos = 0; pWav->memoryStream.currentReadPos = 0;
return drwav_init__internal(pWav, onChunk, pChunkUserData, flags); return drwav_init__internal(pWav, onChunk, pChunkUserData, flags);
} }
static drwav_bool32 drwav_init_memory_write__internal(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) DRWAV_PRIVATE drwav_bool32 drwav_init_memory_write__internal(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks)
{ {
if (ppData == NULL || pDataSize == NULL) { if (ppData == NULL || pDataSize == NULL) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -51387,7 +51343,7 @@ DRWAV_API drwav_uint64 drwav_read_pcm_frames(drwav* pWav, drwav_uint64 framesToR ...@@ -51387,7 +51343,7 @@ DRWAV_API drwav_uint64 drwav_read_pcm_frames(drwav* pWav, drwav_uint64 framesToR
return drwav_read_pcm_frames_be(pWav, framesToRead, pBufferOut); return drwav_read_pcm_frames_be(pWav, framesToRead, pBufferOut);
} }
} }
DRWAV_API drwav_bool32 drwav_seek_to_first_pcm_frame(drwav* pWav) DRWAV_PRIVATE drwav_bool32 drwav_seek_to_first_pcm_frame(drwav* pWav)
{ {
if (pWav->onWrite != NULL) { if (pWav->onWrite != NULL) {
return DRWAV_FALSE; return DRWAV_FALSE;
...@@ -51564,7 +51520,7 @@ DRWAV_API drwav_uint64 drwav_write_pcm_frames(drwav* pWav, drwav_uint64 framesTo ...@@ -51564,7 +51520,7 @@ DRWAV_API drwav_uint64 drwav_write_pcm_frames(drwav* pWav, drwav_uint64 framesTo
return drwav_write_pcm_frames_be(pWav, framesToWrite, pData); return drwav_write_pcm_frames_be(pWav, framesToWrite, pData);
} }
} }
static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(pWav != NULL);
...@@ -51578,9 +51534,9 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 ...@@ -51578,9 +51534,9 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64
} }
pWav->msadpcm.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header); pWav->msadpcm.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header);
pWav->msadpcm.predictor[0] = header[0]; pWav->msadpcm.predictor[0] = header[0];
pWav->msadpcm.delta[0] = drwav__bytes_to_s16(header + 1); pWav->msadpcm.delta[0] = drwav_bytes_to_s16(header + 1);
pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav__bytes_to_s16(header + 3); pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav_bytes_to_s16(header + 3);
pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav__bytes_to_s16(header + 5); pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav_bytes_to_s16(header + 5);
pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][0]; pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][0];
pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[0][1]; pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[0][1];
pWav->msadpcm.cachedFrameCount = 2; pWav->msadpcm.cachedFrameCount = 2;
...@@ -51592,12 +51548,12 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 ...@@ -51592,12 +51548,12 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64
pWav->msadpcm.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header); pWav->msadpcm.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header);
pWav->msadpcm.predictor[0] = header[0]; pWav->msadpcm.predictor[0] = header[0];
pWav->msadpcm.predictor[1] = header[1]; pWav->msadpcm.predictor[1] = header[1];
pWav->msadpcm.delta[0] = drwav__bytes_to_s16(header + 2); pWav->msadpcm.delta[0] = drwav_bytes_to_s16(header + 2);
pWav->msadpcm.delta[1] = drwav__bytes_to_s16(header + 4); pWav->msadpcm.delta[1] = drwav_bytes_to_s16(header + 4);
pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav__bytes_to_s16(header + 6); pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav_bytes_to_s16(header + 6);
pWav->msadpcm.prevFrames[1][1] = (drwav_int32)drwav__bytes_to_s16(header + 8); pWav->msadpcm.prevFrames[1][1] = (drwav_int32)drwav_bytes_to_s16(header + 8);
pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav__bytes_to_s16(header + 10); pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav_bytes_to_s16(header + 10);
pWav->msadpcm.prevFrames[1][0] = (drwav_int32)drwav__bytes_to_s16(header + 12); pWav->msadpcm.prevFrames[1][0] = (drwav_int32)drwav_bytes_to_s16(header + 12);
pWav->msadpcm.cachedFrames[0] = pWav->msadpcm.prevFrames[0][0]; pWav->msadpcm.cachedFrames[0] = pWav->msadpcm.prevFrames[0][0];
pWav->msadpcm.cachedFrames[1] = pWav->msadpcm.prevFrames[1][0]; pWav->msadpcm.cachedFrames[1] = pWav->msadpcm.prevFrames[1][0];
pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][1]; pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][1];
...@@ -51694,7 +51650,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 ...@@ -51694,7 +51650,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_uint32 iChannel; drwav_uint32 iChannel;
...@@ -51728,7 +51684,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 fra ...@@ -51728,7 +51684,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 fra
pWav->ima.bytesRemainingInBlock = 0; pWav->ima.bytesRemainingInBlock = 0;
return totalFramesRead; return totalFramesRead;
} }
pWav->ima.predictor[0] = drwav__bytes_to_s16(header + 0); pWav->ima.predictor[0] = drwav_bytes_to_s16(header + 0);
pWav->ima.stepIndex[0] = header[2]; pWav->ima.stepIndex[0] = header[2];
pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[0]; pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[0];
pWav->ima.cachedFrameCount = 1; pWav->ima.cachedFrameCount = 1;
...@@ -51743,9 +51699,9 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 fra ...@@ -51743,9 +51699,9 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 fra
pWav->ima.bytesRemainingInBlock = 0; pWav->ima.bytesRemainingInBlock = 0;
return totalFramesRead; return totalFramesRead;
} }
pWav->ima.predictor[0] = drwav__bytes_to_s16(header + 0); pWav->ima.predictor[0] = drwav_bytes_to_s16(header + 0);
pWav->ima.stepIndex[0] = header[2]; pWav->ima.stepIndex[0] = header[2];
pWav->ima.predictor[1] = drwav__bytes_to_s16(header + 4); pWav->ima.predictor[1] = drwav_bytes_to_s16(header + 4);
pWav->ima.stepIndex[1] = header[6]; pWav->ima.stepIndex[1] = header[6];
pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 2] = pWav->ima.predictor[0]; pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 2] = pWav->ima.predictor[0];
pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[1]; pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[1];
...@@ -51858,7 +51814,7 @@ static DRWAV_INLINE drwav_int16 drwav__mulaw_to_s16(drwav_uint8 sampleIn) ...@@ -51858,7 +51814,7 @@ static DRWAV_INLINE drwav_int16 drwav__mulaw_to_s16(drwav_uint8 sampleIn)
{ {
return (short)g_drwavMulawTable[sampleIn]; return (short)g_drwavMulawTable[sampleIn];
} }
static void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample)
{ {
unsigned int i; unsigned int i;
if (bytesPerSample == 1) { if (bytesPerSample == 1) {
...@@ -51896,7 +51852,7 @@ static void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t ...@@ -51896,7 +51852,7 @@ static void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t
*pOut++ = (drwav_int16)((drwav_int64)sample >> 48); *pOut++ = (drwav_int16)((drwav_int64)sample >> 48);
} }
} }
static void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample)
{ {
if (bytesPerSample == 4) { if (bytesPerSample == 4) {
drwav_f32_to_s16(pOut, (const float*)pIn, totalSampleCount); drwav_f32_to_s16(pOut, (const float*)pIn, totalSampleCount);
...@@ -51909,11 +51865,11 @@ static void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t ...@@ -51909,11 +51865,11 @@ static void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t
return; return;
} }
} }
static drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint32 bytesPerFrame;
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
drwav_uint32 bytesPerFrame;
if ((pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM && pWav->bitsPerSample == 16) || pBufferOut == NULL) { if ((pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM && pWav->bitsPerSample == 16) || pBufferOut == NULL) {
return drwav_read_pcm_frames(pWav, framesToRead, pBufferOut); return drwav_read_pcm_frames(pWav, framesToRead, pBufferOut);
} }
...@@ -51934,7 +51890,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 fra ...@@ -51934,7 +51890,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 fra
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -51959,7 +51915,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 fr ...@@ -51959,7 +51915,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 fr
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -51984,7 +51940,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 fr ...@@ -51984,7 +51940,7 @@ static drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 fr
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s16__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52129,7 +52085,7 @@ DRWAV_API void drwav_mulaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, siz ...@@ -52129,7 +52085,7 @@ DRWAV_API void drwav_mulaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, siz
pOut[i] = drwav__mulaw_to_s16(pIn[i]); pOut[i] = drwav__mulaw_to_s16(pIn[i]);
} }
} }
static void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample)
{ {
unsigned int i; unsigned int i;
if (bytesPerSample == 1) { if (bytesPerSample == 1) {
...@@ -52165,7 +52121,7 @@ static void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sample ...@@ -52165,7 +52121,7 @@ static void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sample
*pOut++ = (float)((drwav_int64)sample / 9223372036854775807.0); *pOut++ = (float)((drwav_int64)sample / 9223372036854775807.0);
} }
} }
static void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample)
{ {
if (bytesPerSample == 4) { if (bytesPerSample == 4) {
unsigned int i; unsigned int i;
...@@ -52181,7 +52137,7 @@ static void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampl ...@@ -52181,7 +52137,7 @@ static void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampl
return; return;
} }
} }
static drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52202,7 +52158,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 fra ...@@ -52202,7 +52158,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 fra
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_int16 samples16[2048]; drwav_int16 samples16[2048];
...@@ -52218,7 +52174,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64 ...@@ -52218,7 +52174,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_int16 samples16[2048]; drwav_int16 samples16[2048];
...@@ -52234,7 +52190,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 fra ...@@ -52234,7 +52190,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 fra
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52259,7 +52215,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 fr ...@@ -52259,7 +52215,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 fr
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52280,7 +52236,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 fr ...@@ -52280,7 +52236,7 @@ static drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 fr
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_f32__mulaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__mulaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52432,7 +52388,7 @@ DRWAV_API void drwav_mulaw_to_f32(float* pOut, const drwav_uint8* pIn, size_t sa ...@@ -52432,7 +52388,7 @@ DRWAV_API void drwav_mulaw_to_f32(float* pOut, const drwav_uint8* pIn, size_t sa
*pOut++ = drwav__mulaw_to_s16(pIn[i]) / 32768.0f; *pOut++ = drwav__mulaw_to_s16(pIn[i]) / 32768.0f;
} }
} }
static void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample)
{ {
unsigned int i; unsigned int i;
if (bytesPerSample == 1) { if (bytesPerSample == 1) {
...@@ -52470,7 +52426,7 @@ static void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t ...@@ -52470,7 +52426,7 @@ static void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t
*pOut++ = (drwav_int32)((drwav_int64)sample >> 32); *pOut++ = (drwav_int32)((drwav_int64)sample >> 32);
} }
} }
static void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) DRWAV_PRIVATE void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample)
{ {
if (bytesPerSample == 4) { if (bytesPerSample == 4) {
drwav_f32_to_s32(pOut, (const float*)pIn, totalSampleCount); drwav_f32_to_s32(pOut, (const float*)pIn, totalSampleCount);
...@@ -52483,7 +52439,7 @@ static void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t ...@@ -52483,7 +52439,7 @@ static void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t
return; return;
} }
} }
static drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52508,7 +52464,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 fra ...@@ -52508,7 +52464,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 fra
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_int16 samples16[2048]; drwav_int16 samples16[2048];
...@@ -52524,7 +52480,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64 ...@@ -52524,7 +52480,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead = 0; drwav_uint64 totalFramesRead = 0;
drwav_int16 samples16[2048]; drwav_int16 samples16[2048];
...@@ -52540,7 +52496,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 fra ...@@ -52540,7 +52496,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 fra
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52561,7 +52517,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 fr ...@@ -52561,7 +52517,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 fr
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52582,7 +52538,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 fr ...@@ -52582,7 +52538,7 @@ static drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 fr
} }
return totalFramesRead; return totalFramesRead;
} }
static drwav_uint64 drwav_read_pcm_frames_s32__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut)
{ {
drwav_uint64 totalFramesRead; drwav_uint64 totalFramesRead;
drwav_uint8 sampleData[4096]; drwav_uint8 sampleData[4096];
...@@ -52724,7 +52680,7 @@ DRWAV_API void drwav_mulaw_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, siz ...@@ -52724,7 +52680,7 @@ DRWAV_API void drwav_mulaw_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, siz
*pOut++ = ((drwav_int32)drwav__mulaw_to_s16(pIn[i])) << 16; *pOut++ = ((drwav_int32)drwav__mulaw_to_s16(pIn[i])) << 16;
} }
} }
static drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) DRWAV_PRIVATE drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount)
{ {
drwav_uint64 sampleDataSize; drwav_uint64 sampleDataSize;
drwav_int16* pSampleData; drwav_int16* pSampleData;
...@@ -52758,7 +52714,7 @@ static drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned i ...@@ -52758,7 +52714,7 @@ static drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned i
} }
return pSampleData; return pSampleData;
} }
static float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) DRWAV_PRIVATE float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount)
{ {
drwav_uint64 sampleDataSize; drwav_uint64 sampleDataSize;
float* pSampleData; float* pSampleData;
...@@ -52792,7 +52748,7 @@ static float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* ch ...@@ -52792,7 +52748,7 @@ static float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* ch
} }
return pSampleData; return pSampleData;
} }
static drwav_int32* drwav__read_pcm_frames_and_close_s32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) DRWAV_PRIVATE drwav_int32* drwav__read_pcm_frames_and_close_s32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount)
{ {
drwav_uint64 sampleDataSize; drwav_uint64 sampleDataSize;
drwav_int32* pSampleData; drwav_int32* pSampleData;
...@@ -53043,35 +52999,47 @@ DRWAV_API void drwav_free(void* p, const drwav_allocation_callbacks* pAllocation ...@@ -53043,35 +52999,47 @@ DRWAV_API void drwav_free(void* p, const drwav_allocation_callbacks* pAllocation
} }
DRWAV_API drwav_uint16 drwav_bytes_to_u16(const drwav_uint8* data) DRWAV_API drwav_uint16 drwav_bytes_to_u16(const drwav_uint8* data)
{ {
return drwav__bytes_to_u16(data); return (data[0] << 0) | (data[1] << 8);
} }
DRWAV_API drwav_int16 drwav_bytes_to_s16(const drwav_uint8* data) DRWAV_API drwav_int16 drwav_bytes_to_s16(const drwav_uint8* data)
{ {
return drwav__bytes_to_s16(data); return (short)drwav_bytes_to_u16(data);
} }
DRWAV_API drwav_uint32 drwav_bytes_to_u32(const drwav_uint8* data) DRWAV_API drwav_uint32 drwav_bytes_to_u32(const drwav_uint8* data)
{ {
return drwav__bytes_to_u32(data); return (data[0] << 0) | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
} }
DRWAV_API drwav_int32 drwav_bytes_to_s32(const drwav_uint8* data) DRWAV_API drwav_int32 drwav_bytes_to_s32(const drwav_uint8* data)
{ {
return drwav__bytes_to_s32(data); return (drwav_int32)drwav_bytes_to_u32(data);
} }
DRWAV_API drwav_uint64 drwav_bytes_to_u64(const drwav_uint8* data) DRWAV_API drwav_uint64 drwav_bytes_to_u64(const drwav_uint8* data)
{ {
return drwav__bytes_to_u64(data); return
((drwav_uint64)data[0] << 0) | ((drwav_uint64)data[1] << 8) | ((drwav_uint64)data[2] << 16) | ((drwav_uint64)data[3] << 24) |
((drwav_uint64)data[4] << 32) | ((drwav_uint64)data[5] << 40) | ((drwav_uint64)data[6] << 48) | ((drwav_uint64)data[7] << 56);
} }
DRWAV_API drwav_int64 drwav_bytes_to_s64(const drwav_uint8* data) DRWAV_API drwav_int64 drwav_bytes_to_s64(const drwav_uint8* data)
{ {
return drwav__bytes_to_s64(data); return (drwav_int64)drwav_bytes_to_u64(data);
} }
DRWAV_API drwav_bool32 drwav_guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16]) DRWAV_API drwav_bool32 drwav_guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16])
{ {
return drwav__guid_equal(a, b); int i;
for (i = 0; i < 16; i += 1) {
if (a[i] != b[i]) {
return DRWAV_FALSE;
}
}
return DRWAV_TRUE;
} }
DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b) DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b)
{ {
return drwav__fourcc_equal(a, b); return
a[0] == b[0] &&
a[1] == b[1] &&
a[2] == b[2] &&
a[3] == b[3];
} }
#endif #endif
/* dr_wav_c end */ /* dr_wav_c end */
...@@ -53093,6 +53061,9 @@ DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b) ...@@ -53093,6 +53061,9 @@ DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b)
#ifndef _BSD_SOURCE #ifndef _BSD_SOURCE
#define _BSD_SOURCE #define _BSD_SOURCE
#endif #endif
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#ifndef __USE_BSD #ifndef __USE_BSD
#define __USE_BSD #define __USE_BSD
#endif #endif
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