diff options
author | Marco Nelissen <marcone@google.com> | 2012-12-11 15:34:18 -0800 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2012-12-12 09:18:13 -0800 |
commit | 1457bf40071bbae83086bc67138caa59c1057248 (patch) | |
tree | bd456e5a5c6e216125de4fdf1925ee245a922d22 /media/libstagefright/mp4 | |
parent | e1cf3c41bd27b5ab7d8e70ef8dd6fcd0f5453568 (diff) | |
download | frameworks_av-1457bf40071bbae83086bc67138caa59c1057248.zip frameworks_av-1457bf40071bbae83086bc67138caa59c1057248.tar.gz frameworks_av-1457bf40071bbae83086bc67138caa59c1057248.tar.bz2 |
Fix timestamps after seek
Ensure buffers are correctly timestamped after a seek.
Change-Id: I7d76689138e4f95c0ceb9fb7a4c4d42c48568212
Diffstat (limited to 'media/libstagefright/mp4')
-rw-r--r-- | media/libstagefright/mp4/FragmentedMP4Parser.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/media/libstagefright/mp4/FragmentedMP4Parser.cpp b/media/libstagefright/mp4/FragmentedMP4Parser.cpp index 54c3d63..7aa5be9 100644 --- a/media/libstagefright/mp4/FragmentedMP4Parser.cpp +++ b/media/libstagefright/mp4/FragmentedMP4Parser.cpp @@ -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; } } |