mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-21 15:56:58 +02:00
Update dr_wav and dr_flac.
This commit is contained in:
+49
-42
@@ -61891,7 +61891,7 @@ extern "C" {
|
||||
#define MA_DR_WAV_XSTRINGIFY(x) MA_DR_WAV_STRINGIFY(x)
|
||||
#define MA_DR_WAV_VERSION_MAJOR 0
|
||||
#define MA_DR_WAV_VERSION_MINOR 14
|
||||
#define MA_DR_WAV_VERSION_REVISION 1
|
||||
#define MA_DR_WAV_VERSION_REVISION 3
|
||||
#define MA_DR_WAV_VERSION_STRING MA_DR_WAV_XSTRINGIFY(MA_DR_WAV_VERSION_MAJOR) "." MA_DR_WAV_XSTRINGIFY(MA_DR_WAV_VERSION_MINOR) "." MA_DR_WAV_XSTRINGIFY(MA_DR_WAV_VERSION_REVISION)
|
||||
#include <stddef.h>
|
||||
#define MA_DR_WAVE_FORMAT_PCM 0x1
|
||||
@@ -82999,7 +82999,7 @@ MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_
|
||||
pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][0];
|
||||
pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[0][1];
|
||||
pWav->msadpcm.cachedFrameCount = 2;
|
||||
if (pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff1Table)) {
|
||||
if (pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff1Table) || pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff2Table)) {
|
||||
return totalFramesRead;
|
||||
}
|
||||
} else {
|
||||
@@ -83021,7 +83021,8 @@ MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_
|
||||
pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][1];
|
||||
pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[1][1];
|
||||
pWav->msadpcm.cachedFrameCount = 2;
|
||||
if (pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff1Table) || pWav->msadpcm.predictor[1] >= ma_dr_wav_countof(coeff2Table)) {
|
||||
if (pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff1Table) || pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff2Table) ||
|
||||
pWav->msadpcm.predictor[1] >= ma_dr_wav_countof(coeff1Table) || pWav->msadpcm.predictor[1] >= ma_dr_wav_countof(coeff2Table)) {
|
||||
return totalFramesRead;
|
||||
}
|
||||
}
|
||||
@@ -83058,6 +83059,9 @@ MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_
|
||||
if (pWav->channels == 1) {
|
||||
ma_int32 newSample0;
|
||||
ma_int32 newSample1;
|
||||
if (pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff1Table) || pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff2Table)) {
|
||||
return totalFramesRead;
|
||||
}
|
||||
newSample0 = ((pWav->msadpcm.prevFrames[0][1] * coeff1Table[pWav->msadpcm.predictor[0]]) + (pWav->msadpcm.prevFrames[0][0] * coeff2Table[pWav->msadpcm.predictor[0]])) >> 8;
|
||||
newSample0 += nibble0 * pWav->msadpcm.delta[0];
|
||||
newSample0 = ma_dr_wav_clamp(newSample0, -32768, 32767);
|
||||
@@ -83082,6 +83086,9 @@ MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_
|
||||
} else {
|
||||
ma_int32 newSample0;
|
||||
ma_int32 newSample1;
|
||||
if (pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff1Table) || pWav->msadpcm.predictor[0] >= ma_dr_wav_countof(coeff2Table)) {
|
||||
return totalFramesRead;
|
||||
}
|
||||
newSample0 = ((pWav->msadpcm.prevFrames[0][1] * coeff1Table[pWav->msadpcm.predictor[0]]) + (pWav->msadpcm.prevFrames[0][0] * coeff2Table[pWav->msadpcm.predictor[0]])) >> 8;
|
||||
newSample0 += nibble0 * pWav->msadpcm.delta[0];
|
||||
newSample0 = ma_dr_wav_clamp(newSample0, -32768, 32767);
|
||||
@@ -83091,6 +83098,9 @@ MA_PRIVATE ma_uint64 ma_dr_wav_read_pcm_frames_s16__msadpcm(ma_dr_wav* pWav, ma_
|
||||
}
|
||||
pWav->msadpcm.prevFrames[0][0] = pWav->msadpcm.prevFrames[0][1];
|
||||
pWav->msadpcm.prevFrames[0][1] = newSample0;
|
||||
if (pWav->msadpcm.predictor[1] >= ma_dr_wav_countof(coeff1Table) || pWav->msadpcm.predictor[1] >= ma_dr_wav_countof(coeff2Table)) {
|
||||
return totalFramesRead;
|
||||
}
|
||||
newSample1 = ((pWav->msadpcm.prevFrames[1][1] * coeff1Table[pWav->msadpcm.predictor[1]]) + (pWav->msadpcm.prevFrames[1][0] * coeff2Table[pWav->msadpcm.predictor[1]])) >> 8;
|
||||
newSample1 += nibble1 * pWav->msadpcm.delta[1];
|
||||
newSample1 = ma_dr_wav_clamp(newSample1, -32768, 32767);
|
||||
@@ -84335,6 +84345,10 @@ MA_PRIVATE ma_int16* ma_dr_wav__read_pcm_frames_and_close_s16(ma_dr_wav* pWav, u
|
||||
ma_int16* pSampleData;
|
||||
ma_uint64 framesRead;
|
||||
MA_DR_WAV_ASSERT(pWav != NULL);
|
||||
if (pWav->channels == 0 || pWav->totalPCMFrameCount > MA_SIZE_MAX / pWav->channels / sizeof(ma_int16)) {
|
||||
ma_dr_wav_uninit(pWav);
|
||||
return NULL;
|
||||
}
|
||||
sampleDataSize = pWav->totalPCMFrameCount * pWav->channels * sizeof(ma_int16);
|
||||
if (sampleDataSize > MA_SIZE_MAX) {
|
||||
ma_dr_wav_uninit(pWav);
|
||||
@@ -84369,6 +84383,10 @@ MA_PRIVATE float* ma_dr_wav__read_pcm_frames_and_close_f32(ma_dr_wav* pWav, unsi
|
||||
float* pSampleData;
|
||||
ma_uint64 framesRead;
|
||||
MA_DR_WAV_ASSERT(pWav != NULL);
|
||||
if (pWav->channels == 0 || pWav->totalPCMFrameCount > MA_SIZE_MAX / pWav->channels / sizeof(float)) {
|
||||
ma_dr_wav_uninit(pWav);
|
||||
return NULL;
|
||||
}
|
||||
sampleDataSize = pWav->totalPCMFrameCount * pWav->channels * sizeof(float);
|
||||
if (sampleDataSize > MA_SIZE_MAX) {
|
||||
ma_dr_wav_uninit(pWav);
|
||||
@@ -84403,6 +84421,10 @@ MA_PRIVATE ma_int32* ma_dr_wav__read_pcm_frames_and_close_s32(ma_dr_wav* pWav, u
|
||||
ma_int32* pSampleData;
|
||||
ma_uint64 framesRead;
|
||||
MA_DR_WAV_ASSERT(pWav != NULL);
|
||||
if (pWav->channels == 0 || pWav->totalPCMFrameCount > MA_SIZE_MAX / pWav->channels / sizeof(ma_int32)) {
|
||||
ma_dr_wav_uninit(pWav);
|
||||
return NULL;
|
||||
}
|
||||
sampleDataSize = pWav->totalPCMFrameCount * pWav->channels * sizeof(ma_int32);
|
||||
if (sampleDataSize > MA_SIZE_MAX) {
|
||||
ma_dr_wav_uninit(pWav);
|
||||
@@ -92275,56 +92297,41 @@ static type* ma_dr_flac__full_read_and_close_ ## extension (ma_dr_flac* pFlac, u
|
||||
{ \
|
||||
type* pSampleData = NULL; \
|
||||
ma_uint64 totalPCMFrameCount; \
|
||||
type buffer[4096]; \
|
||||
ma_uint64 pcmFramesRead; \
|
||||
size_t sampleDataBufferSize = sizeof(buffer); \
|
||||
\
|
||||
MA_DR_FLAC_ASSERT(pFlac != NULL); \
|
||||
\
|
||||
totalPCMFrameCount = pFlac->totalPCMFrameCount; \
|
||||
totalPCMFrameCount = 0; \
|
||||
\
|
||||
if (totalPCMFrameCount == 0) { \
|
||||
type buffer[4096]; \
|
||||
ma_uint64 pcmFramesRead; \
|
||||
size_t sampleDataBufferSize = sizeof(buffer); \
|
||||
pSampleData = (type*)ma_dr_flac__malloc_from_callbacks(sampleDataBufferSize, &pFlac->allocationCallbacks); \
|
||||
if (pSampleData == NULL) { \
|
||||
goto on_error; \
|
||||
} \
|
||||
\
|
||||
pSampleData = (type*)ma_dr_flac__malloc_from_callbacks(sampleDataBufferSize, &pFlac->allocationCallbacks); \
|
||||
if (pSampleData == NULL) { \
|
||||
goto on_error; \
|
||||
} \
|
||||
while ((pcmFramesRead = (ma_uint64)ma_dr_flac_read_pcm_frames_##extension(pFlac, sizeof(buffer)/sizeof(buffer[0])/pFlac->channels, buffer)) > 0) { \
|
||||
if (((totalPCMFrameCount + pcmFramesRead) * pFlac->channels * sizeof(type)) > sampleDataBufferSize) { \
|
||||
type* pNewSampleData; \
|
||||
size_t newSampleDataBufferSize; \
|
||||
\
|
||||
while ((pcmFramesRead = (ma_uint64)ma_dr_flac_read_pcm_frames_##extension(pFlac, sizeof(buffer)/sizeof(buffer[0])/pFlac->channels, buffer)) > 0) { \
|
||||
if (((totalPCMFrameCount + pcmFramesRead) * pFlac->channels * sizeof(type)) > sampleDataBufferSize) { \
|
||||
type* pNewSampleData; \
|
||||
size_t newSampleDataBufferSize; \
|
||||
\
|
||||
newSampleDataBufferSize = sampleDataBufferSize * 2; \
|
||||
pNewSampleData = (type*)ma_dr_flac__realloc_from_callbacks(pSampleData, newSampleDataBufferSize, sampleDataBufferSize, &pFlac->allocationCallbacks); \
|
||||
if (pNewSampleData == NULL) { \
|
||||
ma_dr_flac__free_from_callbacks(pSampleData, &pFlac->allocationCallbacks); \
|
||||
goto on_error; \
|
||||
} \
|
||||
\
|
||||
sampleDataBufferSize = newSampleDataBufferSize; \
|
||||
pSampleData = pNewSampleData; \
|
||||
newSampleDataBufferSize = sampleDataBufferSize * 2; \
|
||||
pNewSampleData = (type*)ma_dr_flac__realloc_from_callbacks(pSampleData, newSampleDataBufferSize, sampleDataBufferSize, &pFlac->allocationCallbacks); \
|
||||
if (pNewSampleData == NULL) { \
|
||||
ma_dr_flac__free_from_callbacks(pSampleData, &pFlac->allocationCallbacks); \
|
||||
goto on_error; \
|
||||
} \
|
||||
\
|
||||
MA_DR_FLAC_COPY_MEMORY(pSampleData + (totalPCMFrameCount*pFlac->channels), buffer, (size_t)(pcmFramesRead*pFlac->channels*sizeof(type))); \
|
||||
totalPCMFrameCount += pcmFramesRead; \
|
||||
sampleDataBufferSize = newSampleDataBufferSize; \
|
||||
pSampleData = pNewSampleData; \
|
||||
} \
|
||||
\
|
||||
MA_DR_FLAC_COPY_MEMORY(pSampleData + (totalPCMFrameCount*pFlac->channels), buffer, (size_t)(pcmFramesRead*pFlac->channels*sizeof(type))); \
|
||||
totalPCMFrameCount += pcmFramesRead; \
|
||||
} \
|
||||
\
|
||||
\
|
||||
MA_DR_FLAC_ZERO_MEMORY(pSampleData + (totalPCMFrameCount*pFlac->channels), (size_t)(sampleDataBufferSize - totalPCMFrameCount*pFlac->channels*sizeof(type))); \
|
||||
} else { \
|
||||
ma_uint64 dataSize = totalPCMFrameCount*pFlac->channels*sizeof(type); \
|
||||
if (dataSize > (ma_uint64)MA_SIZE_MAX) { \
|
||||
goto on_error; \
|
||||
} \
|
||||
\
|
||||
pSampleData = (type*)ma_dr_flac__malloc_from_callbacks((size_t)dataSize, &pFlac->allocationCallbacks); \
|
||||
if (pSampleData == NULL) { \
|
||||
goto on_error; \
|
||||
} \
|
||||
\
|
||||
totalPCMFrameCount = ma_dr_flac_read_pcm_frames_##extension(pFlac, pFlac->totalPCMFrameCount, pSampleData); \
|
||||
} \
|
||||
MA_DR_FLAC_ZERO_MEMORY(pSampleData + (totalPCMFrameCount*pFlac->channels), (size_t)(sampleDataBufferSize - totalPCMFrameCount*pFlac->channels*sizeof(type))); \
|
||||
\
|
||||
if (sampleRateOut) *sampleRateOut = pFlac->sampleRate; \
|
||||
if (channelsOut) *channelsOut = pFlac->channels; \
|
||||
|
||||
Reference in New Issue
Block a user