CameraService: fix race condition and wrong last frame number.
Change-Id: Ie2be9a77a0b074497615de38cbb8e8f13b4858ec
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index b1ea5ed..3ef39f3 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -25,6 +25,7 @@
#include <utils/KeyedVector.h>
#include <hardware/camera3.h>
#include <camera/CaptureResult.h>
+#include <camera/camera2/ICameraDeviceUser.h>
#include "common/CameraDeviceBase.h"
#include "device3/StatusTracker.h"
@@ -212,7 +213,8 @@
status_t convertMetadataListToRequestListLocked(
const List<const CameraMetadata> &metadataList,
- /*out*/RequestList *requestList);
+ /*out*/
+ RequestList *requestList);
status_t submitRequestsHelper(const List<const CameraMetadata> &requests, bool repeating,
int64_t *lastFrameNumber = NULL);
@@ -330,17 +332,21 @@
* on either. Use waitUntilPaused to wait until request queue
* has emptied out.
*/
- status_t setRepeatingRequests(const RequestList& requests);
- status_t clearRepeatingRequests();
+ status_t setRepeatingRequests(const RequestList& requests,
+ /*out*/
+ int64_t *lastFrameNumber = NULL);
+ status_t clearRepeatingRequests(/*out*/
+ int64_t *lastFrameNumber = NULL);
- status_t queueRequest(sp<CaptureRequest> request);
-
- status_t queueRequestList(List<sp<CaptureRequest> > &requests);
+ status_t queueRequestList(List<sp<CaptureRequest> > &requests,
+ /*out*/
+ int64_t *lastFrameNumber = NULL);
/**
* Remove all queued and repeating requests, and pending triggers
*/
- status_t clear();
+ status_t clear(/*out*/
+ int64_t *lastFrameNumber = NULL);
/**
* Queue a trigger to be dispatched with the next outgoing
@@ -377,8 +383,6 @@
*/
CameraMetadata getLatestRequest() const;
- int64_t getLastFrameNumber();
-
protected:
virtual bool threadLoop();
@@ -456,7 +460,7 @@
TriggerMap mTriggerRemovedMap;
TriggerMap mTriggerReplacedMap;
- int64_t mLastFrameNumber;
+ int64_t mRepeatingLastFrameNumber;
};
sp<RequestThread> mRequestThread;