summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-01-27 12:08:25 -0800
committerAndreas Huber <andih@google.com>2010-01-27 12:08:25 -0800
commit0463f07fe11e6b70d8c46a23abd88273952fabc4 (patch)
treef3876aa4fd30846498b225d965972fa5a25ab5ca /media
parente9f8c544dbe0ac7ff88df18bfe9084c72e3ac1d5 (diff)
downloadframeworks_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.cpp23
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();