Merge change 6614 into donut
* changes: Fix issue 1970108: crash in AudioFlinger::isMusicActive()
This commit is contained in:
@ -738,12 +738,13 @@ bool AudioFlinger::streamMute(int stream) const
|
|||||||
|
|
||||||
bool AudioFlinger::isMusicActive() const
|
bool AudioFlinger::isMusicActive() const
|
||||||
{
|
{
|
||||||
|
Mutex::Autolock _l(mLock);
|
||||||
#ifdef WITH_A2DP
|
#ifdef WITH_A2DP
|
||||||
if (isA2dpEnabled()) {
|
if (isA2dpEnabled()) {
|
||||||
return mA2dpMixerThread->isMusicActive();
|
return mA2dpMixerThread->isMusicActive_l();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return mHardwareMixerThread->isMusicActive();
|
return mHardwareMixerThread->isMusicActive_l();
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t AudioFlinger::setParameter(const char* key, const char* value)
|
status_t AudioFlinger::setParameter(const char* key, const char* value)
|
||||||
@ -1444,7 +1445,8 @@ bool AudioFlinger::MixerThread::streamMute(int stream) const
|
|||||||
return mStreamTypes[stream].mute;
|
return mStreamTypes[stream].mute;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioFlinger::MixerThread::isMusicActive() const
|
// isMusicActive_l() must be called with AudioFlinger::mLock held
|
||||||
|
bool AudioFlinger::MixerThread::isMusicActive_l() const
|
||||||
{
|
{
|
||||||
size_t count = mActiveTracks.size();
|
size_t count = mActiveTracks.size();
|
||||||
for (size_t i = 0 ; i < count ; ++i) {
|
for (size_t i = 0 ; i < count ; ++i) {
|
||||||
@ -2030,7 +2032,10 @@ void AudioFlinger::MixerThread::OutputTrack::write(int16_t* data, uint32_t frame
|
|||||||
inBuffer.i16 = data;
|
inBuffer.i16 = data;
|
||||||
|
|
||||||
if (mCblk->user == 0) {
|
if (mCblk->user == 0) {
|
||||||
if (mOutputMixerThread->isMusicActive()) {
|
mOutputMixerThread->mAudioFlinger->mLock.lock();
|
||||||
|
bool isMusicActive = mOutputMixerThread->isMusicActive_l();
|
||||||
|
mOutputMixerThread->mAudioFlinger->mLock.unlock();
|
||||||
|
if (isMusicActive) {
|
||||||
mCblk->forceReady = 1;
|
mCblk->forceReady = 1;
|
||||||
LOGV("OutputTrack::start() force ready");
|
LOGV("OutputTrack::start() force ready");
|
||||||
} else if (mCblk->frameCount > frames){
|
} else if (mCblk->frameCount > frames){
|
||||||
|
@ -463,7 +463,7 @@ private:
|
|||||||
virtual float streamVolume(int stream) const;
|
virtual float streamVolume(int stream) const;
|
||||||
virtual bool streamMute(int stream) const;
|
virtual bool streamMute(int stream) const;
|
||||||
|
|
||||||
bool isMusicActive() const;
|
bool isMusicActive_l() const;
|
||||||
|
|
||||||
|
|
||||||
sp<Track> createTrack_l(
|
sp<Track> createTrack_l(
|
||||||
|
Reference in New Issue
Block a user