1 // 2 // libtgvoip is free and unencumbered public domain software. 3 // For more information, see http://unlicense.org or the UNLICENSE file 4 // you should have received with this source code distribution. 5 // 6 7 #ifndef LIBTGVOIP_AUDIOOUTPUTOPENSLES_H 8 #define LIBTGVOIP_AUDIOOUTPUTOPENSLES_H 9 10 #include <SLES/OpenSLES.h> 11 #include <SLES/OpenSLES_Android.h> 12 13 #include "../../audio/AudioOutput.h" 14 15 namespace tgvoip{ namespace audio{ 16 class AudioOutputOpenSLES : public AudioOutput{ 17 public: 18 AudioOutputOpenSLES(); 19 virtual ~AudioOutputOpenSLES(); 20 virtual void Configure(uint32_t sampleRate, uint32_t bitsPerSample, uint32_t channels); 21 virtual bool IsPhone(); 22 virtual void EnableLoudspeaker(bool enabled); 23 virtual void Start(); 24 virtual void Stop(); 25 virtual bool IsPlaying(); 26 virtual float GetLevel(); 27 28 static void SetNativeBufferSize(unsigned int size); 29 static unsigned int nativeBufferSize; 30 31 private: 32 static void BufferCallback(SLAndroidSimpleBufferQueueItf bq, void *context); 33 void HandleSLCallback(); 34 SLEngineItf slEngine; 35 SLObjectItf slPlayerObj; 36 SLObjectItf slOutputMixObj; 37 SLPlayItf slPlayer; 38 SLAndroidSimpleBufferQueueItf slBufferQueue; 39 int16_t* buffer; 40 int16_t* nativeBuffer; 41 bool stopped; 42 unsigned char remainingData[10240]; 43 size_t remainingDataSize; 44 }; 45 }} 46 47 #endif //LIBTGVOIP_AUDIOOUTPUTANDROID_H 48