Commit 2bd5ddd6 authored by David Reid's avatar David Reid

Renaming and fix a bug with the splitter node.

parent aae9a16c
...@@ -1048,6 +1048,7 @@ MA_API ma_bool32 ma_data_source_node_is_looping(ma_data_source_node* pDataSource ...@@ -1048,6 +1048,7 @@ MA_API ma_bool32 ma_data_source_node_is_looping(ma_data_source_node* pDataSource
typedef struct typedef struct
{ {
ma_node_config nodeConfig; ma_node_config nodeConfig;
ma_uint32 channels;
} ma_splitter_node_config; } ma_splitter_node_config;
MA_API ma_splitter_node_config ma_splitter_node_config_init(ma_uint32 channels); MA_API ma_splitter_node_config ma_splitter_node_config_init(ma_uint32 channels);
...@@ -1131,8 +1132,6 @@ MA_API ma_bool32 ma_async_notification_poll_is_signalled(const ma_async_notifica ...@@ -1131,8 +1132,6 @@ MA_API ma_bool32 ma_async_notification_poll_is_signalled(const ma_async_notifica
/* /*
Event Notification Event Notification
This notification signals an event internally on the MA_NOTIFICATION_COMPLETE and MA_NOTIFICATION_FAILED codes. All other codes are ignored.
*/ */
typedef struct typedef struct
{ {
...@@ -1146,19 +1145,22 @@ MA_API ma_result ma_async_notification_event_wait(ma_async_notification_event* p ...@@ -1146,19 +1145,22 @@ MA_API ma_result ma_async_notification_event_wait(ma_async_notification_event* p
MA_API ma_result ma_async_notification_event_signal(ma_async_notification_event* pNotificationEvent); MA_API ma_result ma_async_notification_event_signal(ma_async_notification_event* pNotificationEvent);
/*
Pipeline notifications used by the resource manager. Made up of both an async notification and a fence, both of which are optionally.
*/
typedef struct typedef struct
{ {
ma_async_notification* pNotification; ma_async_notification* pNotification;
ma_fence* pFence; ma_fence* pFence;
} ma_pipeline_stage_notification; } ma_resource_manager_pipeline_stage_notification;
typedef struct typedef struct
{ {
ma_pipeline_stage_notification init; /* Initialization of the decoder. */ ma_resource_manager_pipeline_stage_notification init; /* Initialization of the decoder. */
ma_pipeline_stage_notification done; /* Decoding fully completed. */ ma_resource_manager_pipeline_stage_notification done; /* Decoding fully completed. */
} ma_pipeline_notifications; } ma_resource_manager_pipeline_notifications;
MA_API ma_pipeline_notifications ma_pipeline_notifications_init(void); MA_API ma_resource_manager_pipeline_notifications ma_resource_manager_pipeline_notifications_init(void);
typedef struct typedef struct
...@@ -1467,8 +1469,8 @@ MA_API ma_result ma_resource_manager_unregister_data(ma_resource_manager* pResou ...@@ -1467,8 +1469,8 @@ MA_API ma_result ma_resource_manager_unregister_data(ma_resource_manager* pResou
MA_API ma_result ma_resource_manager_unregister_data_w(ma_resource_manager* pResourceManager, const wchar_t* pName); MA_API ma_result ma_resource_manager_unregister_data_w(ma_resource_manager* pResourceManager, const wchar_t* pName);
/* Data Buffers. */ /* Data Buffers. */
MA_API ma_result ma_resource_manager_data_buffer_init(ma_resource_manager* pResourceManager, const char* pFilePath, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer); MA_API ma_result ma_resource_manager_data_buffer_init(ma_resource_manager* pResourceManager, const char* pFilePath, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer);
MA_API ma_result ma_resource_manager_data_buffer_init_w(ma_resource_manager* pResourceManager, const wchar_t* pFilePath, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer); MA_API ma_result ma_resource_manager_data_buffer_init_w(ma_resource_manager* pResourceManager, const wchar_t* pFilePath, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer);
MA_API ma_result ma_resource_manager_data_buffer_init_copy(ma_resource_manager* pResourceManager, const ma_resource_manager_data_buffer* pExistingDataBuffer, ma_resource_manager_data_buffer* pDataBuffer); MA_API ma_result ma_resource_manager_data_buffer_init_copy(ma_resource_manager* pResourceManager, const ma_resource_manager_data_buffer* pExistingDataBuffer, ma_resource_manager_data_buffer* pDataBuffer);
MA_API ma_result ma_resource_manager_data_buffer_uninit(ma_resource_manager_data_buffer* pDataBuffer); MA_API ma_result ma_resource_manager_data_buffer_uninit(ma_resource_manager_data_buffer* pDataBuffer);
MA_API ma_result ma_resource_manager_data_buffer_read_pcm_frames(ma_resource_manager_data_buffer* pDataBuffer, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead); MA_API ma_result ma_resource_manager_data_buffer_read_pcm_frames(ma_resource_manager_data_buffer* pDataBuffer, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead);
...@@ -1482,8 +1484,8 @@ MA_API ma_result ma_resource_manager_data_buffer_get_looping(const ma_resource_m ...@@ -1482,8 +1484,8 @@ MA_API ma_result ma_resource_manager_data_buffer_get_looping(const ma_resource_m
MA_API ma_result ma_resource_manager_data_buffer_get_available_frames(ma_resource_manager_data_buffer* pDataBuffer, ma_uint64* pAvailableFrames); MA_API ma_result ma_resource_manager_data_buffer_get_available_frames(ma_resource_manager_data_buffer* pDataBuffer, ma_uint64* pAvailableFrames);
/* Data Streams. */ /* Data Streams. */
MA_API ma_result ma_resource_manager_data_stream_init(ma_resource_manager* pResourceManager, const char* pFilePath, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream); MA_API ma_result ma_resource_manager_data_stream_init(ma_resource_manager* pResourceManager, const char* pFilePath, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream);
MA_API ma_result ma_resource_manager_data_stream_init_w(ma_resource_manager* pResourceManager, const wchar_t* pFilePath, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream); MA_API ma_result ma_resource_manager_data_stream_init_w(ma_resource_manager* pResourceManager, const wchar_t* pFilePath, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream);
MA_API ma_result ma_resource_manager_data_stream_uninit(ma_resource_manager_data_stream* pDataStream); MA_API ma_result ma_resource_manager_data_stream_uninit(ma_resource_manager_data_stream* pDataStream);
MA_API ma_result ma_resource_manager_data_stream_read_pcm_frames(ma_resource_manager_data_stream* pDataStream, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead); MA_API ma_result ma_resource_manager_data_stream_read_pcm_frames(ma_resource_manager_data_stream* pDataStream, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead);
MA_API ma_result ma_resource_manager_data_stream_seek_to_pcm_frame(ma_resource_manager_data_stream* pDataStream, ma_uint64 frameIndex); MA_API ma_result ma_resource_manager_data_stream_seek_to_pcm_frame(ma_resource_manager_data_stream* pDataStream, ma_uint64 frameIndex);
...@@ -1496,8 +1498,8 @@ MA_API ma_result ma_resource_manager_data_stream_get_looping(const ma_resource_m ...@@ -1496,8 +1498,8 @@ MA_API ma_result ma_resource_manager_data_stream_get_looping(const ma_resource_m
MA_API ma_result ma_resource_manager_data_stream_get_available_frames(ma_resource_manager_data_stream* pDataStream, ma_uint64* pAvailableFrames); MA_API ma_result ma_resource_manager_data_stream_get_available_frames(ma_resource_manager_data_stream* pDataStream, ma_uint64* pAvailableFrames);
/* Data Sources. */ /* Data Sources. */
MA_API ma_result ma_resource_manager_data_source_init(ma_resource_manager* pResourceManager, const char* pName, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_source* pDataSource); MA_API ma_result ma_resource_manager_data_source_init(ma_resource_manager* pResourceManager, const char* pName, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_source* pDataSource);
MA_API ma_result ma_resource_manager_data_source_init_w(ma_resource_manager* pResourceManager, const wchar_t* pName, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_source* pDataSource); MA_API ma_result ma_resource_manager_data_source_init_w(ma_resource_manager* pResourceManager, const wchar_t* pName, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_source* pDataSource);
MA_API ma_result ma_resource_manager_data_source_init_copy(ma_resource_manager* pResourceManager, const ma_resource_manager_data_source* pExistingDataSource, ma_resource_manager_data_source* pDataSource); MA_API ma_result ma_resource_manager_data_source_init_copy(ma_resource_manager* pResourceManager, const ma_resource_manager_data_source* pExistingDataSource, ma_resource_manager_data_source* pDataSource);
MA_API ma_result ma_resource_manager_data_source_uninit(ma_resource_manager_data_source* pDataSource); MA_API ma_result ma_resource_manager_data_source_uninit(ma_resource_manager_data_source* pDataSource);
MA_API ma_result ma_resource_manager_data_source_read_pcm_frames(ma_resource_manager_data_source* pDataSource, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead); MA_API ma_result ma_resource_manager_data_source_read_pcm_frames(ma_resource_manager_data_source* pDataSource, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead);
...@@ -4471,18 +4473,10 @@ MA_API ma_bool32 ma_data_source_node_is_looping(ma_data_source_node* pDataSource ...@@ -4471,18 +4473,10 @@ MA_API ma_bool32 ma_data_source_node_is_looping(ma_data_source_node* pDataSource
MA_API ma_splitter_node_config ma_splitter_node_config_init(ma_uint32 channels) MA_API ma_splitter_node_config ma_splitter_node_config_init(ma_uint32 channels)
{ {
ma_splitter_node_config config; ma_splitter_node_config config;
ma_uint32 inputChannels[1];
ma_uint32 outputChannels[2];
/* Same channel count between inputs and outputs are required for splitters. */
inputChannels[0] = channels;
outputChannels[0] = channels;
outputChannels[1] = channels;
MA_ZERO_OBJECT(&config); MA_ZERO_OBJECT(&config);
config.nodeConfig = ma_node_config_init(); config.nodeConfig = ma_node_config_init();
config.nodeConfig.pInputChannels = inputChannels; config.channels = channels;
config.nodeConfig.pOutputChannels = outputChannels;
return config; return config;
} }
...@@ -4523,6 +4517,8 @@ MA_API ma_result ma_splitter_node_init(ma_node_graph* pNodeGraph, const ma_split ...@@ -4523,6 +4517,8 @@ MA_API ma_result ma_splitter_node_init(ma_node_graph* pNodeGraph, const ma_split
{ {
ma_result result; ma_result result;
ma_node_config baseConfig; ma_node_config baseConfig;
ma_uint32 pInputChannels[1];
ma_uint32 pOutputChannels[2];
if (pSplitterNode == NULL) { if (pSplitterNode == NULL) {
return MA_INVALID_ARGS; return MA_INVALID_ARGS;
...@@ -4534,17 +4530,15 @@ MA_API ma_result ma_splitter_node_init(ma_node_graph* pNodeGraph, const ma_split ...@@ -4534,17 +4530,15 @@ MA_API ma_result ma_splitter_node_init(ma_node_graph* pNodeGraph, const ma_split
return MA_INVALID_ARGS; return MA_INVALID_ARGS;
} }
if (pConfig->nodeConfig.pInputChannels == NULL || pConfig->nodeConfig.pOutputChannels == NULL) {
return MA_INVALID_ARGS; /* No channel counts specified. */
}
/* Splitters require the same number of channels between inputs and outputs. */ /* Splitters require the same number of channels between inputs and outputs. */
if (pConfig->nodeConfig.pInputChannels[0] != pConfig->nodeConfig.pOutputChannels[0]) { pInputChannels[0] = pConfig->channels;
return MA_INVALID_ARGS; pOutputChannels[0] = pConfig->channels;
} pOutputChannels[1] = pConfig->channels;
baseConfig = pConfig->nodeConfig; baseConfig = pConfig->nodeConfig;
baseConfig.vtable = &g_ma_splitter_node_vtable; baseConfig.vtable = &g_ma_splitter_node_vtable;
baseConfig.pInputChannels = pInputChannels;
baseConfig.pOutputChannels = pOutputChannels;
result = ma_node_init(pNodeGraph, &baseConfig, pAllocationCallbacks, &pSplitterNode->base); result = ma_node_init(pNodeGraph, &baseConfig, pAllocationCallbacks, &pSplitterNode->base);
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
...@@ -4664,16 +4658,16 @@ MA_API ma_result ma_async_notification_event_signal(ma_async_notification_event* ...@@ -4664,16 +4658,16 @@ MA_API ma_result ma_async_notification_event_signal(ma_async_notification_event*
MA_API ma_pipeline_notifications ma_pipeline_notifications_init(void) MA_API ma_resource_manager_pipeline_notifications ma_resource_manager_pipeline_notifications_init(void)
{ {
ma_pipeline_notifications notifications; ma_resource_manager_pipeline_notifications notifications;
MA_ZERO_OBJECT(&notifications); MA_ZERO_OBJECT(&notifications);
return notifications; return notifications;
} }
static void ma_pipeline_notifications_signal_all_notifications(const ma_pipeline_notifications* pPipelineNotifications) static void ma_resource_manager_pipeline_notifications_signal_all_notifications(const ma_resource_manager_pipeline_notifications* pPipelineNotifications)
{ {
if (pPipelineNotifications == NULL) { if (pPipelineNotifications == NULL) {
return; return;
...@@ -4683,7 +4677,7 @@ static void ma_pipeline_notifications_signal_all_notifications(const ma_pipeline ...@@ -4683,7 +4677,7 @@ static void ma_pipeline_notifications_signal_all_notifications(const ma_pipeline
if (pPipelineNotifications->done.pNotification) { ma_async_notification_signal(pPipelineNotifications->done.pNotification); } if (pPipelineNotifications->done.pNotification) { ma_async_notification_signal(pPipelineNotifications->done.pNotification); }
} }
static void ma_pipeline_notifications_acquire_all_fences(const ma_pipeline_notifications* pPipelineNotifications) static void ma_resource_manager_pipeline_notifications_acquire_all_fences(const ma_resource_manager_pipeline_notifications* pPipelineNotifications)
{ {
if (pPipelineNotifications == NULL) { if (pPipelineNotifications == NULL) {
return; return;
...@@ -4693,7 +4687,7 @@ static void ma_pipeline_notifications_acquire_all_fences(const ma_pipeline_notif ...@@ -4693,7 +4687,7 @@ static void ma_pipeline_notifications_acquire_all_fences(const ma_pipeline_notif
if (pPipelineNotifications->done.pFence != NULL) { ma_fence_acquire(pPipelineNotifications->done.pFence); } if (pPipelineNotifications->done.pFence != NULL) { ma_fence_acquire(pPipelineNotifications->done.pFence); }
} }
static void ma_pipeline_notifications_release_all_fences(const ma_pipeline_notifications* pPipelineNotifications) static void ma_resource_manager_pipeline_notifications_release_all_fences(const ma_resource_manager_pipeline_notifications* pPipelineNotifications)
{ {
if (pPipelineNotifications == NULL) { if (pPipelineNotifications == NULL) {
return; return;
...@@ -6569,13 +6563,13 @@ static ma_data_source_vtable g_ma_resource_manager_data_buffer_vtable = ...@@ -6569,13 +6563,13 @@ static ma_data_source_vtable g_ma_resource_manager_data_buffer_vtable =
ma_resource_manager_data_buffer_cb__get_length_in_pcm_frames ma_resource_manager_data_buffer_cb__get_length_in_pcm_frames
}; };
static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manager* pResourceManager, const char* pFilePath, const wchar_t* pFilePathW, ma_uint32 hashedName32, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer) static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manager* pResourceManager, const char* pFilePath, const wchar_t* pFilePathW, ma_uint32 hashedName32, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer)
{ {
ma_result result = MA_SUCCESS; ma_result result = MA_SUCCESS;
ma_resource_manager_data_buffer_node* pDataBufferNode; ma_resource_manager_data_buffer_node* pDataBufferNode;
ma_data_source_config dataSourceConfig; ma_data_source_config dataSourceConfig;
ma_bool32 async; ma_bool32 async;
ma_pipeline_notifications notifications; ma_resource_manager_pipeline_notifications notifications;
if (pNotifications != NULL) { if (pNotifications != NULL) {
notifications = *pNotifications; notifications = *pNotifications;
...@@ -6585,7 +6579,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag ...@@ -6585,7 +6579,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag
} }
if (pDataBuffer == NULL) { if (pDataBuffer == NULL) {
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
return MA_INVALID_ARGS; return MA_INVALID_ARGS;
} }
...@@ -6610,12 +6604,12 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag ...@@ -6610,12 +6604,12 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag
acquired a second if loading asynchronously. This double acquisition system is just done to acquired a second if loading asynchronously. This double acquisition system is just done to
simplify code maintanence. simplify code maintanence.
*/ */
ma_pipeline_notifications_acquire_all_fences(&notifications); ma_resource_manager_pipeline_notifications_acquire_all_fences(&notifications);
{ {
/* We first need to acquire a node. If ASYNC is not set, this will not return until the entire sound has been loaded. */ /* We first need to acquire a node. If ASYNC is not set, this will not return until the entire sound has been loaded. */
result = ma_resource_manager_data_buffer_node_acquire(pResourceManager, pFilePath, pFilePathW, hashedName32, flags, NULL, notifications.init.pFence, notifications.done.pFence, &pDataBufferNode); result = ma_resource_manager_data_buffer_node_acquire(pResourceManager, pFilePath, pFilePathW, hashedName32, flags, NULL, notifications.init.pFence, notifications.done.pFence, &pDataBufferNode);
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
goto done; goto done;
} }
...@@ -6625,7 +6619,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag ...@@ -6625,7 +6619,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag
result = ma_data_source_init(&dataSourceConfig, &pDataBuffer->ds); result = ma_data_source_init(&dataSourceConfig, &pDataBuffer->ds);
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
ma_resource_manager_data_buffer_node_unacquire(pResourceManager, pDataBufferNode, NULL, NULL); ma_resource_manager_data_buffer_node_unacquire(pResourceManager, pDataBufferNode, NULL, NULL);
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
goto done; goto done;
} }
...@@ -6640,7 +6634,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag ...@@ -6640,7 +6634,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag
result = ma_resource_manager_data_buffer_init_connector(pDataBuffer, NULL, NULL); result = ma_resource_manager_data_buffer_init_connector(pDataBuffer, NULL, NULL);
c89atomic_exchange_i32(&pDataBuffer->result, result); c89atomic_exchange_i32(&pDataBuffer->result, result);
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
goto done; goto done;
} else { } else {
/* The node's data supply isn't initialized yet. The caller has requested that we load asynchronously so we need to post a job to do this. */ /* The node's data supply isn't initialized yet. The caller has requested that we load asynchronously so we need to post a job to do this. */
...@@ -6659,7 +6653,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag ...@@ -6659,7 +6653,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag
c89atomic_exchange_i32(&pDataBuffer->result, MA_BUSY); c89atomic_exchange_i32(&pDataBuffer->result, MA_BUSY);
/* Acquire fences a second time. These will be released by the async thread. */ /* Acquire fences a second time. These will be released by the async thread. */
ma_pipeline_notifications_acquire_all_fences(&notifications); ma_resource_manager_pipeline_notifications_acquire_all_fences(&notifications);
job = ma_resource_manager_job_init(MA_RESOURCE_MANAGER_JOB_LOAD_DATA_BUFFER); job = ma_resource_manager_job_init(MA_RESOURCE_MANAGER_JOB_LOAD_DATA_BUFFER);
job.order = ma_resource_manager_data_buffer_next_execution_order(pDataBuffer); job.order = ma_resource_manager_data_buffer_next_execution_order(pDataBuffer);
...@@ -6676,7 +6670,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag ...@@ -6676,7 +6670,7 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag
c89atomic_exchange_i32(&pDataBuffer->result, result); c89atomic_exchange_i32(&pDataBuffer->result, result);
/* Release the fences after the result has been set on the data buffer. */ /* Release the fences after the result has been set on the data buffer. */
ma_pipeline_notifications_release_all_fences(&notifications); ma_resource_manager_pipeline_notifications_release_all_fences(&notifications);
} else { } else {
if ((flags & MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_WAIT_INIT) != 0) { if ((flags & MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_WAIT_INIT) != 0) {
ma_resource_manager_inline_notification_wait(&initNotification); ma_resource_manager_inline_notification_wait(&initNotification);
...@@ -6706,17 +6700,17 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag ...@@ -6706,17 +6700,17 @@ static ma_result ma_resource_manager_data_buffer_init_internal(ma_resource_manag
} }
} }
done: done:
ma_pipeline_notifications_release_all_fences(&notifications); ma_resource_manager_pipeline_notifications_release_all_fences(&notifications);
return result; return result;
} }
MA_API ma_result ma_resource_manager_data_buffer_init(ma_resource_manager* pResourceManager, const char* pFilePath, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer) MA_API ma_result ma_resource_manager_data_buffer_init(ma_resource_manager* pResourceManager, const char* pFilePath, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer)
{ {
return ma_resource_manager_data_buffer_init_internal(pResourceManager, pFilePath, NULL, 0, flags, pNotifications, pDataBuffer); return ma_resource_manager_data_buffer_init_internal(pResourceManager, pFilePath, NULL, 0, flags, pNotifications, pDataBuffer);
} }
MA_API ma_result ma_resource_manager_data_buffer_init_w(ma_resource_manager* pResourceManager, const wchar_t* pFilePath, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer) MA_API ma_result ma_resource_manager_data_buffer_init_w(ma_resource_manager* pResourceManager, const wchar_t* pFilePath, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_buffer* pDataBuffer)
{ {
return ma_resource_manager_data_buffer_init_internal(pResourceManager, NULL, pFilePath, 0, flags, pNotifications, pDataBuffer); return ma_resource_manager_data_buffer_init_internal(pResourceManager, NULL, pFilePath, 0, flags, pNotifications, pDataBuffer);
} }
...@@ -7241,7 +7235,7 @@ static ma_data_source_vtable g_ma_resource_manager_data_stream_vtable = ...@@ -7241,7 +7235,7 @@ static ma_data_source_vtable g_ma_resource_manager_data_stream_vtable =
ma_resource_manager_data_stream_cb__get_length_in_pcm_frames ma_resource_manager_data_stream_cb__get_length_in_pcm_frames
}; };
static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manager* pResourceManager, const char* pFilePath, const wchar_t* pFilePathW, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream) static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manager* pResourceManager, const char* pFilePath, const wchar_t* pFilePathW, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream)
{ {
ma_result result; ma_result result;
ma_data_source_config dataSourceConfig; ma_data_source_config dataSourceConfig;
...@@ -7250,7 +7244,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag ...@@ -7250,7 +7244,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag
ma_resource_manager_job job; ma_resource_manager_job job;
ma_bool32 waitBeforeReturning = MA_FALSE; ma_bool32 waitBeforeReturning = MA_FALSE;
ma_resource_manager_inline_notification waitNotification; ma_resource_manager_inline_notification waitNotification;
ma_pipeline_notifications notifications; ma_resource_manager_pipeline_notifications notifications;
if (pNotifications != NULL) { if (pNotifications != NULL) {
notifications = *pNotifications; notifications = *pNotifications;
...@@ -7260,7 +7254,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag ...@@ -7260,7 +7254,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag
} }
if (pDataStream == NULL) { if (pDataStream == NULL) {
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
return MA_INVALID_ARGS; return MA_INVALID_ARGS;
} }
...@@ -7271,7 +7265,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag ...@@ -7271,7 +7265,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag
result = ma_data_source_init(&dataSourceConfig, &pDataStream->ds); result = ma_data_source_init(&dataSourceConfig, &pDataStream->ds);
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
return result; return result;
} }
...@@ -7280,7 +7274,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag ...@@ -7280,7 +7274,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag
pDataStream->result = MA_BUSY; pDataStream->result = MA_BUSY;
if (pResourceManager == NULL || (pFilePath == NULL && pFilePathW == NULL)) { if (pResourceManager == NULL || (pFilePath == NULL && pFilePathW == NULL)) {
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
return MA_INVALID_ARGS; return MA_INVALID_ARGS;
} }
...@@ -7294,7 +7288,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag ...@@ -7294,7 +7288,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag
} }
if (pFilePathCopy == NULL && pFilePathWCopy == NULL) { if (pFilePathCopy == NULL && pFilePathWCopy == NULL) {
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
...@@ -7307,7 +7301,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag ...@@ -7307,7 +7301,7 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag
ma_resource_manager_inline_notification_init(pResourceManager, &waitNotification); ma_resource_manager_inline_notification_init(pResourceManager, &waitNotification);
} }
ma_pipeline_notifications_acquire_all_fences(&notifications); ma_resource_manager_pipeline_notifications_acquire_all_fences(&notifications);
/* We now have everything we need to post the job. This is the last thing we need to do from here. The rest will be done by the job thread. */ /* We now have everything we need to post the job. This is the last thing we need to do from here. The rest will be done by the job thread. */
job = ma_resource_manager_job_init(MA_RESOURCE_MANAGER_JOB_LOAD_DATA_STREAM); job = ma_resource_manager_job_init(MA_RESOURCE_MANAGER_JOB_LOAD_DATA_STREAM);
...@@ -7319,8 +7313,8 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag ...@@ -7319,8 +7313,8 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag
job.loadDataStream.pInitFence = notifications.init.pFence; job.loadDataStream.pInitFence = notifications.init.pFence;
result = ma_resource_manager_post_job(pResourceManager, &job); result = ma_resource_manager_post_job(pResourceManager, &job);
if (result != MA_SUCCESS) { if (result != MA_SUCCESS) {
ma_pipeline_notifications_signal_all_notifications(&notifications); ma_resource_manager_pipeline_notifications_signal_all_notifications(&notifications);
ma_pipeline_notifications_release_all_fences(&notifications); ma_resource_manager_pipeline_notifications_release_all_fences(&notifications);
if (waitBeforeReturning) { if (waitBeforeReturning) {
ma_resource_manager_inline_notification_uninit(&waitNotification); ma_resource_manager_inline_notification_uninit(&waitNotification);
...@@ -7345,12 +7339,12 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag ...@@ -7345,12 +7339,12 @@ static ma_result ma_resource_manager_data_stream_init_internal(ma_resource_manag
return MA_SUCCESS; return MA_SUCCESS;
} }
MA_API ma_result ma_resource_manager_data_stream_init(ma_resource_manager* pResourceManager, const char* pFilePath, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream) MA_API ma_result ma_resource_manager_data_stream_init(ma_resource_manager* pResourceManager, const char* pFilePath, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream)
{ {
return ma_resource_manager_data_stream_init_internal(pResourceManager, pFilePath, NULL, flags, pNotifications, pDataStream); return ma_resource_manager_data_stream_init_internal(pResourceManager, pFilePath, NULL, flags, pNotifications, pDataStream);
} }
MA_API ma_result ma_resource_manager_data_stream_init_w(ma_resource_manager* pResourceManager, const wchar_t* pFilePath, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream) MA_API ma_result ma_resource_manager_data_stream_init_w(ma_resource_manager* pResourceManager, const wchar_t* pFilePath, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_stream* pDataStream)
{ {
return ma_resource_manager_data_stream_init_internal(pResourceManager, NULL, pFilePath, flags, pNotifications, pDataStream); return ma_resource_manager_data_stream_init_internal(pResourceManager, NULL, pFilePath, flags, pNotifications, pDataStream);
} }
...@@ -7885,7 +7879,7 @@ static ma_result ma_resource_manager_data_source_preinit(ma_resource_manager* pR ...@@ -7885,7 +7879,7 @@ static ma_result ma_resource_manager_data_source_preinit(ma_resource_manager* pR
return MA_SUCCESS; return MA_SUCCESS;
} }
MA_API ma_result ma_resource_manager_data_source_init(ma_resource_manager* pResourceManager, const char* pName, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_source* pDataSource) MA_API ma_result ma_resource_manager_data_source_init(ma_resource_manager* pResourceManager, const char* pName, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_source* pDataSource)
{ {
ma_result result; ma_result result;
...@@ -7902,7 +7896,7 @@ MA_API ma_result ma_resource_manager_data_source_init(ma_resource_manager* pReso ...@@ -7902,7 +7896,7 @@ MA_API ma_result ma_resource_manager_data_source_init(ma_resource_manager* pReso
} }
} }
MA_API ma_result ma_resource_manager_data_source_init_w(ma_resource_manager* pResourceManager, const wchar_t* pName, ma_uint32 flags, const ma_pipeline_notifications* pNotifications, ma_resource_manager_data_source* pDataSource) MA_API ma_result ma_resource_manager_data_source_init_w(ma_resource_manager* pResourceManager, const wchar_t* pName, ma_uint32 flags, const ma_resource_manager_pipeline_notifications* pNotifications, ma_resource_manager_data_source* pDataSource)
{ {
ma_result result; ma_result result;
...@@ -12121,7 +12115,7 @@ MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_s ...@@ -12121,7 +12115,7 @@ MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_s
ma_result result = MA_SUCCESS; ma_result result = MA_SUCCESS;
ma_uint32 flags; ma_uint32 flags;
ma_sound_config config; ma_sound_config config;
ma_pipeline_notifications notifications; ma_resource_manager_pipeline_notifications notifications;
/* /*
The engine requires knowledge of the channel count of the underlying data source before it can The engine requires knowledge of the channel count of the underlying data source before it can
...@@ -12140,7 +12134,7 @@ MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_s ...@@ -12140,7 +12134,7 @@ MA_API ma_result ma_sound_init_from_file_internal(ma_engine* pEngine, const ma_s
return MA_OUT_OF_MEMORY; return MA_OUT_OF_MEMORY;
} }
notifications = ma_pipeline_notifications_init(); notifications = ma_resource_manager_pipeline_notifications_init();
notifications.done.pFence = pConfig->pDoneFence; notifications.done.pFence = pConfig->pDoneFence;
/* /*
......
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