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 <assert.h>
static size_t ma_libopus_ds_sizeof(void)
{
return sizeof(ma_libopus);
}
static void ma_libopus_ds_uninit(ma_data_source* 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 =
{
ma_libopus_ds_sizeof,
ma_libopus_ds_uninit,
ma_libopus_ds_read,
ma_libopus_ds_seek,
@@ -13,6 +13,11 @@
#include <string.h> /* For memset(). */
#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)
{
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 =
{
ma_libvorbis_ds_sizeof,
ma_libvorbis_ds_uninit,
ma_libvorbis_ds_read,
ma_libvorbis_ds_seek,
+82 -1
View File
@@ -6223,6 +6223,7 @@ typedef void ma_data_source;
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);
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);
@@ -68305,6 +68306,11 @@ MA_API ma_uint32 ma_ring_buffer_capacity(const ma_ring_buffer* pRingBuffer)
/* 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)
{
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 =
{
ma_audio_ring_buffer__data_source_on_sizeof,
ma_audio_ring_buffer__data_source_on_uninit,
ma_audio_ring_buffer__data_source_on_read,
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)
{
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 =
{
ma_audio_buffer_ref__data_source_on_sizeof,
ma_audio_buffer_ref__data_source_on_uninit,
ma_audio_buffer_ref__data_source_on_read,
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)
{
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 =
{
ma_paged_audio_buffer__data_source_on_sizeof,
ma_paged_audio_buffer__data_source_on_uninit,
ma_paged_audio_buffer__data_source_on_read,
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);
static size_t ma_wav_ds_sizeof(void)
{
return sizeof(ma_wav);
}
static void ma_wav_ds_uninit(ma_data_source* 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 =
{
ma_wav_ds_sizeof,
ma_wav_ds_uninit,
ma_wav_ds_read,
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);
static size_t ma_flac_ds_sizeof(void)
{
return sizeof(ma_flac);
}
static void ma_flac_ds_uninit(ma_data_source* 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 =
{
ma_flac_ds_sizeof,
ma_flac_ds_uninit,
ma_flac_ds_read,
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);
static size_t ma_mp3_ds_sizeof(void)
{
return sizeof(ma_mp3);
}
static void ma_mp3_ds_uninit(ma_data_source* 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 =
{
ma_mp3_ds_sizeof,
ma_mp3_ds_uninit,
ma_mp3_ds_read,
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);
static size_t ma_stbvorbis_ds_sizeof(void)
{
return sizeof(ma_stbvorbis);
}
static void ma_stbvorbis_ds_uninit(ma_data_source* 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 =
{
ma_stbvorbis_ds_sizeof,
ma_stbvorbis_ds_uninit,
ma_stbvorbis_ds_read,
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)
{
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 =
{
ma_decoder__data_source_on_sizeof,
ma_decoder__data_source_on_uninit,
ma_decoder__data_source_on_read,
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;
}
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)
{
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 =
{
ma_waveform__data_source_on_sizeof,
ma_waveform__data_source_on_uninit,
ma_waveform__data_source_on_read,
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)
{
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 =
{
ma_noise__data_source_on_sizeof,
ma_noise__data_source_on_uninit,
ma_noise__data_source_on_read,
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)
{
MA_ASSERT(pDataBuffer != NULL);
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)
{
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 =
{
ma_resource_manager_data_buffer_cb__sizeof,
ma_resource_manager_data_buffer_cb__uninit,
ma_resource_manager_data_buffer_cb__read_pcm_frames,
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)
{
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 =
{
ma_resource_manager_data_stream_cb__sizeof,
ma_resource_manager_data_stream_cb__uninit,
ma_resource_manager_data_stream_cb__read_pcm_frames,
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
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)
{
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 =
{
ma_node_graph_data_source__on_sizeof,
ma_node_graph_data_source__on_uninit,
ma_node_graph_data_source__on_read,
NULL, /* onSeek */