blob: 8a9c5a3ea250013073d6b8fc2f235307f36d49c4 [file] [log] [blame]
Jiyoung Shinc15a6b02012-06-05 01:08:14 -07001/*
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)
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090023 * \date 2012/07/10
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070024 *
25 * <b>Revision History: </b>
26 * - 2012/05/31 : Sungjoong Kang(sj3.kang@samsung.com) \n
27 * Initial Release
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090028 *
29 * - 2012/07/10 : Sungjoong Kang(sj3.kang@samsung.com) \n
30 * 2nd Release
31 *
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070032 */
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090033
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070034#ifndef EXYNOS_CAMERA_HW_INTERFACE_2_H
35#define EXYNOS_CAMERA_HW_INTERFACE_2_H
36
37#include <hardware/camera2.h>
38#include <camera/Camera.h>
39#include <camera/CameraParameters.h>
40#include "SignalDrivenThread.h"
41#include "MetadataConverter.h"
42#include "exynos_v4l2.h"
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090043#include "ExynosRect.h"
44#include "ExynosBuffer.h"
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070045#include "videodev2_exynos_camera.h"
46#include "gralloc_priv.h"
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090047#include "ExynosJpegEncoderForCamera.h"
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070048#include <fcntl.h>
49#include "fimc-is-metadata.h"
50#include "ion.h"
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090051#include "ExynosExif.h"
52#include "csc.h"
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070053
54namespace android {
55
56
57#define NODE_PREFIX "/dev/video"
58
59#define NUM_MAX_STREAM_THREAD (5)
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090060#define NUM_MAX_DEQUEUED_REQUEST (8)
61/* #define NUM_MAX_REQUEST_MGR_ENTRY NUM_MAX_DEQUEUED_REQUEST */
62#define NUM_MAX_REQUEST_MGR_ENTRY (10)
63/* #define NUM_OF_STREAM_BUF (15) */
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070064#define MAX_CAMERA_MEMORY_PLANE_NUM (4)
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090065#define NUM_MAX_CAMERA_BUFFERS (16)
66#define NUM_BAYER_BUFFERS (8)
67#define SHOT_FRAME_DELAY (3)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070068
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090069#define PICTURE_GSC_NODE_NUM (2)
70
71#define SIGNAL_MAIN_REQ_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<1)
72#define SIGNAL_MAIN_REPROCESS_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<2)
73#define SIGNAL_MAIN_STREAM_OUTPUT_DONE (SIGNAL_THREAD_COMMON_LAST<<3)
74#define SIGNAL_SENSOR_START_REQ_PROCESSING (SIGNAL_THREAD_COMMON_LAST<<4)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070075#define SIGNAL_STREAM_GET_BUFFER (SIGNAL_THREAD_COMMON_LAST<<5)
76#define SIGNAL_STREAM_PUT_BUFFER (SIGNAL_THREAD_COMMON_LAST<<6)
77#define SIGNAL_STREAM_CHANGE_PARAMETER (SIGNAL_THREAD_COMMON_LAST<<7)
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090078#define SIGNAL_THREAD_RELEASE (SIGNAL_THREAD_COMMON_LAST<<8)
79#define SIGNAL_ISP_START_BAYER_INPUT (SIGNAL_THREAD_COMMON_LAST<<9)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070080
81#define SIGNAL_STREAM_DATA_COMING (SIGNAL_THREAD_COMMON_LAST<<15)
82
83
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090084
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070085enum sensor_name {
86 SENSOR_NAME_S5K3H2 = 1,
87 SENSOR_NAME_S5K6A3 = 2,
88 SENSOR_NAME_S5K4E5 = 3,
89 SENSOR_NAME_S5K3H7 = 4,
90 SENSOR_NAME_CUSTOM = 5,
91 SENSOR_NAME_END
92};
93
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090094/*
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070095typedef struct exynos_camera_memory {
96 ion_buffer ionBuffer[MAX_CAMERA_MEMORY_PLANE_NUM];
97 char *virBuffer[MAX_CAMERA_MEMORY_PLANE_NUM];
98 int size[MAX_CAMERA_MEMORY_PLANE_NUM];
99} exynos_camera_memory_t;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900100*/
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700101
102typedef struct node_info {
103 int fd;
104 int width;
105 int height;
106 int format;
107 int planes;
108 int buffers;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900109 //int currentBufferIndex;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700110 enum v4l2_memory memory;
111 enum v4l2_buf_type type;
112 ion_client ionClient;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900113 ExynosBuffer buffer[NUM_MAX_CAMERA_BUFFERS];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700114} node_info_t;
115
116
117typedef struct camera_hw_info {
118 int sensor_id;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900119 //int sensor_frame_count; // includes bubble
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700120
121 node_info_t sensor;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900122 node_info_t isp;
123 node_info_t capture;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700124
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900125 /*shot*/ // temp
126 struct camera2_shot_ext dummy_shot;
127
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700128} camera_hw_info_t;
129
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900130typedef enum request_entry_status {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700131 EMPTY,
132 REGISTERED,
133 PROCESSING
134} request_entry_status_t;
135
136typedef struct request_manager_entry {
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900137 request_entry_status_t status;
138 //int id;
139 camera_metadata_t *original_request;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700140 // TODO : allocate memory dynamically
141 // camera2_ctl_metadata_t *internal_request;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900142 camera2_ctl_metadata_NEW_t internal_shot;
143 int output_stream_count;
144 bool dynamic_meta_vaild;
145 //int request_serial_number;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700146} request_manager_entry_t;
147
148class RequestManager {
149public:
150 RequestManager(SignalDrivenThread* main_thread);
151 ~RequestManager();
152 int GetNumEntries();
153 bool IsRequestQueueFull();
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900154
155 void RegisterRequest(camera_metadata_t *new_request);
156 void DeregisterRequest(camera_metadata_t **deregistered_request);
157 bool PrepareFrame(size_t *num_entries, size_t *frame_size,
158 camera_metadata_t **prepared_frame);
159 //void MarkProcessingRequest(exynos_camera_memory_t* buf);
160 //void MarkProcessingRequest(ExynosBuffer* buf);
161 int MarkProcessingRequest(ExynosBuffer *buf);
162 //void NotifyStreamOutput(uint32_t stream_id, int isp_processing_index);
163 //void NotifyStreamOutput(ExynosBuffer* buf, uint32_t stream_id);
164 void NotifyStreamOutput(int index, int stream_id);
165 //int FindEntryIndexByRequestSerialNumber(int serial_num);
166 void DumpInfoWithIndex(int index);
167 void ApplyDynamicMetadata(int index);
168 void CheckCompleted(int index);
169 void UpdateOutputStreamInfo(struct camera2_shot_ext *shot_ext, int index);
170 void RegisterTimestamp(int index, nsecs_t *frameTime);
171 uint64_t GetTimestamp(int index);
172 void Dump(void);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700173private:
174
175 MetadataConverter *m_metadataConverter;
176 SignalDrivenThread *m_mainThread;
177 int m_numOfEntries;
178 int m_entryInsertionIndex;
179 int m_entryProcessingIndex;
180 int m_entryFrameOutputIndex;
181 request_manager_entry_t entries[NUM_MAX_REQUEST_MGR_ENTRY];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900182 int m_completedIndex;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700183
184 Mutex m_requestMutex;
185
186 //TODO : alloc dynamically
187 char m_tempFrameMetadataBuf[2000];
188 camera_metadata_t *m_tempFrameMetadata;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900189 //int32_t m_request_serial_number;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700190};
191
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900192#define NOT_AVAILABLE (0)
193#define REQUIRES_DQ_FROM_SVC (1)
194#define ON_DRIVER (2)
195#define ON_HAL (3)
196#define ON_SERVICE (4)
197
198#define BAYER_NOT_AVAILABLE (0)
199#define BAYER_ON_SENSOR (1)
200#define BAYER_ON_HAL_FILLED (2)
201#define BAYER_ON_ISP (3)
202#define BAYER_ON_SERVICE (4)
203#define BAYER_ON_HAL_EMPTY (5)
204
205typedef struct stream_parameters {
206 int streamType;
207 uint32_t outputWidth;
208 uint32_t outputHeight;
209 uint32_t nodeWidth;
210 uint32_t nodeHeight;
211 int outputFormat;
212 int nodeFormat;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700213 const camera2_stream_ops_t* streamOps;
214 uint32_t usage;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900215 int numHwBuffers;
216 int numSvcBuffers;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700217 int fd;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900218 int svcPlanes;
219 int nodePlanes;
220 enum v4l2_memory memory;
221 enum v4l2_buf_type halBuftype;
222
223 buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
224 ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS];
225 int svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
226
227 //buffer_handle_t halBufHandle[NUM_MAX_CAMERA_BUFFERS];
228 //ExynosBuffer halBuffers[NUM_MAX_CAMERA_BUFFERS];
229 //int halBufStatus[NUM_MAX_CAMERA_BUFFERS];
230 ion_client ionClient;
231 node_info_t node;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700232} stream_parameters_t;
233
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900234
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700235class ExynosCameraHWInterface2 : public virtual RefBase {
236public:
237 ExynosCameraHWInterface2(int cameraId, camera2_device_t *dev);
238 virtual ~ExynosCameraHWInterface2();
239
240 virtual void release();
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900241
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700242 inline int getCameraId() const;
243
244 virtual int setRequestQueueSrcOps(const camera2_request_queue_src_ops_t *request_src_ops);
245 virtual int notifyRequestQueueNotEmpty();
246 virtual int setFrameQueueDstOps(const camera2_frame_queue_dst_ops_t *frame_dst_ops);
247 virtual int getInProgressCount();
248 virtual int flushCapturesInProgress();
249 virtual int constructDefaultRequest(int request_template, camera_metadata_t **request);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900250 virtual int allocateStream(uint32_t width, uint32_t height,
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700251 int format, const camera2_stream_ops_t *stream_ops,
252 uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers);
253 virtual int registerStreamBuffers(uint32_t stream_id, int num_buffers, buffer_handle_t *buffers);
254 virtual int releaseStream(uint32_t stream_id);
255 virtual int allocateReprocessStream(uint32_t width, uint32_t height,
256 uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,
257 uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers);
258 virtual int releaseReprocessStream(uint32_t stream_id);
259 virtual int triggerAction(uint32_t trigger_id, int ext1, int ext2);
260 virtual int setNotifyCallback(camera2_notify_callback notify_cb, void *user);
261 virtual int getMetadataVendorTagOps(vendor_tag_query_ops_t **ops);
262 virtual int dump(int fd);
263private:
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900264class MainThread : public SignalDrivenThread {
265 ExynosCameraHWInterface2 *mHardware;
266 public:
267 MainThread(ExynosCameraHWInterface2 *hw):
268 SignalDrivenThread(),
269 mHardware(hw) {
270// Start("MainThread", PRIORITY_DEFAULT, 0);
271 }
272 ~MainThread();
273 status_t readyToRunInternal()
274 {
275 return NO_ERROR;
276 }
277 void threadFunctionInternal()
278 {
279 mHardware->m_mainThreadFunc(this);
280 return;
281 }
282 void release(void);
283 };
284/*
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700285 class MainThread : public SignalDrivenThread {
286 ExynosCameraHWInterface2 *mHardware;
287 public:
288 MainThread(ExynosCameraHWInterface2 *hw):
289 SignalDrivenThread("MainThread", PRIORITY_DEFAULT, 0),
290 mHardware(hw) { }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900291 ~MainThread();
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700292 status_t readyToRunInternal() {
293 return NO_ERROR;
294 }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900295 void threadFunctionInternal() {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700296 mHardware->m_mainThreadFunc(this);
297 return;
298 }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900299 void release(void);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700300 };
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900301*/
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700302 class SensorThread : public SignalDrivenThread {
303 ExynosCameraHWInterface2 *mHardware;
304 public:
305 SensorThread(ExynosCameraHWInterface2 *hw):
306 SignalDrivenThread("SensorThread", PRIORITY_DEFAULT, 0),
307 mHardware(hw),
308 m_isBayerOutputEnabled(false) { }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900309 ~SensorThread();
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700310 status_t readyToRunInternal() {
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900311 mHardware->m_sensorThreadInitialize(this);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700312 return NO_ERROR;
313 }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900314 void threadFunctionInternal() {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700315 mHardware->m_sensorThreadFunc(this);
316 return;
317 }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900318 void release(void);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700319 //private:
320 bool m_isBayerOutputEnabled;
321 int m_sensorFd;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900322 };
323
324 class IspThread : public SignalDrivenThread {
325 ExynosCameraHWInterface2 *mHardware;
326 public:
327 IspThread(ExynosCameraHWInterface2 *hw):
328 SignalDrivenThread("IspThread", PRIORITY_DEFAULT, 0),
329 mHardware(hw) { }
330 ~IspThread();
331 status_t readyToRunInternal() {
332 mHardware->m_ispThreadInitialize(this);
333 return NO_ERROR;
334 }
335 void threadFunctionInternal() {
336 mHardware->m_ispThreadFunc(this);
337 return;
338 }
339 void release(void);
340 //private:
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700341 int m_ispFd;
342 };
343
344 class StreamThread : public SignalDrivenThread {
345 ExynosCameraHWInterface2 *mHardware;
346 public:
347 StreamThread(ExynosCameraHWInterface2 *hw, uint8_t new_index):
348 SignalDrivenThread("StreamThread", PRIORITY_DEFAULT, 0),
349 mHardware(hw),
350 m_index(new_index) { }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900351 ~StreamThread();
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700352 status_t readyToRunInternal() {
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900353 mHardware->m_streamThreadInitialize(this);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700354 return NO_ERROR;
355 }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900356 void threadFunctionInternal() {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700357 mHardware->m_streamThreadFunc(this);
358 return;
359 }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900360 void setParameter(stream_parameters_t * new_parameters);
361 void applyChange(void);
362 void release(void);
363 int findBufferIndex(void * bufAddr);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700364
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900365
366 uint8_t m_index;
367 //private:
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700368 stream_parameters_t m_parameters;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900369 stream_parameters_t *m_tempParameters;
370 bool m_isBufferInit;
371 };
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700372
373 sp<MainThread> m_mainThread;
374 sp<SensorThread> m_sensorThread;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900375 sp<IspThread> m_ispThread;
376 sp<StreamThread> m_streamThreads[NUM_MAX_STREAM_THREAD];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700377
378
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900379 int m_bayerBufStatus[NUM_BAYER_BUFFERS];
380 int m_bayerQueueList[NUM_BAYER_BUFFERS+SHOT_FRAME_DELAY];
381 int m_bayerQueueRequestList[NUM_BAYER_BUFFERS+SHOT_FRAME_DELAY];
382 int m_bayerDequeueList[NUM_BAYER_BUFFERS];
383 int m_numBayerQueueList;
384 int m_numBayerQueueListRemainder;
385 int m_numBayerDequeueList;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700386
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900387 void RegisterBayerQueueList(int bufIndex, int requestIndex);
388 void DeregisterBayerQueueList(int bufIndex);
389 void RegisterBayerDequeueList(int bufIndex);
390 int DeregisterBayerDequeueList(void);
391 int FindRequestEntryNumber(int bufIndex);
392 void DumpFrameinfoWithBufIndex(int bufIndex);
393
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700394 RequestManager *m_requestManager;
395
396 void m_mainThreadFunc(SignalDrivenThread * self);
397 void m_sensorThreadFunc(SignalDrivenThread * self);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900398 void m_sensorThreadInitialize(SignalDrivenThread * self);
399 void m_ispThreadFunc(SignalDrivenThread * self);
400 void m_ispThreadInitialize(SignalDrivenThread * self);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700401 void m_streamThreadFunc(SignalDrivenThread * self);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900402 void m_streamThreadInitialize(SignalDrivenThread * self);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700403
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900404 void m_getAlignedYUVSize(int colorFormat, int w, int h,
405 ExynosBuffer *buf);
406 bool m_getRatioSize(int src_w, int src_h,
407 int dst_w, int dst_h,
408 int *crop_x, int *crop_y,
409 int *crop_w, int *crop_h,
410 int zoom);
411 int createIonClient(ion_client ionClient);
412 int deleteIonClient(ion_client ionClient);
413 //int allocCameraMemory(ion_client ionClient, exynos_camera_memory_t *buf, int iMemoryNum);
414 //void freeCameraMemory(exynos_camera_memory_t *buf, int iMemoryNum);
415 //void initCameraMemory(exynos_camera_memory_t *buf, int iMemoryNum);
416
417 int allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum);
418 void freeCameraMemory(ExynosBuffer *buf, int iMemoryNum);
419 void initCameraMemory(ExynosBuffer *buf, int iMemoryNum);
420
421 void DumpInfoWithShot(struct camera2_shot_ext * shot_ext);
422 bool yuv2Jpeg(ExynosBuffer *yuvBuf,
423 ExynosBuffer *jpegBuf,
424 ExynosRect *rect);
425 exif_attribute_t mExifInfo;
426 void *m_exynosPictureCSC;
427
428 int m_jpegEncodingRequestIndex;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700429
430 camera2_request_queue_src_ops_t *m_requestQueueOps;
431 camera2_frame_queue_dst_ops_t *m_frameQueueOps;
432 camera2_notify_callback m_notifyCb;
433 void *m_callbackCookie;
434
435 int m_numOfRemainingReqInSvc;
436 bool m_isRequestQueuePending;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900437 bool m_isRequestQueueNull;
438 camera2_device_t *m_halDevice;
439 static gralloc_module_t const* m_grallocHal;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700440
441
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900442 camera_hw_info_t m_camera_info;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700443
444 ion_client m_ionCameraClient;
445
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900446 bool m_isSensorThreadOn;
447 bool m_isSensorStarted;
448
449
450
451 bool m_initFlag1;
452 bool m_initFlag2;
453 int m_ispInputIndex;
454 int m_ispProcessingIndex;
455 int m_ispThreadProcessingReq;
456 int m_processingRequest;
457
458 int m_numExpRemainingOutScp;
459 int m_numExpRemainingOutScc;
460
461 int indexToQueue[3+1];
462 int m_fd_scp;
463
464 bool m_scp_flushing;
465 bool m_closing;
466 ExynosBuffer m_resizeBuf;
467 int m_svcBufIndex;
468 nsecs_t m_lastTimeStamp;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700469};
470
471}; // namespace android
472
473#endif