OSDN Git Service

SampleIterator: clear members on seekTo error am: 03237ce0f9 am: 8468b8980c
authorRobert Shih <robertshih@google.com>
Thu, 22 Sep 2016 03:07:28 +0000 (03:07 +0000)
committerandroid-build-merger <android-build-merger@google.com>
Thu, 22 Sep 2016 03:07:28 +0000 (03:07 +0000)
am: e0d588b892

Change-Id: I62d47aa490a6fb62eabd5f80da26e47de69b8b1c

media/libstagefright/SampleIterator.cpp

index c5f359e..335bd5d 100644 (file)
@@ -94,8 +94,6 @@ status_t SampleIterator::seekTo(uint32_t sampleIndex) {
         + mFirstChunk;
 
     if (!mInitialized || chunk != mCurrentChunkIndex) {
-        mCurrentChunkIndex = chunk;
-
         status_t err;
         if ((err = getChunkOffset(chunk, &mCurrentChunkOffset)) != OK) {
             ALOGE("getChunkOffset return error");
@@ -106,18 +104,21 @@ status_t SampleIterator::seekTo(uint32_t sampleIndex) {
 
         uint32_t firstChunkSampleIndex =
             mFirstChunkSampleIndex
-                + mSamplesPerChunk * (mCurrentChunkIndex - mFirstChunk);
+                + mSamplesPerChunk * (chunk - mFirstChunk);
 
         for (uint32_t i = 0; i < mSamplesPerChunk; ++i) {
             size_t sampleSize;
             if ((err = getSampleSizeDirect(
                             firstChunkSampleIndex + i, &sampleSize)) != OK) {
                 ALOGE("getSampleSizeDirect return error");
+                mCurrentChunkSampleSizes.clear();
                 return err;
             }
 
             mCurrentChunkSampleSizes.push(sampleSize);
         }
+
+        mCurrentChunkIndex = chunk;
     }
 
     uint32_t chunkRelativeSampleIndex =