API CHANGE: Add an onSizeof callback to ma_data_source_vtable.

This should return the size of the implementations struct. For example,
`ma_decoder` would return `sizeof(ma_decoder)`.

This is in preparation for future work to support copying data sources.
This commit is contained in:
David Reid
2026-04-29 06:54:57 +10:00
parent 2cb46c7abd
commit 137298734e
3 changed files with 100 additions and 7 deletions
@@ -10,6 +10,11 @@
#include <string.h> /* For memset(). */ #include <string.h> /* For memset(). */
#include <assert.h> #include <assert.h>
static size_t ma_libopus_ds_sizeof(void)
{
return sizeof(ma_libopus);
}
static void ma_libopus_ds_uninit(ma_data_source* pDataSource) static void ma_libopus_ds_uninit(ma_data_source* pDataSource)
{ {
ma_libopus_uninit((ma_libopus*)pDataSource); ma_libopus_uninit((ma_libopus*)pDataSource);
@@ -42,6 +47,7 @@ static ma_result ma_libopus_ds_get_length(ma_data_source* pDataSource, ma_uint64
static ma_data_source_vtable ma_gDataSourceVTable_libopus = static ma_data_source_vtable ma_gDataSourceVTable_libopus =
{ {
ma_libopus_ds_sizeof,
ma_libopus_ds_uninit, ma_libopus_ds_uninit,
ma_libopus_ds_read, ma_libopus_ds_read,
ma_libopus_ds_seek, ma_libopus_ds_seek,
@@ -13,6 +13,11 @@
#include <string.h> /* For memset(). */ #include <string.h> /* For memset(). */
#include <assert.h> #include <assert.h>
static size_t ma_libvorbis_ds_sizeof(void)
{
return sizeof(ma_libvorbis);
}
static void ma_libvorbis_ds_uninit(ma_data_source* pDataSource) static void ma_libvorbis_ds_uninit(ma_data_source* pDataSource)
{ {
ma_libvorbis_uninit((ma_libvorbis*)pDataSource); ma_libvorbis_uninit((ma_libvorbis*)pDataSource);
@@ -45,6 +50,7 @@ static ma_result ma_libvorbis_ds_get_length(ma_data_source* pDataSource, ma_uint
static ma_data_source_vtable ma_gDataSourceVTable_libvorbis = static ma_data_source_vtable ma_gDataSourceVTable_libvorbis =
{ {
ma_libvorbis_ds_sizeof,
ma_libvorbis_ds_uninit, ma_libvorbis_ds_uninit,
ma_libvorbis_ds_read, ma_libvorbis_ds_read,
ma_libvorbis_ds_seek, ma_libvorbis_ds_seek,
+82 -1
View File
@@ -6223,6 +6223,7 @@ typedef void ma_data_source;
typedef struct typedef struct
{ {
size_t (* onSizeof )(void); /* Should return the size of the the data source implementation's struct. For example, ma_decoder would return sizeof(ma_decoder). */
void (* onUninit )(ma_data_source* pDataSource); void (* onUninit )(ma_data_source* pDataSource);
ma_result (* onRead )(ma_data_source* pDataSource, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead); ma_result (* onRead )(ma_data_source* pDataSource, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead);
ma_result (* onSeek )(ma_data_source* pDataSource, ma_uint64 frameIndex); ma_result (* onSeek )(ma_data_source* pDataSource, ma_uint64 frameIndex);
@@ -68305,6 +68306,11 @@ MA_API ma_uint32 ma_ring_buffer_capacity(const ma_ring_buffer* pRingBuffer)
/* END ma_ring_buffer.c */ /* END ma_ring_buffer.c */
static size_t ma_audio_ring_buffer__data_source_on_sizeof(void)
{
return sizeof(ma_audio_ring_buffer);
}
static void ma_audio_ring_buffer__data_source_on_uninit(ma_data_source* pDataSource) static void ma_audio_ring_buffer__data_source_on_uninit(ma_data_source* pDataSource)
{ {
ma_audio_ring_buffer_uninit((ma_audio_ring_buffer*)pDataSource); ma_audio_ring_buffer_uninit((ma_audio_ring_buffer*)pDataSource);
@@ -68369,6 +68375,7 @@ static ma_result ma_audio_ring_buffer__data_source_on_get_length(ma_data_source*
static ma_data_source_vtable ma_gDataSourceVTable_AudioRingBuffer = static ma_data_source_vtable ma_gDataSourceVTable_AudioRingBuffer =
{ {
ma_audio_ring_buffer__data_source_on_sizeof,
ma_audio_ring_buffer__data_source_on_uninit, ma_audio_ring_buffer__data_source_on_uninit,
ma_audio_ring_buffer__data_source_on_read, ma_audio_ring_buffer__data_source_on_read,
NULL, /* No seeking in ring buffers. */ NULL, /* No seeking in ring buffers. */
@@ -69754,6 +69761,11 @@ MA_API ma_data_source_get_next_proc ma_data_source_get_next_callback(const ma_da
} }
static size_t ma_audio_buffer_ref__data_source_on_sizeof(void)
{
return sizeof(ma_audio_buffer_ref);
}
static void ma_audio_buffer_ref__data_source_on_uninit(ma_data_source* pDataSource) static void ma_audio_buffer_ref__data_source_on_uninit(ma_data_source* pDataSource)
{ {
ma_audio_buffer_ref_uninit((ma_audio_buffer_ref*)pDataSource); ma_audio_buffer_ref_uninit((ma_audio_buffer_ref*)pDataSource);
@@ -69801,6 +69813,7 @@ static ma_result ma_audio_buffer_ref__data_source_on_get_length(ma_data_source*
static ma_data_source_vtable ma_gDataSourceVTable_AudioBufferRef = static ma_data_source_vtable ma_gDataSourceVTable_AudioBufferRef =
{ {
ma_audio_buffer_ref__data_source_on_sizeof,
ma_audio_buffer_ref__data_source_on_uninit, ma_audio_buffer_ref__data_source_on_uninit,
ma_audio_buffer_ref__data_source_on_read, ma_audio_buffer_ref__data_source_on_read,
ma_audio_buffer_ref__data_source_on_seek, ma_audio_buffer_ref__data_source_on_seek,
@@ -70448,6 +70461,11 @@ MA_API ma_paged_audio_buffer_config ma_paged_audio_buffer_config_init(ma_paged_a
} }
static size_t ma_paged_audio_buffer__data_source_on_sizeof(void)
{
return sizeof(ma_paged_audio_buffer);
}
static void ma_paged_audio_buffer__data_source_on_uninit(ma_data_source* pDataSource) static void ma_paged_audio_buffer__data_source_on_uninit(ma_data_source* pDataSource)
{ {
ma_paged_audio_buffer_uninit((ma_paged_audio_buffer*)pDataSource); ma_paged_audio_buffer_uninit((ma_paged_audio_buffer*)pDataSource);
@@ -70487,6 +70505,7 @@ static ma_result ma_paged_audio_buffer__data_source_on_get_length(ma_data_source
static ma_data_source_vtable ma_gDataSourceVTable_PagedAudioBuffer = static ma_data_source_vtable ma_gDataSourceVTable_PagedAudioBuffer =
{ {
ma_paged_audio_buffer__data_source_on_sizeof,
ma_paged_audio_buffer__data_source_on_uninit, ma_paged_audio_buffer__data_source_on_uninit,
ma_paged_audio_buffer__data_source_on_read, ma_paged_audio_buffer__data_source_on_read,
ma_paged_audio_buffer__data_source_on_seek, ma_paged_audio_buffer__data_source_on_seek,
@@ -72636,6 +72655,11 @@ MA_API ma_result ma_wav_get_cursor_in_pcm_frames(ma_wav* pWav, ma_uint64* pCurso
MA_API ma_result ma_wav_get_length_in_pcm_frames(ma_wav* pWav, ma_uint64* pLength); MA_API ma_result ma_wav_get_length_in_pcm_frames(ma_wav* pWav, ma_uint64* pLength);
static size_t ma_wav_ds_sizeof(void)
{
return sizeof(ma_wav);
}
static void ma_wav_ds_uninit(ma_data_source* pDataSource) static void ma_wav_ds_uninit(ma_data_source* pDataSource)
{ {
ma_wav_uninit((ma_wav*)pDataSource); ma_wav_uninit((ma_wav*)pDataSource);
@@ -72668,6 +72692,7 @@ static ma_result ma_wav_ds_get_length(ma_data_source* pDataSource, ma_uint64* pL
static ma_data_source_vtable ma_gDataSourceVTable_WAV = static ma_data_source_vtable ma_gDataSourceVTable_WAV =
{ {
ma_wav_ds_sizeof,
ma_wav_ds_uninit, ma_wav_ds_uninit,
ma_wav_ds_read, ma_wav_ds_read,
ma_wav_ds_seek, ma_wav_ds_seek,
@@ -73228,6 +73253,11 @@ MA_API ma_result ma_flac_get_cursor_in_pcm_frames(ma_flac* pFlac, ma_uint64* pCu
MA_API ma_result ma_flac_get_length_in_pcm_frames(ma_flac* pFlac, ma_uint64* pLength); MA_API ma_result ma_flac_get_length_in_pcm_frames(ma_flac* pFlac, ma_uint64* pLength);
static size_t ma_flac_ds_sizeof(void)
{
return sizeof(ma_flac);
}
static void ma_flac_ds_uninit(ma_data_source* pDataSource) static void ma_flac_ds_uninit(ma_data_source* pDataSource)
{ {
ma_flac_uninit((ma_flac*)pDataSource); ma_flac_uninit((ma_flac*)pDataSource);
@@ -73260,6 +73290,7 @@ static ma_result ma_flac_ds_get_length(ma_data_source* pDataSource, ma_uint64* p
static ma_data_source_vtable ma_gDataSourceVTable_FLAC = static ma_data_source_vtable ma_gDataSourceVTable_FLAC =
{ {
ma_flac_ds_sizeof,
ma_flac_ds_uninit, ma_flac_ds_uninit,
ma_flac_ds_read, ma_flac_ds_read,
ma_flac_ds_seek, ma_flac_ds_seek,
@@ -73769,6 +73800,11 @@ MA_API ma_result ma_mp3_get_cursor_in_pcm_frames(ma_mp3* pMP3, ma_uint64* pCurso
MA_API ma_result ma_mp3_get_length_in_pcm_frames(ma_mp3* pMP3, ma_uint64* pLength); MA_API ma_result ma_mp3_get_length_in_pcm_frames(ma_mp3* pMP3, ma_uint64* pLength);
static size_t ma_mp3_ds_sizeof(void)
{
return sizeof(ma_mp3);
}
static void ma_mp3_ds_uninit(ma_data_source* pDataSource) static void ma_mp3_ds_uninit(ma_data_source* pDataSource)
{ {
ma_mp3_uninit((ma_mp3*)pDataSource); ma_mp3_uninit((ma_mp3*)pDataSource);
@@ -73801,6 +73837,7 @@ static ma_result ma_mp3_ds_get_length(ma_data_source* pDataSource, ma_uint64* pL
static ma_data_source_vtable ma_gDataSourceVTable_MP3 = static ma_data_source_vtable ma_gDataSourceVTable_MP3 =
{ {
ma_mp3_ds_sizeof,
ma_mp3_ds_uninit, ma_mp3_ds_uninit,
ma_mp3_ds_read, ma_mp3_ds_read,
ma_mp3_ds_seek, ma_mp3_ds_seek,
@@ -74377,6 +74414,11 @@ MA_API ma_result ma_stbvorbis_get_cursor_in_pcm_frames(ma_stbvorbis* pVorbis, ma
MA_API ma_result ma_stbvorbis_get_length_in_pcm_frames(ma_stbvorbis* pVorbis, ma_uint64* pLength); MA_API ma_result ma_stbvorbis_get_length_in_pcm_frames(ma_stbvorbis* pVorbis, ma_uint64* pLength);
static size_t ma_stbvorbis_ds_sizeof(void)
{
return sizeof(ma_stbvorbis);
}
static void ma_stbvorbis_ds_uninit(ma_data_source* pDataSource) static void ma_stbvorbis_ds_uninit(ma_data_source* pDataSource)
{ {
ma_stbvorbis_uninit((ma_stbvorbis*)pDataSource); ma_stbvorbis_uninit((ma_stbvorbis*)pDataSource);
@@ -74409,6 +74451,7 @@ static ma_result ma_stbvorbis_ds_get_length(ma_data_source* pDataSource, ma_uint
static ma_data_source_vtable ma_gDataSourceVTable_stbvorbis = static ma_data_source_vtable ma_gDataSourceVTable_stbvorbis =
{ {
ma_stbvorbis_ds_sizeof,
ma_stbvorbis_ds_uninit, ma_stbvorbis_ds_uninit,
ma_stbvorbis_ds_read, ma_stbvorbis_ds_read,
ma_stbvorbis_ds_seek, ma_stbvorbis_ds_seek,
@@ -75582,6 +75625,12 @@ static void ma_decoder__init_allocation_callbacks(const ma_decoder_config* pConf
} }
} }
static size_t ma_decoder__data_source_on_sizeof(void)
{
return sizeof(ma_decoder);
}
static void ma_decoder__data_source_on_uninit(ma_data_source* pDataSource) static void ma_decoder__data_source_on_uninit(ma_data_source* pDataSource)
{ {
ma_decoder_uninit((ma_decoder*)pDataSource); ma_decoder_uninit((ma_decoder*)pDataSource);
@@ -75614,6 +75663,7 @@ static ma_result ma_decoder__data_source_on_get_length(ma_data_source* pDataSour
static ma_data_source_vtable ma_gDataSourceVTable_Decoder = static ma_data_source_vtable ma_gDataSourceVTable_Decoder =
{ {
ma_decoder__data_source_on_sizeof,
ma_decoder__data_source_on_uninit, ma_decoder__data_source_on_uninit,
ma_decoder__data_source_on_read, ma_decoder__data_source_on_read,
ma_decoder__data_source_on_seek, ma_decoder__data_source_on_seek,
@@ -77011,6 +77061,12 @@ MA_API ma_waveform_config ma_waveform_config_init(ma_format format, ma_uint32 ch
return config; return config;
} }
static size_t ma_waveform__data_source_on_sizeof(void)
{
return sizeof(ma_waveform);
}
static void ma_waveform__data_source_on_uninit(ma_data_source* pDataSource) static void ma_waveform__data_source_on_uninit(ma_data_source* pDataSource)
{ {
ma_waveform_uninit((ma_waveform*)pDataSource); ma_waveform_uninit((ma_waveform*)pDataSource);
@@ -77059,6 +77115,7 @@ static void ma_waveform__update_advance(ma_waveform* pWaveform)
static ma_data_source_vtable ma_gDataSourceVTable_Waveform = static ma_data_source_vtable ma_gDataSourceVTable_Waveform =
{ {
ma_waveform__data_source_on_sizeof,
ma_waveform__data_source_on_uninit, ma_waveform__data_source_on_uninit,
ma_waveform__data_source_on_read, ma_waveform__data_source_on_read,
ma_waveform__data_source_on_seek, ma_waveform__data_source_on_seek,
@@ -77592,6 +77649,11 @@ MA_API ma_noise_config ma_noise_config_init(ma_format format, ma_uint32 channels
} }
static size_t ma_noise__data_source_on_sizeof(void)
{
return sizeof(ma_noise);
}
static void ma_noise__data_source_on_uninit(ma_data_source* pDataSource) static void ma_noise__data_source_on_uninit(ma_data_source* pDataSource)
{ {
ma_noise_uninit((ma_noise*)pDataSource); ma_noise_uninit((ma_noise*)pDataSource);
@@ -77624,6 +77686,7 @@ static ma_result ma_noise__data_source_on_get_data_format(ma_data_source* pDataS
static ma_data_source_vtable ma_gDataSourceVTable_Noise = static ma_data_source_vtable ma_gDataSourceVTable_Noise =
{ {
ma_noise__data_source_on_sizeof,
ma_noise__data_source_on_uninit, ma_noise__data_source_on_uninit,
ma_noise__data_source_on_read, ma_noise__data_source_on_read,
ma_noise__data_source_on_seek, /* No-op for noise. */ ma_noise__data_source_on_seek, /* No-op for noise. */
@@ -79915,13 +79978,18 @@ stage2:
} }
static ma_uint32 ma_resource_manager_data_buffer_next_execution_order(ma_resource_manager_data_buffer* pDataBuffer) static ma_uint32 ma_resource_manager_data_buffer_next_execution_order(ma_resource_manager_data_buffer* pDataBuffer)
{ {
MA_ASSERT(pDataBuffer != NULL); MA_ASSERT(pDataBuffer != NULL);
return ma_atomic_fetch_add_32(&pDataBuffer->executionCounter, 1); return ma_atomic_fetch_add_32(&pDataBuffer->executionCounter, 1);
} }
static size_t ma_resource_manager_data_buffer_cb__sizeof(void)
{
return sizeof(ma_resource_manager_data_buffer);
}
static void ma_resource_manager_data_buffer_cb__uninit(ma_data_source* pDataSource) static void ma_resource_manager_data_buffer_cb__uninit(ma_data_source* pDataSource)
{ {
ma_resource_manager_data_buffer_uninit((ma_resource_manager_data_buffer*)pDataSource); ma_resource_manager_data_buffer_uninit((ma_resource_manager_data_buffer*)pDataSource);
@@ -79967,6 +80035,7 @@ static ma_result ma_resource_manager_data_buffer_cb__set_looping(ma_data_source*
static ma_data_source_vtable ma_gDataSourceVTable_ResourceManagerDataBuffer = static ma_data_source_vtable ma_gDataSourceVTable_ResourceManagerDataBuffer =
{ {
ma_resource_manager_data_buffer_cb__sizeof,
ma_resource_manager_data_buffer_cb__uninit, ma_resource_manager_data_buffer_cb__uninit,
ma_resource_manager_data_buffer_cb__read_pcm_frames, ma_resource_manager_data_buffer_cb__read_pcm_frames,
ma_resource_manager_data_buffer_cb__seek_to_pcm_frame, ma_resource_manager_data_buffer_cb__seek_to_pcm_frame,
@@ -80665,6 +80734,11 @@ static ma_uint32 ma_resource_manager_data_stream_seek_counter(const ma_resource_
} }
static size_t ma_resource_manager_data_stream_cb__sizeof(void)
{
return sizeof(ma_resource_manager_data_stream);
}
static void ma_resource_manager_data_stream_cb__uninit(ma_data_source* pDataSource) static void ma_resource_manager_data_stream_cb__uninit(ma_data_source* pDataSource)
{ {
ma_resource_manager_data_stream_uninit((ma_resource_manager_data_stream*)pDataSource); ma_resource_manager_data_stream_uninit((ma_resource_manager_data_stream*)pDataSource);
@@ -80707,6 +80781,7 @@ static ma_result ma_resource_manager_data_stream_cb__set_looping(ma_data_source*
static ma_data_source_vtable ma_gDataSourceVTable_ResourceManagerDataStream = static ma_data_source_vtable ma_gDataSourceVTable_ResourceManagerDataStream =
{ {
ma_resource_manager_data_stream_cb__sizeof,
ma_resource_manager_data_stream_cb__uninit, ma_resource_manager_data_stream_cb__uninit,
ma_resource_manager_data_stream_cb__read_pcm_frames, ma_resource_manager_data_stream_cb__read_pcm_frames,
ma_resource_manager_data_stream_cb__seek_to_pcm_frame, ma_resource_manager_data_stream_cb__seek_to_pcm_frame,
@@ -82439,6 +82514,11 @@ static ma_bool32 ma_node_graph_is_reading(ma_node_graph* pNodeGraph)
#endif #endif
static size_t ma_node_graph_data_source__on_sizeof(void)
{
return sizeof(ma_node_graph);
}
static void ma_node_graph_data_source__on_uninit(ma_data_source* pDataSource) static void ma_node_graph_data_source__on_uninit(ma_data_source* pDataSource)
{ {
ma_node_graph_uninit((ma_node_graph*)pDataSource); ma_node_graph_uninit((ma_node_graph*)pDataSource);
@@ -82480,6 +82560,7 @@ static ma_result ma_node_graph_data_source__on_get_data_format(ma_data_source* p
static ma_data_source_vtable ma_gDataSourceVTable_NodeGraph = static ma_data_source_vtable ma_gDataSourceVTable_NodeGraph =
{ {
ma_node_graph_data_source__on_sizeof,
ma_node_graph_data_source__on_uninit, ma_node_graph_data_source__on_uninit,
ma_node_graph_data_source__on_read, ma_node_graph_data_source__on_read,
NULL, /* onSeek */ NULL, /* onSeek */