libcsc: Add more csc methods from the hardkernel BSP
[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>
52f54308 40#include <utils/List.h>
c15a6b00
JS
41#include "SignalDrivenThread.h"
42#include "MetadataConverter.h"
43#include "exynos_v4l2.h"
13d8c7b4
SK
44#include "ExynosRect.h"
45#include "ExynosBuffer.h"
c15a6b00
JS
46#include "videodev2_exynos_camera.h"
47#include "gralloc_priv.h"
13d8c7b4 48#include "ExynosJpegEncoderForCamera.h"
c15a6b00
JS
49#include <fcntl.h>
50#include "fimc-is-metadata.h"
51#include "ion.h"
13d8c7b4
SK
52#include "ExynosExif.h"
53#include "csc.h"
daa1fcd6 54#include "ExynosCamera2.h"
eed7ed1b 55#include "cutils/properties.h"
c15a6b00
JS
56
57namespace android {
58
4aa4d739 59//#define EXYNOS_CAMERA_LOG
2adfa429 60#define ENABLE_FRAME_SYNC
c15a6b00
JS
61#define NODE_PREFIX "/dev/video"
62
63#define NUM_MAX_STREAM_THREAD (5)
1c5e692d 64#define NUM_MAX_REQUEST_MGR_ENTRY (5)
13d8c7b4
SK
65#define NUM_MAX_CAMERA_BUFFERS (16)
66#define NUM_BAYER_BUFFERS (8)
ac8c2060
SK
67#define NUM_SCC_BUFFERS (8)
68#define NUM_SCP_BUFFERS (8)
52f54308 69#define NUM_MIN_SENSOR_QBUF (3)
5506cebf 70#define NUM_MAX_SUBSTREAM (4)
13d8c7b4
SK
71
72#define PICTURE_GSC_NODE_NUM (2)
15fd8231 73#define VIDEO_GSC_NODE_NUM (1)
c15a6b00 74
37e122d5
SK
75#define STREAM_TYPE_DIRECT (0)
76#define STREAM_TYPE_INDIRECT (1)
77
13d8c7b4 78#define SIGNAL_MAIN_REQ_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<1)
5506cebf 79
13d8c7b4
SK
80#define SIGNAL_MAIN_STREAM_OUTPUT_DONE (SIGNAL_THREAD_COMMON_LAST<<3)
81#define SIGNAL_SENSOR_START_REQ_PROCESSING (SIGNAL_THREAD_COMMON_LAST<<4)
5506cebf 82
13d8c7b4 83#define SIGNAL_THREAD_RELEASE (SIGNAL_THREAD_COMMON_LAST<<8)
c15a6b00 84
5506cebf 85#define SIGNAL_STREAM_REPROCESSING_START (SIGNAL_THREAD_COMMON_LAST<<14)
c15a6b00
JS
86#define SIGNAL_STREAM_DATA_COMING (SIGNAL_THREAD_COMMON_LAST<<15)
87
0f26b20f
SK
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)
13d8c7b4 97
5506cebf
SK
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)
108
109#define STREAM_ID_JPEG_REPROCESS (8)
110#define STREAM_ID_LAST STREAM_ID_JPEG_REPROCESS
111
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)
114
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)
120
041f38de
SK
121#define SIG_WAITING_TICK (5000)
122
4aa4d739
C
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__))
128#else
129#define CAM_LOGV(...) ((void)0)
130#define CAM_LOGD(...) ((void)0)
131#define CAM_LOGW(...) ((void)0)
132#define CAM_LOGE(...) ((void)0)
133#endif
134
c15a6b00
JS
135enum sensor_name {
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,
141 SENSOR_NAME_END
142};
143
15fd8231
SK
144enum 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,
150 ISS_SUB_END
151};
c15a6b00 152
e117f756
YJ
153enum is_set_flash_command_state {
154 IS_FLASH_STATE_NONE = 0,
155 IS_FLASH_STATE_ON = 1,
156 IS_FLASH_STATE_ON_WAIT,
157 IS_FLASH_STATE_ON_DONE,
158 IS_FLASH_STATE_AUTO_AE_AWB_LOCK,
159 IS_FLASH_STATE_AE_AWB_LOCK_WAIT,
160 IS_FLASH_STATE_AUTO_WAIT,
161 IS_FLASH_STATE_AUTO_DONE,
162 IS_FLASH_STATE_AUTO_OFF,
163 IS_FLASH_STATE_CAPTURE,
164 IS_FLASH_STATE_CAPTURE_WAIT,
165 IS_FLASH_STATE_CAPTURE_JPEG,
166 IS_FLASH_STATE_CAPTURE_END,
167 IS_FALSH_STATE_MAX
6f19b6cf
YJ
168};
169
53f62ad9
YJ
170enum is_set_command_state {
171 IS_COMMAND_NONE = 0,
172 IS_COMMAND_EXECUTION,
173 IS_COMMAND_CLEAR,
174 IS_COMMAND_MAX
175};
176
c15a6b00
JS
177typedef struct node_info {
178 int fd;
179 int width;
180 int height;
181 int format;
182 int planes;
183 int buffers;
c15a6b00
JS
184 enum v4l2_memory memory;
185 enum v4l2_buf_type type;
be494d19 186 ExynosBuffer buffer[NUM_MAX_CAMERA_BUFFERS];
15fd8231 187 int status;
c15a6b00
JS
188} node_info_t;
189
190
191typedef struct camera_hw_info {
192 int sensor_id;
193
194 node_info_t sensor;
13d8c7b4
SK
195 node_info_t isp;
196 node_info_t capture;
5506cebf 197 node_info_t scp;
13d8c7b4
SK
198
199 /*shot*/ // temp
200 struct camera2_shot_ext dummy_shot;
c15a6b00 201
c15a6b00
JS
202} camera_hw_info_t;
203
13d8c7b4 204typedef enum request_entry_status {
c15a6b00
JS
205 EMPTY,
206 REGISTERED,
be494d19 207 REQUESTED,
2adfa429 208 CAPTURED,
f9a06609
SK
209 METADONE,
210 COMPLETED
c15a6b00
JS
211} request_entry_status_t;
212
213typedef struct request_manager_entry {
13d8c7b4 214 request_entry_status_t status;
13d8c7b4 215 camera_metadata_t *original_request;
be494d19 216 struct camera2_shot_ext internal_shot;
13d8c7b4 217 int output_stream_count;
c15a6b00
JS
218} request_manager_entry_t;
219
9a710a45 220// structure related to a specific function of camera
4a9565ae
YJ
221typedef struct af_control_info {
222 int m_afTriggerTimeOut;
223} ctl_af_info_t;
224
9a710a45
YJ
225typedef struct flash_control_info {
226 // UI flash mode indicator
227 enum aa_aemode i_flashMode;
228 // AF flash
229 bool m_afFlashDoneFlg;
9a710a45
YJ
230 // Capture flash
231 bool m_flashEnableFlg;
9a710a45
YJ
232 int m_flashFrameCount;
233 int m_flashCnt;
234 int m_flashTimeOut;
caea49e6
YJ
235 // Flash decision
236 // At flash auto mode only : 1 -> flash is needed, 0 -> normal case
237 bool m_flashDecisionResult;
238 // torch indicator. this will be replaced by flashMode meta
239 bool m_flashTorchMode;
e117f756
YJ
240 // for precapture metering
241 int m_precaptureState;
242 int m_precaptureTriggerId;
9a710a45
YJ
243} ctl_flash_info_t;
244
73f5ad60
YJ
245typedef struct ae_control_info {
246 // pre-capture notification state
247 enum ae_state aeStateNoti;
248} ctl_ae_info_t;
249
275c9744
YJ
250typedef struct scene_control_info {
251 // pre-capture notification state
252 enum aa_scene_mode prevSceneMode;
253} ctl_scene_info_t;
254
9a710a45
YJ
255typedef struct request_control_info {
256 ctl_flash_info_t flash;
73f5ad60 257 ctl_ae_info_t ae;
4a9565ae 258 ctl_af_info_t af;
275c9744 259 ctl_scene_info_t scene;
9a710a45
YJ
260} ctl_request_info_t;
261
c15a6b00
JS
262class RequestManager {
263public:
264 RequestManager(SignalDrivenThread* main_thread);
265 ~RequestManager();
2adfa429 266 void ResetEntry();
c15a6b00
JS
267 int GetNumEntries();
268 bool IsRequestQueueFull();
13d8c7b4 269
ca714238 270 void RegisterRequest(camera_metadata_t *new_request, int * afMode, uint32_t * afRegion);
13d8c7b4
SK
271 void DeregisterRequest(camera_metadata_t **deregistered_request);
272 bool PrepareFrame(size_t *num_entries, size_t *frame_size,
0f26b20f 273 camera_metadata_t **prepared_frame, int afState);
ca714238 274 int MarkProcessingRequest(ExynosBuffer * buf);
2adfa429 275 void NotifyStreamOutput(int frameCnt);
ad37861e 276 void ApplyDynamicMetadata(struct camera2_shot_ext *shot_ext);
13d8c7b4 277 void CheckCompleted(int index);
53f62ad9 278 void UpdateIspParameters(struct camera2_shot_ext *shot_ext, int frameCnt, ctl_request_info_t *ctl_info);
9dd63e1f 279 void RegisterTimestamp(int frameCnt, nsecs_t *frameTime);
5506cebf
SK
280 nsecs_t GetTimestampByFrameCnt(int frameCnt);
281 nsecs_t GetTimestamp(int index);
2f4d175d
SK
282 uint8_t GetOutputStreamByFrameCnt(int frameCnt);
283 uint8_t GetOutputStream(int index);
69d1e6e9
SK
284 camera2_shot_ext * GetInternalShotExtByFrameCnt(int frameCnt);
285 camera2_shot_ext * GetInternalShotExt(int index);
492a2506 286 int FindFrameCnt(struct camera2_shot_ext * shot_ext, bool drain);
5c88d1f2 287 bool IsVdisEnable(void);
9dd63e1f 288 int FindEntryIndexByFrameCnt(int frameCnt);
b5237e6b
SK
289 void Dump(void);
290 int GetNextIndex(int index);
f9a06609 291 int GetPrevIndex(int index);
b5237e6b
SK
292 void SetDefaultParameters(int cropX);
293 void SetInitialSkip(int count);
ad37861e 294 int GetSkipCnt();
f9a06609 295 int GetCompletedIndex();
041f38de
SK
296 void pushSensorQ(int index);
297 int popSensorQ();
298 void releaseSensorQ();
a3bcc37b
AR
299
300 bool m_vdisEnable;
301
c15a6b00
JS
302private:
303
304 MetadataConverter *m_metadataConverter;
305 SignalDrivenThread *m_mainThread;
1264ab16 306 Mutex m_numOfEntriesLock;
c15a6b00
JS
307 int m_numOfEntries;
308 int m_entryInsertionIndex;
309 int m_entryProcessingIndex;
310 int m_entryFrameOutputIndex;
311 request_manager_entry_t entries[NUM_MAX_REQUEST_MGR_ENTRY];
13d8c7b4 312 int m_completedIndex;
c15a6b00
JS
313
314 Mutex m_requestMutex;
315
316 //TODO : alloc dynamically
317 char m_tempFrameMetadataBuf[2000];
318 camera_metadata_t *m_tempFrameMetadata;
9dd63e1f 319
b5237e6b 320 int m_sensorPipelineSkipCnt;
9dd63e1f 321 int m_cropX;
041f38de 322 int m_lastCompletedFrameCnt;
2bdec060
SK
323 int m_lastAeMode;
324 int m_lastAaMode;
325 int m_lastAwbMode;
326 int m_lastAeComp;
5c88d1f2 327 bool m_vdisBubbleEn;
5506cebf 328 nsecs_t m_lastTimeStamp;
52f54308 329 List<int> m_sensorQ;
c15a6b00
JS
330};
331
9dd63e1f
SK
332
333typedef struct bayer_buf_entry {
334 int status;
335 int reqFrameCnt;
336 nsecs_t timeStamp;
337} bayer_buf_entry_t;
338
339
340class BayerBufManager {
341public:
342 BayerBufManager();
343 ~BayerBufManager();
344 int GetIndexForSensorEnqueue();
345 int MarkSensorEnqueue(int index);
346 int MarkSensorDequeue(int index, int reqFrameCnt, nsecs_t *timeStamp);
347 int GetIndexForIspEnqueue(int *reqFrameCnt);
348 int GetIndexForIspDequeue(int *reqFrameCnt);
349 int MarkIspEnqueue(int index);
350 int MarkIspDequeue(int index);
351 int GetNumOnSensor();
352 int GetNumOnHalFilled();
353 int GetNumOnIsp();
354
355private:
356 int GetNextIndex(int index);
357
358 int sensorEnqueueHead;
359 int sensorDequeueHead;
360 int ispEnqueueHead;
361 int ispDequeueHead;
362 int numOnSensor;
363 int numOnIsp;
364 int numOnHalFilled;
365 int numOnHalEmpty;
366
367 bayer_buf_entry_t entries[NUM_BAYER_BUFFERS];
368};
369
370
13d8c7b4
SK
371#define NOT_AVAILABLE (0)
372#define REQUIRES_DQ_FROM_SVC (1)
373#define ON_DRIVER (2)
374#define ON_HAL (3)
375#define ON_SERVICE (4)
376
377#define BAYER_NOT_AVAILABLE (0)
378#define BAYER_ON_SENSOR (1)
379#define BAYER_ON_HAL_FILLED (2)
380#define BAYER_ON_ISP (3)
381#define BAYER_ON_SERVICE (4)
382#define BAYER_ON_HAL_EMPTY (5)
383
384typedef struct stream_parameters {
5506cebf
SK
385 uint32_t width;
386 uint32_t height;
387 int format;
c15a6b00
JS
388 const camera2_stream_ops_t* streamOps;
389 uint32_t usage;
13d8c7b4
SK
390 int numHwBuffers;
391 int numSvcBuffers;
be494d19 392 int numOwnSvcBuffers;
5506cebf 393 int planes;
feb7df4c 394 int metaPlanes;
be494d19 395 int numSvcBufsInHal;
13d8c7b4
SK
396 buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
397 ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS];
5506cebf 398 ExynosBuffer metaBuffers[NUM_MAX_CAMERA_BUFFERS];
13d8c7b4 399 int svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
5506cebf
SK
400 int bufIndex;
401 node_info_t *node;
402 int minUndequedBuffer;
bf96172c 403 bool needsIonMap;
c15a6b00
JS
404} stream_parameters_t;
405
5506cebf
SK
406typedef struct substream_parameters {
407 int type;
408 uint32_t width;
409 uint32_t height;
410 int format;
9dd63e1f
SK
411 const camera2_stream_ops_t* streamOps;
412 uint32_t usage;
413 int numSvcBuffers;
be494d19 414 int numOwnSvcBuffers;
74d78ebe
SK
415 int internalFormat;
416 int internalPlanes;
74d78ebe
SK
417 int svcPlanes;
418 buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
419 ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS];
420 int svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
421 int svcBufIndex;
422 int numSvcBufsInHal;
5506cebf
SK
423 bool needBufferInit;
424 int minUndequedBuffer;
425} substream_parameters_t;
426
427typedef struct substream_entry {
428 int priority;
429 int streamId;
430} substream_entry_t;
74d78ebe 431
c15a6b00
JS
432class ExynosCameraHWInterface2 : public virtual RefBase {
433public:
6044e509 434 ExynosCameraHWInterface2(int cameraId, camera2_device_t *dev, ExynosCamera2 * camera, int *openInvalid);
c15a6b00
JS
435 virtual ~ExynosCameraHWInterface2();
436
437 virtual void release();
13d8c7b4 438
c15a6b00
JS
439 inline int getCameraId() const;
440
441 virtual int setRequestQueueSrcOps(const camera2_request_queue_src_ops_t *request_src_ops);
442 virtual int notifyRequestQueueNotEmpty();
443 virtual int setFrameQueueDstOps(const camera2_frame_queue_dst_ops_t *frame_dst_ops);
444 virtual int getInProgressCount();
445 virtual int flushCapturesInProgress();
446 virtual int constructDefaultRequest(int request_template, camera_metadata_t **request);
13d8c7b4 447 virtual int allocateStream(uint32_t width, uint32_t height,
c15a6b00
JS
448 int format, const camera2_stream_ops_t *stream_ops,
449 uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers);
450 virtual int registerStreamBuffers(uint32_t stream_id, int num_buffers, buffer_handle_t *buffers);
451 virtual int releaseStream(uint32_t stream_id);
452 virtual int allocateReprocessStream(uint32_t width, uint32_t height,
453 uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,
454 uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers);
5506cebf
SK
455 virtual int allocateReprocessStreamFromStream(uint32_t output_stream_id,
456 const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id);
c15a6b00
JS
457 virtual int releaseReprocessStream(uint32_t stream_id);
458 virtual int triggerAction(uint32_t trigger_id, int ext1, int ext2);
459 virtual int setNotifyCallback(camera2_notify_callback notify_cb, void *user);
460 virtual int getMetadataVendorTagOps(vendor_tag_query_ops_t **ops);
461 virtual int dump(int fd);
462private:
13d8c7b4
SK
463class MainThread : public SignalDrivenThread {
464 ExynosCameraHWInterface2 *mHardware;
465 public:
466 MainThread(ExynosCameraHWInterface2 *hw):
467 SignalDrivenThread(),
053d38cf 468 mHardware(hw) { }
13d8c7b4 469 ~MainThread();
13d8c7b4 470 void threadFunctionInternal()
053d38cf 471 {
13d8c7b4
SK
472 mHardware->m_mainThreadFunc(this);
473 return;
474 }
475 void release(void);
15fd8231 476 bool m_releasing;
13d8c7b4 477 };
9dd63e1f 478
c15a6b00
JS
479 class SensorThread : public SignalDrivenThread {
480 ExynosCameraHWInterface2 *mHardware;
481 public:
482 SensorThread(ExynosCameraHWInterface2 *hw):
053d38cf 483 SignalDrivenThread(),
5506cebf 484 mHardware(hw) { }
13d8c7b4 485 ~SensorThread();
13d8c7b4 486 void threadFunctionInternal() {
c15a6b00
JS
487 mHardware->m_sensorThreadFunc(this);
488 return;
489 }
9dd63e1f 490 void release(void);
c15a6b00 491 //private:
15fd8231 492 bool m_releasing;
c15a6b00
JS
493 };
494
495 class StreamThread : public SignalDrivenThread {
496 ExynosCameraHWInterface2 *mHardware;
497 public:
498 StreamThread(ExynosCameraHWInterface2 *hw, uint8_t new_index):
053d38cf 499 SignalDrivenThread(),
c15a6b00
JS
500 mHardware(hw),
501 m_index(new_index) { }
13d8c7b4 502 ~StreamThread();
13d8c7b4 503 void threadFunctionInternal() {
c15a6b00
JS
504 mHardware->m_streamThreadFunc(this);
505 return;
506 }
13d8c7b4 507 void setParameter(stream_parameters_t * new_parameters);
5506cebf
SK
508 status_t attachSubStream(int stream_id, int priority);
509 status_t detachSubStream(int stream_id);
13d8c7b4
SK
510 void release(void);
511 int findBufferIndex(void * bufAddr);
5506cebf 512 int findBufferIndex(buffer_handle_t * bufHandle);
c15a6b00 513
13d8c7b4 514 uint8_t m_index;
9dd63e1f 515 bool m_activated;
13d8c7b4
SK
516 //private:
517 stream_parameters_t m_parameters;
9dd63e1f 518 stream_parameters_t *m_tempParameters;
5506cebf 519 substream_entry_t m_attachedSubStreams[NUM_MAX_SUBSTREAM];
13d8c7b4 520 bool m_isBufferInit;
b5237e6b 521 bool m_releasing;
5506cebf
SK
522 int streamType;
523 int m_numRegisteredStream;
13d8c7b4 524 };
c15a6b00
JS
525
526 sp<MainThread> m_mainThread;
527 sp<SensorThread> m_sensorThread;
13d8c7b4 528 sp<StreamThread> m_streamThreads[NUM_MAX_STREAM_THREAD];
5506cebf 529 substream_parameters_t m_subStreams[STREAM_ID_LAST+1];
13d8c7b4
SK
530
531
9dd63e1f 532
c15a6b00 533 RequestManager *m_requestManager;
9dd63e1f 534 BayerBufManager *m_BayerManager;
daa1fcd6 535 ExynosCamera2 *m_camera2;
c15a6b00
JS
536
537 void m_mainThreadFunc(SignalDrivenThread * self);
538 void m_sensorThreadFunc(SignalDrivenThread * self);
c15a6b00 539 void m_streamThreadFunc(SignalDrivenThread * self);
13d8c7b4
SK
540 void m_streamThreadInitialize(SignalDrivenThread * self);
541
5506cebf
SK
542 void m_streamFunc_direct(SignalDrivenThread *self);
543 void m_streamFunc_indirect(SignalDrivenThread *self);
86646da4
SK
544
545 void m_streamBufferInit(SignalDrivenThread *self);
546
5506cebf
SK
547 int m_runSubStreamFunc(StreamThread *selfThread, ExynosBuffer *srcImageBuf,
548 int stream_id, nsecs_t frameTimeStamp);
549 int m_jpegCreator(StreamThread *selfThread, ExynosBuffer *srcImageBuf, nsecs_t frameTimeStamp);
550 int m_recordCreator(StreamThread *selfThread, ExynosBuffer *srcImageBuf, nsecs_t frameTimeStamp);
551 int m_prvcbCreator(StreamThread *selfThread, ExynosBuffer *srcImageBuf, nsecs_t frameTimeStamp);
13d8c7b4
SK
552 void m_getAlignedYUVSize(int colorFormat, int w, int h,
553 ExynosBuffer *buf);
554 bool m_getRatioSize(int src_w, int src_h,
555 int dst_w, int dst_h,
556 int *crop_x, int *crop_y,
557 int *crop_w, int *crop_h,
558 int zoom);
559 int createIonClient(ion_client ionClient);
560 int deleteIonClient(ion_client ionClient);
13d8c7b4
SK
561
562 int allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum);
181e425e 563 int allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum, int cacheFlag);
13d8c7b4
SK
564 void freeCameraMemory(ExynosBuffer *buf, int iMemoryNum);
565 void initCameraMemory(ExynosBuffer *buf, int iMemoryNum);
566
567 void DumpInfoWithShot(struct camera2_shot_ext * shot_ext);
2d5e6ec2 568 bool m_checkThumbnailSize(int w, int h);
13d8c7b4
SK
569 bool yuv2Jpeg(ExynosBuffer *yuvBuf,
570 ExynosBuffer *jpegBuf,
571 ExynosRect *rect);
5506cebf 572 int InitializeISPChain();
ad37861e 573 void StartISP();
5506cebf 574 void StartSCCThread(bool threadExists);
0f26b20f
SK
575 int GetAfState();
576 void SetAfMode(enum aa_afmode afMode);
ca714238 577 void SetAfRegion(uint32_t * afRegion);
0f26b20f
SK
578 void OnAfTrigger(int id);
579 void OnAfTriggerAutoMacro(int id);
580 void OnAfTriggerCAFPicture(int id);
581 void OnAfTriggerCAFVideo(int id);
e117f756 582 void OnPrecaptureMeteringTriggerStart(int id);
0f26b20f
SK
583 void OnAfCancel(int id);
584 void OnAfCancelAutoMacro(int id);
585 void OnAfCancelCAFPicture(int id);
586 void OnAfCancelCAFVideo(int id);
73f5ad60
YJ
587 void OnPrecaptureMeteringNotificationISP();
588 void OnPrecaptureMeteringNotificationSensor();
0f26b20f
SK
589 void OnAfNotification(enum aa_afstate noti);
590 void OnAfNotificationAutoMacro(enum aa_afstate noti);
591 void OnAfNotificationCAFPicture(enum aa_afstate noti);
592 void OnAfNotificationCAFVideo(enum aa_afstate noti);
593 void SetAfStateForService(int newState);
594 int GetAfStateForService();
13d8c7b4 595 exif_attribute_t mExifInfo;
eed7ed1b
SK
596 void m_setExifFixedAttribute(void);
597 void m_setExifChangedAttribute(exif_attribute_t *exifInfo, ExynosRect *rect,
48728d49 598 camera2_shot_ext *currentEntry);
e117f756
YJ
599 void m_preCaptureSetter(struct camera2_shot_ext * shot_ext);
600 void m_preCaptureListenerSensor(struct camera2_shot_ext * shot_ext);
601 void m_preCaptureListenerISP(struct camera2_shot_ext * shot_ext);
cdd53a9f 602 void m_preCaptureAeState(struct camera2_shot_ext * shot_ext);
4a9565ae 603 void m_updateAfRegion(struct camera2_shot_ext * shot_ext);
8a3fc5dd 604 void m_afTrigger(struct camera2_shot_ext * shot_ext, int mode);
13d8c7b4 605 void *m_exynosPictureCSC;
9dd63e1f 606 void *m_exynosVideoCSC;
13d8c7b4 607
c15a6b00
JS
608
609 camera2_request_queue_src_ops_t *m_requestQueueOps;
610 camera2_frame_queue_dst_ops_t *m_frameQueueOps;
611 camera2_notify_callback m_notifyCb;
612 void *m_callbackCookie;
613
614 int m_numOfRemainingReqInSvc;
615 bool m_isRequestQueuePending;
13d8c7b4
SK
616 bool m_isRequestQueueNull;
617 camera2_device_t *m_halDevice;
618 static gralloc_module_t const* m_grallocHal;
c15a6b00 619
c15a6b00 620
13d8c7b4 621 camera_hw_info_t m_camera_info;
c15a6b00
JS
622
623 ion_client m_ionCameraClient;
624
ad37861e 625 bool m_isIspStarted;
13d8c7b4 626
ad37861e 627 int m_need_streamoff;
90e439c1
SK
628 ExynosBuffer m_sccLocalBuffer[NUM_MAX_CAMERA_BUFFERS];
629 bool m_sccLocalBufferValid;
13d8c7b4
SK
630
631 int indexToQueue[3+1];
13d8c7b4
SK
632
633 bool m_scp_flushing;
634 bool m_closing;
635 ExynosBuffer m_resizeBuf;
2f4d175d 636#ifndef ENABLE_FRAME_SYNC
5506cebf 637 int m_currentOutputStreams;
2f4d175d 638#endif
5506cebf 639 int m_currentReprocessOutStreams;
74d78ebe 640 ExynosBuffer m_previewCbBuf;
9dd63e1f
SK
641 int m_cameraId;
642 bool m_scp_closing;
643 bool m_scp_closed;
15fd8231 644 bool m_wideAspect;
ca714238 645 uint32_t currentAfRegion[4];
308291de 646 float m_zoomRatio;
ad37861e 647
5c88d1f2
C
648 int m_vdisBubbleCnt;
649 int m_vdisDupFrame;
5c88d1f2 650
5506cebf 651 mutable Mutex m_qbufLock;
32cf9401
SK
652 mutable Mutex m_jpegEncoderLock;
653 int m_jpegEncodingCount;
ca714238 654 mutable Mutex m_afModeTriggerLock;
ad37861e 655
f9a06609 656 bool m_scpForceSuspended;
0f26b20f
SK
657 int m_afState;
658 int m_afTriggerId;
659 enum aa_afmode m_afMode;
660 enum aa_afmode m_afMode2;
661 bool m_IsAfModeUpdateRequired;
662 bool m_IsAfTriggerRequired;
663 bool m_IsAfLockRequired;
664 int m_serviceAfState;
36c106c9 665 bool m_AfHwStateFailed;
8e2c2fdb
SK
666 int m_afPendingTriggerId;
667 int m_afModeWaitingCnt;
48728d49 668 struct camera2_shot_ext m_jpegMetadata;
b55ed664
SK
669 int m_scpOutputSignalCnt;
670 int m_scpOutputImageCnt;
a15b4e3f
SK
671 int m_nightCaptureCnt;
672 int m_nightCaptureFrameCnt;
572470e2 673 int m_lastSceneMode;
2d5e6ec2
SK
674 int m_thumbNailW;
675 int m_thumbNailH;
5506cebf
SK
676 int m_reprocessStreamId;
677 const camera2_stream_in_ops_t * m_reprocessOps;
678 int m_reprocessOutputStreamId;
679 int m_reprocessingFrameCnt;
9a710a45 680 ctl_request_info_t m_ctlInfo;
c15a6b00
JS
681};
682
683}; // namespace android
684
685#endif