Support audio and video track interleaving in the recorded mp4 file
Change-Id: Ifa27eb23ee265f84fe06773b29b0eb2b0b075b60
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index b07bd0e..b046a9c 100644
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -130,8 +130,9 @@
mHeight(0),
mFirstFrameTimeUs(0),
mLastFrameTimestampUs(0),
- mNumFrames(0),
- mNumFramesReleased(0),
+ mNumFramesReceived(0),
+ mNumFramesEncoded(0),
+ mNumFramesDropped(0),
mStarted(false) {
String8 s = mCamera->getParameters();
printf("params: \"%s\"\n", s.string());
@@ -178,9 +179,11 @@
mCamera->stopRecording();
releaseQueuedFrames();
- LOGI("Frames received/released: %d/%d, timestamp (us) last/first: %lld/%lld",
- mNumFrames, mNumFramesReleased,
+ LOGI("Frames received/encoded/dropped: %d/%d/%d, timestamp (us) last/first: %lld/%lld",
+ mNumFramesReceived, mNumFramesEncoded, mNumFramesDropped,
mLastFrameTimestampUs, mFirstFrameTimeUs);
+
+ CHECK_EQ(mNumFramesReceived, mNumFramesEncoded + mNumFramesDropped);
return OK;
}
@@ -190,7 +193,7 @@
it = mFrames.begin();
mCamera->releaseRecordingFrame(*it);
mFrames.erase(it);
- ++mNumFramesReleased;
+ ++mNumFramesDropped;
}
}
@@ -231,7 +234,7 @@
frameTime = *mFrameTimes.begin();
mFrameTimes.erase(mFrameTimes.begin());
- ++mNumFramesReleased;
+ ++mNumFramesEncoded;
}
*buffer = new MediaBuffer(frame->size());
@@ -252,15 +255,15 @@
Mutex::Autolock autoLock(mLock);
if (!mStarted) {
mCamera->releaseRecordingFrame(data);
- ++mNumFrames;
- ++mNumFramesReleased;
+ ++mNumFramesReceived;
+ ++mNumFramesDropped;
return;
}
- if (mNumFrames == 0) {
+ if (mNumFramesReceived == 0) {
mFirstFrameTimeUs = timestampUs;
}
- ++mNumFrames;
+ ++mNumFramesReceived;
mFrames.push_back(data);
mFrameTimes.push_back(timestampUs - mFirstFrameTimeUs);