Commit def31404 authored by David Reid's avatar David Reid

Clean up memory allocation routines.

parent 071291b8
...@@ -2957,17 +2957,22 @@ Retrieves a human readable description of the given result code. ...@@ -2957,17 +2957,22 @@ Retrieves a human readable description of the given result code.
MA_API const char* ma_result_description(ma_result result); MA_API const char* ma_result_description(ma_result result);
/* /*
malloc(). Calls MA_MALLOC(). malloc()
*/ */
MA_API void* ma_malloc(size_t sz, const ma_allocation_callbacks* pAllocationCallbacks); MA_API void* ma_malloc(size_t sz, const ma_allocation_callbacks* pAllocationCallbacks);
/* /*
realloc(). Calls MA_REALLOC(). calloc()
*/
MA_API void* ma_calloc(size_t sz, const ma_allocation_callbacks* pAllocationCallbacks);
/*
realloc()
*/ */
MA_API void* ma_realloc(void* p, size_t sz, const ma_allocation_callbacks* pAllocationCallbacks); MA_API void* ma_realloc(void* p, size_t sz, const ma_allocation_callbacks* pAllocationCallbacks);
/* /*
free(). Calls MA_FREE(). free()
*/ */
MA_API void ma_free(void* p, const ma_allocation_callbacks* pAllocationCallbacks); MA_API void ma_free(void* p, const ma_allocation_callbacks* pAllocationCallbacks);
...@@ -8225,54 +8230,6 @@ static void ma__free_default(void* p, void* pUserData) ...@@ -8225,54 +8230,6 @@ static void ma__free_default(void* p, void* pUserData)
MA_FREE(p); MA_FREE(p);
} }
static void* ma__malloc_from_callbacks(size_t sz, const ma_allocation_callbacks* pAllocationCallbacks)
{
if (pAllocationCallbacks == NULL) {
return NULL;
}
if (pAllocationCallbacks->onMalloc != NULL) {
return pAllocationCallbacks->onMalloc(sz, pAllocationCallbacks->pUserData);
}
return NULL;
}
static void* ma__realloc_from_callbacks(void* p, size_t szNew, const ma_allocation_callbacks* pAllocationCallbacks)
{
if (pAllocationCallbacks == NULL) {
return NULL;
}
if (pAllocationCallbacks->onRealloc != NULL) {
return pAllocationCallbacks->onRealloc(p, szNew, pAllocationCallbacks->pUserData);
}
return NULL;
}
static MA_INLINE void* ma__calloc_from_callbacks(size_t sz, const ma_allocation_callbacks* pAllocationCallbacks)
{
void* p = ma__malloc_from_callbacks(sz, pAllocationCallbacks);
if (p != NULL) {
MA_ZERO_MEMORY(p, sz);
}
return p;
}
static void ma__free_from_callbacks(void* p, const ma_allocation_callbacks* pAllocationCallbacks)
{
if (p == NULL || pAllocationCallbacks == NULL) {
return;
}
if (pAllocationCallbacks->onFree != NULL) {
pAllocationCallbacks->onFree(p, pAllocationCallbacks->pUserData);
}
}
static ma_allocation_callbacks ma_allocation_callbacks_init_default(void) static ma_allocation_callbacks ma_allocation_callbacks_init_default(void)
{ {
ma_allocation_callbacks callbacks; ma_allocation_callbacks callbacks;
...@@ -18794,7 +18751,7 @@ static ma_result ma_device_uninit__winmm(ma_device* pDevice) ...@@ -18794,7 +18751,7 @@ static ma_result ma_device_uninit__winmm(ma_device* pDevice)
CloseHandle((HANDLE)pDevice->winmm.hEventPlayback); CloseHandle((HANDLE)pDevice->winmm.hEventPlayback);
} }
ma__free_from_callbacks(pDevice->winmm._pHeapData, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->winmm._pHeapData, &pDevice->pContext->allocationCallbacks);
MA_ZERO_OBJECT(&pDevice->winmm); /* Safety. */ MA_ZERO_OBJECT(&pDevice->winmm); /* Safety. */
...@@ -18935,7 +18892,7 @@ static ma_result ma_device_init__winmm(ma_device* pDevice, const ma_device_confi ...@@ -18935,7 +18892,7 @@ static ma_result ma_device_init__winmm(ma_device* pDevice, const ma_device_confi
heapSize += sizeof(WAVEHDR)*pDescriptorPlayback->periodCount + (pDescriptorPlayback->periodSizeInFrames * pDescriptorPlayback->periodCount * ma_get_bytes_per_frame(pDescriptorPlayback->format, pDescriptorPlayback->channels)); heapSize += sizeof(WAVEHDR)*pDescriptorPlayback->periodCount + (pDescriptorPlayback->periodSizeInFrames * pDescriptorPlayback->periodCount * ma_get_bytes_per_frame(pDescriptorPlayback->format, pDescriptorPlayback->channels));
} }
pDevice->winmm._pHeapData = (ma_uint8*)ma__calloc_from_callbacks(heapSize, &pDevice->pContext->allocationCallbacks); pDevice->winmm._pHeapData = (ma_uint8*)ma_calloc(heapSize, &pDevice->pContext->allocationCallbacks);
if (pDevice->winmm._pHeapData == NULL) { if (pDevice->winmm._pHeapData == NULL) {
errorMsg = "[WinMM] Failed to allocate memory for the intermediary buffer.", errorCode = MA_OUT_OF_MEMORY; errorMsg = "[WinMM] Failed to allocate memory for the intermediary buffer.", errorCode = MA_OUT_OF_MEMORY;
goto on_error; goto on_error;
...@@ -19026,7 +18983,7 @@ on_error: ...@@ -19026,7 +18983,7 @@ on_error:
((MA_PFN_waveOutClose)pDevice->pContext->winmm.waveOutClose)((HWAVEOUT)pDevice->winmm.hDevicePlayback); ((MA_PFN_waveOutClose)pDevice->pContext->winmm.waveOutClose)((HWAVEOUT)pDevice->winmm.hDevicePlayback);
} }
ma__free_from_callbacks(pDevice->winmm._pHeapData, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->winmm._pHeapData, &pDevice->pContext->allocationCallbacks);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, errorMsg, errorCode); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, errorMsg, errorCode);
} }
...@@ -20217,7 +20174,7 @@ static ma_result ma_context_enumerate_devices__alsa(ma_context* pContext, ma_enu ...@@ -20217,7 +20174,7 @@ static ma_result ma_context_enumerate_devices__alsa(ma_context* pContext, ma_enu
} }
} }
ma__free_from_callbacks(pUniqueIDs, &pContext->allocationCallbacks); ma_free(pUniqueIDs, &pContext->allocationCallbacks);
((ma_snd_device_name_free_hint_proc)pContext->alsa.snd_device_name_free_hint)((void**)ppDeviceHints); ((ma_snd_device_name_free_hint_proc)pContext->alsa.snd_device_name_free_hint)((void**)ppDeviceHints);
ma_mutex_unlock(&pContext->alsa.internalDeviceEnumLock); ma_mutex_unlock(&pContext->alsa.internalDeviceEnumLock);
...@@ -20341,7 +20298,7 @@ static ma_result ma_context_get_device_info__alsa(ma_context* pContext, ma_devic ...@@ -20341,7 +20298,7 @@ static ma_result ma_context_get_device_info__alsa(ma_context* pContext, ma_devic
} }
/* We need to initialize a HW parameters object in order to know what formats are supported. */ /* We need to initialize a HW parameters object in order to know what formats are supported. */
pHWParams = (ma_snd_pcm_hw_params_t*)ma__calloc_from_callbacks(((ma_snd_pcm_hw_params_sizeof_proc)pContext->alsa.snd_pcm_hw_params_sizeof)(), &pContext->allocationCallbacks); pHWParams = (ma_snd_pcm_hw_params_t*)ma_calloc(((ma_snd_pcm_hw_params_sizeof_proc)pContext->alsa.snd_pcm_hw_params_sizeof)(), &pContext->allocationCallbacks);
if (pHWParams == NULL) { if (pHWParams == NULL) {
((ma_snd_pcm_close_proc)pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pContext->alsa.snd_pcm_close)(pPCM);
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
...@@ -20349,7 +20306,7 @@ static ma_result ma_context_get_device_info__alsa(ma_context* pContext, ma_devic ...@@ -20349,7 +20306,7 @@ static ma_result ma_context_get_device_info__alsa(ma_context* pContext, ma_devic
resultALSA = ((ma_snd_pcm_hw_params_any_proc)pContext->alsa.snd_pcm_hw_params_any)(pPCM, pHWParams); resultALSA = ((ma_snd_pcm_hw_params_any_proc)pContext->alsa.snd_pcm_hw_params_any)(pPCM, pHWParams);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pContext->allocationCallbacks); ma_free(pHWParams, &pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pContext->alsa.snd_pcm_close)(pPCM);
return ma_context_post_error(pContext, NULL, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to initialize hardware parameters. snd_pcm_hw_params_any() failed.", ma_result_from_errno(-resultALSA)); return ma_context_post_error(pContext, NULL, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to initialize hardware parameters. snd_pcm_hw_params_any() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20435,7 +20392,7 @@ static ma_result ma_context_get_device_info__alsa(ma_context* pContext, ma_devic ...@@ -20435,7 +20392,7 @@ static ma_result ma_context_get_device_info__alsa(ma_context* pContext, ma_devic
} }
} }
ma__free_from_callbacks(pHWParams, &pContext->allocationCallbacks); ma_free(pHWParams, &pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pContext->alsa.snd_pcm_close)(pPCM);
return MA_SUCCESS; return MA_SUCCESS;
...@@ -20505,14 +20462,14 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20505,14 +20462,14 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
/* Hardware parameters. */ /* Hardware parameters. */
pHWParams = (ma_snd_pcm_hw_params_t*)ma__calloc_from_callbacks(((ma_snd_pcm_hw_params_sizeof_proc)pDevice->pContext->alsa.snd_pcm_hw_params_sizeof)(), &pDevice->pContext->allocationCallbacks); pHWParams = (ma_snd_pcm_hw_params_t*)ma_calloc(((ma_snd_pcm_hw_params_sizeof_proc)pDevice->pContext->alsa.snd_pcm_hw_params_sizeof)(), &pDevice->pContext->allocationCallbacks);
if (pHWParams == NULL) { if (pHWParams == NULL) {
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
resultALSA = ((ma_snd_pcm_hw_params_any_proc)pDevice->pContext->alsa.snd_pcm_hw_params_any)(pPCM, pHWParams); resultALSA = ((ma_snd_pcm_hw_params_any_proc)pDevice->pContext->alsa.snd_pcm_hw_params_any)(pPCM, pHWParams);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to initialize hardware parameters. snd_pcm_hw_params_any() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to initialize hardware parameters. snd_pcm_hw_params_any() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20532,7 +20489,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20532,7 +20489,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
if (!isUsingMMap) { if (!isUsingMMap) {
resultALSA = ((ma_snd_pcm_hw_params_set_access_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_access)(pPCM, pHWParams, MA_SND_PCM_ACCESS_RW_INTERLEAVED); resultALSA = ((ma_snd_pcm_hw_params_set_access_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_access)(pPCM, pHWParams, MA_SND_PCM_ACCESS_RW_INTERLEAVED);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set access mode to neither SND_PCM_ACCESS_MMAP_INTERLEAVED nor SND_PCM_ACCESS_RW_INTERLEAVED. snd_pcm_hw_params_set_access() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set access mode to neither SND_PCM_ACCESS_MMAP_INTERLEAVED nor SND_PCM_ACCESS_RW_INTERLEAVED. snd_pcm_hw_params_set_access() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20562,7 +20519,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20562,7 +20519,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
} }
if (formatALSA == MA_SND_PCM_FORMAT_UNKNOWN) { if (formatALSA == MA_SND_PCM_FORMAT_UNKNOWN) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Format not supported. The device does not support any miniaudio formats.", MA_FORMAT_NOT_SUPPORTED); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Format not supported. The device does not support any miniaudio formats.", MA_FORMAT_NOT_SUPPORTED);
} }
...@@ -20570,14 +20527,14 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20570,14 +20527,14 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
resultALSA = ((ma_snd_pcm_hw_params_set_format_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_format)(pPCM, pHWParams, formatALSA); resultALSA = ((ma_snd_pcm_hw_params_set_format_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_format)(pPCM, pHWParams, formatALSA);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Format not supported. snd_pcm_hw_params_set_format() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Format not supported. snd_pcm_hw_params_set_format() failed.", ma_result_from_errno(-resultALSA));
} }
internalFormat = ma_format_from_alsa(formatALSA); internalFormat = ma_format_from_alsa(formatALSA);
if (internalFormat == ma_format_unknown) { if (internalFormat == ma_format_unknown) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] The chosen format is not supported by miniaudio.", MA_FORMAT_NOT_SUPPORTED); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] The chosen format is not supported by miniaudio.", MA_FORMAT_NOT_SUPPORTED);
} }
...@@ -20592,7 +20549,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20592,7 +20549,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
resultALSA = ((ma_snd_pcm_hw_params_set_channels_near_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_channels_near)(pPCM, pHWParams, &channels); resultALSA = ((ma_snd_pcm_hw_params_set_channels_near_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_channels_near)(pPCM, pHWParams, &channels);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set channel count. snd_pcm_hw_params_set_channels_near() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set channel count. snd_pcm_hw_params_set_channels_near() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20630,7 +20587,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20630,7 +20587,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
resultALSA = ((ma_snd_pcm_hw_params_set_rate_near_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_rate_near)(pPCM, pHWParams, &sampleRate, 0); resultALSA = ((ma_snd_pcm_hw_params_set_rate_near_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_rate_near)(pPCM, pHWParams, &sampleRate, 0);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Sample rate not supported. snd_pcm_hw_params_set_rate_near() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Sample rate not supported. snd_pcm_hw_params_set_rate_near() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20644,7 +20601,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20644,7 +20601,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
resultALSA = ((ma_snd_pcm_hw_params_set_periods_near_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_periods_near)(pPCM, pHWParams, &periods, NULL); resultALSA = ((ma_snd_pcm_hw_params_set_periods_near_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_periods_near)(pPCM, pHWParams, &periods, NULL);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set period count. snd_pcm_hw_params_set_periods_near() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set period count. snd_pcm_hw_params_set_periods_near() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20658,7 +20615,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20658,7 +20615,7 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
resultALSA = ((ma_snd_pcm_hw_params_set_buffer_size_near_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_buffer_size_near)(pPCM, pHWParams, &actualBufferSizeInFrames); resultALSA = ((ma_snd_pcm_hw_params_set_buffer_size_near_proc)pDevice->pContext->alsa.snd_pcm_hw_params_set_buffer_size_near)(pPCM, pHWParams, &actualBufferSizeInFrames);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set buffer size for device. snd_pcm_hw_params_set_buffer_size() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set buffer size for device. snd_pcm_hw_params_set_buffer_size() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20669,17 +20626,17 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20669,17 +20626,17 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
/* Apply hardware parameters. */ /* Apply hardware parameters. */
resultALSA = ((ma_snd_pcm_hw_params_proc)pDevice->pContext->alsa.snd_pcm_hw_params)(pPCM, pHWParams); resultALSA = ((ma_snd_pcm_hw_params_proc)pDevice->pContext->alsa.snd_pcm_hw_params)(pPCM, pHWParams);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set hardware parameters. snd_pcm_hw_params() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set hardware parameters. snd_pcm_hw_params() failed.", ma_result_from_errno(-resultALSA));
} }
ma__free_from_callbacks(pHWParams, &pDevice->pContext->allocationCallbacks); ma_free(pHWParams, &pDevice->pContext->allocationCallbacks);
pHWParams = NULL; pHWParams = NULL;
/* Software parameters. */ /* Software parameters. */
pSWParams = (ma_snd_pcm_sw_params_t*)ma__calloc_from_callbacks(((ma_snd_pcm_sw_params_sizeof_proc)pDevice->pContext->alsa.snd_pcm_sw_params_sizeof)(), &pDevice->pContext->allocationCallbacks); pSWParams = (ma_snd_pcm_sw_params_t*)ma_calloc(((ma_snd_pcm_sw_params_sizeof_proc)pDevice->pContext->alsa.snd_pcm_sw_params_sizeof)(), &pDevice->pContext->allocationCallbacks);
if (pSWParams == NULL) { if (pSWParams == NULL) {
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
...@@ -20687,14 +20644,14 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20687,14 +20644,14 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
resultALSA = ((ma_snd_pcm_sw_params_current_proc)pDevice->pContext->alsa.snd_pcm_sw_params_current)(pPCM, pSWParams); resultALSA = ((ma_snd_pcm_sw_params_current_proc)pDevice->pContext->alsa.snd_pcm_sw_params_current)(pPCM, pSWParams);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pSWParams, &pDevice->pContext->allocationCallbacks); ma_free(pSWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to initialize software parameters. snd_pcm_sw_params_current() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to initialize software parameters. snd_pcm_sw_params_current() failed.", ma_result_from_errno(-resultALSA));
} }
resultALSA = ((ma_snd_pcm_sw_params_set_avail_min_proc)pDevice->pContext->alsa.snd_pcm_sw_params_set_avail_min)(pPCM, pSWParams, ma_prev_power_of_2(internalPeriodSizeInFrames)); resultALSA = ((ma_snd_pcm_sw_params_set_avail_min_proc)pDevice->pContext->alsa.snd_pcm_sw_params_set_avail_min)(pPCM, pSWParams, ma_prev_power_of_2(internalPeriodSizeInFrames));
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pSWParams, &pDevice->pContext->allocationCallbacks); ma_free(pSWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] snd_pcm_sw_params_set_avail_min() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] snd_pcm_sw_params_set_avail_min() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20711,14 +20668,14 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20711,14 +20668,14 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
*/ */
resultALSA = ((ma_snd_pcm_sw_params_set_start_threshold_proc)pDevice->pContext->alsa.snd_pcm_sw_params_set_start_threshold)(pPCM, pSWParams, internalPeriodSizeInFrames*2); resultALSA = ((ma_snd_pcm_sw_params_set_start_threshold_proc)pDevice->pContext->alsa.snd_pcm_sw_params_set_start_threshold)(pPCM, pSWParams, internalPeriodSizeInFrames*2);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pSWParams, &pDevice->pContext->allocationCallbacks); ma_free(pSWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set start threshold for playback device. snd_pcm_sw_params_set_start_threshold() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set start threshold for playback device. snd_pcm_sw_params_set_start_threshold() failed.", ma_result_from_errno(-resultALSA));
} }
resultALSA = ((ma_snd_pcm_sw_params_set_stop_threshold_proc)pDevice->pContext->alsa.snd_pcm_sw_params_set_stop_threshold)(pPCM, pSWParams, bufferBoundary); resultALSA = ((ma_snd_pcm_sw_params_set_stop_threshold_proc)pDevice->pContext->alsa.snd_pcm_sw_params_set_stop_threshold)(pPCM, pSWParams, bufferBoundary);
if (resultALSA < 0) { /* Set to boundary to loop instead of stop in the event of an xrun. */ if (resultALSA < 0) { /* Set to boundary to loop instead of stop in the event of an xrun. */
ma__free_from_callbacks(pSWParams, &pDevice->pContext->allocationCallbacks); ma_free(pSWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set stop threshold for playback device. snd_pcm_sw_params_set_stop_threshold() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set stop threshold for playback device. snd_pcm_sw_params_set_stop_threshold() failed.", ma_result_from_errno(-resultALSA));
} }
...@@ -20726,12 +20683,12 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic ...@@ -20726,12 +20683,12 @@ static ma_result ma_device_init_by_type__alsa(ma_device* pDevice, const ma_devic
resultALSA = ((ma_snd_pcm_sw_params_proc)pDevice->pContext->alsa.snd_pcm_sw_params)(pPCM, pSWParams); resultALSA = ((ma_snd_pcm_sw_params_proc)pDevice->pContext->alsa.snd_pcm_sw_params)(pPCM, pSWParams);
if (resultALSA < 0) { if (resultALSA < 0) {
ma__free_from_callbacks(pSWParams, &pDevice->pContext->allocationCallbacks); ma_free(pSWParams, &pDevice->pContext->allocationCallbacks);
((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM); ((ma_snd_pcm_close_proc)pDevice->pContext->alsa.snd_pcm_close)(pPCM);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set software parameters. snd_pcm_sw_params() failed.", ma_result_from_errno(-resultALSA)); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[ALSA] Failed to set software parameters. snd_pcm_sw_params() failed.", ma_result_from_errno(-resultALSA));
} }
ma__free_from_callbacks(pSWParams, &pDevice->pContext->allocationCallbacks); ma_free(pSWParams, &pDevice->pContext->allocationCallbacks);
pSWParams = NULL; pSWParams = NULL;
...@@ -23866,11 +23823,11 @@ static ma_result ma_device_uninit__jack(ma_device* pDevice) ...@@ -23866,11 +23823,11 @@ static ma_result ma_device_uninit__jack(ma_device* pDevice)
} }
if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex) { if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex) {
ma__free_from_callbacks(pDevice->jack.pIntermediaryBufferCapture, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->jack.pIntermediaryBufferCapture, &pDevice->pContext->allocationCallbacks);
} }
if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) {
ma__free_from_callbacks(pDevice->jack.pIntermediaryBufferPlayback, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->jack.pIntermediaryBufferPlayback, &pDevice->pContext->allocationCallbacks);
} }
return MA_SUCCESS; return MA_SUCCESS;
...@@ -23892,12 +23849,12 @@ static int ma_device__jack_buffer_size_callback(ma_jack_nframes_t frameCount, vo ...@@ -23892,12 +23849,12 @@ static int ma_device__jack_buffer_size_callback(ma_jack_nframes_t frameCount, vo
if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex) { if (pDevice->type == ma_device_type_capture || pDevice->type == ma_device_type_duplex) {
size_t newBufferSize = frameCount * (pDevice->capture.internalChannels * ma_get_bytes_per_sample(pDevice->capture.internalFormat)); size_t newBufferSize = frameCount * (pDevice->capture.internalChannels * ma_get_bytes_per_sample(pDevice->capture.internalFormat));
float* pNewBuffer = (float*)ma__calloc_from_callbacks(newBufferSize, &pDevice->pContext->allocationCallbacks); float* pNewBuffer = (float*)ma_calloc(newBufferSize, &pDevice->pContext->allocationCallbacks);
if (pNewBuffer == NULL) { if (pNewBuffer == NULL) {
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
ma__free_from_callbacks(pDevice->jack.pIntermediaryBufferCapture, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->jack.pIntermediaryBufferCapture, &pDevice->pContext->allocationCallbacks);
pDevice->jack.pIntermediaryBufferCapture = pNewBuffer; pDevice->jack.pIntermediaryBufferCapture = pNewBuffer;
pDevice->playback.internalPeriodSizeInFrames = frameCount; pDevice->playback.internalPeriodSizeInFrames = frameCount;
...@@ -23905,12 +23862,12 @@ static int ma_device__jack_buffer_size_callback(ma_jack_nframes_t frameCount, vo ...@@ -23905,12 +23862,12 @@ static int ma_device__jack_buffer_size_callback(ma_jack_nframes_t frameCount, vo
if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) {
size_t newBufferSize = frameCount * (pDevice->playback.internalChannels * ma_get_bytes_per_sample(pDevice->playback.internalFormat)); size_t newBufferSize = frameCount * (pDevice->playback.internalChannels * ma_get_bytes_per_sample(pDevice->playback.internalFormat));
float* pNewBuffer = (float*)ma__calloc_from_callbacks(newBufferSize, &pDevice->pContext->allocationCallbacks); float* pNewBuffer = (float*)ma_calloc(newBufferSize, &pDevice->pContext->allocationCallbacks);
if (pNewBuffer == NULL) { if (pNewBuffer == NULL) {
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
ma__free_from_callbacks(pDevice->jack.pIntermediaryBufferPlayback, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->jack.pIntermediaryBufferPlayback, &pDevice->pContext->allocationCallbacks);
pDevice->jack.pIntermediaryBufferPlayback = pNewBuffer; pDevice->jack.pIntermediaryBufferPlayback = pNewBuffer;
pDevice->playback.internalPeriodSizeInFrames = frameCount; pDevice->playback.internalPeriodSizeInFrames = frameCount;
...@@ -24049,7 +24006,7 @@ static ma_result ma_device_init__jack(ma_device* pDevice, const ma_device_config ...@@ -24049,7 +24006,7 @@ static ma_result ma_device_init__jack(ma_device* pDevice, const ma_device_config
pDescriptorCapture->periodSizeInFrames = periodSizeInFrames; pDescriptorCapture->periodSizeInFrames = periodSizeInFrames;
pDescriptorCapture->periodCount = 1; /* There's no notion of a period in JACK. Just set to 1. */ pDescriptorCapture->periodCount = 1; /* There's no notion of a period in JACK. Just set to 1. */
pDevice->jack.pIntermediaryBufferCapture = (float*)ma__calloc_from_callbacks(pDescriptorCapture->periodSizeInFrames * ma_get_bytes_per_frame(pDescriptorCapture->format, pDescriptorCapture->channels), &pDevice->pContext->allocationCallbacks); pDevice->jack.pIntermediaryBufferCapture = (float*)ma_calloc(pDescriptorCapture->periodSizeInFrames * ma_get_bytes_per_frame(pDescriptorCapture->format, pDescriptorCapture->channels), &pDevice->pContext->allocationCallbacks);
if (pDevice->jack.pIntermediaryBufferCapture == NULL) { if (pDevice->jack.pIntermediaryBufferCapture == NULL) {
ma_device_uninit__jack(pDevice); ma_device_uninit__jack(pDevice);
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
...@@ -24089,7 +24046,7 @@ static ma_result ma_device_init__jack(ma_device* pDevice, const ma_device_config ...@@ -24089,7 +24046,7 @@ static ma_result ma_device_init__jack(ma_device* pDevice, const ma_device_config
pDescriptorPlayback->periodSizeInFrames = periodSizeInFrames; pDescriptorPlayback->periodSizeInFrames = periodSizeInFrames;
pDescriptorPlayback->periodCount = 1; /* There's no notion of a period in JACK. Just set to 1. */ pDescriptorPlayback->periodCount = 1; /* There's no notion of a period in JACK. Just set to 1. */
pDevice->jack.pIntermediaryBufferPlayback = (float*)ma__calloc_from_callbacks(pDescriptorPlayback->periodSizeInFrames * ma_get_bytes_per_frame(pDescriptorPlayback->format, pDescriptorPlayback->channels), &pDevice->pContext->allocationCallbacks); pDevice->jack.pIntermediaryBufferPlayback = (float*)ma_calloc(pDescriptorPlayback->periodSizeInFrames * ma_get_bytes_per_frame(pDescriptorPlayback->format, pDescriptorPlayback->channels), &pDevice->pContext->allocationCallbacks);
if (pDevice->jack.pIntermediaryBufferPlayback == NULL) { if (pDevice->jack.pIntermediaryBufferPlayback == NULL) {
ma_device_uninit__jack(pDevice); ma_device_uninit__jack(pDevice);
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
...@@ -24838,14 +24795,14 @@ static ma_bool32 ma_does_AudioObject_support_scope(ma_context* pContext, AudioOb ...@@ -24838,14 +24795,14 @@ static ma_bool32 ma_does_AudioObject_support_scope(ma_context* pContext, AudioOb
return MA_FALSE; return MA_FALSE;
} }
pBufferList = (AudioBufferList*)ma__malloc_from_callbacks(dataSize, &pContext->allocationCallbacks); pBufferList = (AudioBufferList*)ma_malloc(dataSize, &pContext->allocationCallbacks);
if (pBufferList == NULL) { if (pBufferList == NULL) {
return MA_FALSE; /* Out of memory. */ return MA_FALSE; /* Out of memory. */
} }
status = ((ma_AudioObjectGetPropertyData_proc)pContext->coreaudio.AudioObjectGetPropertyData)(deviceObjectID, &propAddress, 0, NULL, &dataSize, pBufferList); status = ((ma_AudioObjectGetPropertyData_proc)pContext->coreaudio.AudioObjectGetPropertyData)(deviceObjectID, &propAddress, 0, NULL, &dataSize, pBufferList);
if (status != noErr) { if (status != noErr) {
ma__free_from_callbacks(pBufferList, &pContext->allocationCallbacks); ma_free(pBufferList, &pContext->allocationCallbacks);
return MA_FALSE; return MA_FALSE;
} }
...@@ -24854,7 +24811,7 @@ static ma_bool32 ma_does_AudioObject_support_scope(ma_context* pContext, AudioOb ...@@ -24854,7 +24811,7 @@ static ma_bool32 ma_does_AudioObject_support_scope(ma_context* pContext, AudioOb
isSupported = MA_TRUE; isSupported = MA_TRUE;
} }
ma__free_from_callbacks(pBufferList, &pContext->allocationCallbacks); ma_free(pBufferList, &pContext->allocationCallbacks);
return isSupported; return isSupported;
} }
...@@ -25483,24 +25440,24 @@ static ma_result ma_get_AudioUnit_channel_map(ma_context* pContext, AudioUnit au ...@@ -25483,24 +25440,24 @@ static ma_result ma_get_AudioUnit_channel_map(ma_context* pContext, AudioUnit au
return ma_result_from_OSStatus(status); return ma_result_from_OSStatus(status);
} }
pChannelLayout = (AudioChannelLayout*)ma__malloc_from_callbacks(channelLayoutSize, &pContext->allocationCallbacks); pChannelLayout = (AudioChannelLayout*)ma_malloc(channelLayoutSize, &pContext->allocationCallbacks);
if (pChannelLayout == NULL) { if (pChannelLayout == NULL) {
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
status = ((ma_AudioUnitGetProperty_proc)pContext->coreaudio.AudioUnitGetProperty)(audioUnit, kAudioUnitProperty_AudioChannelLayout, deviceScope, deviceBus, pChannelLayout, &channelLayoutSize); status = ((ma_AudioUnitGetProperty_proc)pContext->coreaudio.AudioUnitGetProperty)(audioUnit, kAudioUnitProperty_AudioChannelLayout, deviceScope, deviceBus, pChannelLayout, &channelLayoutSize);
if (status != noErr) { if (status != noErr) {
ma__free_from_callbacks(pChannelLayout, &pContext->allocationCallbacks); ma_free(pChannelLayout, &pContext->allocationCallbacks);
return ma_result_from_OSStatus(status); return ma_result_from_OSStatus(status);
} }
result = ma_get_channel_map_from_AudioChannelLayout(pChannelLayout, pChannelMap, channelMapCap); result = ma_get_channel_map_from_AudioChannelLayout(pChannelLayout, pChannelMap, channelMapCap);
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
ma__free_from_callbacks(pChannelLayout, &pContext->allocationCallbacks); ma_free(pChannelLayout, &pContext->allocationCallbacks);
return result; return result;
} }
ma__free_from_callbacks(pChannelLayout, &pContext->allocationCallbacks); ma_free(pChannelLayout, &pContext->allocationCallbacks);
return MA_SUCCESS; return MA_SUCCESS;
} }
#endif /* MA_APPLE_DESKTOP */ #endif /* MA_APPLE_DESKTOP */
...@@ -25852,7 +25809,7 @@ static AudioBufferList* ma_allocate_AudioBufferList__coreaudio(ma_uint32 sizeInF ...@@ -25852,7 +25809,7 @@ static AudioBufferList* ma_allocate_AudioBufferList__coreaudio(ma_uint32 sizeInF
allocationSize += sizeInFrames * ma_get_bytes_per_frame(format, channels); allocationSize += sizeInFrames * ma_get_bytes_per_frame(format, channels);
pBufferList = (AudioBufferList*)ma__malloc_from_callbacks(allocationSize, pAllocationCallbacks); pBufferList = (AudioBufferList*)ma_malloc(allocationSize, pAllocationCallbacks);
if (pBufferList == NULL) { if (pBufferList == NULL) {
return NULL; return NULL;
} }
...@@ -25893,7 +25850,7 @@ static ma_result ma_device_realloc_AudioBufferList__coreaudio(ma_device* pDevice ...@@ -25893,7 +25850,7 @@ static ma_result ma_device_realloc_AudioBufferList__coreaudio(ma_device* pDevice
} }
/* At this point we'll have a new AudioBufferList and we can free the old one. */ /* At this point we'll have a new AudioBufferList and we can free the old one. */
ma__free_from_callbacks(pDevice->coreaudio.pAudioBufferList, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->coreaudio.pAudioBufferList, &pDevice->pContext->allocationCallbacks);
pDevice->coreaudio.pAudioBufferList = pNewAudioBufferList; pDevice->coreaudio.pAudioBufferList = pNewAudioBufferList;
pDevice->coreaudio.audioBufferCapInFrames = sizeInFrames; pDevice->coreaudio.audioBufferCapInFrames = sizeInFrames;
} }
...@@ -26374,7 +26331,7 @@ static ma_result ma_device__untrack__coreaudio(ma_device* pDevice) ...@@ -26374,7 +26331,7 @@ static ma_result ma_device__untrack__coreaudio(ma_device* pDevice)
/* If there's nothing else in the list we need to free memory. */ /* If there's nothing else in the list we need to free memory. */
if (g_TrackedDeviceCount_CoreAudio == 0) { if (g_TrackedDeviceCount_CoreAudio == 0) {
ma__free_from_callbacks(g_ppTrackedDevices_CoreAudio, &pDevice->pContext->allocationCallbacks); ma_free(g_ppTrackedDevices_CoreAudio, &pDevice->pContext->allocationCallbacks);
g_ppTrackedDevices_CoreAudio = NULL; g_ppTrackedDevices_CoreAudio = NULL;
g_TrackedDeviceCap_CoreAudio = 0; g_TrackedDeviceCap_CoreAudio = 0;
} }
...@@ -26516,7 +26473,7 @@ static ma_result ma_device_uninit__coreaudio(ma_device* pDevice) ...@@ -26516,7 +26473,7 @@ static ma_result ma_device_uninit__coreaudio(ma_device* pDevice)
} }
if (pDevice->coreaudio.pAudioBufferList) { if (pDevice->coreaudio.pAudioBufferList) {
ma__free_from_callbacks(pDevice->coreaudio.pAudioBufferList, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->coreaudio.pAudioBufferList, &pDevice->pContext->allocationCallbacks);
} }
return MA_SUCCESS; return MA_SUCCESS;
...@@ -26921,7 +26878,7 @@ static ma_result ma_device_init_internal__coreaudio(ma_context* pContext, ma_dev ...@@ -26921,7 +26878,7 @@ static ma_result ma_device_init_internal__coreaudio(ma_context* pContext, ma_dev
/* Initialize the audio unit. */ /* Initialize the audio unit. */
status = ((ma_AudioUnitInitialize_proc)pContext->coreaudio.AudioUnitInitialize)(pData->audioUnit); status = ((ma_AudioUnitInitialize_proc)pContext->coreaudio.AudioUnitInitialize)(pData->audioUnit);
if (status != noErr) { if (status != noErr) {
ma__free_from_callbacks(pData->pAudioBufferList, &pContext->allocationCallbacks); ma_free(pData->pAudioBufferList, &pContext->allocationCallbacks);
pData->pAudioBufferList = NULL; pData->pAudioBufferList = NULL;
((ma_AudioComponentInstanceDispose_proc)pContext->coreaudio.AudioComponentInstanceDispose)(pData->audioUnit); ((ma_AudioComponentInstanceDispose_proc)pContext->coreaudio.AudioComponentInstanceDispose)(pData->audioUnit);
return ma_result_from_OSStatus(status); return ma_result_from_OSStatus(status);
...@@ -26968,7 +26925,7 @@ static ma_result ma_device_reinit_internal__coreaudio(ma_device* pDevice, ma_dev ...@@ -26968,7 +26925,7 @@ static ma_result ma_device_reinit_internal__coreaudio(ma_device* pDevice, ma_dev
((ma_AudioComponentInstanceDispose_proc)pDevice->pContext->coreaudio.AudioComponentInstanceDispose)((AudioUnit)pDevice->coreaudio.audioUnitCapture); ((ma_AudioComponentInstanceDispose_proc)pDevice->pContext->coreaudio.AudioComponentInstanceDispose)((AudioUnit)pDevice->coreaudio.audioUnitCapture);
} }
if (pDevice->coreaudio.pAudioBufferList) { if (pDevice->coreaudio.pAudioBufferList) {
ma__free_from_callbacks(pDevice->coreaudio.pAudioBufferList, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->coreaudio.pAudioBufferList, &pDevice->pContext->allocationCallbacks);
} }
} else if (deviceType == ma_device_type_playback) { } else if (deviceType == ma_device_type_playback) {
data.formatIn = pDevice->playback.format; data.formatIn = pDevice->playback.format;
...@@ -27130,7 +27087,7 @@ static ma_result ma_device_init__coreaudio(ma_device* pDevice, const ma_device_c ...@@ -27130,7 +27087,7 @@ static ma_result ma_device_init__coreaudio(ma_device* pDevice, const ma_device_c
if (pConfig->deviceType == ma_device_type_duplex) { if (pConfig->deviceType == ma_device_type_duplex) {
((ma_AudioComponentInstanceDispose_proc)pDevice->pContext->coreaudio.AudioComponentInstanceDispose)((AudioUnit)pDevice->coreaudio.audioUnitCapture); ((ma_AudioComponentInstanceDispose_proc)pDevice->pContext->coreaudio.AudioComponentInstanceDispose)((AudioUnit)pDevice->coreaudio.audioUnitCapture);
if (pDevice->coreaudio.pAudioBufferList) { if (pDevice->coreaudio.pAudioBufferList) {
ma__free_from_callbacks(pDevice->coreaudio.pAudioBufferList, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->coreaudio.pAudioBufferList, &pDevice->pContext->allocationCallbacks);
} }
} }
return result; return result;
...@@ -31112,7 +31069,7 @@ static ma_result ma_device_uninit__opensl(ma_device* pDevice) ...@@ -31112,7 +31069,7 @@ static ma_result ma_device_uninit__opensl(ma_device* pDevice)
MA_OPENSL_OBJ(pDevice->opensl.pAudioRecorderObj)->Destroy((SLObjectItf)pDevice->opensl.pAudioRecorderObj); MA_OPENSL_OBJ(pDevice->opensl.pAudioRecorderObj)->Destroy((SLObjectItf)pDevice->opensl.pAudioRecorderObj);
} }
ma__free_from_callbacks(pDevice->opensl.pBufferCapture, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->opensl.pBufferCapture, &pDevice->pContext->allocationCallbacks);
} }
if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) { if (pDevice->type == ma_device_type_playback || pDevice->type == ma_device_type_duplex) {
...@@ -31123,7 +31080,7 @@ static ma_result ma_device_uninit__opensl(ma_device* pDevice) ...@@ -31123,7 +31080,7 @@ static ma_result ma_device_uninit__opensl(ma_device* pDevice)
MA_OPENSL_OBJ(pDevice->opensl.pOutputMixObj)->Destroy((SLObjectItf)pDevice->opensl.pOutputMixObj); MA_OPENSL_OBJ(pDevice->opensl.pOutputMixObj)->Destroy((SLObjectItf)pDevice->opensl.pOutputMixObj);
} }
ma__free_from_callbacks(pDevice->opensl.pBufferPlayback, &pDevice->pContext->allocationCallbacks); ma_free(pDevice->opensl.pBufferPlayback, &pDevice->pContext->allocationCallbacks);
} }
return MA_SUCCESS; return MA_SUCCESS;
...@@ -31357,7 +31314,7 @@ static ma_result ma_device_init__opensl(ma_device* pDevice, const ma_device_conf ...@@ -31357,7 +31314,7 @@ static ma_result ma_device_init__opensl(ma_device* pDevice, const ma_device_conf
pDevice->opensl.currentBufferIndexCapture = 0; pDevice->opensl.currentBufferIndexCapture = 0;
bufferSizeInBytes = pDescriptorCapture->periodSizeInFrames * ma_get_bytes_per_frame(pDescriptorCapture->format, pDescriptorCapture->channels) * pDescriptorCapture->periodCount; bufferSizeInBytes = pDescriptorCapture->periodSizeInFrames * ma_get_bytes_per_frame(pDescriptorCapture->format, pDescriptorCapture->channels) * pDescriptorCapture->periodCount;
pDevice->opensl.pBufferCapture = (ma_uint8*)ma__calloc_from_callbacks(bufferSizeInBytes, &pDevice->pContext->allocationCallbacks); pDevice->opensl.pBufferCapture = (ma_uint8*)ma_calloc(bufferSizeInBytes, &pDevice->pContext->allocationCallbacks);
if (pDevice->opensl.pBufferCapture == NULL) { if (pDevice->opensl.pBufferCapture == NULL) {
ma_device_uninit__opensl(pDevice); ma_device_uninit__opensl(pDevice);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[OpenSL] Failed to allocate memory for data buffer.", MA_OUT_OF_MEMORY); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[OpenSL] Failed to allocate memory for data buffer.", MA_OUT_OF_MEMORY);
...@@ -31471,7 +31428,7 @@ static ma_result ma_device_init__opensl(ma_device* pDevice, const ma_device_conf ...@@ -31471,7 +31428,7 @@ static ma_result ma_device_init__opensl(ma_device* pDevice, const ma_device_conf
pDevice->opensl.currentBufferIndexPlayback = 0; pDevice->opensl.currentBufferIndexPlayback = 0;
bufferSizeInBytes = pDescriptorPlayback->periodSizeInFrames * ma_get_bytes_per_frame(pDescriptorPlayback->format, pDescriptorPlayback->channels) * pDescriptorPlayback->periodCount; bufferSizeInBytes = pDescriptorPlayback->periodSizeInFrames * ma_get_bytes_per_frame(pDescriptorPlayback->format, pDescriptorPlayback->channels) * pDescriptorPlayback->periodCount;
pDevice->opensl.pBufferPlayback = (ma_uint8*)ma__calloc_from_callbacks(bufferSizeInBytes, &pDevice->pContext->allocationCallbacks); pDevice->opensl.pBufferPlayback = (ma_uint8*)ma_calloc(bufferSizeInBytes, &pDevice->pContext->allocationCallbacks);
if (pDevice->opensl.pBufferPlayback == NULL) { if (pDevice->opensl.pBufferPlayback == NULL) {
ma_device_uninit__opensl(pDevice); ma_device_uninit__opensl(pDevice);
return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[OpenSL] Failed to allocate memory for data buffer.", MA_OUT_OF_MEMORY); return ma_post_error(pDevice, MA_LOG_LEVEL_ERROR, "[OpenSL] Failed to allocate memory for data buffer.", MA_OUT_OF_MEMORY);
...@@ -33045,7 +33002,7 @@ MA_API ma_result ma_context_uninit(ma_context* pContext) ...@@ -33045,7 +33002,7 @@ MA_API ma_result ma_context_uninit(ma_context* pContext)
ma_mutex_uninit(&pContext->deviceEnumLock); ma_mutex_uninit(&pContext->deviceEnumLock);
ma_mutex_uninit(&pContext->deviceInfoLock); ma_mutex_uninit(&pContext->deviceInfoLock);
ma__free_from_callbacks(pContext->pDeviceInfos, &pContext->allocationCallbacks); ma_free(pContext->pDeviceInfos, &pContext->allocationCallbacks);
ma_context_uninit_backend_apis(pContext); ma_context_uninit_backend_apis(pContext);
if (pContext->pLog == &pContext->log) { if (pContext->pLog == &pContext->log) {
...@@ -33578,7 +33535,7 @@ MA_API ma_result ma_device_init_ex(const ma_backend backends[], ma_uint32 backen ...@@ -33578,7 +33535,7 @@ MA_API ma_result ma_device_init_ex(const ma_backend backends[], ma_uint32 backen
} }
pContext = (ma_context*)ma__malloc_from_callbacks(sizeof(*pContext), &allocationCallbacks); pContext = (ma_context*)ma_malloc(sizeof(*pContext), &allocationCallbacks);
if (pContext == NULL) { if (pContext == NULL) {
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
...@@ -33609,7 +33566,7 @@ MA_API ma_result ma_device_init_ex(const ma_backend backends[], ma_uint32 backen ...@@ -33609,7 +33566,7 @@ MA_API ma_result ma_device_init_ex(const ma_backend backends[], ma_uint32 backen
} }
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
ma__free_from_callbacks(pContext, &allocationCallbacks); ma_free(pContext, &allocationCallbacks);
return result; return result;
} }
...@@ -33657,7 +33614,7 @@ MA_API void ma_device_uninit(ma_device* pDevice) ...@@ -33657,7 +33614,7 @@ MA_API void ma_device_uninit(ma_device* pDevice)
ma_allocation_callbacks allocationCallbacks = pDevice->pContext->allocationCallbacks; ma_allocation_callbacks allocationCallbacks = pDevice->pContext->allocationCallbacks;
ma_context_uninit(pDevice->pContext); ma_context_uninit(pDevice->pContext);
ma__free_from_callbacks(pDevice->pContext, &allocationCallbacks); ma_free(pDevice->pContext, &allocationCallbacks);
} }
MA_ZERO_OBJECT(pDevice); MA_ZERO_OBJECT(pDevice);
...@@ -43304,16 +43261,34 @@ MA_API const char* ma_result_description(ma_result result) ...@@ -43304,16 +43261,34 @@ MA_API const char* ma_result_description(ma_result result)
MA_API void* ma_malloc(size_t sz, const ma_allocation_callbacks* pAllocationCallbacks) MA_API void* ma_malloc(size_t sz, const ma_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks != NULL) { if (pAllocationCallbacks != NULL) {
return ma__malloc_from_callbacks(sz, pAllocationCallbacks); if (pAllocationCallbacks->onMalloc != NULL) {
return pAllocationCallbacks->onMalloc(sz, pAllocationCallbacks->pUserData);
} else {
return NULL; /* Do not fall back to the default implementation. */
}
} else { } else {
return ma__malloc_default(sz, NULL); return ma__malloc_default(sz, NULL);
} }
} }
MA_API void* ma_calloc(size_t sz, const ma_allocation_callbacks* pAllocationCallbacks)
{
void* p = ma_malloc(sz, pAllocationCallbacks);
if (p != NULL) {
MA_ZERO_MEMORY(p, sz);
}
return p;
}
MA_API void* ma_realloc(void* p, size_t sz, const ma_allocation_callbacks* pAllocationCallbacks) MA_API void* ma_realloc(void* p, size_t sz, const ma_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks != NULL) { if (pAllocationCallbacks != NULL) {
return ma__realloc_from_callbacks(p, sz, pAllocationCallbacks); if (pAllocationCallbacks->onRealloc != NULL) {
return pAllocationCallbacks->onRealloc(p, sz, pAllocationCallbacks->pUserData);
} else {
return NULL; /* Do not fall back to the default implementation. */
}
} else { } else {
return ma__realloc_default(p, sz, NULL); return ma__realloc_default(p, sz, NULL);
} }
...@@ -43322,7 +43297,11 @@ MA_API void* ma_realloc(void* p, size_t sz, const ma_allocation_callbacks* pAllo ...@@ -43322,7 +43297,11 @@ MA_API void* ma_realloc(void* p, size_t sz, const ma_allocation_callbacks* pAllo
MA_API void ma_free(void* p, const ma_allocation_callbacks* pAllocationCallbacks) MA_API void ma_free(void* p, const ma_allocation_callbacks* pAllocationCallbacks)
{ {
if (pAllocationCallbacks != NULL) { if (pAllocationCallbacks != NULL) {
ma__free_from_callbacks(p, pAllocationCallbacks); if (pAllocationCallbacks->onFree != NULL) {
pAllocationCallbacks->onFree(p, pAllocationCallbacks->pUserData);
} else {
return; /* Do no fall back to the default implementation. */
}
} else { } else {
ma__free_default(p, NULL); ma__free_default(p, NULL);
} }
...@@ -44321,7 +44300,7 @@ static ma_result ma_audio_buffer_init_ex(const ma_audio_buffer_config* pConfig, ...@@ -44321,7 +44300,7 @@ static ma_result ma_audio_buffer_init_ex(const ma_audio_buffer_config* pConfig,
return MA_OUT_OF_MEMORY; /* Too big. */ return MA_OUT_OF_MEMORY; /* Too big. */
} }
pData = ma__malloc_from_callbacks((size_t)allocationSizeInBytes, &pAudioBuffer->allocationCallbacks); /* Safe cast to size_t. */ pData = ma_malloc((size_t)allocationSizeInBytes, &pAudioBuffer->allocationCallbacks); /* Safe cast to size_t. */
if (pData == NULL) { if (pData == NULL) {
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
...@@ -44349,11 +44328,11 @@ static void ma_audio_buffer_uninit_ex(ma_audio_buffer* pAudioBuffer, ma_bool32 d ...@@ -44349,11 +44328,11 @@ static void ma_audio_buffer_uninit_ex(ma_audio_buffer* pAudioBuffer, ma_bool32 d
} }
if (pAudioBuffer->ownsData && pAudioBuffer->ref.pData != &pAudioBuffer->_pExtraData[0]) { if (pAudioBuffer->ownsData && pAudioBuffer->ref.pData != &pAudioBuffer->_pExtraData[0]) {
ma__free_from_callbacks((void*)pAudioBuffer->ref.pData, &pAudioBuffer->allocationCallbacks); /* Naugty const cast, but OK in this case since we've guarded it with the ownsData check. */ ma_free((void*)pAudioBuffer->ref.pData, &pAudioBuffer->allocationCallbacks); /* Naugty const cast, but OK in this case since we've guarded it with the ownsData check. */
} }
if (doFree) { if (doFree) {
ma__free_from_callbacks(pAudioBuffer, &pAudioBuffer->allocationCallbacks); ma_free(pAudioBuffer, &pAudioBuffer->allocationCallbacks);
} }
ma_audio_buffer_ref_uninit(&pAudioBuffer->ref); ma_audio_buffer_ref_uninit(&pAudioBuffer->ref);
...@@ -44394,7 +44373,7 @@ MA_API ma_result ma_audio_buffer_alloc_and_init(const ma_audio_buffer_config* pC ...@@ -44394,7 +44373,7 @@ MA_API ma_result ma_audio_buffer_alloc_and_init(const ma_audio_buffer_config* pC
return MA_OUT_OF_MEMORY; /* Too big. */ return MA_OUT_OF_MEMORY; /* Too big. */
} }
pAudioBuffer = (ma_audio_buffer*)ma__malloc_from_callbacks((size_t)allocationSizeInBytes, &innerConfig.allocationCallbacks); /* Safe cast to size_t. */ pAudioBuffer = (ma_audio_buffer*)ma_malloc((size_t)allocationSizeInBytes, &innerConfig.allocationCallbacks); /* Safe cast to size_t. */
if (pAudioBuffer == NULL) { if (pAudioBuffer == NULL) {
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
...@@ -44409,7 +44388,7 @@ MA_API ma_result ma_audio_buffer_alloc_and_init(const ma_audio_buffer_config* pC ...@@ -44409,7 +44388,7 @@ MA_API ma_result ma_audio_buffer_alloc_and_init(const ma_audio_buffer_config* pC
result = ma_audio_buffer_init_ex(&innerConfig, MA_FALSE, pAudioBuffer); result = ma_audio_buffer_init_ex(&innerConfig, MA_FALSE, pAudioBuffer);
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
ma__free_from_callbacks(pAudioBuffer, &innerConfig.allocationCallbacks); ma_free(pAudioBuffer, &innerConfig.allocationCallbacks);
return result; return result;
} }
...@@ -44713,7 +44692,7 @@ static ma_result ma_vfs_open_and_read_file_ex(ma_vfs* pVFS, const char* pFilePat ...@@ -44713,7 +44692,7 @@ static ma_result ma_vfs_open_and_read_file_ex(ma_vfs* pVFS, const char* pFilePat
return MA_TOO_BIG; return MA_TOO_BIG;
} }
pData = ma__malloc_from_callbacks((size_t)info.sizeInBytes, pAllocationCallbacks); /* Safe cast. */ pData = ma_malloc((size_t)info.sizeInBytes, pAllocationCallbacks); /* Safe cast. */
if (pData == NULL) { if (pData == NULL) {
ma_vfs_close(pVFS, file); ma_vfs_close(pVFS, file);
return result; return result;
...@@ -44723,7 +44702,7 @@ static ma_result ma_vfs_open_and_read_file_ex(ma_vfs* pVFS, const char* pFilePat ...@@ -44723,7 +44702,7 @@ static ma_result ma_vfs_open_and_read_file_ex(ma_vfs* pVFS, const char* pFilePat
ma_vfs_close(pVFS, file); ma_vfs_close(pVFS, file);
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
ma__free_from_callbacks(pData, pAllocationCallbacks); ma_free(pData, pAllocationCallbacks);
return result; return result;
} }
...@@ -50622,13 +50601,13 @@ static ma_result ma_decoder__full_decode_and_uninit(ma_decoder* pDecoder, ma_dec ...@@ -50622,13 +50601,13 @@ static ma_result ma_decoder__full_decode_and_uninit(ma_decoder* pDecoder, ma_dec
} }
if ((newDataCapInFrames * bpf) > MA_SIZE_MAX) { if ((newDataCapInFrames * bpf) > MA_SIZE_MAX) {
ma__free_from_callbacks(pPCMFramesOut, &pDecoder->allocationCallbacks); ma_free(pPCMFramesOut, &pDecoder->allocationCallbacks);
return MA_TOO_BIG; return MA_TOO_BIG;
} }
pNewPCMFramesOut = (void*)ma_realloc(pPCMFramesOut, (size_t)(newDataCapInFrames * bpf), &pDecoder->allocationCallbacks); pNewPCMFramesOut = (void*)ma_realloc(pPCMFramesOut, (size_t)(newDataCapInFrames * bpf), &pDecoder->allocationCallbacks);
if (pNewPCMFramesOut == NULL) { if (pNewPCMFramesOut == NULL) {
ma__free_from_callbacks(pPCMFramesOut, &pDecoder->allocationCallbacks); ma_free(pPCMFramesOut, &pDecoder->allocationCallbacks);
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
...@@ -50662,7 +50641,7 @@ static ma_result ma_decoder__full_decode_and_uninit(ma_decoder* pDecoder, ma_dec ...@@ -50662,7 +50641,7 @@ static ma_result ma_decoder__full_decode_and_uninit(ma_decoder* pDecoder, ma_dec
if (ppPCMFramesOut != NULL) { if (ppPCMFramesOut != NULL) {
*ppPCMFramesOut = pPCMFramesOut; *ppPCMFramesOut = pPCMFramesOut;
} else { } else {
ma__free_from_callbacks(pPCMFramesOut, &pDecoder->allocationCallbacks); ma_free(pPCMFramesOut, &pDecoder->allocationCallbacks);
} }
if (pFrameCountOut != NULL) { if (pFrameCountOut != NULL) {
...@@ -50759,7 +50738,7 @@ static ma_result ma_encoder__on_init_wav(ma_encoder* pEncoder) ...@@ -50759,7 +50738,7 @@ static ma_result ma_encoder__on_init_wav(ma_encoder* pEncoder)
MA_ASSERT(pEncoder != NULL); MA_ASSERT(pEncoder != NULL);
pWav = (drwav*)ma__malloc_from_callbacks(sizeof(*pWav), &pEncoder->config.allocationCallbacks); pWav = (drwav*)ma_malloc(sizeof(*pWav), &pEncoder->config.allocationCallbacks);
if (pWav == NULL) { if (pWav == NULL) {
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
...@@ -50798,7 +50777,7 @@ static void ma_encoder__on_uninit_wav(ma_encoder* pEncoder) ...@@ -50798,7 +50777,7 @@ static void ma_encoder__on_uninit_wav(ma_encoder* pEncoder)
MA_ASSERT(pWav != NULL); MA_ASSERT(pWav != NULL);
drwav_uninit(pWav); drwav_uninit(pWav);
ma__free_from_callbacks(pWav, &pEncoder->config.allocationCallbacks); ma_free(pWav, &pEncoder->config.allocationCallbacks);
} }
static ma_uint64 ma_encoder__on_write_pcm_frames_wav(ma_encoder* pEncoder, const void* pFramesIn, ma_uint64 frameCount) static ma_uint64 ma_encoder__on_write_pcm_frames_wav(ma_encoder* pEncoder, const void* pFramesIn, ma_uint64 frameCount)
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