mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-22 00:06:59 +02:00
46788d59a8
These decoders have been moved into their own subfolders under the extras/decoders folder: extras/decoders/libvorbis extras/decoders/libopus In addition to being relocated, they have also been split into separate .c/h pairs. They now work like a more conventional library. The implementation of these libraries have also been decoupled from the miniaudio implementation which means they depend only on the header section of miniaudio.h now. With this change the custom_decoder and custom_decoder_engine examples have been updated. To compile these you now need to link in the miniaudio_libvorbis.c and miniaudio_libopus.c files via your build tool. For your own code, you can still include the .c files directly into your code if you want to compile as a single translation unit.
41 lines
1.9 KiB
C
41 lines
1.9 KiB
C
/*
|
|
This implements a data source that decodes Opus streams via libopus + libopusfile
|
|
|
|
This object can be plugged into any `ma_data_source_*()` API and can also be used as a custom
|
|
decoding backend. See the custom_decoder example.
|
|
*/
|
|
#ifndef miniaudio_libopus_h
|
|
#define miniaudio_libopus_h
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "../../../miniaudio.h"
|
|
|
|
typedef struct
|
|
{
|
|
ma_data_source_base ds; /* The libopus decoder can be used independently as a data source. */
|
|
ma_read_proc onRead;
|
|
ma_seek_proc onSeek;
|
|
ma_tell_proc onTell;
|
|
void* pReadSeekTellUserData;
|
|
ma_format format; /* Will be either f32 or s16. */
|
|
/*OggOpusFile**/ void* of; /* Typed as void* so we can avoid a dependency on opusfile in the header section. */
|
|
} ma_libopus;
|
|
|
|
MA_API ma_result ma_libopus_init(ma_read_proc onRead, ma_seek_proc onSeek, ma_tell_proc onTell, void* pReadSeekTellUserData, const ma_decoding_backend_config* pConfig, const ma_allocation_callbacks* pAllocationCallbacks, ma_libopus* pOpus);
|
|
MA_API ma_result ma_libopus_init_file(const char* pFilePath, const ma_decoding_backend_config* pConfig, const ma_allocation_callbacks* pAllocationCallbacks, ma_libopus* pOpus);
|
|
MA_API void ma_libopus_uninit(ma_libopus* pOpus, const ma_allocation_callbacks* pAllocationCallbacks);
|
|
MA_API ma_result ma_libopus_read_pcm_frames(ma_libopus* pOpus, void* pFramesOut, ma_uint64 frameCount, ma_uint64* pFramesRead);
|
|
MA_API ma_result ma_libopus_seek_to_pcm_frame(ma_libopus* pOpus, ma_uint64 frameIndex);
|
|
MA_API ma_result ma_libopus_get_data_format(ma_libopus* pOpus, ma_format* pFormat, ma_uint32* pChannels, ma_uint32* pSampleRate, ma_channel* pChannelMap, size_t channelMapCap);
|
|
MA_API ma_result ma_libopus_get_cursor_in_pcm_frames(ma_libopus* pOpus, ma_uint64* pCursor);
|
|
MA_API ma_result ma_libopus_get_length_in_pcm_frames(ma_libopus* pOpus, ma_uint64* pLength);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* miniaudio_libopus_h */
|
|
|