SoundPool.h revision 85ab62c4b433df3f1a9826bed1c9bec07a86c750
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef SOUNDPOOL_H_ 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define SOUNDPOOL_H_ 19519494e207322581075c8ea884fde9d33bb9209eAlan Viverette 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/List.h> 2252b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette#include <utils/Vector.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/KeyedVector.h> 244d971c1fa0c71400ff1e843b8d8b4826d0aece16Alan Viverette#include <media/AudioTrack.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craikstatic const int IDLE_PRIORITY = -1; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30519494e207322581075c8ea884fde9d33bb9209eAlan Viverette// forward declarations 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SoundEvent; 3243027b7bca554818cc4223389747d661819d5706Alan Viveretteclass SoundPoolThread; 3343027b7bca554818cc4223389747d661819d5706Alan Viveretteclass SoundPool; 34519494e207322581075c8ea884fde9d33bb9209eAlan Viverette 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// for queued events 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SoundPoolEvent { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SoundPoolEvent(int msg, int arg1=0, int arg2=0) : 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMsg(msg), mArg1(arg1), mArg2(arg2) {} 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mMsg; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mArg1; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mArg2; 4352b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette enum MessageType { INVALID, SAMPLE_LOADED }; 4452b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette}; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// callback function prototype 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef void SoundPoolCallback(SoundPoolEvent event, SoundPool* soundPool, void* user); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// tracks samples used by application 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Sample : public RefBase { 5117dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverettepublic: 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum sample_state { UNLOADED, LOADING, READY, UNLOADING }; 53dfe5c204403bc56c29bb36410574eab8b1950417Scott Main Sample(int sampleID, const char* url); 54dfe5c204403bc56c29bb36410574eab8b1950417Scott Main Sample(int sampleID, int fd, int64_t offset, int64_t length); 55dfe5c204403bc56c29bb36410574eab8b1950417Scott Main ~Sample(); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int sampleID() { return mSampleID; } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int numChannels() { return mNumChannels; } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int sampleRate() { return mSampleRate; } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project audio_format_t format() { return mFormat; } 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t size() { return mSize; } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int state() { return mState; } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t* data() { return static_cast<uint8_t*>(mData->pointer()); } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t doLoad(); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void startLoad() { mState = LOADING; } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory> getIMemory() { return mData; } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // hack 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void init(int numChannels, int sampleRate, audio_format_t format, size_t size, 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory> data ) { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNumChannels = numChannels; mSampleRate = sampleRate; mFormat = format; mSize = size; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mData = data; } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void init(); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t mSize; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project volatile int32_t mRefCount; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint16_t mSampleID; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint16_t mSampleRate; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mState : 3; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mNumChannels : 2; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project audio_format_t mFormat; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mFd; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t mOffset; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t mLength; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char* mUrl; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory> mData; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9017dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverette// stores pending events for stolen channels 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SoundEvent 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 9417dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverette SoundEvent() : mChannelID(0), mLeftVolume(0), mRightVolume(0), 9517dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverette mPriority(IDLE_PRIORITY), mLoop(0), mRate(0) {} 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void set(const sp<Sample>& sample, int channelID, float leftVolume, 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float rightVolume, int priority, int loop, float rate); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Sample> sample() { return mSample; } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int channelID() { return mChannelID; } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float leftVolume() { return mLeftVolume; } 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float rightVolume() { return mRightVolume; } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int priority() { return mPriority; } 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int loop() { return mLoop; } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float rate() { return mRate; } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void clear() { mChannelID = 0; mSample.clear(); } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected: 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<Sample> mSample; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mChannelID; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mLeftVolume; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mRightVolume; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mPriority; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mLoop; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mRate; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// for channels aka AudioTracks 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SoundChannel : public SoundEvent { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum state { IDLE, RESUMING, STOPPING, PAUSED, PLAYING }; 121b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette SoundChannel() : mAudioTrack(NULL), mState(IDLE), mNumChannels(1), 122b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette mPos(0), mToggle(0), mAutoPaused(false) {} 123b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette ~SoundChannel(); 124b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette void init(SoundPool* soundPool); 125b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette void play(const sp<Sample>& sample, int channelID, float leftVolume, float rightVolume, 126b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette int priority, int loop, float rate); 127b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette void setVolume_l(float leftVolume, float rightVolume); 128b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette void setVolume(float leftVolume, float rightVolume); 129b32b8a52a3aa2d9d7b5ffaea28e0e31cb077f5e0Alan Viverette void stop_l(); 13052b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette void stop(); 13152b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette void pause(); 13252b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette void autoPause(); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void resume(); 13417dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverette void autoResume(); 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setRate(float rate); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int state() { return mState; } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setPriority(int priority) { mPriority = priority; } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setLoop(int loop); 13943027b7bca554818cc4223389747d661819d5706Alan Viverette int numChannels() { return mNumChannels; } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void clearNextEvent() { mNextEvent.clear(); } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void nextEvent(); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nextChannelID() { return mNextEvent.channelID(); } 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dump(); 144e6a39b12656ab8d5c77d8366b24aa6410fd42e11Chris Craik 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 1463aff2a0813ad77fd41b39b6a636faf2de6d78accChet Haase static void callback(int event, void* user, void *info); 147684385ddde2ac0c26de0862390ad713aff3fb149Romain Guy void process(int event, void *info, unsigned long toggle); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool doStop_l(); 1491041aded2df45094c36831028245fb7c5e9b67b7Romain Guy 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SoundPool* mSoundPool; 1513aff2a0813ad77fd41b39b6a636faf2de6d78accChet Haase AudioTrack* mAudioTrack; 152861621eb8a3bd8896bc00c4c5bc8af6816215e21Alan Viverette SoundEvent mNextEvent; 153861621eb8a3bd8896bc00c4c5bc8af6816215e21Alan Viverette Mutex mLock; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mState; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mNumChannels; 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mPos; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mAudioBufferSize; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project unsigned long mToggle; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mAutoPaused; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// application object for managing a pool of sounds 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SoundPool { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class SoundPoolThread; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class SoundChannel; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SoundPool(int maxChannels, audio_stream_type_t streamType, int srcQuality); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ~SoundPool(); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int load(const char* url, int priority); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int load(int fd, int64_t offset, int64_t length, int priority); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool unload(int sampleID); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int play(int sampleID, float leftVolume, float rightVolume, int priority, 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int loop, float rate); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void pause(int channelID); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void autoPause(); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void resume(int channelID); 17717cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette void autoResume(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void stop(int channelID); 17917dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverette void setVolume(int channelID, float leftVolume, float rightVolume); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setPriority(int channelID, int priority); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setLoop(int channelID, int loop); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setRate(int channelID, float rate); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project audio_stream_type_t streamType() const { return mStreamType; } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int srcQuality() const { return mSrcQuality; } 18517cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // called from SoundPoolThread 18717dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverette void sampleLoaded(int sampleID); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // called from AudioTrack thread 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void done_l(SoundChannel* channel); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // callback function 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setCallback(SoundPoolCallback* callback, void* user); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* getUserData() { return mUserData; } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SoundPool() {} // no default constructor 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool startThreads(); 1998bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy void doLoad(sp<Sample>& sample); 2008bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy sp<Sample> findSample(int sampleID) { return mSamples.valueFor(sampleID); } 2018bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy SoundChannel* findChannel (int channelID); 2028bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy SoundChannel* findNextChannel (int channelID); 2038bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy SoundChannel* allocateChannel_l(int priority); 2048bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy void moveToFront_l(SoundChannel* channel); 2058bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy void notify(SoundPoolEvent event); 2068bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy void dump(); 2078bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy 2088bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy // restart thread 2098bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy void addToRestartList(SoundChannel* channel); 2108bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy void addToStopList(SoundChannel* channel); 2118bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy static int beginThread(void* arg); 2128bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy int run(); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void quit(); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Mutex mLock; 2161041aded2df45094c36831028245fb7c5e9b67b7Romain Guy Mutex mRestartLock; 2179891e1fce5f29d0421d34aa481037417bd70853dChet Haase Condition mCondition; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SoundPoolThread* mDecodeThread; 21917dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverette SoundChannel* mChannelPool; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<SoundChannel*> mChannels; 2218bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy List<SoundChannel*> mRestart; 2228bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy List<SoundChannel*> mStop; 2238bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy DefaultKeyedVector< int, sp<Sample> > mSamples; 2248bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy int mMaxChannels; 2258bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy audio_stream_type_t mStreamType; 2268bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy int mSrcQuality; 2278bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy int mAllocated; 2288bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy int mNextSampleID; 2298bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy int mNextChannelID; 2308bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy bool mQuit; 2318bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy 23217dafdc8d8cb92a03294657d3a6e36c9c546d130Alan Viverette // callback 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Mutex mCallbackLock; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SoundPoolCallback* mCallback; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* mUserData; 2361041aded2df45094c36831028245fb7c5e9b67b7Romain Guy}; 2379891e1fce5f29d0421d34aa481037417bd70853dChet Haase 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} // end namespace android 2398bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /*SOUNDPOOL_H_*/ 2418bd9698b66d2e1219931ca1be5f81efaba3ed95aRomain Guy