OSDN Git Service

Make sure seek triggers a reconnect if needed.
authorBryan Mawhinney <bryanmawhinney@google.com>
Wed, 18 Jan 2012 13:40:07 +0000 (13:40 +0000)
committerBryan Mawhinney <bryanmawhinney@google.com>
Wed, 18 Jan 2012 13:43:16 +0000 (13:43 +0000)
Previously, if we had disconnected at the high watermark,
the read immediately following a seek would fail, and would
not be retried, resulting in an error.

Change-Id: I45a53563fe17d6b54893815abc7750a7dfb0a124

media/libstagefright/NuCachedSource2.cpp

index 693c506..0957426 100644 (file)
@@ -370,6 +370,7 @@ void NuCachedSource2::onFetch() {
                     && (mSource->flags() & DataSource::kIsHTTPBasedSource)) {
                 ALOGV("Disconnecting at high watermark");
                 static_cast<HTTPBase *>(mSource.get())->disconnect();
+                mFinalStatus = -EAGAIN;
             }
         }
     } else {
@@ -549,7 +550,7 @@ ssize_t NuCachedSource2::readInternal(off64_t offset, void *data, size_t size) {
 
     size_t delta = offset - mCacheOffset;
 
-    if (mFinalStatus != OK) {
+    if (mFinalStatus != OK && mNumRetriesLeft == 0) {
         if (delta >= mCache->totalSize()) {
             return mFinalStatus;
         }
@@ -591,7 +592,7 @@ status_t NuCachedSource2::seekInternal_l(off64_t offset) {
     size_t totalSize = mCache->totalSize();
     CHECK_EQ(mCache->releaseFromStart(totalSize), totalSize);
 
-    mFinalStatus = OK;
+    mNumRetriesLeft = kMaxNumRetries;
     mFetching = true;
 
     return OK;