Please note that:本文章为原创,若需转载,请指明该出处.
=================================================================================
sourcecode:http://androidxref.com/
1369 void CameraSource::processBufferQueueFrame(BufferItem& buffer) {
...
1410 ALOGV("initial delay: %" PRId64 ", current time stamp: %" PRId64,
1411 mStartTimeUs, timeUs);
本文章主要研究此处的mStartTimeUs与timeUs是怎么得到的:
1.mStartTimeUs
line1917:camerasource中获取系统时间:int64_t startTimeUs = systemTime() / 1000;
line2132:camerasource中加上偏移时间:startTimeUs += startTimeOffsetUs;
line1362 & line1363:从camera中获取每一帧的系统时间:
while (mConsumer->acquireBuffer(&buffer, 0) == OK) {
mCameraSource->processBufferQueueFrame(buffer);
line1179: camera的第一帧系统时间 减去 camerasource中开始时间(line1362&line1363 - ine2132): mStartTimeUs = timestampUs - mStartTimeUs
2.timeUs
line1362 & line1363:从camera中获取每一帧的系统时间:
while (mConsumer->acquireBuffer(&buffer, 0) == OK) {
mCameraSource->processBufferQueueFrame(buffer);
PartI:start stamp from CameraSource
media/libmediaplayerservice/StagefrightRecorder.cpp
971 status_t StagefrightRecorder::start() {
972 ALOGV("start");
...
992
993 switch (mOutputFormat) {
994 case OUTPUT_FORMAT_DEFAULT:
995 case OUTPUT_FORMAT_THREE_GPP:
996 case OUTPUT_FORMAT_MPEG_4:
997 case OUTPUT_FORMAT_WEBM:
998 {
999 bool isMPEG4 = true;
1000 if (mOutputFormat == OUTPUT_FORMAT_WEBM) {
1001 isMPEG4 = false;
1002 }
1003 sp<MetaData> meta = new MetaData;
1004 setupMPEG4orWEBMMetaData(&meta); >>>>a1
1005 status = mWriter->start(meta.get()); >>>>a4
1006 break;
1007 }
1916 void StagefrightRecorder::setupMPEG4orWEBMMetaData(sp<MetaData> *meta) {
1917 int64_t startTimeUs = systemTime() / 1000; >>>>a2
1918 (*meta)->setInt64(kKeyTime, startTimeUs); >>>>a3
+ALOGI("case03738707,Start time offset: %" PRId64 " us", startTimeUs);
./media/libstagefright/MPEG4Writer.cpp
730 status_t MPEG4Writer::start(MetaData *param) {
...
783 if (mStarted) {
784 if (mPaused) {
785 mPaused = false;
786 return startTracks(param); >>>>a5
787 }
788 return OK;
789 }
610 status_t MPEG4Writer::startTracks(MetaData *params) {
611 if (mTracks.empty()) {
612 ALOGE("No source added");
613 return INVALID_OPERATION;
614 }
615
616 for (List<Track *>::iterator it = mTracks.begin();
617 it != mTracks.end(); ++it) {
618 status_t err = (*it)->start(params); >>>a6
619
2097 status_t MPEG4Writer::Track::start(MetaData *params) {
2098 if (!m