3 ** Copyright 2008, The Android Open Source Project
4 ** Copyright 2012, Samsung Electronics Co. LTD
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
10 ** http://www.apache.org/licenses/LICENSE-2.0
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.
20 * \file ExynosCameraHWInterface2.h
21 * \brief header file for Android Camera API 2.0 HAL
22 * \author Sungjoong Kang(sj3.kang@samsung.com)
25 * <b>Revision History: </b>
26 * - 2012/05/31 : Sungjoong Kang(sj3.kang@samsung.com) \n
29 * - 2012/07/10 : Sungjoong Kang(sj3.kang@samsung.com) \n
34 #ifndef EXYNOS_CAMERA_HW_INTERFACE_2_H
35 #define EXYNOS_CAMERA_HW_INTERFACE_2_H
37 #include <hardware/camera2.h>
38 #include <camera/Camera.h>
39 #include <camera/CameraParameters.h>
40 #include <utils/List.h>
41 #include "SignalDrivenThread.h"
42 #include "MetadataConverter.h"
43 #include "exynos_v4l2.h"
44 #include "ExynosRect.h"
45 #include "ExynosBuffer.h"
46 #include "videodev2_exynos_camera.h"
47 #include "gralloc_priv.h"
48 #include "ExynosJpegEncoderForCamera.h"
50 #include "fimc-is-metadata.h"
52 #include "ExynosExif.h"
54 #include "ExynosCamera2.h"
55 #include "cutils/properties.h"
59 //#define EXYNOS_CAMERA_LOG
60 #define ENABLE_FRAME_SYNC
61 #define NODE_PREFIX "/dev/video"
63 #define NUM_MAX_STREAM_THREAD (5)
64 #define NUM_MAX_REQUEST_MGR_ENTRY (5)
65 #define NUM_MAX_CAMERA_BUFFERS (16)
66 #define NUM_BAYER_BUFFERS (8)
67 #define NUM_SCC_BUFFERS (8)
68 #define NUM_SCP_BUFFERS (8)
69 #define NUM_MIN_SENSOR_QBUF (3)
70 #define NUM_MAX_SUBSTREAM (4)
72 #define PICTURE_GSC_NODE_NUM (2)
73 #define VIDEO_GSC_NODE_NUM (1)
75 #define STREAM_TYPE_DIRECT (0)
76 #define STREAM_TYPE_INDIRECT (1)
78 #define SIGNAL_MAIN_REQ_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<1)
80 #define SIGNAL_MAIN_STREAM_OUTPUT_DONE (SIGNAL_THREAD_COMMON_LAST<<3)
81 #define SIGNAL_SENSOR_START_REQ_PROCESSING (SIGNAL_THREAD_COMMON_LAST<<4)
83 #define SIGNAL_THREAD_RELEASE (SIGNAL_THREAD_COMMON_LAST<<8)
85 #define SIGNAL_STREAM_REPROCESSING_START (SIGNAL_THREAD_COMMON_LAST<<14)
86 #define SIGNAL_STREAM_DATA_COMING (SIGNAL_THREAD_COMMON_LAST<<15)
88 #define NO_TRANSITION (0)
89 #define HAL_AFSTATE_INACTIVE (1)
90 #define HAL_AFSTATE_NEEDS_COMMAND (2)
91 #define HAL_AFSTATE_STARTED (3)
92 #define HAL_AFSTATE_SCANNING (4)
93 #define HAL_AFSTATE_LOCKED (5)
94 #define HAL_AFSTATE_FAILED (6)
95 #define HAL_AFSTATE_NEEDS_DETERMINATION (7)
96 #define HAL_AFSTATE_PASSIVE_FOCUSED (8)
98 #define STREAM_ID_PREVIEW (0)
99 #define STREAM_MASK_PREVIEW (1<<STREAM_ID_PREVIEW)
100 #define STREAM_ID_RECORD (1)
101 #define STREAM_MASK_RECORD (1<<STREAM_ID_RECORD)
102 #define STREAM_ID_PRVCB (2)
103 #define STREAM_MASK_PRVCB (1<<STREAM_ID_PRVCB)
104 #define STREAM_ID_JPEG (4)
105 #define STREAM_MASK_JPEG (1<<STREAM_ID_JPEG)
106 #define STREAM_ID_ZSL (5)
107 #define STREAM_MASK_ZSL (1<<STREAM_ID_ZSL)
109 #define STREAM_ID_JPEG_REPROCESS (8)
110 #define STREAM_ID_LAST STREAM_ID_JPEG_REPROCESS
112 #define MASK_OUTPUT_SCP (STREAM_MASK_PREVIEW|STREAM_MASK_RECORD|STREAM_MASK_PRVCB)
113 #define MASK_OUTPUT_SCC (STREAM_MASK_JPEG|STREAM_MASK_ZSL)
115 #define SUBSTREAM_TYPE_NONE (0)
116 #define SUBSTREAM_TYPE_JPEG (1)
117 #define SUBSTREAM_TYPE_RECORD (2)
118 #define SUBSTREAM_TYPE_PRVCB (3)
119 #define FLASH_STABLE_WAIT_TIMEOUT (10)
121 #define SIG_WAITING_TICK (5000)
123 #ifdef EXYNOS_CAMERA_LOG
124 #define CAM_LOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
125 #define CAM_LOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))
126 #define CAM_LOGW(...) ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__))
127 #define CAM_LOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__))
129 #define CAM_LOGV(...) ((void)0)
130 #define CAM_LOGD(...) ((void)0)
131 #define CAM_LOGW(...) ((void)0)
132 #define CAM_LOGE(...) ((void)0)
136 SENSOR_NAME_S5K3H2
= 1,
137 SENSOR_NAME_S5K6A3
= 2,
138 SENSOR_NAME_S5K4E5
= 3,
139 SENSOR_NAME_S5K3H7
= 4,
140 SENSOR_NAME_CUSTOM
= 5,
144 enum is_subscenario_id
{
145 ISS_SUB_SCENARIO_STILL
,
146 ISS_SUB_SCENARIO_VIDEO
,
147 ISS_SUB_SCENARIO_SCENE1
,
148 ISS_SUB_SCENARIO_SCENE2
,
149 ISS_SUB_SCENARIO_SCENE3
,
153 int SUPPORT_THUMBNAIL_REAR_SIZE
[][2] =
160 int SUPPORT_THUMBNAIL_FRONT_SIZE
[][2] =
168 enum is_set_flash_command_state
{
169 IS_FLASH_STATE_NONE
= 0,
170 IS_FLASH_STATE_ON
= 1,
171 IS_FLASH_STATE_ON_WAIT
,
172 IS_FLASH_STATE_ON_DONE
,
173 IS_FLASH_STATE_AUTO_AE_AWB_LOCK
,
174 IS_FLASH_STATE_AE_AWB_LOCK_WAIT
,
175 IS_FLASH_STATE_AUTO_WAIT
,
176 IS_FLASH_STATE_AUTO_DONE
,
177 IS_FLASH_STATE_AUTO_OFF
,
178 IS_FLASH_STATE_CAPTURE
,
179 IS_FLASH_STATE_CAPTURE_WAIT
,
180 IS_FLASH_STATE_CAPTURE_JPEG
,
181 IS_FLASH_STATE_CAPTURE_END
,
185 enum is_set_command_state
{
187 IS_COMMAND_EXECUTION
,
192 typedef struct node_info
{
199 enum v4l2_memory memory
;
200 enum v4l2_buf_type type
;
201 ExynosBuffer buffer
[NUM_MAX_CAMERA_BUFFERS
];
206 typedef struct camera_hw_info
{
215 struct camera2_shot_ext dummy_shot
;
219 typedef enum request_entry_status
{
226 } request_entry_status_t
;
228 typedef struct request_manager_entry
{
229 request_entry_status_t status
;
230 camera_metadata_t
*original_request
;
231 struct camera2_shot_ext internal_shot
;
232 int output_stream_count
;
233 } request_manager_entry_t
;
235 // structure related to a specific function of camera
236 typedef struct af_control_info
{
237 int m_afTriggerTimeOut
;
240 typedef struct flash_control_info
{
241 // UI flash mode indicator
242 enum aa_aemode i_flashMode
;
244 bool m_afFlashDoneFlg
;
246 bool m_flashEnableFlg
;
247 int m_flashFrameCount
;
251 // At flash auto mode only : 1 -> flash is needed, 0 -> normal case
252 bool m_flashDecisionResult
;
253 // torch indicator. this will be replaced by flashMode meta
254 bool m_flashTorchMode
;
255 // for precapture metering
256 int m_precaptureState
;
257 int m_precaptureTriggerId
;
260 typedef struct ae_control_info
{
261 // pre-capture notification state
262 enum ae_state aeStateNoti
;
265 typedef struct scene_control_info
{
266 // pre-capture notification state
267 enum aa_scene_mode prevSceneMode
;
270 typedef struct request_control_info
{
271 ctl_flash_info_t flash
;
274 ctl_scene_info_t scene
;
275 } ctl_request_info_t
;
277 class RequestManager
{
279 RequestManager(SignalDrivenThread
* main_thread
);
283 bool IsRequestQueueFull();
285 void RegisterRequest(camera_metadata_t
*new_request
, int * afMode
, uint32_t * afRegion
);
286 void DeregisterRequest(camera_metadata_t
**deregistered_request
);
287 bool PrepareFrame(size_t *num_entries
, size_t *frame_size
,
288 camera_metadata_t
**prepared_frame
, int afState
);
289 int MarkProcessingRequest(ExynosBuffer
* buf
);
290 void NotifyStreamOutput(int frameCnt
);
291 void ApplyDynamicMetadata(struct camera2_shot_ext
*shot_ext
);
292 void CheckCompleted(int index
);
293 void UpdateIspParameters(struct camera2_shot_ext
*shot_ext
, int frameCnt
, ctl_request_info_t
*ctl_info
);
294 void RegisterTimestamp(int frameCnt
, nsecs_t
*frameTime
);
295 nsecs_t
GetTimestampByFrameCnt(int frameCnt
);
296 nsecs_t
GetTimestamp(int index
);
297 uint8_t GetOutputStreamByFrameCnt(int frameCnt
);
298 uint8_t GetOutputStream(int index
);
299 camera2_shot_ext
* GetInternalShotExtByFrameCnt(int frameCnt
);
300 camera2_shot_ext
* GetInternalShotExt(int index
);
301 int FindFrameCnt(struct camera2_shot_ext
* shot_ext
);
302 bool IsVdisEnable(void);
303 int FindEntryIndexByFrameCnt(int frameCnt
);
305 int GetNextIndex(int index
);
306 int GetPrevIndex(int index
);
307 void SetDefaultParameters(int cropX
);
308 void SetInitialSkip(int count
);
310 int GetCompletedIndex();
311 void pushSensorQ(int index
);
313 void releaseSensorQ();
319 MetadataConverter
*m_metadataConverter
;
320 SignalDrivenThread
*m_mainThread
;
321 Mutex m_numOfEntriesLock
;
323 int m_entryInsertionIndex
;
324 int m_entryProcessingIndex
;
325 int m_entryFrameOutputIndex
;
326 request_manager_entry_t entries
[NUM_MAX_REQUEST_MGR_ENTRY
];
327 int m_completedIndex
;
329 Mutex m_requestMutex
;
331 //TODO : alloc dynamically
332 char m_tempFrameMetadataBuf
[2000];
333 camera_metadata_t
*m_tempFrameMetadata
;
335 int m_sensorPipelineSkipCnt
;
337 int m_lastCompletedFrameCnt
;
343 nsecs_t m_lastTimeStamp
;
348 typedef struct bayer_buf_entry
{
355 class BayerBufManager
{
359 int GetIndexForSensorEnqueue();
360 int MarkSensorEnqueue(int index
);
361 int MarkSensorDequeue(int index
, int reqFrameCnt
, nsecs_t
*timeStamp
);
362 int GetIndexForIspEnqueue(int *reqFrameCnt
);
363 int GetIndexForIspDequeue(int *reqFrameCnt
);
364 int MarkIspEnqueue(int index
);
365 int MarkIspDequeue(int index
);
366 int GetNumOnSensor();
367 int GetNumOnHalFilled();
371 int GetNextIndex(int index
);
373 int sensorEnqueueHead
;
374 int sensorDequeueHead
;
382 bayer_buf_entry_t entries
[NUM_BAYER_BUFFERS
];
386 #define NOT_AVAILABLE (0)
387 #define REQUIRES_DQ_FROM_SVC (1)
388 #define ON_DRIVER (2)
390 #define ON_SERVICE (4)
392 #define BAYER_NOT_AVAILABLE (0)
393 #define BAYER_ON_SENSOR (1)
394 #define BAYER_ON_HAL_FILLED (2)
395 #define BAYER_ON_ISP (3)
396 #define BAYER_ON_SERVICE (4)
397 #define BAYER_ON_HAL_EMPTY (5)
399 typedef struct stream_parameters
{
403 const camera2_stream_ops_t
* streamOps
;
407 int numOwnSvcBuffers
;
411 buffer_handle_t svcBufHandle
[NUM_MAX_CAMERA_BUFFERS
];
412 ExynosBuffer svcBuffers
[NUM_MAX_CAMERA_BUFFERS
];
413 ExynosBuffer metaBuffers
[NUM_MAX_CAMERA_BUFFERS
];
414 int svcBufStatus
[NUM_MAX_CAMERA_BUFFERS
];
417 int minUndequedBuffer
;
419 } stream_parameters_t
;
421 typedef struct substream_parameters
{
426 const camera2_stream_ops_t
* streamOps
;
429 int numOwnSvcBuffers
;
433 buffer_handle_t svcBufHandle
[NUM_MAX_CAMERA_BUFFERS
];
434 ExynosBuffer svcBuffers
[NUM_MAX_CAMERA_BUFFERS
];
435 int svcBufStatus
[NUM_MAX_CAMERA_BUFFERS
];
439 int minUndequedBuffer
;
440 } substream_parameters_t
;
442 typedef struct substream_entry
{
447 class ExynosCameraHWInterface2
: public virtual RefBase
{
449 ExynosCameraHWInterface2(int cameraId
, camera2_device_t
*dev
, ExynosCamera2
* camera
, int *openInvalid
);
450 virtual ~ExynosCameraHWInterface2();
452 virtual void release();
454 inline int getCameraId() const;
456 virtual int setRequestQueueSrcOps(const camera2_request_queue_src_ops_t
*request_src_ops
);
457 virtual int notifyRequestQueueNotEmpty();
458 virtual int setFrameQueueDstOps(const camera2_frame_queue_dst_ops_t
*frame_dst_ops
);
459 virtual int getInProgressCount();
460 virtual int flushCapturesInProgress();
461 virtual int constructDefaultRequest(int request_template
, camera_metadata_t
**request
);
462 virtual int allocateStream(uint32_t width
, uint32_t height
,
463 int format
, const camera2_stream_ops_t
*stream_ops
,
464 uint32_t *stream_id
, uint32_t *format_actual
, uint32_t *usage
, uint32_t *max_buffers
);
465 virtual int registerStreamBuffers(uint32_t stream_id
, int num_buffers
, buffer_handle_t
*buffers
);
466 virtual int releaseStream(uint32_t stream_id
);
467 virtual int allocateReprocessStream(uint32_t width
, uint32_t height
,
468 uint32_t format
, const camera2_stream_in_ops_t
*reprocess_stream_ops
,
469 uint32_t *stream_id
, uint32_t *consumer_usage
, uint32_t *max_buffers
);
470 virtual int allocateReprocessStreamFromStream(uint32_t output_stream_id
,
471 const camera2_stream_in_ops_t
*reprocess_stream_ops
, uint32_t *stream_id
);
472 virtual int releaseReprocessStream(uint32_t stream_id
);
473 virtual int triggerAction(uint32_t trigger_id
, int ext1
, int ext2
);
474 virtual int setNotifyCallback(camera2_notify_callback notify_cb
, void *user
);
475 virtual int getMetadataVendorTagOps(vendor_tag_query_ops_t
**ops
);
476 virtual int dump(int fd
);
478 class MainThread
: public SignalDrivenThread
{
479 ExynosCameraHWInterface2
*mHardware
;
481 MainThread(ExynosCameraHWInterface2
*hw
):
482 SignalDrivenThread(),
485 void threadFunctionInternal()
487 mHardware
->m_mainThreadFunc(this);
494 class SensorThread
: public SignalDrivenThread
{
495 ExynosCameraHWInterface2
*mHardware
;
497 SensorThread(ExynosCameraHWInterface2
*hw
):
498 SignalDrivenThread(),
501 void threadFunctionInternal() {
502 mHardware
->m_sensorThreadFunc(this);
510 class StreamThread
: public SignalDrivenThread
{
511 ExynosCameraHWInterface2
*mHardware
;
513 StreamThread(ExynosCameraHWInterface2
*hw
, uint8_t new_index
):
514 SignalDrivenThread(),
516 m_index(new_index
) { }
518 void threadFunctionInternal() {
519 mHardware
->m_streamThreadFunc(this);
522 void setParameter(stream_parameters_t
* new_parameters
);
523 status_t
attachSubStream(int stream_id
, int priority
);
524 status_t
detachSubStream(int stream_id
);
526 int findBufferIndex(void * bufAddr
);
527 int findBufferIndex(buffer_handle_t
* bufHandle
);
532 stream_parameters_t m_parameters
;
533 stream_parameters_t
*m_tempParameters
;
534 substream_entry_t m_attachedSubStreams
[NUM_MAX_SUBSTREAM
];
538 int m_numRegisteredStream
;
541 sp
<MainThread
> m_mainThread
;
542 sp
<SensorThread
> m_sensorThread
;
543 sp
<StreamThread
> m_streamThreads
[NUM_MAX_STREAM_THREAD
];
544 substream_parameters_t m_subStreams
[STREAM_ID_LAST
+1];
548 RequestManager
*m_requestManager
;
549 BayerBufManager
*m_BayerManager
;
550 ExynosCamera2
*m_camera2
;
552 void m_mainThreadFunc(SignalDrivenThread
* self
);
553 void m_sensorThreadFunc(SignalDrivenThread
* self
);
554 void m_streamThreadFunc(SignalDrivenThread
* self
);
555 void m_streamThreadInitialize(SignalDrivenThread
* self
);
557 void m_streamFunc_direct(SignalDrivenThread
*self
);
558 void m_streamFunc_indirect(SignalDrivenThread
*self
);
560 void m_streamBufferInit(SignalDrivenThread
*self
);
562 int m_runSubStreamFunc(StreamThread
*selfThread
, ExynosBuffer
*srcImageBuf
,
563 int stream_id
, nsecs_t frameTimeStamp
);
564 int m_jpegCreator(StreamThread
*selfThread
, ExynosBuffer
*srcImageBuf
, nsecs_t frameTimeStamp
);
565 int m_recordCreator(StreamThread
*selfThread
, ExynosBuffer
*srcImageBuf
, nsecs_t frameTimeStamp
);
566 int m_prvcbCreator(StreamThread
*selfThread
, ExynosBuffer
*srcImageBuf
, nsecs_t frameTimeStamp
);
567 void m_getAlignedYUVSize(int colorFormat
, int w
, int h
,
569 bool m_getRatioSize(int src_w
, int src_h
,
570 int dst_w
, int dst_h
,
571 int *crop_x
, int *crop_y
,
572 int *crop_w
, int *crop_h
,
574 int createIonClient(ion_client ionClient
);
575 int deleteIonClient(ion_client ionClient
);
577 int allocCameraMemory(ion_client ionClient
, ExynosBuffer
*buf
, int iMemoryNum
);
578 int allocCameraMemory(ion_client ionClient
, ExynosBuffer
*buf
, int iMemoryNum
, int cacheFlag
);
579 void freeCameraMemory(ExynosBuffer
*buf
, int iMemoryNum
);
580 void initCameraMemory(ExynosBuffer
*buf
, int iMemoryNum
);
582 void DumpInfoWithShot(struct camera2_shot_ext
* shot_ext
);
583 bool m_checkThumbnailSize(int w
, int h
);
584 bool yuv2Jpeg(ExynosBuffer
*yuvBuf
,
585 ExynosBuffer
*jpegBuf
,
587 int InitializeISPChain();
589 void StartSCCThread(bool threadExists
);
591 void SetAfMode(enum aa_afmode afMode
);
592 void SetAfRegion(uint32_t * afRegion
);
593 void OnAfTrigger(int id
);
594 void OnAfTriggerAutoMacro(int id
);
595 void OnAfTriggerCAFPicture(int id
);
596 void OnAfTriggerCAFVideo(int id
);
597 void OnPrecaptureMeteringTriggerStart(int id
);
598 void OnAfCancel(int id
);
599 void OnAfCancelAutoMacro(int id
);
600 void OnAfCancelCAFPicture(int id
);
601 void OnAfCancelCAFVideo(int id
);
602 void OnPrecaptureMeteringNotificationISP();
603 void OnPrecaptureMeteringNotificationSensor();
604 void OnAfNotification(enum aa_afstate noti
);
605 void OnAfNotificationAutoMacro(enum aa_afstate noti
);
606 void OnAfNotificationCAFPicture(enum aa_afstate noti
);
607 void OnAfNotificationCAFVideo(enum aa_afstate noti
);
608 void SetAfStateForService(int newState
);
609 int GetAfStateForService();
610 exif_attribute_t mExifInfo
;
611 void m_setExifFixedAttribute(void);
612 void m_setExifChangedAttribute(exif_attribute_t
*exifInfo
, ExynosRect
*rect
,
613 camera2_shot_ext
*currentEntry
);
614 void m_preCaptureSetter(struct camera2_shot_ext
* shot_ext
);
615 void m_preCaptureListenerSensor(struct camera2_shot_ext
* shot_ext
);
616 void m_preCaptureListenerISP(struct camera2_shot_ext
* shot_ext
);
617 void m_preCaptureAeState(struct camera2_shot_ext
* shot_ext
);
618 void m_updateAfRegion(struct camera2_shot_ext
* shot_ext
);
619 void m_afTrigger(struct camera2_shot_ext
* shot_ext
, int mode
);
620 void *m_exynosPictureCSC
;
621 void *m_exynosVideoCSC
;
624 camera2_request_queue_src_ops_t
*m_requestQueueOps
;
625 camera2_frame_queue_dst_ops_t
*m_frameQueueOps
;
626 camera2_notify_callback m_notifyCb
;
627 void *m_callbackCookie
;
629 int m_numOfRemainingReqInSvc
;
630 bool m_isRequestQueuePending
;
631 bool m_isRequestQueueNull
;
632 camera2_device_t
*m_halDevice
;
633 static gralloc_module_t
const* m_grallocHal
;
636 camera_hw_info_t m_camera_info
;
638 ion_client m_ionCameraClient
;
642 int m_need_streamoff
;
643 ExynosBuffer m_sccLocalBuffer
[NUM_MAX_CAMERA_BUFFERS
];
644 bool m_sccLocalBufferValid
;
646 int indexToQueue
[3+1];
650 ExynosBuffer m_resizeBuf
;
651 #ifndef ENABLE_FRAME_SYNC
652 int m_currentOutputStreams
;
654 int m_currentReprocessOutStreams
;
655 ExynosBuffer m_previewCbBuf
;
660 uint32_t currentAfRegion
[4];
666 mutable Mutex m_qbufLock
;
667 mutable Mutex m_jpegEncoderLock
;
668 int m_jpegEncodingCount
;
669 mutable Mutex m_afModeTriggerLock
;
671 bool m_scpForceSuspended
;
674 enum aa_afmode m_afMode
;
675 enum aa_afmode m_afMode2
;
676 bool m_IsAfModeUpdateRequired
;
677 bool m_IsAfTriggerRequired
;
678 bool m_IsAfLockRequired
;
679 int m_serviceAfState
;
680 bool m_AfHwStateFailed
;
681 int m_afPendingTriggerId
;
682 int m_afModeWaitingCnt
;
683 struct camera2_shot_ext m_jpegMetadata
;
684 int m_scpOutputSignalCnt
;
685 int m_scpOutputImageCnt
;
686 int m_nightCaptureCnt
;
687 int m_nightCaptureFrameCnt
;
691 int m_reprocessStreamId
;
692 const camera2_stream_in_ops_t
* m_reprocessOps
;
693 int m_reprocessOutputStreamId
;
694 int m_reprocessingFrameCnt
;
695 ctl_request_info_t m_ctlInfo
;
698 }; // namespace android