diff --git a/extras/miniaudio_libopus.h b/extras/miniaudio_libopus.h index fce5fe73..c2d3c682 100644 --- a/extras/miniaudio_libopus.h +++ b/extras/miniaudio_libopus.h @@ -560,13 +560,34 @@ static void ma_decoding_backend_uninit__libopus(void* pUserData, ma_data_source* ma_free(pOpus, pAllocationCallbacks); } +static ma_encoding_format ma_decoding_backend_get_encoding_format__libopus(void* pUserData, ma_data_source* pBackend) +{ + (void)pUserData; + (void)pBackend; + + /* + When pBackend is null, return ma_encoding_format_unknown if the backend supports multiple + formats. An example might be an FFmpeg backend. If the backend only supports a single format, + like this one, return the format directly (if it's not recognized by miniaudio, return + ma_encoding_format_unknown). + + When pBackend is non-null, return the encoded format of the data source. If the format is not + recognized by miniaudio, return ma_encoding_format_unknown. + + Since this backend only operates on Opus streams, we can just return ma_encoding_format_opus + in all cases. + */ + return ma_encoding_format_opus; +} + static ma_decoding_backend_vtable g_ma_decoding_backend_vtable_libopus = { ma_decoding_backend_init__libopus, ma_decoding_backend_init_file__libopus, NULL, /* onInitFileW() */ NULL, /* onInitMemory() */ - ma_decoding_backend_uninit__libopus + ma_decoding_backend_uninit__libopus, + ma_decoding_backend_get_encoding_format__libopus }; const ma_decoding_backend_vtable* ma_decoding_backend_libopus = &g_ma_decoding_backend_vtable_libopus; diff --git a/extras/miniaudio_libvorbis.h b/extras/miniaudio_libvorbis.h index 631afddc..2510e408 100644 --- a/extras/miniaudio_libvorbis.h +++ b/extras/miniaudio_libvorbis.h @@ -580,13 +580,34 @@ static void ma_decoding_backend_uninit__libvorbis(void* pUserData, ma_data_sourc ma_free(pVorbis, pAllocationCallbacks); } +static ma_encoding_format ma_decoding_backend_get_encoding_format__libvorbis(void* pUserData, ma_data_source* pBackend) +{ + (void)pUserData; + (void)pBackend; + + /* + When pBackend is null, return ma_encoding_format_unknown if the backend supports multiple + formats. An example might be an FFmpeg backend. If the backend only supports a single format, + like this one, return the format directly (if it's not recognized by miniaudio, return + ma_encoding_format_unknown). + + When pBackend is non-null, return the encoded format of the data source. If the format is not + recognized by miniaudio, return ma_encoding_format_unknown. + + Since this backend only operates on Vorbis streams, we can just return ma_encoding_format_vorbis + in all cases. + */ + return ma_encoding_format_vorbis; +} + static ma_decoding_backend_vtable g_ma_decoding_backend_vtable_libvorbis = { ma_decoding_backend_init__libvorbis, ma_decoding_backend_init_file__libvorbis, NULL, /* onInitFileW() */ NULL, /* onInitMemory() */ - ma_decoding_backend_uninit__libvorbis + ma_decoding_backend_uninit__libvorbis, + ma_decoding_backend_get_encoding_format__libvorbis }; const ma_decoding_backend_vtable* ma_decoding_backend_libvorbis = &g_ma_decoding_backend_vtable_libvorbis; diff --git a/miniaudio.h b/miniaudio.h index 6b42a203..c4dbe093 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -9993,7 +9993,8 @@ typedef enum ma_encoding_format_wav, ma_encoding_format_flac, ma_encoding_format_mp3, - ma_encoding_format_vorbis + ma_encoding_format_vorbis, + ma_encoding_format_opus } ma_encoding_format; #endif