12e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent/* 22e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * Copyright (C) 2007 The Android Open Source Project 32e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * 42e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 52e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * you may not use this file except in compliance with the License. 62e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * You may obtain a copy of the License at 72e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * 82e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 92e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * 102e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * Unless required by applicable law or agreed to in writing, software 112e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 122e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * See the License for the specific language governing permissions and 142e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * limitations under the License. 152e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent */ 162e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 172e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent#ifndef SOUNDPOOLTHREAD_H_ 182e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent#define SOUNDPOOLTHREAD_H_ 192e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 202e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent#include <utils/threads.h> 212e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent#include <utils/Vector.h> 222e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent#include <media/AudioTrack.h> 232e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 24559bf2836f5da25b75bfb229fec0d20d540ee426James Dong#include <media/SoundPool.h> 252e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 262e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurentnamespace android { 272e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 282e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurentclass SoundPoolMsg { 292e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurentpublic: 302e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent enum MessageType { INVALID, KILL, LOAD_SAMPLE }; 312e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent SoundPoolMsg() : mMessageType(INVALID), mData(0) {} 322e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent SoundPoolMsg(MessageType MessageType, int data) : 332e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent mMessageType(MessageType), mData(data) {} 342e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent uint16_t mMessageType; 352e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent uint16_t mData; 362e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent}; 372e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 382e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent/* 392e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent * This class handles background requests from the SoundPool 402e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent */ 412e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurentclass SoundPoolThread { 422e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurentpublic: 432e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent SoundPoolThread(SoundPool* SoundPool); 442e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent ~SoundPoolThread(); 452e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent void loadSample(int sampleID); 462e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent void quit(); 472e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent void write(SoundPoolMsg msg); 482e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 492e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurentprivate: 502e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent static const size_t maxMessages = 5; 512e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 522e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent static int beginThread(void* arg); 532e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent int run(); 542e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent void doLoadSample(int sampleID); 552e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent const SoundPoolMsg read(); 562e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 572e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent Mutex mLock; 582e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent Condition mCondition; 592e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent Vector<SoundPoolMsg> mMsgQueue; 602e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent SoundPool* mSoundPool; 612e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent bool mRunning; 622e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent}; 632e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 642e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent} // end namespace android 652e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent 662e66a7896c9a9da3a15fc6cff9be28b4174d8719Eric Laurent#endif /*SOUNDPOOLTHREAD_H_*/ 67