Merge "CameraSource: Fix time lapse video recording" into nyc-dev
am: 7eb42678f6
* commit '7eb42678f6f7fa3f6f0b530144eced69c98069fe':
CameraSource: Fix time lapse video recording
diff --git a/include/media/stagefright/CameraSource.h b/include/media/stagefright/CameraSource.h
index 64c3044..c594eb2 100644
--- a/include/media/stagefright/CameraSource.h
+++ b/include/media/stagefright/CameraSource.h
@@ -219,6 +219,9 @@
virtual void dataCallbackTimestamp(int64_t timestampUs, int32_t msgType,
const sp<IMemory> &data);
+ // Process a buffer item received in BufferQueueListener.
+ virtual void processBufferQueueFrame(BufferItem& buffer);
+
void releaseCamera();
private:
@@ -260,8 +263,6 @@
void releaseQueuedFrames();
void releaseOneRecordingFrame(const sp<IMemory>& frame);
- // Process a buffer item received in BufferQueueListener.
- void processBufferQueueFrame(const BufferItem& buffer);
status_t init(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy,
int32_t cameraId, const String16& clientName, uid_t clientUid, pid_t clientPid,
diff --git a/include/media/stagefright/CameraSourceTimeLapse.h b/include/media/stagefright/CameraSourceTimeLapse.h
index 1023027..785710a 100644
--- a/include/media/stagefright/CameraSourceTimeLapse.h
+++ b/include/media/stagefright/CameraSourceTimeLapse.h
@@ -137,9 +137,15 @@
// In the video camera case calls skipFrameAndModifyTimeStamp() to modify
// timestamp and set mSkipCurrentFrame.
// Then it calls the base CameraSource::dataCallbackTimestamp()
+ // This will be called in VIDEO_BUFFER_MODE_DATA_CALLBACK_YUV and
+ // VIDEO_BUFFER_MODE_DATA_CALLBACK_METADATA mode.
virtual void dataCallbackTimestamp(int64_t timestampUs, int32_t msgType,
const sp<IMemory> &data);
+ // Process a buffer item received in CameraSource::BufferQueueListener.
+ // This will be called in VIDEO_BUFFER_MODE_BUFFER_QUEUE mode.
+ virtual void processBufferQueueFrame(BufferItem& buffer);
+
// Convenience function to fill mLastReadBufferCopy from the just read
// buffer.
void fillLastReadBufferCopy(MediaBuffer& sourceBuffer);
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index 4f88d9c..ce507fb 100644
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -1114,7 +1114,7 @@
return true;
}
-void CameraSource::processBufferQueueFrame(const BufferItem& buffer) {
+void CameraSource::processBufferQueueFrame(BufferItem& buffer) {
Mutex::Autolock autoLock(mLock);
int64_t timestampUs = buffer.mTimestamp / 1000;
diff --git a/media/libstagefright/CameraSourceTimeLapse.cpp b/media/libstagefright/CameraSourceTimeLapse.cpp
index 202ec42..535909e 100644
--- a/media/libstagefright/CameraSourceTimeLapse.cpp
+++ b/media/libstagefright/CameraSourceTimeLapse.cpp
@@ -308,4 +308,12 @@
CameraSource::dataCallbackTimestamp(timestampUs, msgType, data);
}
+void CameraSourceTimeLapse::processBufferQueueFrame(BufferItem& buffer) {
+ ALOGV("processBufferQueueFrame");
+ int64_t timestampUs = buffer.mTimestamp / 1000;
+ mSkipCurrentFrame = skipFrameAndModifyTimeStamp(×tampUs);
+ buffer.mTimestamp = timestampUs * 1000;
+ CameraSource::processBufferQueueFrame(buffer);
+}
+
} // namespace android