diff options
author | Andreas Huber <andih@google.com> | 2010-01-27 12:08:25 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-01-27 12:08:25 -0800 |
commit | 0463f07fe11e6b70d8c46a23abd88273952fabc4 (patch) | |
tree | f3876aa4fd30846498b225d965972fa5a25ab5ca /media | |
parent | e9f8c544dbe0ac7ff88df18bfe9084c72e3ac1d5 (diff) | |
download | frameworks_av-0463f07fe11e6b70d8c46a23abd88273952fabc4.zip frameworks_av-0463f07fe11e6b70d8c46a23abd88273952fabc4.tar.gz frameworks_av-0463f07fe11e6b70d8c46a23abd88273952fabc4.tar.bz2 |
Do not hold onto the master lock while reading data from the datasource. This would prevent consumers from reading cached data immediately if it is available.
related-to-bug: 2295438
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/Prefetcher.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/media/libstagefright/Prefetcher.cpp b/media/libstagefright/Prefetcher.cpp index 93e3fdc..862998a 100644 --- a/media/libstagefright/Prefetcher.cpp +++ b/media/libstagefright/Prefetcher.cpp @@ -308,21 +308,26 @@ bool PrefetchedSource::getCacheDurationUs(int64_t *durationUs) { } void PrefetchedSource::cacheMore() { - Mutex::Autolock autoLock(mLock); + MediaSource::ReadOptions options; - if (!mStarted) { - return; - } + { + Mutex::Autolock autoLock(mLock); - MediaBuffer *buffer; - MediaSource::ReadOptions options; - if (mSeekTimeUs >= 0) { - options.setSeekTo(mSeekTimeUs); - mSeekTimeUs = -1; + if (!mStarted) { + return; + } + + if (mSeekTimeUs >= 0) { + options.setSeekTo(mSeekTimeUs); + mSeekTimeUs = -1; + } } + MediaBuffer *buffer; status_t err = mSource->read(&buffer, &options); + Mutex::Autolock autoLock(mLock); + if (err != OK) { mReachedEOS = true; mCondition.signal(); |