ExynosCameraHWInterface2.h revision 74d78ebea3d2d2bbcf46e7156d42f5e0450e3a9b
1c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin/*
2c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**
3c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Copyright 2008, The Android Open Source Project
4c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Copyright 2012, Samsung Electronics Co. LTD
5c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**
6c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Licensed under the Apache License, Version 2.0 (the "License");
7c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** you may not use this file except in compliance with the License.
8c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** You may obtain a copy of the License at
9c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**
10c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**     http://www.apache.org/licenses/LICENSE-2.0
11c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**
12c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Unless required by applicable law or agreed to in writing, software
13c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** distributed under the License is distributed on an "AS IS" BASIS,
14c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** See the License for the specific language governing permissions and
16c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** limitations under the License.
17c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin*/
18c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
19c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin/*!
20c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \file      ExynosCameraHWInterface2.h
21c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \brief     header file for Android Camera API 2.0 HAL
22c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \author    Sungjoong Kang(sj3.kang@samsung.com)
2313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang * \date      2012/07/10
24c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *
25c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * <b>Revision History: </b>
26c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * - 2012/05/31 : Sungjoong Kang(sj3.kang@samsung.com) \n
27c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *   Initial Release
2813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang  *
2913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang * - 2012/07/10 : Sungjoong Kang(sj3.kang@samsung.com) \n
3013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang *   2nd Release
3113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang *
32c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin */
3313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
34c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#ifndef EXYNOS_CAMERA_HW_INTERFACE_2_H
35c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define EXYNOS_CAMERA_HW_INTERFACE_2_H
36c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
37c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <hardware/camera2.h>
38c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <camera/Camera.h>
39c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <camera/CameraParameters.h>
40c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "SignalDrivenThread.h"
41c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "MetadataConverter.h"
42c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "exynos_v4l2.h"
4313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosRect.h"
4413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosBuffer.h"
45c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "videodev2_exynos_camera.h"
46c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "gralloc_priv.h"
4713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosJpegEncoderForCamera.h"
48c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <fcntl.h>
49c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "fimc-is-metadata.h"
50c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "ion.h"
5113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosExif.h"
5213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "csc.h"
53daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang#include "ExynosCamera2.h"
54eed7ed1bffb083b112a3366e740ebdc186203afaSungjoong Kang#include "cutils/properties.h"
55c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
56c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinnamespace android {
57c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
58feb7df4c2d6e953395eef7b4389ab2e142df9613Sungjoong Kang//#define ENABLE_FRAME_SYNC
59c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define NODE_PREFIX     "/dev/video"
60c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
61c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define NUM_MAX_STREAM_THREAD       (5)
6213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_MAX_REQUEST_MGR_ENTRY   (10)
63ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang#define NUM_MAX_DEQUEUED_REQUEST NUM_MAX_REQUEST_MGR_ENTRY
64c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define MAX_CAMERA_MEMORY_PLANE_NUM	(4)
6513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_MAX_CAMERA_BUFFERS      (16)
6613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_BAYER_BUFFERS           (8)
67b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang#define NUM_SENSOR_QBUF             (3)
6813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
6913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define PICTURE_GSC_NODE_NUM (2)
7015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang#define VIDEO_GSC_NODE_NUM (1)
71c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
7237e122d5da65e360abd566114cc30da7295358efSungjoong Kang#define STREAM_TYPE_DIRECT   (0)
7337e122d5da65e360abd566114cc30da7295358efSungjoong Kang#define STREAM_TYPE_INDIRECT (1)
7437e122d5da65e360abd566114cc30da7295358efSungjoong Kang
7513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_MAIN_REQ_Q_NOT_EMPTY             (SIGNAL_THREAD_COMMON_LAST<<1)
7613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_MAIN_REPROCESS_Q_NOT_EMPTY       (SIGNAL_THREAD_COMMON_LAST<<2)
7713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_MAIN_STREAM_OUTPUT_DONE          (SIGNAL_THREAD_COMMON_LAST<<3)
7813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_SENSOR_START_REQ_PROCESSING      (SIGNAL_THREAD_COMMON_LAST<<4)
79c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_GET_BUFFER                (SIGNAL_THREAD_COMMON_LAST<<5)
80c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_PUT_BUFFER                (SIGNAL_THREAD_COMMON_LAST<<6)
81c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_CHANGE_PARAMETER          (SIGNAL_THREAD_COMMON_LAST<<7)
8213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_THREAD_RELEASE                   (SIGNAL_THREAD_COMMON_LAST<<8)
8313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_ISP_START_BAYER_INPUT            (SIGNAL_THREAD_COMMON_LAST<<9)
849dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang#define SIGNAL_ISP_START_BAYER_DEQUEUE          (SIGNAL_THREAD_COMMON_LAST<<10)
85c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
86c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_DATA_COMING               (SIGNAL_THREAD_COMMON_LAST<<15)
87c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
880f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define NO_TRANSITION                   (0)
890f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_INACTIVE            (1)
900f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_NEEDS_COMMAND       (2)
910f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_STARTED             (3)
920f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_SCANNING            (4)
930f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_LOCKED              (5)
940f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_FAILED              (6)
950f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_NEEDS_DETERMINATION (7)
960f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_PASSIVE_FOCUSED     (8)
9713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
98c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinenum sensor_name {
99c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    SENSOR_NAME_S5K3H2  = 1,
100c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    SENSOR_NAME_S5K6A3  = 2,
101c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    SENSOR_NAME_S5K4E5  = 3,
102c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    SENSOR_NAME_S5K3H7  = 4,
103c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    SENSOR_NAME_CUSTOM  = 5,
104c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    SENSOR_NAME_END
105c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin};
106c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
10715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kangenum is_subscenario_id {
10815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang	ISS_SUB_SCENARIO_STILL,
10915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang	ISS_SUB_SCENARIO_VIDEO,
11015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang	ISS_SUB_SCENARIO_SCENE1,
11115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang	ISS_SUB_SCENARIO_SCENE2,
11215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang	ISS_SUB_SCENARIO_SCENE3,
11315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang	ISS_SUB_END
11415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang};
115c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
116c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct node_info {
117c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int fd;
118c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int width;
119c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int height;
120c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int format;
121c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int planes;
122c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int buffers;
123c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    enum v4l2_memory memory;
124c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    enum v4l2_buf_type type;
125be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    ion_client ionClient;
126be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    ExynosBuffer buffer[NUM_MAX_CAMERA_BUFFERS];
12715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang    int status;
128c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} node_info_t;
129c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
130c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
131c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct camera_hw_info {
132c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int sensor_id;
133c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
134c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    node_info_t sensor;
13513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    node_info_t isp;
13613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    node_info_t capture;
13713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
13813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    /*shot*/  // temp
13913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    struct camera2_shot_ext dummy_shot;
140c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
141c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} camera_hw_info_t;
142c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
14313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangtypedef enum request_entry_status {
144c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    EMPTY,
145c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    REGISTERED,
146be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    REQUESTED,
147be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    CAPTURED
148c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} request_entry_status_t;
149c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
150c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct request_manager_entry {
15113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    request_entry_status_t      status;
15213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    camera_metadata_t           *original_request;
153be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    struct camera2_shot_ext     internal_shot;
15413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    int                         output_stream_count;
15513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                         dynamic_meta_vaild;
156c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} request_manager_entry_t;
157c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
158c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinclass RequestManager {
159c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinpublic:
160c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    RequestManager(SignalDrivenThread* main_thread);
161c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    ~RequestManager();
162c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int     GetNumEntries();
163c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    bool    IsRequestQueueFull();
16413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
16513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void    RegisterRequest(camera_metadata_t *new_request);
16613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void    DeregisterRequest(camera_metadata_t **deregistered_request);
16713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool    PrepareFrame(size_t *num_entries, size_t *frame_size,
1680f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang                camera_metadata_t **prepared_frame, int afState);
1690f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    int     MarkProcessingRequest(ExynosBuffer * buf, int *afMode);
1709dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    void      NotifyStreamOutput(int frameCnt, int stream_id);
17113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void    DumpInfoWithIndex(int index);
172ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    void    ApplyDynamicMetadata(struct camera2_shot_ext *shot_ext);
17313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void    CheckCompleted(int index);
174ef6f83cab5a08acda2584cfbff2751325b5e435eSungjoong Kang    void    UpdateIspParameters(struct camera2_shot_ext *shot_ext, int frameCnt);
1759dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    void    RegisterTimestamp(int frameCnt, nsecs_t *frameTime);
1769dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    uint64_t  GetTimestamp(int frameCnt);
1779dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int     FindFrameCnt(struct camera2_shot_ext * shot_ext);
1789dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int     FindEntryIndexByFrameCnt(int frameCnt);
179b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang    void    Dump(void);
180b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang    int     GetNextIndex(int index);
181b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang    void    SetDefaultParameters(int cropX);
182b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang    void    SetInitialSkip(int count);
183ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    int     GetSkipCnt();
184ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    void    SetFrameIndex(int index);
185ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    int    GetFrameIndex();
186c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinprivate:
187c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
188c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    MetadataConverter               *m_metadataConverter;
189c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    SignalDrivenThread              *m_mainThread;
190c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int                             m_numOfEntries;
191c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int                             m_entryInsertionIndex;
192c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int                             m_entryProcessingIndex;
193c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int                             m_entryFrameOutputIndex;
194c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    request_manager_entry_t         entries[NUM_MAX_REQUEST_MGR_ENTRY];
19513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    int                             m_completedIndex;
196c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
197c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    Mutex                           m_requestMutex;
198c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
199c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    //TODO : alloc dynamically
200c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    char                            m_tempFrameMetadataBuf[2000];
201c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    camera_metadata_t               *m_tempFrameMetadata;
2029dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
203b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang    int                             m_sensorPipelineSkipCnt;
2049dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                             m_cropX;
205ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    int		         m_frameIndex;
2062bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    int                             m_lastAeMode;
2072bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    int                             m_lastAaMode;
2082bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    int                             m_lastAwbMode;
2092bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    int                             m_lastAeComp;
210c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin};
211c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
2129dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
2139dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangtypedef struct bayer_buf_entry {
2149dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int     status;
2159dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int     reqFrameCnt;
2169dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    nsecs_t timeStamp;
2179dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} bayer_buf_entry_t;
2189dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
2199dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
2209dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangclass BayerBufManager {
2219dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangpublic:
2229dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    BayerBufManager();
2239dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    ~BayerBufManager();
2249dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 GetIndexForSensorEnqueue();
2259dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 MarkSensorEnqueue(int index);
2269dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 MarkSensorDequeue(int index, int reqFrameCnt, nsecs_t *timeStamp);
2279dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 GetIndexForIspEnqueue(int *reqFrameCnt);
2289dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 GetIndexForIspDequeue(int *reqFrameCnt);
2299dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 MarkIspEnqueue(int index);
2309dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 MarkIspDequeue(int index);
2319dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 GetNumOnSensor();
2329dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 GetNumOnHalFilled();
2339dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 GetNumOnIsp();
2349dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
2359dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangprivate:
2369dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 GetNextIndex(int index);
2379dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
2389dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 sensorEnqueueHead;
2399dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 sensorDequeueHead;
2409dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 ispEnqueueHead;
2419dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 ispDequeueHead;
2429dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 numOnSensor;
2439dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 numOnIsp;
2449dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 numOnHalFilled;
2459dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 numOnHalEmpty;
2469dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
2479dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    bayer_buf_entry_t   entries[NUM_BAYER_BUFFERS];
2489dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang};
2499dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
2509dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
25113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NOT_AVAILABLE           (0)
25213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define REQUIRES_DQ_FROM_SVC    (1)
25313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_DRIVER               (2)
25413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_HAL                  (3)
25513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_SERVICE              (4)
25613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
25713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_NOT_AVAILABLE     (0)
25813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_SENSOR         (1)
25913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_HAL_FILLED     (2)
26013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_ISP            (3)
26113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_SERVICE        (4)
26213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_HAL_EMPTY      (5)
26313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
26413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangtypedef struct stream_parameters {
26513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            int                     streamType;
26613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            uint32_t                outputWidth;
26713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            uint32_t                outputHeight;
26813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            uint32_t                nodeWidth;
26913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            uint32_t                nodeHeight;
27013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            int                     outputFormat;
27113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            int                     nodeFormat;
272c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    const   camera2_stream_ops_t*   streamOps;
273c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            uint32_t                usage;
27413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            int                     numHwBuffers;
27513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            int                     numSvcBuffers;
276be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang            int                     numOwnSvcBuffers;
277c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            int                     fd;
27813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            int                     svcPlanes;
27913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            int                     nodePlanes;
280feb7df4c2d6e953395eef7b4389ab2e142df9613Sungjoong Kang            int                     metaPlanes;
28113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    enum v4l2_memory                memory;
28213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    enum v4l2_buf_type              halBuftype;
283be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang            int                     numSvcBufsInHal;
28413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            buffer_handle_t         svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
28513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            ExynosBuffer            svcBuffers[NUM_MAX_CAMERA_BUFFERS];
286feb7df4c2d6e953395eef7b4389ab2e142df9613Sungjoong Kang            ExynosBuffer        metaBuffers[NUM_MAX_CAMERA_BUFFERS];
28713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            int                     svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
288be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang            int                     svcBufIndex;
289be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang            ion_client              ionClient;
29013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            node_info_t             node;
291c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} stream_parameters_t;
292c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
2939dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangtypedef struct record_parameters {
2949dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            uint32_t                outputWidth;
2959dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            uint32_t                outputHeight;
2969dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            int                     outputFormat;
2979dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    const   camera2_stream_ops_t*   streamOps;
2989dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            uint32_t                usage;
2999dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            int                     numSvcBuffers;
300be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang            int                     numOwnSvcBuffers;
3019dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            int                     svcPlanes;
3029dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            buffer_handle_t         svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
3039dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            ExynosBuffer            svcBuffers[NUM_MAX_CAMERA_BUFFERS];
3049dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang            int                     svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
305be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang            int                     svcBufIndex;
306be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang            int                     numSvcBufsInHal;
3079dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} record_parameters_t;
30813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
30974d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kangtypedef struct callback_parameters {
31074d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            uint32_t                outputWidth;
31174d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            uint32_t                outputHeight;
31274d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     outputFormat;
31374d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     internalFormat;
31474d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     internalPlanes;
31574d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang    const   camera2_stream_ops_t*   streamOps;
31674d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            uint32_t                usage;
31774d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     numSvcBuffers;
31874d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     numOwnSvcBuffers;
31974d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     svcPlanes;
32074d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            buffer_handle_t         svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
32174d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            ExynosBuffer            svcBuffers[NUM_MAX_CAMERA_BUFFERS];
32274d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
32374d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     svcBufIndex;
32474d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang            int                     numSvcBufsInHal;
32574d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang} callback_parameters_t;
32674d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang
327c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinclass ExynosCameraHWInterface2 : public virtual RefBase {
328c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinpublic:
3296044e50955303fde3b50a2758df721b29addbd98Sungjoong Kang    ExynosCameraHWInterface2(int cameraId, camera2_device_t *dev, ExynosCamera2 * camera, int *openInvalid);
330c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual             ~ExynosCameraHWInterface2();
331c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
332c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual void        release();
33313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
334c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    inline  int         getCameraId() const;
335c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
336c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         setRequestQueueSrcOps(const camera2_request_queue_src_ops_t *request_src_ops);
337c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         notifyRequestQueueNotEmpty();
338c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         setFrameQueueDstOps(const camera2_frame_queue_dst_ops_t *frame_dst_ops);
339c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         getInProgressCount();
340c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         flushCapturesInProgress();
341c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         constructDefaultRequest(int request_template, camera_metadata_t **request);
34213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    virtual int         allocateStream(uint32_t width, uint32_t height,
343c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                                    int format, const camera2_stream_ops_t *stream_ops,
344c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                                    uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers);
345c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         registerStreamBuffers(uint32_t stream_id, int num_buffers, buffer_handle_t *buffers);
346c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         releaseStream(uint32_t stream_id);
347c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         allocateReprocessStream(uint32_t width, uint32_t height,
348c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                                    uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,
349c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                                    uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers);
350c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         releaseReprocessStream(uint32_t stream_id);
351c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         triggerAction(uint32_t trigger_id, int ext1, int ext2);
352c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         setNotifyCallback(camera2_notify_callback notify_cb, void *user);
353c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         getMetadataVendorTagOps(vendor_tag_query_ops_t **ops);
354c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    virtual int         dump(int fd);
355c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinprivate:
35613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangclass MainThread : public SignalDrivenThread {
35713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        ExynosCameraHWInterface2 *mHardware;
35813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    public:
35913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        MainThread(ExynosCameraHWInterface2 *hw):
36013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            SignalDrivenThread(),
36113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            mHardware(hw) {
36213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang//            Start("MainThread", PRIORITY_DEFAULT, 0);
36313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        }
36413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        ~MainThread();
36513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        status_t readyToRunInternal()
36613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang	{
36713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            return NO_ERROR;
36813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        }
36913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void threadFunctionInternal()
37013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang	{
37113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            mHardware->m_mainThreadFunc(this);
37213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            return;
37313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        }
37413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void        release(void);
37515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang        bool        m_releasing;
37613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    };
3779dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
378c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    class SensorThread : public SignalDrivenThread {
379c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        ExynosCameraHWInterface2 *mHardware;
380c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    public:
381c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        SensorThread(ExynosCameraHWInterface2 *hw):
382c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            SignalDrivenThread("SensorThread", PRIORITY_DEFAULT, 0),
383c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            mHardware(hw),
384c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            m_isBayerOutputEnabled(false) { }
38513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        ~SensorThread();
386c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        status_t readyToRunInternal() {
38713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            mHardware->m_sensorThreadInitialize(this);
388c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            return NO_ERROR;
389c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        }
39013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void threadFunctionInternal() {
391c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            mHardware->m_sensorThreadFunc(this);
392c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            return;
393c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        }
3949dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang        void            release(void);
395c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    //private:
396c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        bool            m_isBayerOutputEnabled;
397c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        int             m_sensorFd;
39815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang        bool            m_releasing;
39913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    };
40013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
40113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    class IspThread : public SignalDrivenThread {
40213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        ExynosCameraHWInterface2 *mHardware;
40313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    public:
40413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        IspThread(ExynosCameraHWInterface2 *hw):
40513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            SignalDrivenThread("IspThread", PRIORITY_DEFAULT, 0),
40613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            mHardware(hw) { }
40713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        ~IspThread();
40813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        status_t readyToRunInternal() {
40913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            mHardware->m_ispThreadInitialize(this);
41013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            return NO_ERROR;
41113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        }
41213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void threadFunctionInternal() {
41313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            mHardware->m_ispThreadFunc(this);
41413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            return;
41513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        }
41613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void            release(void);
41713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    //private:
418c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        int             m_ispFd;
41915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang        bool            m_releasing;
420c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    };
421c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
422c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    class StreamThread : public SignalDrivenThread {
423c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        ExynosCameraHWInterface2 *mHardware;
424c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    public:
425c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        StreamThread(ExynosCameraHWInterface2 *hw, uint8_t new_index):
426c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            SignalDrivenThread("StreamThread", PRIORITY_DEFAULT, 0),
427c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            mHardware(hw),
428c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            m_index(new_index) { }
42913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        ~StreamThread();
430c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        status_t readyToRunInternal() {
43113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            mHardware->m_streamThreadInitialize(this);
432c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            return NO_ERROR;
433c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        }
43413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void threadFunctionInternal() {
435c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            mHardware->m_streamThreadFunc(this);
436c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            return;
437c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        }
4389dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang        void        setRecordingParameter(record_parameters_t * recordParm);
43974d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang        void        setCallbackParameter(callback_parameters_t * callbackParm);
44013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void        setParameter(stream_parameters_t * new_parameters);
44113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void        applyChange(void);
44213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        void        release(void);
44313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        int         findBufferIndex(void * bufAddr);
444c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
445c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
44613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        uint8_t                         m_index;
4479dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang        bool                            m_activated;
44813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    //private:
44913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        stream_parameters_t             m_parameters;
4509dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang        stream_parameters_t             *m_tempParameters;
4519dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang        record_parameters_t             m_recordParameters;
45274d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang        callback_parameters_t           m_previewCbParameters;
45313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        bool                            m_isBufferInit;
454b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang        bool                            m_releasing;
45513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang     };
456c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
457c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    sp<MainThread>      m_mainThread;
458c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    sp<SensorThread>    m_sensorThread;
45913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    sp<IspThread>       m_ispThread;
46013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    sp<StreamThread>    m_streamThreads[NUM_MAX_STREAM_THREAD];
46113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
46213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
4639dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang
464c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    RequestManager      *m_requestManager;
4659dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    BayerBufManager     *m_BayerManager;
466daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang    ExynosCamera2       *m_camera2;
467c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
468c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    void                m_mainThreadFunc(SignalDrivenThread * self);
469c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    void                m_sensorThreadFunc(SignalDrivenThread * self);
47013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void                m_sensorThreadInitialize(SignalDrivenThread * self);
47113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void                m_ispThreadFunc(SignalDrivenThread * self);
47213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void                m_ispThreadInitialize(SignalDrivenThread * self);
473c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    void                m_streamThreadFunc(SignalDrivenThread * self);
47413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void                m_streamThreadInitialize(SignalDrivenThread * self);
47513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
47686646da4ec54337c658278271ee5cbfcde9165d6Sungjoong Kang    void                m_streamFunc0(SignalDrivenThread *self);
47786646da4ec54337c658278271ee5cbfcde9165d6Sungjoong Kang    void                m_streamFunc1(SignalDrivenThread *self);
47886646da4ec54337c658278271ee5cbfcde9165d6Sungjoong Kang
47986646da4ec54337c658278271ee5cbfcde9165d6Sungjoong Kang    void                m_streamBufferInit(SignalDrivenThread *self);
48086646da4ec54337c658278271ee5cbfcde9165d6Sungjoong Kang
48113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void                m_getAlignedYUVSize(int colorFormat, int w, int h,
48213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                                                ExynosBuffer *buf);
48313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                m_getRatioSize(int  src_w,  int   src_h,
48413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                                             int  dst_w,  int   dst_h,
48513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                                             int *crop_x, int *crop_y,
48613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                                             int *crop_w, int *crop_h,
48713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                                             int zoom);
48813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang	int				createIonClient(ion_client ionClient);
48913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang	int					deleteIonClient(ion_client ionClient);
49013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
49113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    int				allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum);
49213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang	void				freeCameraMemory(ExynosBuffer *buf, int iMemoryNum);
49313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang	void				initCameraMemory(ExynosBuffer *buf, int iMemoryNum);
49413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
49513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void            DumpInfoWithShot(struct camera2_shot_ext * shot_ext);
49613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool            yuv2Jpeg(ExynosBuffer *yuvBuf,
49713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                            ExynosBuffer *jpegBuf,
49813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                            ExynosRect *rect);
4996044e50955303fde3b50a2758df721b29addbd98Sungjoong Kang    int            InitializeISPChain();
500ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    void            StartISP();
5010f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    int             GetAfState();
5020f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            SetAfMode(enum aa_afmode afMode);
5038e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang    void            OnAfTriggerStart(int id);
5040f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfTrigger(int id);
5050f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfTriggerAutoMacro(int id);
5060f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfTriggerCAFPicture(int id);
5070f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfTriggerCAFVideo(int id);
5080f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfCancel(int id);
5090f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfCancelAutoMacro(int id);
5100f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfCancelCAFPicture(int id);
5110f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfCancelCAFVideo(int id);
5120f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfNotification(enum aa_afstate noti);
5130f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfNotificationAutoMacro(enum aa_afstate noti);
5140f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfNotificationCAFPicture(enum aa_afstate noti);
5150f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            OnAfNotificationCAFVideo(enum aa_afstate noti);
5160f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    void            SetAfStateForService(int newState);
5170f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    int             GetAfStateForService();
51813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    exif_attribute_t    mExifInfo;
519eed7ed1bffb083b112a3366e740ebdc186203afaSungjoong Kang    void            m_setExifFixedAttribute(void);
520eed7ed1bffb083b112a3366e740ebdc186203afaSungjoong Kang    void            m_setExifChangedAttribute(exif_attribute_t *exifInfo, ExynosRect *rect,
521eed7ed1bffb083b112a3366e740ebdc186203afaSungjoong Kang                         camera2_shot *currentEntry);
52213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    void               *m_exynosPictureCSC;
5239dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    void               *m_exynosVideoCSC;
52413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
5259dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                 m_jpegEncodingFrameCnt;
526c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
527c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    camera2_request_queue_src_ops_t     *m_requestQueueOps;
528c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    camera2_frame_queue_dst_ops_t       *m_frameQueueOps;
529c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    camera2_notify_callback             m_notifyCb;
530c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    void                                *m_callbackCookie;
531c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
532c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    int                                 m_numOfRemainingReqInSvc;
533c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    bool                                m_isRequestQueuePending;
53413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                                m_isRequestQueueNull;
53513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    camera2_device_t                    *m_halDevice;
53613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    static gralloc_module_t const*      m_grallocHal;
537c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
538c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
53913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    camera_hw_info_t                     m_camera_info;
540c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
541c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin	ion_client m_ionCameraClient;
542c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
54313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                                m_isSensorThreadOn;
54413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                                m_isSensorStarted;
545ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    bool                                m_isIspStarted;
54613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
547ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    int                                 m_need_streamoff;
54813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
54913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                                m_initFlag1;
55013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                                m_initFlag2;
55113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
55213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    int                                 indexToQueue[3+1];
55313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    int                                 m_fd_scp;
55413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang
55513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                                m_scp_flushing;
55613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    bool                                m_closing;
55713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang    ExynosBuffer                        m_resizeBuf;
5589dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    bool                                m_recordingEnabled;
5599dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                                 m_previewOutput;
5609dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                                 m_recordOutput;
5619dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    bool                                m_needsRecordBufferInit;
56274d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang    ExynosBuffer                        m_previewCbBuf;
56374d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang    int                                 m_previewCbEnabled;
56474d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang    int                                 m_previewCbOutput;
56574d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang    bool                                m_needsPreviewCbBufferInit;
5669dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int                                 lastFrameCnt;
5679dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    int             				    m_cameraId;
5689dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    bool                                m_scp_closing;
5699dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang    bool                                m_scp_closed;
57015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang    bool                                m_wideAspect;
5718e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang    uint32_t                            lastAfRegion[4];
572ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang
573ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang    mutable Mutex    m_qbufLock;
574ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang
5750f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    int                                 m_afState;
5760f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    int                                 m_afTriggerId;
5770f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    enum aa_afmode                      m_afMode;
5780f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    enum aa_afmode                      m_afMode2;
5790f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    bool                                m_IsAfModeUpdateRequired;
5800f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    bool                                m_IsAfTriggerRequired;
5810f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    bool                                m_IsAfLockRequired;
5820f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang    int                                 m_serviceAfState;
58336c106c906c67fec0d0b36e2e967312ce99dcc9eSungjoong Kang    bool                                m_AfHwStateFailed;
5848e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang    int                                 m_afPendingTriggerId;
5858e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang    int                                 m_afModeWaitingCnt;
586eed7ed1bffb083b112a3366e740ebdc186203afaSungjoong Kang    struct camera2_shot                 m_jpegMetadata;
587a15b4e3ffb3e1822af22ccbfab876c3b0e2dbf08Sungjoong Kang    int                                 m_nightCaptureCnt;
588a15b4e3ffb3e1822af22ccbfab876c3b0e2dbf08Sungjoong Kang    int                                 m_nightCaptureFrameCnt;
589c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin};
590c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
591c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; // namespace android
592c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
593c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#endif
594