mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-23 16:54:03 +02:00
Hook up custom decoders to the resource manager.
This commit is contained in:
@@ -1466,6 +1466,9 @@ typedef struct
|
|||||||
ma_uint32 jobThreadCount; /* Set to 0 if you want to self-manage your job threads. Defaults to 1. */
|
ma_uint32 jobThreadCount; /* Set to 0 if you want to self-manage your job threads. Defaults to 1. */
|
||||||
ma_uint32 flags;
|
ma_uint32 flags;
|
||||||
ma_vfs* pVFS; /* Can be NULL in which case defaults will be used. */
|
ma_vfs* pVFS; /* Can be NULL in which case defaults will be used. */
|
||||||
|
ma_decoding_backend_vtable** ppCustomDecodingBackendVTables;
|
||||||
|
ma_uint32 customDecodingBackendVTableCount;
|
||||||
|
void* pCustomDecodingBackendUserData;
|
||||||
} ma_resource_manager_config;
|
} ma_resource_manager_config;
|
||||||
|
|
||||||
MA_API ma_resource_manager_config ma_resource_manager_config_init(void);
|
MA_API ma_resource_manager_config ma_resource_manager_config_init(void);
|
||||||
@@ -6905,11 +6908,30 @@ MA_API ma_result ma_resource_manager_init(const ma_resource_manager_config* pCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Custom decoding backends. */
|
||||||
|
if (pConfig->ppCustomDecodingBackendVTables != NULL && pConfig->customDecodingBackendVTableCount > 0) {
|
||||||
|
size_t sizeInBytes = sizeof(*pResourceManager->config.ppCustomDecodingBackendVTables) * pConfig->customDecodingBackendVTableCount;
|
||||||
|
|
||||||
|
pResourceManager->config.ppCustomDecodingBackendVTables = (ma_decoding_backend_vtable**)ma_malloc(sizeInBytes, &pResourceManager->config.allocationCallbacks);
|
||||||
|
if (pResourceManager->config.ppCustomDecodingBackendVTables == NULL) {
|
||||||
|
ma_job_queue_uninit(&pResourceManager->jobQueue);
|
||||||
|
return MA_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
MA_COPY_MEMORY(pResourceManager->config.ppCustomDecodingBackendVTables, pConfig->ppCustomDecodingBackendVTables, sizeInBytes);
|
||||||
|
|
||||||
|
pResourceManager->config.customDecodingBackendVTableCount = pConfig->customDecodingBackendVTableCount;
|
||||||
|
pResourceManager->config.pCustomDecodingBackendUserData = pConfig->pCustomDecodingBackendUserData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Here is where we initialize our threading stuff. We don't do this if we don't support threading. */
|
/* Here is where we initialize our threading stuff. We don't do this if we don't support threading. */
|
||||||
if (ma_resource_manager_is_threading_enabled(pResourceManager)) {
|
if (ma_resource_manager_is_threading_enabled(pResourceManager)) {
|
||||||
/* Data buffer lock. */
|
/* Data buffer lock. */
|
||||||
result = ma_mutex_init(&pResourceManager->dataBufferBSTLock);
|
result = ma_mutex_init(&pResourceManager->dataBufferBSTLock);
|
||||||
if (result != MA_SUCCESS) {
|
if (result != MA_SUCCESS) {
|
||||||
|
ma_job_queue_uninit(&pResourceManager->jobQueue);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6973,6 +6995,8 @@ MA_API void ma_resource_manager_uninit(ma_resource_manager* pResourceManager)
|
|||||||
if (ma_resource_manager_is_threading_enabled(pResourceManager)) {
|
if (ma_resource_manager_is_threading_enabled(pResourceManager)) {
|
||||||
ma_mutex_uninit(&pResourceManager->dataBufferBSTLock);
|
ma_mutex_uninit(&pResourceManager->dataBufferBSTLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ma_free(pResourceManager->config.ppCustomDecodingBackendVTables, &pResourceManager->config.allocationCallbacks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -6986,6 +7010,9 @@ static ma_result ma_resource_manager__init_decoder(ma_resource_manager* pResourc
|
|||||||
|
|
||||||
config = ma_decoder_config_init(pResourceManager->config.decodedFormat, pResourceManager->config.decodedChannels, pResourceManager->config.decodedSampleRate);
|
config = ma_decoder_config_init(pResourceManager->config.decodedFormat, pResourceManager->config.decodedChannels, pResourceManager->config.decodedSampleRate);
|
||||||
config.allocationCallbacks = pResourceManager->config.allocationCallbacks;
|
config.allocationCallbacks = pResourceManager->config.allocationCallbacks;
|
||||||
|
config.ppCustomBackendVTables = pResourceManager->config.ppCustomDecodingBackendVTables;
|
||||||
|
config.customBackendVTableCount = pResourceManager->config.customDecodingBackendVTableCount;
|
||||||
|
config.pCustomBackendUserData = pResourceManager->config.pCustomDecodingBackendUserData;
|
||||||
|
|
||||||
if (pFilePath != NULL) {
|
if (pFilePath != NULL) {
|
||||||
return ma_decoder_init_vfs(pResourceManager->config.pVFS, pFilePath, &config, pDecoder);
|
return ma_decoder_init_vfs(pResourceManager->config.pVFS, pFilePath, &config, pDecoder);
|
||||||
|
|||||||
Reference in New Issue
Block a user