#ifndef OBOE_ENGINE_OPENSLES_H
#define OBOE_ENGINE_OPENSLES_H
#include <atomic>
#include <mutex>
#include <SLES/OpenSLES.h>
#include <SLES/OpenSLES_Android.h>
namespace oboe {
class EngineOpenSLES {
public:
static EngineOpenSLES &getInstance();
SLresult open();
void close();
SLresult createOutputMix(SLObjectItf *objectItf);
SLresult createAudioPlayer(SLObjectItf *objectItf,
SLDataSource *audioSource,
SLDataSink *audioSink);
SLresult createAudioRecorder(SLObjectItf *objectItf,
SLDataSource *audioSource,
SLDataSink *audioSink);
private:
EngineOpenSLES()= default;
~EngineOpenSLES()= default;
EngineOpenSLES(const EngineOpenSLES&)= delete;
EngineOpenSLES& operator=(const EngineOpenSLES&)= delete;
std::mutex mLock;
int32_t mOpenCount = 0;
SLObjectItf mEngineObject = nullptr;
SLEngineItf mEngineInterface = nullptr;
};
}
#endif