summaryrefslogtreecommitdiffstats
path: root/services/camera/libcameraservice/device3/Camera3Device.h
diff options
context:
space:
mode:
Diffstat (limited to 'services/camera/libcameraservice/device3/Camera3Device.h')
-rw-r--r--services/camera/libcameraservice/device3/Camera3Device.h62
1 files changed, 37 insertions, 25 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index e2fd8d4..bb4bcc4 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -234,6 +234,13 @@ class Camera3Device :
/**** End scope for mLock ****/
+ typedef struct AeTriggerCancelOverride {
+ bool applyAeLock;
+ uint8_t aeLock;
+ bool applyAePrecaptureTrigger;
+ uint8_t aePrecaptureTrigger;
+ } AeTriggerCancelOverride_t;
+
class CaptureRequest : public LightRefBase<CaptureRequest> {
public:
CameraMetadata mSettings;
@@ -242,6 +249,9 @@ class Camera3Device :
Vector<sp<camera3::Camera3OutputStreamInterface> >
mOutputStreams;
CaptureResultExtras mResultExtras;
+ // Used to cancel AE precapture trigger for devices doesn't support
+ // CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
+ AeTriggerCancelOverride_t mAeTriggerCancelOverride;
};
typedef List<sp<CaptureRequest> > RequestList;
@@ -492,6 +502,9 @@ class Camera3Device :
// If the input request is in mRepeatingRequests. Must be called with mRequestLock hold
bool isRepeatingRequestLocked(const sp<CaptureRequest>);
+ // Handle AE precapture trigger cancel for devices <= CAMERA_DEVICE_API_VERSION_3_2.
+ void handleAePrecaptureCancelRequest(sp<CaptureRequest> request);
+
wp<Camera3Device> mParent;
wp<camera3::StatusTracker> mStatusTracker;
camera3_device_t *mHal3Device;
@@ -540,6 +553,9 @@ class Camera3Device :
uint32_t mCurrentPreCaptureTriggerId;
int64_t mRepeatingLastFrameNumber;
+
+ // Whether the device supports AE lock
+ bool mAeLockAvailable;
};
sp<RequestThread> mRequestThread;
@@ -562,7 +578,6 @@ class Camera3Device :
// If this request has any input buffer
bool hasInputBuffer;
-
// The last metadata that framework receives from HAL and
// not yet send out because the shutter event hasn't arrived.
// It's added by process_capture_result and sent when framework
@@ -575,6 +590,10 @@ class Camera3Device :
// the shutter event.
Vector<camera3_stream_buffer_t> pendingOutputBuffers;
+ // Used to cancel AE precapture trigger for devices doesn't support
+ // CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
+ AeTriggerCancelOverride_t aeTriggerCancelOverride;
+
// Fields used by the partial result only
struct PartialResultInFlight {
@@ -595,36 +614,20 @@ class Camera3Device :
requestStatus(OK),
haveResultMetadata(false),
numBuffersLeft(0),
- hasInputBuffer(false){
- }
-
- InFlightRequest(int numBuffers) :
- shutterTimestamp(0),
- sensorTimestamp(0),
- requestStatus(OK),
- haveResultMetadata(false),
- numBuffersLeft(numBuffers),
- hasInputBuffer(false){
+ hasInputBuffer(false),
+ aeTriggerCancelOverride({false, 0, false, 0}){
}
- InFlightRequest(int numBuffers, CaptureResultExtras extras) :
+ InFlightRequest(int numBuffers, CaptureResultExtras extras, bool hasInput,
+ AeTriggerCancelOverride aeTriggerCancelOverride) :
shutterTimestamp(0),
sensorTimestamp(0),
requestStatus(OK),
haveResultMetadata(false),
numBuffersLeft(numBuffers),
resultExtras(extras),
- hasInputBuffer(false){
- }
-
- InFlightRequest(int numBuffers, CaptureResultExtras extras, bool hasInput) :
- shutterTimestamp(0),
- sensorTimestamp(0),
- requestStatus(OK),
- haveResultMetadata(false),
- numBuffersLeft(numBuffers),
- resultExtras(extras),
- hasInputBuffer(hasInput){
+ hasInputBuffer(hasInput),
+ aeTriggerCancelOverride(aeTriggerCancelOverride){
}
};
@@ -635,7 +638,8 @@ class Camera3Device :
InFlightMap mInFlightMap;
status_t registerInFlight(uint32_t frameNumber,
- int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput);
+ int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput,
+ const AeTriggerCancelOverride_t &aeTriggerCancelOverride);
/**
* For the partial result, check if all 3A state fields are available
@@ -653,6 +657,14 @@ class Camera3Device :
template<typename T>
bool insert3AResult(CameraMetadata &result, int32_t tag, const T* value,
uint32_t frameNumber);
+
+ /**
+ * Override result metadata for cancelling AE precapture trigger applied in
+ * handleAePrecaptureCancelRequest().
+ */
+ void overrideResultForPrecaptureCancel(CameraMetadata* result,
+ const AeTriggerCancelOverride_t &aeTriggerCancelOverride);
+
/**
* Tracking for idle detection
*/
@@ -738,7 +750,7 @@ class Camera3Device :
void sendCaptureResult(CameraMetadata &pendingMetadata,
CaptureResultExtras &resultExtras,
CameraMetadata &collectedPartialResult, uint32_t frameNumber,
- bool reprocess);
+ bool reprocess, const AeTriggerCancelOverride_t &aeTriggerCancelOverride);
/**** Scope for mInFlightLock ****/