summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MPEG4Writer.cpp
diff options
context:
space:
mode:
authorJean-Baptiste Queru <jbq@google.com>2012-08-08 14:04:18 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-08-08 14:04:18 -0700
commit51af4af2414cdaaf0185b971a41fc0b4f8c0b7e4 (patch)
tree3e7a2ca1401597ed506a8725e8a0934a28404024 /media/libstagefright/MPEG4Writer.cpp
parentef62009372d050b431939835d4e2c5ee77da8831 (diff)
parente28df5b996af3480b457c7a9908dbb9d52ad8d7c (diff)
downloadframeworks_av-51af4af2414cdaaf0185b971a41fc0b4f8c0b7e4.zip
frameworks_av-51af4af2414cdaaf0185b971a41fc0b4f8c0b7e4.tar.gz
frameworks_av-51af4af2414cdaaf0185b971a41fc0b4f8c0b7e4.tar.bz2
am e28df5b9: Merge "Store correct time stamps in recorded mp4 files"
* commit 'e28df5b996af3480b457c7a9908dbb9d52ad8d7c': Store correct time stamps in recorded mp4 files
Diffstat (limited to 'media/libstagefright/MPEG4Writer.cpp')
-rwxr-xr-xmedia/libstagefright/MPEG4Writer.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index 755b502..6108298 100755
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -236,11 +236,11 @@ private:
void writeDrefBox();
void writeDinfBox();
void writeDamrBox();
- void writeMdhdBox(time_t now);
+ void writeMdhdBox(uint32_t now);
void writeSmhdBox();
void writeVmhdBox();
void writeHdlrBox();
- void writeTkhdBox(time_t now);
+ void writeTkhdBox(uint32_t now);
void writeMp4aEsdsBox();
void writeMp4vEsdsBox();
void writeAudioFourCCBox();
@@ -723,8 +723,17 @@ status_t MPEG4Writer::reset() {
return err;
}
-void MPEG4Writer::writeMvhdBox(int64_t durationUs) {
+uint32_t MPEG4Writer::getMpeg4Time() {
time_t now = time(NULL);
+ // MP4 file uses time counting seconds since midnight, Jan. 1, 1904
+ // while time function returns Unix epoch values which starts
+ // at 1970-01-01. Lets add the number of seconds between them
+ uint32_t mpeg4Time = now + (66 * 365 + 17) * (24 * 60 * 60);
+ return mpeg4Time;
+}
+
+void MPEG4Writer::writeMvhdBox(int64_t durationUs) {
+ uint32_t now = getMpeg4Time();
beginBox("mvhd");
writeInt32(0); // version=0, flags=0
writeInt32(now); // creation time
@@ -2357,7 +2366,7 @@ void MPEG4Writer::Track::writeTrackHeader(bool use32BitOffset) {
ALOGV("%s track time scale: %d",
mIsAudio? "Audio": "Video", mTimeScale);
- time_t now = time(NULL);
+ uint32_t now = getMpeg4Time();
mOwner->beginBox("trak");
writeTkhdBox(now);
mOwner->beginBox("mdia");
@@ -2570,7 +2579,7 @@ void MPEG4Writer::Track::writeMp4vEsdsBox() {
mOwner->endBox(); // esds
}
-void MPEG4Writer::Track::writeTkhdBox(time_t now) {
+void MPEG4Writer::Track::writeTkhdBox(uint32_t now) {
mOwner->beginBox("tkhd");
// Flags = 7 to indicate that the track is enabled, and
// part of the presentation
@@ -2639,7 +2648,7 @@ void MPEG4Writer::Track::writeHdlrBox() {
mOwner->endBox();
}
-void MPEG4Writer::Track::writeMdhdBox(time_t now) {
+void MPEG4Writer::Track::writeMdhdBox(uint32_t now) {
int64_t trakDurationUs = getDurationUs();
mOwner->beginBox("mdhd");
mOwner->writeInt32(0); // version=0, flags=0