blob: 92b09b45c192cd1fe041893c4bf231f7f152a402 [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)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070063#define MAX_CAMERA_MEMORY_PLANE_NUM (4)
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090064#define NUM_MAX_CAMERA_BUFFERS (16)
65#define NUM_BAYER_BUFFERS (8)
Sungjoong Kang9dd63e12012-07-24 00:25:51 +090066#define NUM_SENSOR_QBUF (4)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070067
Sungjoong Kang9dd63e12012-07-24 00:25:51 +090068#define PREVIEW_GSC_NODE_NUM (1)
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)
Sungjoong Kang9dd63e12012-07-24 00:25:51 +090080#define SIGNAL_ISP_START_BAYER_DEQUEUE (SIGNAL_THREAD_COMMON_LAST<<10)
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070081
82#define SIGNAL_STREAM_DATA_COMING (SIGNAL_THREAD_COMMON_LAST<<15)
83
84
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +090085
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070086enum sensor_name {
87 SENSOR_NAME_S5K3H2 = 1,
88 SENSOR_NAME_S5K6A3 = 2,
89 SENSOR_NAME_S5K4E5 = 3,
90 SENSOR_NAME_S5K3H7 = 4,
91 SENSOR_NAME_CUSTOM = 5,
92 SENSOR_NAME_END
93};
94
Jiyoung Shinc15a6b02012-06-05 01:08:14 -070095
96typedef struct node_info {
97 int fd;
98 int width;
99 int height;
100 int format;
101 int planes;
102 int buffers;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700103 enum v4l2_memory memory;
104 enum v4l2_buf_type type;
105 ion_client ionClient;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900106 ExynosBuffer buffer[NUM_MAX_CAMERA_BUFFERS];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700107} node_info_t;
108
109
110typedef struct camera_hw_info {
111 int sensor_id;
112
113 node_info_t sensor;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900114 node_info_t isp;
115 node_info_t capture;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700116
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900117 /*shot*/ // temp
118 struct camera2_shot_ext dummy_shot;
119
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700120} camera_hw_info_t;
121
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900122typedef enum request_entry_status {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700123 EMPTY,
124 REGISTERED,
125 PROCESSING
126} request_entry_status_t;
127
128typedef struct request_manager_entry {
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900129 request_entry_status_t status;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900130 camera_metadata_t *original_request;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700131 // TODO : allocate memory dynamically
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900132 camera2_ctl_metadata_NEW_t internal_shot;
133 int output_stream_count;
134 bool dynamic_meta_vaild;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700135} request_manager_entry_t;
136
137class RequestManager {
138public:
139 RequestManager(SignalDrivenThread* main_thread);
140 ~RequestManager();
141 int GetNumEntries();
142 bool IsRequestQueueFull();
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900143
144 void RegisterRequest(camera_metadata_t *new_request);
145 void DeregisterRequest(camera_metadata_t **deregistered_request);
146 bool PrepareFrame(size_t *num_entries, size_t *frame_size,
147 camera_metadata_t **prepared_frame);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900148 int MarkProcessingRequest(ExynosBuffer *buf);
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900149 void NotifyStreamOutput(int frameCnt, int stream_id);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900150 void DumpInfoWithIndex(int index);
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900151 void ApplyDynamicMetadata(struct camera2_shot_ext *shot_ext, int frameCnt);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900152 void CheckCompleted(int index);
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900153 void UpdateOutputStreamInfo(struct camera2_shot_ext *shot_ext, int frameCnt);
154 void RegisterTimestamp(int frameCnt, nsecs_t *frameTime);
155 uint64_t GetTimestamp(int frameCnt);
156 int FindFrameCnt(struct camera2_shot_ext * shot_ext);
157 int FindEntryIndexByFrameCnt(int frameCnt);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900158 void Dump(void);
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900159 int GetNextIndex(int index);
160 void SetDefaultParameters(int cropX);
161
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700162private:
163
164 MetadataConverter *m_metadataConverter;
165 SignalDrivenThread *m_mainThread;
166 int m_numOfEntries;
167 int m_entryInsertionIndex;
168 int m_entryProcessingIndex;
169 int m_entryFrameOutputIndex;
170 request_manager_entry_t entries[NUM_MAX_REQUEST_MGR_ENTRY];
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900171 int m_completedIndex;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700172
173 Mutex m_requestMutex;
174
175 //TODO : alloc dynamically
176 char m_tempFrameMetadataBuf[2000];
177 camera_metadata_t *m_tempFrameMetadata;
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900178
179 // HACK
180 int tempInitialSkipCnt;
181 int m_cropX;
182
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700183};
184
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900185
186typedef struct bayer_buf_entry {
187 int status;
188 int reqFrameCnt;
189 nsecs_t timeStamp;
190} bayer_buf_entry_t;
191
192
193class BayerBufManager {
194public:
195 BayerBufManager();
196 ~BayerBufManager();
197 int GetIndexForSensorEnqueue();
198 int MarkSensorEnqueue(int index);
199 int MarkSensorDequeue(int index, int reqFrameCnt, nsecs_t *timeStamp);
200 int GetIndexForIspEnqueue(int *reqFrameCnt);
201 int GetIndexForIspDequeue(int *reqFrameCnt);
202 int MarkIspEnqueue(int index);
203 int MarkIspDequeue(int index);
204 int GetNumOnSensor();
205 int GetNumOnHalFilled();
206 int GetNumOnIsp();
207
208private:
209 int GetNextIndex(int index);
210
211 int sensorEnqueueHead;
212 int sensorDequeueHead;
213 int ispEnqueueHead;
214 int ispDequeueHead;
215 int numOnSensor;
216 int numOnIsp;
217 int numOnHalFilled;
218 int numOnHalEmpty;
219
220 bayer_buf_entry_t entries[NUM_BAYER_BUFFERS];
221};
222
223
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900224#define NOT_AVAILABLE (0)
225#define REQUIRES_DQ_FROM_SVC (1)
226#define ON_DRIVER (2)
227#define ON_HAL (3)
228#define ON_SERVICE (4)
229
230#define BAYER_NOT_AVAILABLE (0)
231#define BAYER_ON_SENSOR (1)
232#define BAYER_ON_HAL_FILLED (2)
233#define BAYER_ON_ISP (3)
234#define BAYER_ON_SERVICE (4)
235#define BAYER_ON_HAL_EMPTY (5)
236
237typedef struct stream_parameters {
238 int streamType;
239 uint32_t outputWidth;
240 uint32_t outputHeight;
241 uint32_t nodeWidth;
242 uint32_t nodeHeight;
243 int outputFormat;
244 int nodeFormat;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700245 const camera2_stream_ops_t* streamOps;
246 uint32_t usage;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900247 int numHwBuffers;
248 int numSvcBuffers;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700249 int fd;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900250 int svcPlanes;
251 int nodePlanes;
252 enum v4l2_memory memory;
253 enum v4l2_buf_type halBuftype;
254
255 buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
256 ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS];
257 int svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
258
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900259 ion_client ionClient;
260 node_info_t node;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700261} stream_parameters_t;
262
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900263typedef struct record_parameters {
264 uint32_t outputWidth;
265 uint32_t outputHeight;
266 int outputFormat;
267 const camera2_stream_ops_t* streamOps;
268 uint32_t usage;
269 int numSvcBuffers;
270 int svcPlanes;
271 buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS];
272 ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS];
273 int svcBufStatus[NUM_MAX_CAMERA_BUFFERS];
274 int m_svcBufIndex;
275 int numBufsInHal;
276} record_parameters_t;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900277
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700278class ExynosCameraHWInterface2 : public virtual RefBase {
279public:
280 ExynosCameraHWInterface2(int cameraId, camera2_device_t *dev);
281 virtual ~ExynosCameraHWInterface2();
282
283 virtual void release();
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900284
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700285 inline int getCameraId() const;
286
287 virtual int setRequestQueueSrcOps(const camera2_request_queue_src_ops_t *request_src_ops);
288 virtual int notifyRequestQueueNotEmpty();
289 virtual int setFrameQueueDstOps(const camera2_frame_queue_dst_ops_t *frame_dst_ops);
290 virtual int getInProgressCount();
291 virtual int flushCapturesInProgress();
292 virtual int constructDefaultRequest(int request_template, camera_metadata_t **request);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900293 virtual int allocateStream(uint32_t width, uint32_t height,
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700294 int format, const camera2_stream_ops_t *stream_ops,
295 uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers);
296 virtual int registerStreamBuffers(uint32_t stream_id, int num_buffers, buffer_handle_t *buffers);
297 virtual int releaseStream(uint32_t stream_id);
298 virtual int allocateReprocessStream(uint32_t width, uint32_t height,
299 uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,
300 uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers);
301 virtual int releaseReprocessStream(uint32_t stream_id);
302 virtual int triggerAction(uint32_t trigger_id, int ext1, int ext2);
303 virtual int setNotifyCallback(camera2_notify_callback notify_cb, void *user);
304 virtual int getMetadataVendorTagOps(vendor_tag_query_ops_t **ops);
305 virtual int dump(int fd);
306private:
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900307class MainThread : public SignalDrivenThread {
308 ExynosCameraHWInterface2 *mHardware;
309 public:
310 MainThread(ExynosCameraHWInterface2 *hw):
311 SignalDrivenThread(),
312 mHardware(hw) {
313// Start("MainThread", PRIORITY_DEFAULT, 0);
314 }
315 ~MainThread();
316 status_t readyToRunInternal()
317 {
318 return NO_ERROR;
319 }
320 void threadFunctionInternal()
321 {
322 mHardware->m_mainThreadFunc(this);
323 return;
324 }
325 void release(void);
326 };
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900327
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700328 class SensorThread : public SignalDrivenThread {
329 ExynosCameraHWInterface2 *mHardware;
330 public:
331 SensorThread(ExynosCameraHWInterface2 *hw):
332 SignalDrivenThread("SensorThread", PRIORITY_DEFAULT, 0),
333 mHardware(hw),
334 m_isBayerOutputEnabled(false) { }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900335 ~SensorThread();
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700336 status_t readyToRunInternal() {
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900337 mHardware->m_sensorThreadInitialize(this);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700338 return NO_ERROR;
339 }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900340 void threadFunctionInternal() {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700341 mHardware->m_sensorThreadFunc(this);
342 return;
343 }
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900344 void release(void);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700345 //private:
346 bool m_isBayerOutputEnabled;
347 int m_sensorFd;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900348 };
349
350 class IspThread : public SignalDrivenThread {
351 ExynosCameraHWInterface2 *mHardware;
352 public:
353 IspThread(ExynosCameraHWInterface2 *hw):
354 SignalDrivenThread("IspThread", PRIORITY_DEFAULT, 0),
355 mHardware(hw) { }
356 ~IspThread();
357 status_t readyToRunInternal() {
358 mHardware->m_ispThreadInitialize(this);
359 return NO_ERROR;
360 }
361 void threadFunctionInternal() {
362 mHardware->m_ispThreadFunc(this);
363 return;
364 }
365 void release(void);
366 //private:
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700367 int m_ispFd;
368 };
369
370 class StreamThread : public SignalDrivenThread {
371 ExynosCameraHWInterface2 *mHardware;
372 public:
373 StreamThread(ExynosCameraHWInterface2 *hw, uint8_t new_index):
374 SignalDrivenThread("StreamThread", PRIORITY_DEFAULT, 0),
375 mHardware(hw),
376 m_index(new_index) { }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900377 ~StreamThread();
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700378 status_t readyToRunInternal() {
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900379 mHardware->m_streamThreadInitialize(this);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700380 return NO_ERROR;
381 }
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900382 void threadFunctionInternal() {
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700383 mHardware->m_streamThreadFunc(this);
384 return;
385 }
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900386 void setRecordingParameter(record_parameters_t * recordParm);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900387 void setParameter(stream_parameters_t * new_parameters);
388 void applyChange(void);
389 void release(void);
390 int findBufferIndex(void * bufAddr);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700391
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900392
393 uint8_t m_index;
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900394 bool m_activated;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900395 //private:
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700396 stream_parameters_t m_parameters;
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900397 stream_parameters_t *m_tempParameters;
398 record_parameters_t m_recordParameters;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900399 bool m_isBufferInit;
400 };
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700401
402 sp<MainThread> m_mainThread;
403 sp<SensorThread> m_sensorThread;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900404 sp<IspThread> m_ispThread;
405 sp<StreamThread> m_streamThreads[NUM_MAX_STREAM_THREAD];
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700406
407
408
409 RequestManager *m_requestManager;
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900410 BayerBufManager *m_BayerManager;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700411
412 void m_mainThreadFunc(SignalDrivenThread * self);
413 void m_sensorThreadFunc(SignalDrivenThread * self);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900414 void m_sensorThreadInitialize(SignalDrivenThread * self);
415 void m_ispThreadFunc(SignalDrivenThread * self);
416 void m_ispThreadInitialize(SignalDrivenThread * self);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700417 void m_streamThreadFunc(SignalDrivenThread * self);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900418 void m_streamThreadInitialize(SignalDrivenThread * self);
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700419
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900420 void m_getAlignedYUVSize(int colorFormat, int w, int h,
421 ExynosBuffer *buf);
422 bool m_getRatioSize(int src_w, int src_h,
423 int dst_w, int dst_h,
424 int *crop_x, int *crop_y,
425 int *crop_w, int *crop_h,
426 int zoom);
427 int createIonClient(ion_client ionClient);
428 int deleteIonClient(ion_client ionClient);
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900429
430 int allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum);
431 void freeCameraMemory(ExynosBuffer *buf, int iMemoryNum);
432 void initCameraMemory(ExynosBuffer *buf, int iMemoryNum);
433
434 void DumpInfoWithShot(struct camera2_shot_ext * shot_ext);
435 bool yuv2Jpeg(ExynosBuffer *yuvBuf,
436 ExynosBuffer *jpegBuf,
437 ExynosRect *rect);
438 exif_attribute_t mExifInfo;
439 void *m_exynosPictureCSC;
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900440 void *m_exynosVideoCSC;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900441
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900442 int m_jpegEncodingFrameCnt;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700443
444 camera2_request_queue_src_ops_t *m_requestQueueOps;
445 camera2_frame_queue_dst_ops_t *m_frameQueueOps;
446 camera2_notify_callback m_notifyCb;
447 void *m_callbackCookie;
448
449 int m_numOfRemainingReqInSvc;
450 bool m_isRequestQueuePending;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900451 bool m_isRequestQueueNull;
452 camera2_device_t *m_halDevice;
453 static gralloc_module_t const* m_grallocHal;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700454
455
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900456 camera_hw_info_t m_camera_info;
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700457
458 ion_client m_ionCameraClient;
459
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900460 bool m_isSensorThreadOn;
461 bool m_isSensorStarted;
462
463
464
465 bool m_initFlag1;
466 bool m_initFlag2;
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900467 int m_ispProcessingFrameCnt;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900468
469 int indexToQueue[3+1];
470 int m_fd_scp;
471
472 bool m_scp_flushing;
473 bool m_closing;
474 ExynosBuffer m_resizeBuf;
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900475 ExynosBuffer m_resizeBuf2;
Sungjoong Kang13d8c7b2012-07-14 10:20:39 +0900476 int m_svcBufIndex;
477 nsecs_t m_lastTimeStamp;
Sungjoong Kang9dd63e12012-07-24 00:25:51 +0900478 bool m_recordingEnabled;
479 int m_previewOutput;
480 int m_recordOutput;
481 bool m_needsRecordBufferInit;
482 int lastFrameCnt;
483 int m_savecnt;
484 int m_cameraId;
485 bool m_scp_closing;
486 bool m_scp_closed;
487
Jiyoung Shinc15a6b02012-06-05 01:08:14 -0700488};
489
490}; // namespace android
491
492#endif