diff options
author | Andy Hung <hunga@google.com> | 2015-05-31 21:45:36 -0700 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2015-06-01 18:53:03 -0700 |
commit | 9f9e21ed9a342e0ca945818bdc6c0c4fb3bfb9bd (patch) | |
tree | d225efadda08464e37526e7e4cbc02ef1cf3f9ca /media/libmedia | |
parent | 08945c44a97d3749cc48f860eb4e01e57183ad90 (diff) | |
download | frameworks_av-9f9e21ed9a342e0ca945818bdc6c0c4fb3bfb9bd.zip frameworks_av-9f9e21ed9a342e0ca945818bdc6c0c4fb3bfb9bd.tar.gz frameworks_av-9f9e21ed9a342e0ca945818bdc6c0c4fb3bfb9bd.tar.bz2 |
Store server latency, sample rate, framecount information in AudioTrack
Bug: 21198655
Change-Id: I24590196642a97ea5d61bc6356f0aff782bd37d3
Diffstat (limited to 'media/libmedia')
-rw-r--r-- | media/libmedia/AudioTrack.cpp | 50 |
1 files changed, 12 insertions, 38 deletions
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index faf5935..070baa1 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -1111,31 +1111,27 @@ status_t AudioTrack::createTrack_l() // we must release it ourselves if anything goes wrong. // Not all of these values are needed under all conditions, but it is easier to get them all - - uint32_t afLatency; - status = AudioSystem::getLatency(output, &afLatency); + status = AudioSystem::getLatency(output, &mAfLatency); if (status != NO_ERROR) { ALOGE("getLatency(%d) failed status %d", output, status); goto release; } - ALOGV("createTrack_l() output %d afLatency %u", output, afLatency); + ALOGV("createTrack_l() output %d afLatency %u", output, mAfLatency); - size_t afFrameCount; - status = AudioSystem::getFrameCount(output, &afFrameCount); + status = AudioSystem::getFrameCount(output, &mAfFrameCount); if (status != NO_ERROR) { ALOGE("getFrameCount(output=%d) status %d", output, status); goto release; } - uint32_t afSampleRate; - status = AudioSystem::getSamplingRate(output, &afSampleRate); + status = AudioSystem::getSamplingRate(output, &mAfSampleRate); if (status != NO_ERROR) { ALOGE("getSamplingRate(output=%d) status %d", output, status); goto release; } if (mSampleRate == 0) { - mSampleRate = afSampleRate; - mOriginalSampleRate = afSampleRate; + mSampleRate = mAfSampleRate; + mOriginalSampleRate = mAfSampleRate; } // Client decides whether the track is TIMED (see below), but can only express a preference // for FAST. Server will perform additional tests. @@ -1148,9 +1144,9 @@ status_t AudioTrack::createTrack_l() // use case 3: obtain/release mode (mTransfer == TRANSFER_OBTAIN)) && // matching sample rate - (mSampleRate == afSampleRate))) { + (mSampleRate == mAfSampleRate))) { ALOGW("AUDIO_OUTPUT_FLAG_FAST denied by client; transfer %d, track %u Hz, output %u Hz", - mTransfer, mSampleRate, afSampleRate); + mTransfer, mSampleRate, mAfSampleRate); // once denied, do not request again if IAudioTrack is re-created mFlags = (audio_output_flags_t) (mFlags & ~AUDIO_OUTPUT_FLAG_FAST); } @@ -1171,7 +1167,7 @@ status_t AudioTrack::createTrack_l() // Same comment as below about ignoring frameCount parameter for set() frameCount = mSharedBuffer->size(); } else if (frameCount == 0) { - frameCount = afFrameCount; + frameCount = mAfFrameCount; } if (mNotificationFramesAct != frameCount) { mNotificationFramesAct = frameCount; @@ -1207,7 +1203,7 @@ status_t AudioTrack::createTrack_l() if ((mFlags & AUDIO_OUTPUT_FLAG_FAST) == 0) { // for normal tracks precompute the frame count based on speed. const size_t minFrameCount = calculateMinFrameCount( - afLatency, afFrameCount, afSampleRate, mSampleRate, + mAfLatency, mAfFrameCount, mAfSampleRate, mSampleRate, mPlaybackRate.mSpeed); if (frameCount < minFrameCount) { frameCount = minFrameCount; @@ -1357,7 +1353,7 @@ status_t AudioTrack::createTrack_l() mAudioTrack->attachAuxEffect(mAuxEffectId); // FIXME doesn't take into account speed or future sample rate changes (until restoreTrack) // FIXME don't believe this lie - mLatency = afLatency + (1000*frameCount) / mSampleRate; + mLatency = mAfLatency + (1000*frameCount) / mSampleRate; mFrameCount = frameCount; // If IAudioTrack is re-created, don't let the requested frameCount @@ -2089,30 +2085,8 @@ bool AudioTrack::isSampleRateSpeedAllowed_l(uint32_t sampleRate, float speed) co if (mStaticProxy != 0) { return true; // static tracks do not have issues with buffer sizing. } - status_t status; - uint32_t afLatency; - status = AudioSystem::getLatency(mOutput, &afLatency); - if (status != NO_ERROR) { - ALOGE("getLatency(%d) failed status %d", mOutput, status); - return false; - } - - size_t afFrameCount; - status = AudioSystem::getFrameCount(mOutput, &afFrameCount); - if (status != NO_ERROR) { - ALOGE("getFrameCount(output=%d) status %d", mOutput, status); - return false; - } - - uint32_t afSampleRate; - status = AudioSystem::getSamplingRate(mOutput, &afSampleRate); - if (status != NO_ERROR) { - ALOGE("getSamplingRate(output=%d) status %d", mOutput, status); - return false; - } - const size_t minFrameCount = - calculateMinFrameCount(afLatency, afFrameCount, afSampleRate, sampleRate, speed); + calculateMinFrameCount(mAfLatency, mAfFrameCount, mAfSampleRate, sampleRate, speed); ALOGV("isSampleRateSpeedAllowed_l mFrameCount %zu minFrameCount %zu", mFrameCount, minFrameCount); return mFrameCount >= minFrameCount; |