diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index 4928951..0d8c3c6 100644
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -68,7 +68,7 @@
     bool mIsAvc;
     bool mIsAudio;
     bool mIsMPEG4;
-    int64_t mMaxTimeStampUs;
+    int64_t mTrackDurationUs;
     int64_t mEstimatedTrackSizeBytes;
     int64_t mMaxWriteTimeUs;
     int32_t mTimeScale;
@@ -711,7 +711,7 @@
       mDone(false),
       mPaused(false),
       mResumed(false),
-      mMaxTimeStampUs(0),
+      mTrackDurationUs(0),
       mEstimatedTrackSizeBytes(0),
       mSamplesHaveSameSize(true),
       mCodecSpecificData(NULL),
@@ -958,7 +958,7 @@
     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
 
     mDone = false;
-    mMaxTimeStampUs = 0;
+    mTrackDurationUs = 0;
     mReachedEOS = false;
     mEstimatedTrackSizeBytes = 0;
 
@@ -1300,15 +1300,15 @@
         }
 
         if (mResumed) {
-            previousPausedDurationUs += (timestampUs - mMaxTimeStampUs - lastDurationUs);
+            previousPausedDurationUs += (timestampUs - mTrackDurationUs - lastDurationUs);
             mResumed = false;
         }
 
         timestampUs -= previousPausedDurationUs;
         LOGV("time stamp: %lld and previous paused duration %lld",
                 timestampUs, previousPausedDurationUs);
-        if (timestampUs > mMaxTimeStampUs) {
-            mMaxTimeStampUs = timestampUs;
+        if (timestampUs > mTrackDurationUs) {
+            mTrackDurationUs = timestampUs;
         }
 
         mSampleSizes.push_back(sampleSize);
@@ -1407,6 +1407,7 @@
     }
     SttsTableEntry sttsEntry(sampleCount, lastDurationUs);
     mSttsTableEntries.push_back(sttsEntry);
+    mTrackDurationUs += lastDurationUs;
     mReachedEOS = true;
     LOGI("Received total/0-length (%d/%d) buffers and encoded %d frames. Max write time: %lld us - %s",
             count, nZeroLengthFrames, mNumSamples, mMaxWriteTimeUs, mIsAudio? "audio": "video");
@@ -1472,7 +1473,7 @@
 void MPEG4Writer::Track::findMinAvgMaxSampleDurationMs(
         int32_t *min, int32_t *avg, int32_t *max) {
     CHECK(!mSampleSizes.empty());
-    int32_t avgSampleDurationMs = mMaxTimeStampUs / 1000 / mNumSamples;
+    int32_t avgSampleDurationMs = mTrackDurationUs / 1000 / mNumSamples;
     int32_t minSampleDurationMs = 0x7FFFFFFF;
     int32_t maxSampleDurationMs = 0;
     for (List<SttsTableEntry>::iterator it = mSttsTableEntries.begin();
@@ -1514,7 +1515,7 @@
 }
 
 void MPEG4Writer::Track::logStatisticalData(bool isAudio) {
-    if (mMaxTimeStampUs <= 0 || mSampleSizes.empty()) {
+    if (mTrackDurationUs <= 0 || mSampleSizes.empty()) {
         LOGI("nothing is recorded");
         return;
     }
@@ -1523,7 +1524,7 @@
 
     if (collectStats) {
         LOGI("%s track - duration %lld us, total %d frames",
-                isAudio? "audio": "video", mMaxTimeStampUs,
+                isAudio? "audio": "video", mTrackDurationUs,
                 mNumSamples);
         int32_t min, avg, max;
         findMinAvgMaxSampleDurationMs(&min, &avg, &max);
@@ -1541,7 +1542,7 @@
             it != mSampleSizes.end(); ++it) {
             totalBytes += (*it);
         }
-        float bitRate = (totalBytes * 8000000.0) / mMaxTimeStampUs;
+        float bitRate = (totalBytes * 8000000.0) / mTrackDurationUs;
         LOGI("avg bit rate (bps): %.2f", bitRate);
 
         int64_t duration = mOwner->interleaveDuration();
@@ -1568,7 +1569,7 @@
 }
 
 int64_t MPEG4Writer::Track::getDurationUs() const {
-    return mMaxTimeStampUs;
+    return mTrackDurationUs;
 }
 
 int64_t MPEG4Writer::Track::getEstimatedTrackSizeBytes() const {
