@@ -9522,8 +9522,9 @@ typedef struct ma_device_state_async
95229522MA_API ma_result ma_device_state_async_init(ma_device_type deviceType, const ma_device_descriptor* pDescriptorPlayback, const ma_device_descriptor* pDescriptorCapture, const ma_allocation_callbacks* pAllocationCallbacks, ma_device_state_async* pAsyncDeviceState);
95239523MA_API void ma_device_state_async_uninit(ma_device_state_async* pAsyncDeviceState, const ma_allocation_callbacks* pAllocationCallbacks);
95249524MA_API ma_result ma_device_state_async_resize(ma_device_state_async* pAsyncDeviceState, ma_uint32 sizeInFramesPlayback, ma_uint32 sizeInFramesCapture, const ma_allocation_callbacks* pAllocationCallbacks);
9525+ MA_API void ma_device_state_async_release(ma_device_state_async* pAsyncDeviceState);
95259526MA_API void ma_device_state_async_wait(ma_device_state_async* pAsyncDeviceState);
9526- MA_API void ma_device_state_async_step(ma_device_state_async* pAsyncDeviceState, ma_device* pDevice);
9527+ MA_API ma_result ma_device_state_async_step(ma_device_state_async* pAsyncDeviceState, ma_device* pDevice); /* Returns MA_SUCCESS if some data was processed, MA_NO_DATA_AVAILABLE if no data was processed. */
95279528MA_API void ma_device_state_async_process(ma_device_state_async* pAsyncDeviceState, ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount);
95289529/* END ma_device_state_async.h */
95299530
@@ -46235,6 +46236,21 @@ MA_API ma_result ma_device_state_async_resize(ma_device_state_async* pAsyncDevic
4623546236 return MA_SUCCESS;
4623646237}
4623746238
46239+ MA_API void ma_device_state_async_release(ma_device_state_async* pAsyncDeviceState)
46240+ {
46241+ if (pAsyncDeviceState == NULL) {
46242+ return;
46243+ }
46244+
46245+ if (pAsyncDeviceState->deviceType == ma_device_type_capture || pAsyncDeviceState->deviceType == ma_device_type_duplex) {
46246+ ma_semaphore_release(&pAsyncDeviceState->capture.semaphore);
46247+ }
46248+
46249+ if (pAsyncDeviceState->deviceType == ma_device_type_playback || pAsyncDeviceState->deviceType == ma_device_type_duplex) {
46250+ ma_semaphore_release(&pAsyncDeviceState->playback.semaphore);
46251+ }
46252+ }
46253+
4623846254MA_API void ma_device_state_async_wait(ma_device_state_async* pAsyncDeviceState)
4623946255{
4624046256 if (pAsyncDeviceState == NULL) {
@@ -46250,10 +46266,12 @@ MA_API void ma_device_state_async_wait(ma_device_state_async* pAsyncDeviceState)
4625046266 }
4625146267}
4625246268
46253- MA_API void ma_device_state_async_step(ma_device_state_async* pAsyncDeviceState, ma_device* pDevice)
46269+ MA_API ma_result ma_device_state_async_step(ma_device_state_async* pAsyncDeviceState, ma_device* pDevice)
4625446270{
46271+ ma_result result = MA_NO_DATA_AVAILABLE;
46272+
4625546273 if (pAsyncDeviceState == NULL || pDevice == NULL) {
46256- return;
46274+ return MA_INVALID_ARGS ;
4625746275 }
4625846276
4625946277 if (pAsyncDeviceState->deviceType == ma_device_type_capture || pAsyncDeviceState->deviceType == ma_device_type_duplex) {
@@ -46262,6 +46280,7 @@ MA_API void ma_device_state_async_step(ma_device_state_async* pAsyncDeviceState,
4626246280 if (pAsyncDeviceState->capture.frameCount > 0) {
4626346281 ma_device_handle_backend_data_callback(pDevice, NULL, pAsyncDeviceState->capture.pBuffer, pAsyncDeviceState->capture.frameCount);
4626446282 pAsyncDeviceState->capture.frameCount = 0;
46283+ result = MA_SUCCESS;
4626546284 }
4626646285 }
4626746286 ma_spinlock_unlock(&pAsyncDeviceState->capture.lock);
@@ -46275,10 +46294,13 @@ MA_API void ma_device_state_async_step(ma_device_state_async* pAsyncDeviceState,
4627546294 if (pAsyncDeviceState->playback.frameCount < pAsyncDeviceState->playback.frameCap) {
4627646295 ma_device_handle_backend_data_callback(pDevice, ma_offset_ptr(pAsyncDeviceState->playback.pBuffer, bytesPerFrame * pAsyncDeviceState->playback.frameCount), NULL, (pAsyncDeviceState->playback.frameCap - pAsyncDeviceState->playback.frameCount));
4627746296 pAsyncDeviceState->playback.frameCount = pAsyncDeviceState->playback.frameCap;
46297+ result = MA_SUCCESS;
4627846298 }
4627946299 }
4628046300 ma_spinlock_unlock(&pAsyncDeviceState->playback.lock);
4628146301 }
46302+
46303+ return result;
4628246304}
4628346305
4628446306MA_API void ma_device_state_async_process(ma_device_state_async* pAsyncDeviceState, ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount)
0 commit comments