From cd9ad696cdc9e7165b64010e213f1deafcce55fd Mon Sep 17 00:00:00 2001 From: Luo Jinghua Date: Mon, 3 Dec 2012 12:42:09 +0800 Subject: Port the android device to threaded mixer device --- src/device_android.cpp | 34 ++++++++++++---------------------- src/device_android.h | 10 +++------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/device_android.cpp b/src/device_android.cpp index 07a7390..cc21f4e 100644 --- a/src/device_android.cpp +++ b/src/device_android.cpp @@ -16,49 +16,39 @@ namespace audiere { int ret = AGAudioInit(44100, 2, 16); if (ret < 0) return 0; - return new AndroidAudioDevice(44100, 8192); + return new AndroidAudioDevice(44100, 4096); } AndroidAudioDevice::AndroidAudioDevice(int rate, int buffer_size) - : MixerDevice(rate), m_rate(rate) + : ThreadedMixerDevice(rate, buffer_size, 4), m_quit(false) { - m_buffer_size = buffer_size; - m_buffer = new char [buffer_size]; + start(); } AndroidAudioDevice::~AndroidAudioDevice() { ADR_GUARD("AndroidAudioDevice::~AndroidAudioDevice"); + m_quit = true; + shutdown(); AGAudioSetReadCallback(0, 0); AGAudioUninit(); - - delete [] m_buffer; } void - AndroidAudioDevice::writeData() { - int sample_len; - size_t sample_left; - char* sample_buf; + AndroidAudioDevice::outputBuffer(const char* buf, int buf_len) { + while (AGAudioIsPaused()) { + if (m_quit) + return; - sample_buf = m_buffer; - sample_len = m_buffer_size / 4; + AI_Sleep(20); + } - sample_left = read(sample_len, sample_buf); - if (sample_left) - AGAudioWrite((void*)sample_buf, sample_left * 4); + AGAudioWrite(buf, buf_len); } - void - AndroidAudioDevice::update() { - if (!AGAudioIsPaused()) - writeData(); - else - AI_Sleep(10); - } const char* ADR_CALL AndroidAudioDevice::getName() { diff --git a/src/device_android.h b/src/device_android.h index 2c469ca..9682caf 100644 --- a/src/device_android.h +++ b/src/device_android.h @@ -9,7 +9,7 @@ namespace audiere { - class AndroidAudioDevice : public MixerDevice { + class AndroidAudioDevice : public ThreadedMixerDevice { public: static AndroidAudioDevice* create(const ParameterList& parameters); @@ -18,15 +18,11 @@ namespace audiere { ~AndroidAudioDevice(); public: - void ADR_CALL update(); + void ADR_CALL outputBuffer(const char* buf, int buf_len); const char* ADR_CALL getName(); private: - int m_buffer_size; - char* m_buffer; - int m_rate; - - void writeData(); + bool m_quit; }; } -- cgit v1.2.3