hardware: samsung_slsi: libcamera2: Stability Enhancement
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos5.git] / libcamera2 / ExynosCameraHWInterface2.h
CommitLineData
c15a6b00
JS
1/*
2**
3** Copyright 2008, The Android Open Source Project
4** Copyright 2012, Samsung Electronics Co. LTD
5**
6** Licensed under the Apache License, Version 2.0 (the "License");
7** you may not use this file except in compliance with the License.
8** You may obtain a copy of the License at
9**
10** http://www.apache.org/licenses/LICENSE-2.0
11**
12** Unless required by applicable law or agreed to in writing, software
13** distributed under the License is distributed on an "AS IS" BASIS,
14** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15** See the License for the specific language governing permissions and
16** limitations under the License.
17*/
18
19/*!
20 * \file ExynosCameraHWInterface2.h
21 * \brief header file for Android Camera API 2.0 HAL
22 * \author Sungjoong Kang(sj3.kang@samsung.com)
13d8c7b4 23 * \date 2012/07/10
c15a6b00
JS
24 *
25 * <b>Revision History: </b>
26 * - 2012/05/31 : Sungjoong Kang(sj3.kang@samsung.com) \n
27 * Initial Release
13d8c7b4
SK
28 *
29 * - 2012/07/10 : Sungjoong Kang(sj3.kang@samsung.com) \n
30 * 2nd Release
31 *
c15a6b00 32 */
13d8c7b4 33
c15a6b00
JS
34#ifndef EXYNOS_CAMERA_HW_INTERFACE_2_H
35#define EXYNOS_CAMERA_HW_INTERFACE_2_H
36
37#include <hardware/camera2.h>
38#include <camera/Camera.h>
39#include <camera/CameraParameters.h>
40#include "SignalDrivenThread.h"
41#include "MetadataConverter.h"
42#include "exynos_v4l2.h"
13d8c7b4
SK
43#include "ExynosRect.h"
44#include "ExynosBuffer.h"
c15a6b00
JS
45#include "videodev2_exynos_camera.h"
46#include "gralloc_priv.h"
13d8c7b4 47#include "ExynosJpegEncoderForCamera.h"
c15a6b00
JS
48#include <fcntl.h>
49#include "fimc-is-metadata.h"
50#include "ion.h"
13d8c7b4
SK
51#include "ExynosExif.h"
52#include "csc.h"
daa1fcd6 53#include "ExynosCamera2.h"
c15a6b00
JS
54
55namespace android {
56
57
58#define NODE_PREFIX "/dev/video"
59
60#define NUM_MAX_STREAM_THREAD (5)
13d8c7b4 61#define NUM_MAX_REQUEST_MGR_ENTRY (10)
ad37861e 62#define NUM_MAX_DEQUEUED_REQUEST NUM_MAX_REQUEST_MGR_ENTRY
c15a6b00 63#define MAX_CAMERA_MEMORY_PLANE_NUM (4)
13d8c7b4
SK
64#define NUM_MAX_CAMERA_BUFFERS (16)
65#define NUM_BAYER_BUFFERS (8)
b56dcc00 66#define NUM_SENSOR_QBUF (3)
13d8c7b4
SK
67
68#define PICTURE_GSC_NODE_NUM (2)
15fd8231 69#define VIDEO_GSC_NODE_NUM (1)
c15a6b00 70
37e122d5
SK
71#define STREAM_TYPE_DIRECT (0)
72#define STREAM_TYPE_INDIRECT (1)
73
13d8c7b4
SK
74#define SIGNAL_MAIN_REQ_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<1)
75#define SIGNAL_MAIN_REPROCESS_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<2)
76#define SIGNAL_MAIN_STREAM_OUTPUT_DONE (SIGNAL_THREAD_COMMON_LAST<<3)
77#define SIGNAL_SENSOR_START_REQ_PROCESSING (SIGNAL_THREAD_COMMON_LAST<<4)
c15a6b00
JS
78#define SIGNAL_STREAM_GET_BUFFER (SIGNAL_THREAD_COMMON_LAST<<5)
79#define SIGNAL_STREAM_PUT_BUFFER (SIGNAL_THREAD_COMMON_LAST<<6)
80#define SIGNAL_STREAM_CHANGE_PARAMETER (SIGNAL_THREAD_COMMON_LAST<<7)
13d8c7b4
SK
81#define SIGNAL_THREAD_RELEASE (SIGNAL_THREAD_COMMON_LAST<<8)
82#define SIGNAL_ISP_START_BAYER_INPUT (SIGNAL_THREAD_COMMON_LAST<<9)
9dd63e1f 83#define SIGNAL_ISP_START_BAYER_DEQUEUE (SIGNAL_THREAD_COMMON_LAST<<10)
c15a6b00
JS
84
85#define SIGNAL_STREAM_DATA_COMING (SIGNAL_THREAD_COMMON_LAST<<15)
86
0f26b20f
SK
87#define NO_TRANSITION (0)
88#define HAL_AFSTATE_INACTIVE (1)
89#define HAL_AFSTATE_NEEDS_COMMAND (2)
90#define HAL_AFSTATE_STARTED (3)
91#define HAL_AFSTATE_SCANNING (4)
92#define HAL_AFSTATE_LOCKED (5)
93#define HAL_AFSTATE_FAILED (6)
94#define HAL_AFSTATE_NEEDS_DETERMINATION (7)
95#define HAL_AFSTATE_PASSIVE_FOCUSED (8)
13d8c7b4 96
c15a6b00
JS
97enum sensor_name {
98 SENSOR_NAME_S5K3H2 = 1,
99 SENSOR_NAME_S5K6A3 = 2,
100 SENSOR_NAME_S5K4E5 = 3,
101 SENSOR_NAME_S5K3H7 = 4,
102 SENSOR_NAME_CUSTOM = 5,
103 SENSOR_NAME_END
104};
105
15fd8231
SK
106enum is_subscenario_id {
107 ISS_SUB_SCENARIO_STILL,
108 ISS_SUB_SCENARIO_VIDEO,
109 ISS_SUB_SCENARIO_SCENE1,
110 ISS_SUB_SCENARIO_SCENE2,
111 ISS_SUB_SCENARIO_SCENE3,
112 ISS_SUB_END
113};
c15a6b00
JS
114
115typedef struct node_info {
116 int fd;
117 int width;
118 int height;
119 int format;
120 int planes;
121 int buffers;
c15a6b00
JS
122 enum v4l2_memory memory;
123 enum v4l2_buf_type type;
be494d19
SK
124 ion_client ionClient;
125 ExynosBuffer buffer[NUM_MAX_CAMERA_BUFFERS];
15fd8231 126 int status;
c15a6b00
JS
127} node_info_t;
128
129
130typedef struct camera_hw_info {
131 int sensor_id;
132
133 node_info_t sensor;
13d8c7b4
SK
134 node_info_t isp;
135 node_info_t capture;
136
137 /*shot*/ // temp
138 struct camera2_shot_ext dummy_shot;
c15a6b00 139
c15a6b00
JS
140} camera_hw_info_t;
141
13d8c7b4 142typedef enum request_entry_status {
c15a6b00
JS
143 EMPTY,
144 REGISTERED,
be494d19
SK
145 REQUESTED,
146 CAPTURED
c15a6b00
JS
147} request_entry_status_t;
148
149typedef struct request_manager_entry {
13d8c7b4 150 request_entry_status_t status;
13d8c7b4 151 camera_metadata_t *original_request;
be494d19 152 struct camera2_shot_ext internal_shot;
13d8c7b4
SK
153 int output_stream_count;
154 bool dynamic_meta_vaild;
c15a6b00
JS
155} request_manager_entry_t;
156
157class RequestManager {
158public:
159 RequestManager(SignalDrivenThread* main_thread);
160 ~RequestManager();
161 int GetNumEntries();
162 bool IsRequestQueueFull();
13d8c7b4
SK
163
164 void RegisterRequest(camera_metadata_t *new_request);
165 void DeregisterRequest(camera_metadata_t **deregistered_request);
166 bool PrepareFrame(size_t *num_entries, size_t *frame_size,
0f26b20f
SK
167 camera_metadata_t **prepared_frame, int afState);
168 int MarkProcessingRequest(ExynosBuffer * buf, int *afMode);
9dd63e1f 169 void NotifyStreamOutput(int frameCnt, int stream_id);
13d8c7b4 170 void DumpInfoWithIndex(int index);
ad37861e 171 void ApplyDynamicMetadata(struct camera2_shot_ext *shot_ext);
13d8c7b4 172 void CheckCompleted(int index);
0f26b20f 173 void UpdateIspParameters(struct camera2_shot_ext *shot_ext, int frameCnt, bool afTrigger);
9dd63e1f
SK
174 void RegisterTimestamp(int frameCnt, nsecs_t *frameTime);
175 uint64_t GetTimestamp(int frameCnt);
176 int FindFrameCnt(struct camera2_shot_ext * shot_ext);
177 int FindEntryIndexByFrameCnt(int frameCnt);
b5237e6b
SK
178 void Dump(void);
179 int GetNextIndex(int index);
180 void SetDefaultParameters(int cropX);
181 void SetInitialSkip(int count);
ad37861e
SK
182 int GetSkipCnt();
183 void SetFrameIndex(int index);
184 int GetFrameIndex();
c15a6b00
JS
185private:
186
187 MetadataConverter *m_metadataConverter;
188 SignalDrivenThread *m_mainThread;
189 int m_numOfEntries;
190 int m_entryInsertionIndex;
191 int m_entryProcessingIndex;
192 int m_entryFrameOutputIndex;
193 request_manager_entry_t entries[NUM_MAX_REQUEST_MGR_ENTRY];
13d8c7b4 194 int m_completedIndex;
c15a6b00
JS
195
196 Mutex m_requestMutex;
197
198 //TODO : alloc dynamically
199 char m_tempFrameMetadataBuf[2000];
200 camera_metadata_t *m_tempFrameMetadata;
9dd63e1f 201
b5237e6b 202 int m_sensorPipelineSkipCnt;
9dd63e1f 203 int m_cropX;
ad37861e 204 int m_frameIndex;
2bdec060
SK
205 int m_lastAeMode;
206 int m_lastAaMode;
207 int m_lastAwbMode;
208 int m_lastAeComp;
c15a6b00
JS
209};
210
9dd63e1f
SK
211
212typedef struct bayer_buf_entry {
213 int status;
214 int reqFrameCnt;
215 nsecs_t timeStamp;
216} bayer_buf_entry_t;
217
218
219class BayerBufManager {
220public:
221 BayerBufManager();
222 ~BayerBufManager();
223 int GetIndexForSensorEnqueue();
224 int MarkSensorEnqueue(int index);
225 int MarkSensorDequeue(int index, int reqFrameCnt, nsecs_t *timeStamp);
226 int GetIndexForIspEnqueue(int *reqFrameCnt);
227 int GetIndexForIspDequeue(int *reqFrameCnt);
228 int MarkIspEnqueue(int index);
229 int MarkIspDequeue(int index);
230 int GetNumOnSensor();
231 int GetNumOnHalFilled();
232 int GetNumOnIsp();
233
234private:
235 int GetNextIndex(int index);
236
237 int sensorEnqueueHead;
238 int sensorDequeueHead;
239 int ispEnqueueHead;
240 int ispDequeueHead;
241 int numOnSensor;
242 int numOnIsp;
243 int numOnHalFilled;
244 int numOnHalEmpty;
245
246 bayer_buf_entry_t entries[NUM_BAYER_BUFFERS];
247};
248
249
13d8c7b4
SK
250#define NOT_AVAILABLE (0)
251#define REQUIRES_DQ_FROM_SVC (1)
252#define ON_DRIVER (2)
253#define ON_HAL (3)
254#define ON_SERVICE (4)
255
256#define BAYER_NOT_AVAILABLE (0)
257#define BAYER_ON_SENSOR (1)
258#define BAYER_ON_HAL_FILLED (2)
259#define BAYER_ON_ISP (3)
260#define BAYER_ON_SERVICE (4)
261#define BAYER_ON_HAL_EMPTY (5)
262
263typedef struct stream_parameters {
264 int streamType;
265 uint32_t outputWidth;
266 uint32_t outputHeight;
267 uint32_t nodeWidth;
268 uint32_t nodeHeight;
269 int outputFormat;
270 int nodeFormat;
c15a6b00
JS
271 const camera2_stream_ops_t* streamOps;
272 uint32_t usage;
13d8c7b4
SK
273 int numHwBuffers;
274 int numSvcBuffers;
be494d19 275 int numOwnSvcBuffers;
c15a6b00 276 int fd;
13d8c7b4
SK
277 int svcPlanes;
278 int nodePlanes;
279 enum v4l2_memory memory;
280 enum v4l2_buf_type halBuftype;
be494d19 281 int numSvcBufsInHal;
13d8c7b4
SK
282 buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
283 ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS];
284 int svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
be494d19
SK
285 int svcBufIndex;
286 ion_client ionClient;
13d8c7b4 287 node_info_t node;
c15a6b00
JS
288} stream_parameters_t;
289
9dd63e1f
SK
290typedef struct record_parameters {
291 uint32_t outputWidth;
292 uint32_t outputHeight;
293 int outputFormat;
294 const camera2_stream_ops_t* streamOps;
295 uint32_t usage;
296 int numSvcBuffers;
be494d19 297 int numOwnSvcBuffers;
9dd63e1f
SK
298 int svcPlanes;
299 buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
300 ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS];
301 int svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
be494d19
SK
302 int svcBufIndex;
303 int numSvcBufsInHal;
9dd63e1f 304} record_parameters_t;
13d8c7b4 305
c15a6b00
JS
306class ExynosCameraHWInterface2 : public virtual RefBase {
307public:
daa1fcd6 308 ExynosCameraHWInterface2(int cameraId, camera2_device_t *dev, ExynosCamera2 * camera);
c15a6b00
JS
309 virtual ~ExynosCameraHWInterface2();
310
311 virtual void release();
13d8c7b4 312
c15a6b00
JS
313 inline int getCameraId() const;
314
315 virtual int setRequestQueueSrcOps(const camera2_request_queue_src_ops_t *request_src_ops);
316 virtual int notifyRequestQueueNotEmpty();
317 virtual int setFrameQueueDstOps(const camera2_frame_queue_dst_ops_t *frame_dst_ops);
318 virtual int getInProgressCount();
319 virtual int flushCapturesInProgress();
320 virtual int constructDefaultRequest(int request_template, camera_metadata_t **request);
13d8c7b4 321 virtual int allocateStream(uint32_t width, uint32_t height,
c15a6b00
JS
322 int format, const camera2_stream_ops_t *stream_ops,
323 uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers);
324 virtual int registerStreamBuffers(uint32_t stream_id, int num_buffers, buffer_handle_t *buffers);
325 virtual int releaseStream(uint32_t stream_id);
326 virtual int allocateReprocessStream(uint32_t width, uint32_t height,
327 uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,
328 uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers);
329 virtual int releaseReprocessStream(uint32_t stream_id);
330 virtual int triggerAction(uint32_t trigger_id, int ext1, int ext2);
331 virtual int setNotifyCallback(camera2_notify_callback notify_cb, void *user);
332 virtual int getMetadataVendorTagOps(vendor_tag_query_ops_t **ops);
333 virtual int dump(int fd);
334private:
13d8c7b4
SK
335class MainThread : public SignalDrivenThread {
336 ExynosCameraHWInterface2 *mHardware;
337 public:
338 MainThread(ExynosCameraHWInterface2 *hw):
339 SignalDrivenThread(),
340 mHardware(hw) {
341// Start("MainThread", PRIORITY_DEFAULT, 0);
342 }
343 ~MainThread();
344 status_t readyToRunInternal()
345 {
346 return NO_ERROR;
347 }
348 void threadFunctionInternal()
349 {
350 mHardware->m_mainThreadFunc(this);
351 return;
352 }
353 void release(void);
15fd8231 354 bool m_releasing;
13d8c7b4 355 };
9dd63e1f 356
c15a6b00
JS
357 class SensorThread : public SignalDrivenThread {
358 ExynosCameraHWInterface2 *mHardware;
359 public:
360 SensorThread(ExynosCameraHWInterface2 *hw):
361 SignalDrivenThread("SensorThread", PRIORITY_DEFAULT, 0),
362 mHardware(hw),
363 m_isBayerOutputEnabled(false) { }
13d8c7b4 364 ~SensorThread();
c15a6b00 365 status_t readyToRunInternal() {
13d8c7b4 366 mHardware->m_sensorThreadInitialize(this);
c15a6b00
JS
367 return NO_ERROR;
368 }
13d8c7b4 369 void threadFunctionInternal() {
c15a6b00
JS
370 mHardware->m_sensorThreadFunc(this);
371 return;
372 }
9dd63e1f 373 void release(void);
c15a6b00
JS
374 //private:
375 bool m_isBayerOutputEnabled;
376 int m_sensorFd;
15fd8231 377 bool m_releasing;
13d8c7b4
SK
378 };
379
380 class IspThread : public SignalDrivenThread {
381 ExynosCameraHWInterface2 *mHardware;
382 public:
383 IspThread(ExynosCameraHWInterface2 *hw):
384 SignalDrivenThread("IspThread", PRIORITY_DEFAULT, 0),
385 mHardware(hw) { }
386 ~IspThread();
387 status_t readyToRunInternal() {
388 mHardware->m_ispThreadInitialize(this);
389 return NO_ERROR;
390 }
391 void threadFunctionInternal() {
392 mHardware->m_ispThreadFunc(this);
393 return;
394 }
395 void release(void);
396 //private:
c15a6b00 397 int m_ispFd;
15fd8231 398 bool m_releasing;
c15a6b00
JS
399 };
400
401 class StreamThread : public SignalDrivenThread {
402 ExynosCameraHWInterface2 *mHardware;
403 public:
404 StreamThread(ExynosCameraHWInterface2 *hw, uint8_t new_index):
405 SignalDrivenThread("StreamThread", PRIORITY_DEFAULT, 0),
406 mHardware(hw),
407 m_index(new_index) { }
13d8c7b4 408 ~StreamThread();
c15a6b00 409 status_t readyToRunInternal() {
13d8c7b4 410 mHardware->m_streamThreadInitialize(this);
c15a6b00
JS
411 return NO_ERROR;
412 }
13d8c7b4 413 void threadFunctionInternal() {
c15a6b00
JS
414 mHardware->m_streamThreadFunc(this);
415 return;
416 }
9dd63e1f 417 void setRecordingParameter(record_parameters_t * recordParm);
13d8c7b4
SK
418 void setParameter(stream_parameters_t * new_parameters);
419 void applyChange(void);
420 void release(void);
421 int findBufferIndex(void * bufAddr);
c15a6b00 422
c15a6b00 423
13d8c7b4 424 uint8_t m_index;
9dd63e1f 425 bool m_activated;
13d8c7b4
SK
426 //private:
427 stream_parameters_t m_parameters;
9dd63e1f
SK
428 stream_parameters_t *m_tempParameters;
429 record_parameters_t m_recordParameters;
13d8c7b4 430 bool m_isBufferInit;
b5237e6b 431 bool m_releasing;
13d8c7b4 432 };
c15a6b00
JS
433
434 sp<MainThread> m_mainThread;
435 sp<SensorThread> m_sensorThread;
13d8c7b4
SK
436 sp<IspThread> m_ispThread;
437 sp<StreamThread> m_streamThreads[NUM_MAX_STREAM_THREAD];
438
439
9dd63e1f 440
c15a6b00 441 RequestManager *m_requestManager;
9dd63e1f 442 BayerBufManager *m_BayerManager;
daa1fcd6 443 ExynosCamera2 *m_camera2;
c15a6b00
JS
444
445 void m_mainThreadFunc(SignalDrivenThread * self);
446 void m_sensorThreadFunc(SignalDrivenThread * self);
13d8c7b4
SK
447 void m_sensorThreadInitialize(SignalDrivenThread * self);
448 void m_ispThreadFunc(SignalDrivenThread * self);
449 void m_ispThreadInitialize(SignalDrivenThread * self);
c15a6b00 450 void m_streamThreadFunc(SignalDrivenThread * self);
13d8c7b4
SK
451 void m_streamThreadInitialize(SignalDrivenThread * self);
452
453 void m_getAlignedYUVSize(int colorFormat, int w, int h,
454 ExynosBuffer *buf);
455 bool m_getRatioSize(int src_w, int src_h,
456 int dst_w, int dst_h,
457 int *crop_x, int *crop_y,
458 int *crop_w, int *crop_h,
459 int zoom);
460 int createIonClient(ion_client ionClient);
461 int deleteIonClient(ion_client ionClient);
13d8c7b4
SK
462
463 int allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum);
464 void freeCameraMemory(ExynosBuffer *buf, int iMemoryNum);
465 void initCameraMemory(ExynosBuffer *buf, int iMemoryNum);
466
467 void DumpInfoWithShot(struct camera2_shot_ext * shot_ext);
468 bool yuv2Jpeg(ExynosBuffer *yuvBuf,
469 ExynosBuffer *jpegBuf,
470 ExynosRect *rect);
ad37861e
SK
471 void InitializeISPChain();
472 void StartISP();
0f26b20f
SK
473 int GetAfState();
474 void SetAfMode(enum aa_afmode afMode);
475 void OnAfTrigger(int id);
476 void OnAfTriggerAutoMacro(int id);
477 void OnAfTriggerCAFPicture(int id);
478 void OnAfTriggerCAFVideo(int id);
479 void OnAfCancel(int id);
480 void OnAfCancelAutoMacro(int id);
481 void OnAfCancelCAFPicture(int id);
482 void OnAfCancelCAFVideo(int id);
483 void OnAfNotification(enum aa_afstate noti);
484 void OnAfNotificationAutoMacro(enum aa_afstate noti);
485 void OnAfNotificationCAFPicture(enum aa_afstate noti);
486 void OnAfNotificationCAFVideo(enum aa_afstate noti);
487 void SetAfStateForService(int newState);
488 int GetAfStateForService();
13d8c7b4
SK
489 exif_attribute_t mExifInfo;
490 void *m_exynosPictureCSC;
9dd63e1f 491 void *m_exynosVideoCSC;
13d8c7b4 492
9dd63e1f 493 int m_jpegEncodingFrameCnt;
c15a6b00
JS
494
495 camera2_request_queue_src_ops_t *m_requestQueueOps;
496 camera2_frame_queue_dst_ops_t *m_frameQueueOps;
497 camera2_notify_callback m_notifyCb;
498 void *m_callbackCookie;
499
500 int m_numOfRemainingReqInSvc;
501 bool m_isRequestQueuePending;
13d8c7b4
SK
502 bool m_isRequestQueueNull;
503 camera2_device_t *m_halDevice;
504 static gralloc_module_t const* m_grallocHal;
c15a6b00 505
c15a6b00 506
13d8c7b4 507 camera_hw_info_t m_camera_info;
c15a6b00
JS
508
509 ion_client m_ionCameraClient;
510
13d8c7b4
SK
511 bool m_isSensorThreadOn;
512 bool m_isSensorStarted;
ad37861e 513 bool m_isIspStarted;
13d8c7b4 514
ad37861e 515 int m_need_streamoff;
13d8c7b4
SK
516
517 bool m_initFlag1;
518 bool m_initFlag2;
13d8c7b4
SK
519
520 int indexToQueue[3+1];
521 int m_fd_scp;
522
523 bool m_scp_flushing;
524 bool m_closing;
525 ExynosBuffer m_resizeBuf;
9dd63e1f
SK
526 bool m_recordingEnabled;
527 int m_previewOutput;
528 int m_recordOutput;
529 bool m_needsRecordBufferInit;
530 int lastFrameCnt;
9dd63e1f
SK
531 int m_cameraId;
532 bool m_scp_closing;
533 bool m_scp_closed;
15fd8231 534 bool m_wideAspect;
ad37861e
SK
535
536 mutable Mutex m_qbufLock;
537
0f26b20f
SK
538 int m_afState;
539 int m_afTriggerId;
540 enum aa_afmode m_afMode;
541 enum aa_afmode m_afMode2;
542 bool m_IsAfModeUpdateRequired;
543 bool m_IsAfTriggerRequired;
544 bool m_IsAfLockRequired;
545 int m_serviceAfState;
c15a6b00
JS
546};
547
548}; // namespace android
549
550#endif