OSDN Git Service

Fix timestamps after seek
authorMarco Nelissen <marcone@google.com>
Tue, 11 Dec 2012 23:34:18 +0000 (15:34 -0800)
committerMarco Nelissen <marcone@google.com>
Wed, 12 Dec 2012 17:18:13 +0000 (09:18 -0800)
Ensure buffers are correctly timestamped after a seek.

Change-Id: I7d76689138e4f95c0ceb9fb7a4c4d42c48568212

media/libstagefright/mp4/FragmentedMP4Parser.cpp

index 54c3d63..7aa5be9 100644 (file)
@@ -319,8 +319,7 @@ status_t FragmentedMP4Parser::onSeekTo(bool wantAudio, int64_t position) {
         off_t totalOffset = mFirstMoofOffset;
         for (int i = 0; i < numSidxEntries; i++) {
             const SidxEntry *se = &info->mSidx[i];
-            totalTime += se->mDurationUs;
-            if (totalTime > position) {
+            if (totalTime + se->mDurationUs > position) {
                 mBuffer->setRange(0,0);
                 mBufferPos = totalOffset;
                 if (mFinalResult == ERROR_END_OF_STREAM) {
@@ -329,9 +328,10 @@ status_t FragmentedMP4Parser::onSeekTo(bool wantAudio, int64_t position) {
                     resumeIfNecessary();
                 }
                 info->mFragments.clear();
-                info->mDecodingTime = position * info->mMediaTimeScale / 1000000ll;
+                info->mDecodingTime = totalTime * info->mMediaTimeScale / 1000000ll;
                 return OK;
             }
+            totalTime += se->mDurationUs;
             totalOffset += se->mSize;
         }
     }