mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-24 01:04:02 +02:00
PulseAudio: Optimize some memory allocations.
This commit is contained in:
+19
-33
@@ -31163,17 +31163,35 @@ static ma_result ma_context_init__pulseaudio(ma_context* pContext, const void* p
|
|||||||
ma_log* pLog = ma_context_get_log(pContext);
|
ma_log* pLog = ma_context_get_log(pContext);
|
||||||
ma_result result;
|
ma_result result;
|
||||||
ma_bool32 tryAutoSpawn = MA_FALSE;
|
ma_bool32 tryAutoSpawn = MA_FALSE;
|
||||||
|
size_t applicationNameAllocSize = 0;
|
||||||
|
size_t serverNameAllocSize = 0;
|
||||||
|
|
||||||
if (pContextConfigPulseAudio == NULL) {
|
if (pContextConfigPulseAudio == NULL) {
|
||||||
defaultConfigPulseAudio = ma_context_config_pulseaudio_init();
|
defaultConfigPulseAudio = ma_context_config_pulseaudio_init();
|
||||||
pContextConfigPulseAudio = &defaultConfigPulseAudio;
|
pContextConfigPulseAudio = &defaultConfigPulseAudio;
|
||||||
}
|
}
|
||||||
|
|
||||||
pContextStatePulseAudio = (ma_context_state_pulseaudio*)ma_calloc(sizeof(*pContextStatePulseAudio), ma_context_get_allocation_callbacks(pContext));
|
if (pContextConfigPulseAudio->pApplicationName != NULL) {
|
||||||
|
applicationNameAllocSize = ma_align_64(strlen(pContextConfigPulseAudio->pApplicationName) + 1);
|
||||||
|
}
|
||||||
|
if (pContextConfigPulseAudio->pServerName != NULL) {
|
||||||
|
serverNameAllocSize = ma_align_64(strlen(pContextConfigPulseAudio->pServerName) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
pContextStatePulseAudio = (ma_context_state_pulseaudio*)ma_calloc(ma_align_64(sizeof(*pContextStatePulseAudio)) + applicationNameAllocSize + serverNameAllocSize, ma_context_get_allocation_callbacks(pContext));
|
||||||
if (pContextStatePulseAudio == NULL) {
|
if (pContextStatePulseAudio == NULL) {
|
||||||
return MA_OUT_OF_MEMORY;
|
return MA_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pContextConfigPulseAudio->pApplicationName != NULL) {
|
||||||
|
pContextStatePulseAudio->pApplicationName = (char*)ma_offset_ptr(pContextStatePulseAudio, ma_align_64(sizeof(*pContextStatePulseAudio)));
|
||||||
|
ma_strcpy_s(pContextStatePulseAudio->pApplicationName, applicationNameAllocSize, pContextConfigPulseAudio->pApplicationName);
|
||||||
|
}
|
||||||
|
if (pContextConfigPulseAudio->pServerName != NULL) {
|
||||||
|
pContextStatePulseAudio->pServerName = (char*)ma_offset_ptr(pContextStatePulseAudio, ma_align_64(sizeof(*pContextStatePulseAudio)) + applicationNameAllocSize);
|
||||||
|
ma_strcpy_s(pContextStatePulseAudio->pServerName, serverNameAllocSize, pContextConfigPulseAudio->pServerName);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef MA_NO_RUNTIME_LINKING
|
#ifndef MA_NO_RUNTIME_LINKING
|
||||||
{
|
{
|
||||||
const char* libpulseNames[] = {
|
const char* libpulseNames[] = {
|
||||||
@@ -31388,41 +31406,12 @@ static ma_result ma_context_init__pulseaudio(ma_context* pContext, const void* p
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* We need to make a copy of the application and server names so we can pass them to the pa_context of each device. */
|
|
||||||
if (pContextConfigPulseAudio->pApplicationName != NULL) {
|
|
||||||
pContextStatePulseAudio->pApplicationName = ma_copy_string(pContextConfigPulseAudio->pApplicationName, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
if (pContextStatePulseAudio->pApplicationName == NULL) {
|
|
||||||
ma_free(pContextStatePulseAudio, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
#ifndef MA_NO_RUNTIME_LINKING
|
|
||||||
{
|
|
||||||
ma_dlclose(pLog, pContextStatePulseAudio->pulseSO);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return MA_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pContextConfigPulseAudio->pServerName != NULL) {
|
|
||||||
pContextStatePulseAudio->pServerName = ma_copy_string(pContextConfigPulseAudio->pServerName, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
if (pContextStatePulseAudio->pServerName == NULL) {
|
|
||||||
ma_free(pContextStatePulseAudio->pApplicationName, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
#ifndef MA_NO_RUNTIME_LINKING
|
|
||||||
{
|
|
||||||
ma_dlclose(pLog, pContextStatePulseAudio->pulseSO);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
ma_free(pContextStatePulseAudio, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
return MA_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tryAutoSpawn = pContextConfigPulseAudio->tryAutoSpawn;
|
tryAutoSpawn = pContextConfigPulseAudio->tryAutoSpawn;
|
||||||
|
|
||||||
|
|
||||||
result = ma_init_pa_mainloop_and_pa_context__pulseaudio(pContext, pContextStatePulseAudio, pContextStatePulseAudio->pApplicationName, pContextStatePulseAudio->pServerName, tryAutoSpawn, &pContextStatePulseAudio->pMainLoop, &pContextStatePulseAudio->pPulseContext);
|
result = ma_init_pa_mainloop_and_pa_context__pulseaudio(pContext, pContextStatePulseAudio, pContextStatePulseAudio->pApplicationName, pContextStatePulseAudio->pServerName, tryAutoSpawn, &pContextStatePulseAudio->pMainLoop, &pContextStatePulseAudio->pPulseContext);
|
||||||
if (result != MA_SUCCESS) {
|
if (result != MA_SUCCESS) {
|
||||||
ma_free(pContextStatePulseAudio->pServerName, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
ma_free(pContextStatePulseAudio->pApplicationName, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
#ifndef MA_NO_RUNTIME_LINKING
|
#ifndef MA_NO_RUNTIME_LINKING
|
||||||
{
|
{
|
||||||
ma_dlclose(pLog, pContextStatePulseAudio->pulseSO);
|
ma_dlclose(pLog, pContextStatePulseAudio->pulseSO);
|
||||||
@@ -31448,9 +31437,6 @@ static void ma_context_uninit__pulseaudio(ma_context* pContext)
|
|||||||
pContextStatePulseAudio->pa_context_unref(pContextStatePulseAudio->pPulseContext);
|
pContextStatePulseAudio->pa_context_unref(pContextStatePulseAudio->pPulseContext);
|
||||||
pContextStatePulseAudio->pa_mainloop_free(pContextStatePulseAudio->pMainLoop);
|
pContextStatePulseAudio->pa_mainloop_free(pContextStatePulseAudio->pMainLoop);
|
||||||
|
|
||||||
ma_free(pContextStatePulseAudio->pServerName, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
ma_free(pContextStatePulseAudio->pApplicationName, ma_context_get_allocation_callbacks(pContext));
|
|
||||||
|
|
||||||
#ifndef MA_NO_RUNTIME_LINKING
|
#ifndef MA_NO_RUNTIME_LINKING
|
||||||
{
|
{
|
||||||
ma_dlclose(ma_context_get_log(pContext), pContextStatePulseAudio->pulseSO);
|
ma_dlclose(ma_context_get_log(pContext), pContextStatePulseAudio->pulseSO);
|
||||||
|
|||||||
Reference in New Issue
Block a user