SoundChannel* SoundPool::allocateChannel_l(int priority) { List<SoundChannel*>::iterator iter; SoundChannel* channel = NULL; // allocate a channel if (!mChannels.empty()) { iter = mChannels.begin(); if (priority >= (*iter)->priority()) { channel = *iter; mChannels.erase(iter); ALOGV("Allocated active channel"); } } // update priority and put it back in the list if (channel) { channel->setPriority(priority); for (iter = mChannels.begin(); iter != mChannels.end(); ++iter) { if (priority < (*iter)->priority()) { break; } } mChannels.insert(iter, channel); } return channel; }
void SoundPool::setPriority(int channelID, int priority) { ALOGV("setPriority(%d, %d)", channelID, priority); Mutex::Autolock lock(&mLock); SoundChannel* channel = findChannel(channelID); if (channel) { channel->setPriority(priority); } }