103 lines
4.6 KiB
C++
103 lines
4.6 KiB
C++
#ifndef OBOE_EXT_H
|
|
#define OBOE_EXT_H
|
|
|
|
#include "oboe/Oboe.h"
|
|
|
|
namespace oboe {
|
|
typedef std::shared_ptr<AudioStream> AudioStreamShared;
|
|
|
|
typedef void (*DropContextHandler)(void *context);
|
|
|
|
typedef DataCallbackResult (*AudioReadyHandler)(void *context,
|
|
AudioStream *oboeStream,
|
|
void *audioData,
|
|
int32_t numFrames);
|
|
|
|
typedef void (*ErrorCloseHandler)(void *context,
|
|
AudioStream *oboeStream,
|
|
Result error);
|
|
|
|
class AudioStreamCallbackWrapper
|
|
: public AudioStreamDataCallback, public AudioStreamErrorCallback {
|
|
public:
|
|
AudioStreamCallbackWrapper(void *context,
|
|
const DropContextHandler drop_context,
|
|
const AudioReadyHandler audio_ready,
|
|
const ErrorCloseHandler before_close,
|
|
const ErrorCloseHandler after_close);
|
|
|
|
~AudioStreamCallbackWrapper();
|
|
|
|
DataCallbackResult onAudioReady(AudioStream *oboeStream,
|
|
void *audioData,
|
|
int32_t numFrames);
|
|
|
|
void onErrorBeforeClose(AudioStream *oboeStream,
|
|
Result error);
|
|
|
|
void onErrorAfterClose(AudioStream *oboeStream,
|
|
Result error);
|
|
|
|
private:
|
|
void *_context;
|
|
const DropContextHandler _drop_context;
|
|
const AudioReadyHandler _audio_ready;
|
|
const ErrorCloseHandler _before_close;
|
|
const ErrorCloseHandler _after_close;
|
|
};
|
|
|
|
void AudioStreamBuilder_create(AudioStreamBuilder *builder);
|
|
void AudioStreamBuilder_delete(AudioStreamBuilder *builder);
|
|
void AudioStreamBuilder_setCallback(AudioStreamBuilder *builder,
|
|
void *context,
|
|
const DropContextHandler drop_context,
|
|
const AudioReadyHandler audio_ready,
|
|
const ErrorCloseHandler before_close,
|
|
const ErrorCloseHandler after_close);
|
|
|
|
AudioApi AudioStreamBuilder_getAudioApi(const AudioStreamBuilder *builder);
|
|
void AudioStreamBuilder_setAudioApi(AudioStreamBuilder *builder, AudioApi api);
|
|
AudioStreamBase* AudioStreamBuilder_getBase(AudioStreamBuilder *builder);
|
|
|
|
Result AudioStreamBuilder_openStreamShared(AudioStreamBuilder *builder,
|
|
AudioStreamShared *sharedStream);
|
|
|
|
void AudioStreamShared_clone(const AudioStreamShared *sharedStream,
|
|
AudioStreamShared *newSharedStream);
|
|
void AudioStreamShared_delete(AudioStreamShared *sharedStream);
|
|
AudioStream *AudioStreamShared_deref(AudioStreamShared *sharedStream);
|
|
Result AudioStream_open(AudioStream *oboeStream);
|
|
Result AudioStream_close(AudioStream *oboeStream);
|
|
Result AudioStream_requestStart(AudioStream *oboeStream);
|
|
Result AudioStream_requestPause(AudioStream *oboeStream);
|
|
Result AudioStream_requestFlush(AudioStream *oboeStream);
|
|
Result AudioStream_requestStop(AudioStream *oboeStream);
|
|
StreamState AudioStream_getState(AudioStream *oboeStream);
|
|
Result AudioStream_waitForStateChange(AudioStream *oboeStream,
|
|
StreamState inputState,
|
|
StreamState *nextState,
|
|
int64_t timeoutNanoseconds);
|
|
ResultWithValue<int32_t>
|
|
AudioStream_setBufferSizeInFrames(AudioStream *oboeStream,
|
|
int32_t requestedFrames);
|
|
ResultWithValue<int32_t>
|
|
AudioStream_getXRunCount(AudioStream *oboeStream);
|
|
bool AudioStream_isXRunCountSupported(const AudioStream *oboeStream);
|
|
int32_t AudioStream_getFramesPerBurst(AudioStream *oboeStream);
|
|
ResultWithValue<double>
|
|
AudioStream_calculateLatencyMillis(AudioStream *oboeStream);
|
|
AudioApi AudioStream_getAudioApi(const AudioStream *oboeStream);
|
|
ResultWithValue<int32_t> AudioStream_read(AudioStream *oboeStream,
|
|
void* buffer,
|
|
int32_t numFrames,
|
|
int64_t timeoutNanoseconds);
|
|
ResultWithValue<int32_t> AudioStream_write(AudioStream *oboeStream,
|
|
const void* buffer,
|
|
int32_t numFrames,
|
|
int64_t timeoutNanoseconds);
|
|
|
|
AudioStreamBase* AudioStream_getBase(AudioStream *oboeStream);
|
|
}
|
|
|
|
#endif
|