summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MPEG4Writer.cpp
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2011-08-09 11:14:57 -0700
committerJames Dong <jdong@google.com>2011-08-09 11:17:49 -0700
commit5a217fba010e801c255503602bda4b86ac5a6ac9 (patch)
treeb9e968468924efd638b967f7f33ad151f8283514 /media/libstagefright/MPEG4Writer.cpp
parentbeccb75d0c511950fb59500b05a591942d5c4751 (diff)
downloadframeworks_av-5a217fba010e801c255503602bda4b86ac5a6ac9.zip
frameworks_av-5a217fba010e801c255503602bda4b86ac5a6ac9.tar.gz
frameworks_av-5a217fba010e801c255503602bda4b86ac5a6ac9.tar.bz2
Fix initial 0 duration video sample in the recorded videos
o Patch suggested by pmehendale@nvidia.com Change-Id: Ibf516ba83b721b0d0ab55bb7637fe9b7b2958214 related-to-bug: 5117434
Diffstat (limited to 'media/libstagefright/MPEG4Writer.cpp')
-rwxr-xr-xmedia/libstagefright/MPEG4Writer.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index 8c9ff87..5f58090 100755
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -1172,6 +1172,9 @@ void MPEG4Writer::Track::addOneStssTableEntry(size_t sampleId) {
void MPEG4Writer::Track::addOneSttsTableEntry(
size_t sampleCount, int32_t duration) {
+ if (duration == 0) {
+ LOGW("%d 0-duration samples found: %d", sampleCount);
+ }
SttsTableEntry sttsEntry(sampleCount, duration);
mSttsTableEntries.push_back(sttsEntry);
++mNumSttsTableEntries;
@@ -2001,17 +2004,18 @@ status_t MPEG4Writer::Track::threadEntry() {
mTrackDurationUs = timestampUs;
}
+ // We need to use the time scale based ticks, rather than the
+ // timestamp itself to determine whether we have to use a new
+ // stts entry, since we may have rounding errors.
+ // The calculation is intended to reduce the accumulated
+ // rounding errors.
+ currDurationTicks =
+ ((timestampUs * mTimeScale + 500000LL) / 1000000LL -
+ (lastTimestampUs * mTimeScale + 500000LL) / 1000000LL);
+
mSampleSizes.push_back(sampleSize);
++mNumSamples;
if (mNumSamples > 2) {
- // We need to use the time scale based ticks, rather than the
- // timestamp itself to determine whether we have to use a new
- // stts entry, since we may have rounding errors.
- // The calculation is intended to reduce the accumulated
- // rounding errors.
- currDurationTicks =
- ((timestampUs * mTimeScale + 500000LL) / 1000000LL -
- (lastTimestampUs * mTimeScale + 500000LL) / 1000000LL);
// Force the first sample to have its own stts entry so that
// we can adjust its value later to maintain the A/V sync.