1372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen/* 2372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * Copyright (C) 2007 The Android Open Source Project 3372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * 4372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * Licensed under the Apache License, Version 2.0 (the "License"); 5372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * you may not use this file except in compliance with the License. 6372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * You may obtain a copy of the License at 7372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * 8372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * http://www.apache.org/licenses/LICENSE-2.0 9372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * 10372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * Unless required by applicable law or agreed to in writing, software 11372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * distributed under the License is distributed on an "AS IS" BASIS, 12372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * See the License for the specific language governing permissions and 14372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * limitations under the License. 15372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen */ 16372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 17372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen#ifndef SOUNDPOOLTHREAD_H_ 18372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen#define SOUNDPOOLTHREAD_H_ 19372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 20372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen#include <utils/threads.h> 21372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen#include <utils/Vector.h> 22372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen#include <media/AudioTrack.h> 23372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 24372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen#include "SoundPool.h" 25372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 26372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissennamespace android { 27372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 28372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissenclass SoundPoolMsg { 29372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissenpublic: 30372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen enum MessageType { INVALID, KILL, LOAD_SAMPLE }; 31372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen SoundPoolMsg() : mMessageType(INVALID), mData(0) {} 32372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen SoundPoolMsg(MessageType MessageType, int data) : 33372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen mMessageType(MessageType), mData(data) {} 34372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen uint16_t mMessageType; 35372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen uint16_t mData; 36372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen}; 37372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 38372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen/* 39372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen * This class handles background requests from the SoundPool 40372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen */ 41372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissenclass SoundPoolThread { 42372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissenpublic: 43ae1aadc04f9cee280c3c328a533e2ceeb4b71d47Chih-Hung Hsieh explicit SoundPoolThread(SoundPool* SoundPool); 44372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen ~SoundPoolThread(); 45372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen void loadSample(int sampleID); 46372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen void quit(); 47372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen void write(SoundPoolMsg msg); 48372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 49372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissenprivate: 501f1f4bf91dd66fba527bf4d8765e484e08ddb971Philip Cuadra static const size_t maxMessages = 128; 51372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 52372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen static int beginThread(void* arg); 53372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen int run(); 54372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen void doLoadSample(int sampleID); 55372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen const SoundPoolMsg read(); 56372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 57372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen Mutex mLock; 58372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen Condition mCondition; 59372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen Vector<SoundPoolMsg> mMsgQueue; 60372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen SoundPool* mSoundPool; 61372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen bool mRunning; 62372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen}; 63372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 64372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen} // end namespace android 65372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen 66372be8970c6ab68c295fb74dbb878ab1d443d90eMarco Nelissen#endif /*SOUNDPOOLTHREAD_H_*/ 67