diff options
author | Bill Yi <byi@google.com> | 2014-04-29 11:34:16 -0700 |
---|---|---|
committer | Bill Yi <byi@google.com> | 2014-04-29 11:34:16 -0700 |
commit | 1a7be1ec9c769203e6c8e26378de0ab8e2ad493d (patch) | |
tree | 68773b199cc4adcb96124270863244477570c78e /services/audioflinger | |
parent | f131f87369ec06fc27fc1f14ea72f0ca1a066509 (diff) | |
parent | 91820d46b5f3065c2fded3cdf65d305715b33bb1 (diff) | |
download | frameworks_av-1a7be1ec9c769203e6c8e26378de0ab8e2ad493d.zip frameworks_av-1a7be1ec9c769203e6c8e26378de0ab8e2ad493d.tar.gz frameworks_av-1a7be1ec9c769203e6c8e26378de0ab8e2ad493d.tar.bz2 |
Merge commit '91820d46b5f3065c2fded3cdf65d305715b33bb1' into HEAD
Diffstat (limited to 'services/audioflinger')
-rw-r--r-- | services/audioflinger/Threads.cpp | 5 | ||||
-rw-r--r-- | services/audioflinger/Tracks.cpp | 2 |
2 files changed, 4 insertions, 3 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 1da5147..cac785a 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -1324,6 +1324,7 @@ sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrac track = TimedTrack::create(this, client, streamType, sampleRate, format, channelMask, frameCount, sharedBuffer, sessionId, uid); } + if (track == 0 || track->getCblk() == NULL || track->name() < 0) { lStatus = NO_MEMORY; // track must be cleared from the caller as the caller has the AF lock @@ -1916,7 +1917,7 @@ ssize_t AudioFlinger::PlaybackThread::threadLoop_write() // otherwise use the HAL / AudioStreamOut directly } else { // Direct output and offload threads - size_t offset = (mCurrentWriteLength - mBytesRemaining) / sizeof(int16_t); + size_t offset = (mCurrentWriteLength - mBytesRemaining); if (mUseAsyncWrite) { ALOGW_IF(mWriteAckSequence & 1, "threadLoop_write(): out of sequence write request"); mWriteAckSequence += 2; @@ -1927,7 +1928,7 @@ ssize_t AudioFlinger::PlaybackThread::threadLoop_write() // FIXME We should have an implementation of timestamps for direct output threads. // They are used e.g for multichannel PCM playback over HDMI. bytesWritten = mOutput->stream->write(mOutput->stream, - mMixBuffer + offset, mBytesRemaining); + (char *)mMixBuffer + offset, mBytesRemaining); if (mUseAsyncWrite && ((bytesWritten < 0) || (bytesWritten == (ssize_t)mBytesRemaining))) { // do not wait for async callback in case of error of full write diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index b59333f..d07113c 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -551,7 +551,7 @@ size_t AudioFlinger::PlaybackThread::Track::framesReleased() const // Don't call for fast tracks; the framesReady() could result in priority inversion bool AudioFlinger::PlaybackThread::Track::isReady() const { - if (mFillingUpStatus != FS_FILLING || isStopped() || isPausing()) { + if (mFillingUpStatus != FS_FILLING || isStopped() || isPausing() || isStopping()) { return true; } |