[Android]initial delay and current time stamp in camerasource

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值