Commit | Line | Data |
---|---|---|
20c51683 JC |
1 | /* |
2 | ** | |
3 | ** Copyright 2008, The Android Open Source Project | |
4 | ** Copyright 2010, 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 toggle 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 ExynosCamera.h | |
21 | * \brief hearder file for CAMERA HAL MODULE | |
22 | * \author thun.hwang(thun.hwang@samsung.com) | |
23 | * \date 2010/06/03 | |
24 | * | |
25 | * <b>Revision History: </b> | |
26 | * - 2011/12/31 : thun.hwang(thun.hwang@samsung.com) \n | |
27 | * Initial version | |
28 | * | |
29 | * - 2012/01/18 : Sangwoo, Park(sw5771.park@samsung.com) \n | |
30 | * Adjust Doxygen Document | |
31 | * | |
32 | * - 2012/02/01 : Sangwoo, Park(sw5771.park@samsung.com) \n | |
33 | * Adjust libv4l2 | |
34 | * Adjust struct ExynosCameraInfo | |
35 | * External ISP feature | |
36 | * | |
37 | * - 2012/03/14 : sangwoo.park(sw5771.park@samsung.com) \n | |
38 | * Change file, class name to ExynosXXX. | |
39 | */ | |
40 | ||
41 | #ifndef EXYNOS_CAMERA_H__ | |
42 | #define EXYNOS_CAMERA_H__ | |
43 | ||
44 | #include <stdio.h> | |
45 | #include <string.h> | |
46 | #include <stdlib.h> | |
47 | ||
48 | #include <fcntl.h> | |
49 | #include <unistd.h> | |
50 | #include <errno.h> | |
51 | #include <signal.h> | |
52 | #include <sys/mman.h> | |
53 | #include <sys/time.h> | |
54 | #include <sys/ioctl.h> | |
55 | #include <sys/poll.h> | |
56 | #include <sys/stat.h> | |
57 | #include <sys/types.h> | |
58 | ||
f126f5e6 | 59 | #include <linux/videodev2.h> |
564463a9 | 60 | #include <videodev2_exynos_camera.h> |
20c51683 JC |
61 | #include <linux/vt.h> |
62 | ||
63 | #include <utils/RefBase.h> | |
64 | #include <utils/String8.h> | |
65 | #include "cutils/properties.h" | |
66 | ||
67 | #include "exynos_format.h" | |
68 | #include "ExynosBuffer.h" | |
69 | #include "ExynosRect.h" | |
70 | #include "ExynosJpegEncoderForCamera.h" | |
71 | #include "ExynosExif.h" | |
72 | #include "exynos_v4l2.h" | |
73 | ||
48bac8e5 | 74 | #define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) |
564463a9 | 75 | namespace android { |
20c51683 JC |
76 | |
77 | #define GAIA_FW_BETA 1 | |
48bac8e5 JS |
78 | /* FIXME: This is for test. We remove this after test */ |
79 | #define USE_DIGITAL_ZOOM | |
20c51683 JC |
80 | |
81 | //! struct for Camera sensor information | |
82 | /*! | |
83 | * \ingroup Exynos | |
84 | */ | |
85 | struct ExynosCameraInfo | |
86 | { | |
87 | public: | |
88 | // Google Official API : Camera.Parameters | |
89 | // http://developer.android.com/reference/android/hardware/Camera.Parameters.html | |
90 | int previewW; | |
91 | int previewH; | |
92 | int previewColorFormat; | |
93 | int videoW; | |
94 | int videoH; | |
95 | int videoColorFormat; | |
96 | int pictureW; | |
97 | int pictureH; | |
98 | int pictureColorFormat; | |
99 | int thumbnailW; | |
100 | int thumbnailH; | |
101 | ||
102 | int antiBandingList; | |
103 | int antiBanding; | |
104 | ||
105 | int effectList; | |
106 | int effect; | |
107 | ||
108 | int flashModeList; | |
109 | int flashMode; | |
110 | ||
111 | int focusModeList; | |
112 | int focusMode; | |
113 | ||
114 | int sceneModeList; | |
115 | int sceneMode; | |
116 | ||
117 | int whiteBalanceList; | |
118 | int whiteBalance; | |
119 | bool autoWhiteBalanceLockSupported; | |
120 | bool autoWhiteBalanceLock; | |
121 | ||
122 | int rotation; | |
123 | int minExposure; | |
124 | int maxExposure; | |
125 | int exposure; | |
126 | ||
127 | bool autoExposureLockSupported; | |
128 | bool autoExposureLock; | |
129 | ||
130 | int fps; | |
131 | int focalLengthNum; | |
132 | int focalLengthDen; | |
564463a9 JS |
133 | bool supportVideoStabilization; |
134 | bool applyVideoStabilization; | |
20c51683 JC |
135 | bool videoStabilization; |
136 | int maxNumMeteringAreas; | |
137 | int maxNumDetectedFaces; | |
138 | int maxNumFocusAreas; | |
139 | int maxZoom; | |
140 | bool hwZoomSupported; | |
141 | int zoom; | |
142 | ||
143 | long gpsLatitude; | |
144 | long gpsLongitude; | |
145 | long gpsAltitude; | |
146 | long gpsTimestamp; | |
147 | ||
148 | // Additional API. | |
149 | int angle; | |
150 | bool antiShake; | |
151 | bool beautyShot; | |
152 | int brightness; | |
153 | int contrast; | |
154 | bool gamma; | |
155 | bool odc; | |
156 | int hue; | |
157 | int iso; | |
158 | int metering; | |
159 | bool objectTracking; | |
160 | bool objectTrackingStart; | |
161 | ||
162 | int saturation; | |
163 | int sharpness; | |
164 | int shotMode; | |
165 | bool slowAE; | |
166 | bool smartAuto; | |
167 | bool touchAfStart; | |
168 | bool wdr; | |
169 | bool tdnr; | |
170 | ||
171 | public: | |
172 | ExynosCameraInfo(); | |
173 | }; | |
174 | ||
175 | struct ExynosCameraInfoM5M0 : public ExynosCameraInfo | |
176 | { | |
177 | public: | |
178 | ExynosCameraInfoM5M0(); | |
179 | }; | |
180 | ||
181 | struct ExynosCameraInfoS5K6A3 : public ExynosCameraInfo | |
182 | { | |
183 | public: | |
184 | ExynosCameraInfoS5K6A3(); | |
185 | }; | |
186 | ||
187 | struct ExynosCameraInfoS5K4E5 : public ExynosCameraInfo | |
188 | { | |
189 | public: | |
190 | ExynosCameraInfoS5K4E5(); | |
191 | }; | |
192 | ||
48bac8e5 JS |
193 | struct ExynosCameraInfoS5K3H7 : public ExynosCameraInfo |
194 | { | |
195 | public: | |
196 | ExynosCameraInfoS5K3H7(); | |
197 | }; | |
198 | ||
20c51683 JC |
199 | //! ExynosCamera |
200 | /*! | |
201 | * \ingroup Exynos | |
202 | */ | |
203 | class ExynosCamera : public virtual RefBase { | |
204 | ||
205 | /////////////////////////////////////////////////// | |
206 | // Google Official API : Camera.Parameters | |
207 | // http://developer.android.com/reference/android/hardware/Camera.Parameters.html | |
208 | /////////////////////////////////////////////////// | |
209 | public: | |
210 | //! Camera ID | |
211 | enum CAMERA_ID { | |
212 | CAMERA_ID_BACK = 0, //!< | |
213 | CAMERA_ID_FRONT = 1, //!< | |
214 | }; | |
215 | ||
216 | //! Anti banding | |
217 | enum { | |
218 | ANTIBANDING_AUTO = (1 << 0), //!< \n | |
219 | ANTIBANDING_50HZ = (1 << 1), //!< \n | |
220 | ANTIBANDING_60HZ = (1 << 2), //!< \n | |
221 | ANTIBANDING_OFF = (1 << 3), //!< \n | |
222 | }; | |
223 | ||
224 | //! Effect | |
225 | enum { | |
226 | EFFECT_NONE = (1 << 0), //!< \n | |
227 | EFFECT_MONO = (1 << 1), //!< \n | |
228 | EFFECT_NEGATIVE = (1 << 2), //!< \n | |
229 | EFFECT_SOLARIZE = (1 << 3), //!< \n | |
230 | EFFECT_SEPIA = (1 << 4), //!< \n | |
231 | EFFECT_POSTERIZE = (1 << 5), //!< \n | |
232 | EFFECT_WHITEBOARD = (1 << 6), //!< \n | |
233 | EFFECT_BLACKBOARD = (1 << 7), //!< \n | |
234 | EFFECT_AQUA = (1 << 8), //!< \n | |
235 | }; | |
236 | ||
237 | //! Flash mode | |
238 | enum { | |
239 | FLASH_MODE_OFF = (1 << 0), //!< \n | |
240 | FLASH_MODE_AUTO = (1 << 1), //!< \n | |
241 | FLASH_MODE_ON = (1 << 2), //!< \n | |
242 | FLASH_MODE_RED_EYE = (1 << 3), //!< \n | |
243 | FLASH_MODE_TORCH = (1 << 4), //!< \n | |
244 | }; | |
245 | ||
48bac8e5 | 246 | //! Focus mode |
20c51683 JC |
247 | enum { |
248 | FOCUS_MODE_AUTO = (1 << 0), //!< \n | |
249 | FOCUS_MODE_INFINITY = (1 << 1), //!< \n | |
250 | FOCUS_MODE_MACRO = (1 << 2), //!< \n | |
251 | FOCUS_MODE_FIXED = (1 << 3), //!< \n | |
252 | FOCUS_MODE_EDOF = (1 << 4), //!< \n | |
253 | FOCUS_MODE_CONTINUOUS_VIDEO = (1 << 5), //!< \n | |
254 | FOCUS_MODE_CONTINUOUS_PICTURE = (1 << 6), //!< \n | |
564463a9 | 255 | FOCUS_MODE_TOUCH = (1 << 7), //!< \n |
20c51683 JC |
256 | }; |
257 | ||
258 | //! Scene mode | |
259 | enum { | |
260 | SCENE_MODE_AUTO = (1 << 0), //!< \n | |
261 | SCENE_MODE_ACTION = (1 << 1), //!< \n | |
262 | SCENE_MODE_PORTRAIT = (1 << 2), //!< \n | |
263 | SCENE_MODE_LANDSCAPE = (1 << 3), //!< \n | |
264 | SCENE_MODE_NIGHT = (1 << 4), //!< \n | |
265 | SCENE_MODE_NIGHT_PORTRAIT = (1 << 5), //!< \n | |
266 | SCENE_MODE_THEATRE = (1 << 6), //!< \n | |
267 | SCENE_MODE_BEACH = (1 << 7), //!< \n | |
268 | SCENE_MODE_SNOW = (1 << 8), //!< \n | |
269 | SCENE_MODE_SUNSET = (1 << 9), //!< \n | |
270 | SCENE_MODE_STEADYPHOTO = (1 << 10), //!< \n | |
271 | SCENE_MODE_FIREWORKS = (1 << 11), //!< \n | |
272 | SCENE_MODE_SPORTS = (1 << 12), //!< \n | |
273 | SCENE_MODE_PARTY = (1 << 13), //!< \n | |
274 | SCENE_MODE_CANDLELIGHT = (1 << 14), //!< \n | |
275 | }; | |
276 | ||
277 | //! White balance | |
278 | enum { | |
279 | WHITE_BALANCE_AUTO = (1 << 0), //!< \n | |
280 | WHITE_BALANCE_INCANDESCENT = (1 << 1), //!< \n | |
281 | WHITE_BALANCE_FLUORESCENT = (1 << 2), //!< \n | |
282 | WHITE_BALANCE_WARM_FLUORESCENT = (1 << 3), //!< \n | |
283 | WHITE_BALANCE_DAYLIGHT = (1 << 4), //!< \n | |
284 | WHITE_BALANCE_CLOUDY_DAYLIGHT = (1 << 5), //!< \n | |
285 | WHITE_BALANCE_TWILIGHT = (1 << 6), //!< \n | |
286 | WHITE_BALANCE_SHADE = (1 << 7), //!< \n | |
287 | }; | |
288 | ||
289 | //! Jpeg Qualtiy | |
290 | enum JPEG_QUALITY { | |
291 | JPEG_QUALITY_MIN = 0, //!< | |
292 | JPEG_QUALITY_ECONOMY = 70, //!< | |
293 | JPEG_QUALITY_NORMAL = 80, //!< | |
294 | JPEG_QUALITY_SUPERFINE = 90, //!< | |
295 | JPEG_QUALITY_MAX = 100, //!< | |
296 | }; | |
297 | ||
298 | private: | |
299 | //! Constructor | |
300 | ExynosCamera(); | |
301 | //! Destructor | |
302 | virtual ~ExynosCamera(); | |
303 | ||
304 | public: | |
305 | //! Gets the Camera instance | |
306 | static ExynosCamera* createInstance(void) | |
307 | { | |
308 | static ExynosCamera singleton; | |
309 | return &singleton; | |
310 | } | |
311 | ||
312 | //! Create the instance | |
313 | bool create(int cameraId); | |
314 | //! Destroy the instance | |
315 | bool destroy(void); | |
316 | //! Check if the instance was created | |
317 | bool flagCreate(void); | |
318 | ||
319 | //! Gets current camera_id | |
320 | int getCameraId(void); | |
321 | //! Gets camera sensor name | |
322 | char *getCameraName(void); | |
323 | ||
324 | //! Gets file descriptor by gotten open() for preview | |
325 | int getPreviewFd(void); | |
326 | //! Gets file descriptor by gotten open() for recording | |
327 | int getVideoFd(void); | |
328 | //! Gets file descriptor by gotten open() for snapshot | |
329 | int getPictureFd(void); | |
330 | ||
331 | //! Starts capturing and drawing preview frames to the screen. | |
332 | bool startPreview(void); | |
333 | //! Stop preview | |
334 | bool stopPreview(void); | |
335 | //! Check preview start | |
336 | bool flagStartPreview(void); | |
337 | //! Gets preview's max buffer | |
338 | int getPreviewMaxBuf(void); | |
339 | //! Sets preview's buffer | |
340 | bool setPreviewBuf(ExynosBuffer *buf); | |
341 | //! Gets preview's buffer | |
342 | bool getPreviewBuf(ExynosBuffer *buf); | |
343 | //! Put(dq) preview's buffer | |
344 | bool putPreviewBuf(ExynosBuffer *buf); | |
345 | ||
346 | //! Sets video's width, height | |
347 | bool setVideoSize(int w, int h); | |
348 | //! Gets video's width, height | |
349 | bool getVideoSize(int *w, int *h); | |
350 | ||
351 | //! Sets video's color format | |
352 | bool setVideoFormat(int colorFormat); | |
353 | //! Gets video's color format | |
354 | int getVideoFormat(void); | |
355 | ||
356 | //! Start video | |
357 | bool startVideo(void); | |
358 | //! Stop video | |
359 | bool stopVideo(void); | |
360 | //! Check video start | |
361 | bool flagStartVideo(void); | |
362 | //! Gets video's buffer | |
363 | int getVideoMaxBuf(void); | |
364 | //! Sets video's buffer | |
365 | bool setVideoBuf(ExynosBuffer *buf); | |
366 | //! Gets video's buffer | |
367 | bool getVideoBuf(ExynosBuffer *buf); | |
368 | //! Put(dq) video's buffer | |
369 | bool putVideoBuf(ExynosBuffer *buf); | |
370 | ||
371 | //! Start snapshot | |
372 | bool startPicture(void); | |
373 | //! Stop snapshot | |
374 | bool stopPicture(void); | |
375 | //! Check snapshot start | |
376 | bool flagStartPicture(void); | |
377 | //! Gets snapshot's buffer | |
378 | int getPictureMaxBuf(void); | |
379 | //! Sets snapshot's buffer | |
380 | bool setPictureBuf(ExynosBuffer *buf); | |
381 | //! Gets snapshot's buffer | |
382 | bool getPictureBuf(ExynosBuffer *buf); | |
383 | //! Put(dq) snapshot's buffer | |
384 | bool putPictureBuf(ExynosBuffer *buf); | |
385 | ||
386 | //! Encode JPEG from YUV | |
564463a9 | 387 | bool yuv2Jpeg(ExynosBuffer *yuvBuf, ExynosBuffer *jpegBuf, ExynosRect *rect); |
20c51683 JC |
388 | |
389 | //! Starts camera auto-focus and registers a callback function to run when the camera is focused. | |
390 | bool autoFocus(void); | |
391 | //! Cancel auto-focus operation | |
392 | bool cancelAutoFocus(void); | |
393 | //! Gets auto-focus result whether success or not | |
394 | int getFucusModeResult(void); | |
395 | ||
396 | //! Starts the face detection. | |
397 | bool startFaceDetection(void); | |
398 | //! Stop face detection | |
399 | bool stopFaceDetection(void); | |
400 | //! Gets the face detection started | |
401 | bool flagStartFaceDetection(void); | |
402 | //! Lock or unlock face detection operation | |
403 | bool setFaceDetectLock(bool toggle); | |
404 | ||
405 | //! Zooms to the requested value smoothly. | |
406 | bool startSmoothZoom(int value); | |
407 | //! Stop the face detection. | |
408 | bool stopSmoothZoom(void); | |
409 | ||
410 | //! Gets the current antibanding setting. | |
411 | int getAntibanding(void); | |
412 | ||
413 | //! Gets the state of the auto-exposure lock. | |
414 | bool getAutoExposureLock(void); | |
415 | ||
416 | //! Gets the state of the auto-white balance lock. | |
417 | bool getAutoWhiteBalanceLock(void); | |
418 | ||
419 | //! Gets the current color effect setting. | |
420 | int getColorEffect(void); | |
421 | ||
422 | //! Gets the detected faces areas. | |
423 | int getDetectedFacesAreas(int num, int *id, int *score, ExynosRect *face, ExynosRect *leftEye, ExynosRect *rightEye, ExynosRect *mouth); | |
424 | ||
425 | //! Gets the detected faces areas. (Using ExynosRect2) | |
426 | int getDetectedFacesAreas(int num, int *id, int *score, ExynosRect2 *face, ExynosRect2 *leftEye, ExynosRect2 *rightEye, ExynosRect2 *mouth); | |
427 | ||
428 | //! Gets the current exposure compensation index. | |
429 | int getExposureCompensation(void); | |
430 | ||
431 | //! Gets the exposure compensation step. | |
432 | float getExposureCompensationStep(void); | |
433 | ||
434 | //! Gets the current flash mode setting. | |
435 | int getFlashMode(void); | |
436 | ||
437 | //! Gets the focal length (in millimeter) of the camera. | |
438 | bool getFocalLength(int *num, int *den); | |
439 | ||
440 | //! Gets the current focus areas. | |
441 | int getFocusAreas(ExynosRect *rects); | |
442 | ||
443 | //! Gets the distances from the camera to where an object appears to be in focus. | |
444 | int getFocusDistances(float *output); | |
445 | ||
446 | //! Gets the current focus mode setting. | |
447 | int getFocusMode(void); | |
448 | ||
449 | //! Gets the horizontal angle of view in degrees. | |
450 | float getHorizontalViewAngle(void); | |
451 | ||
452 | //int getInt(String key); | |
453 | ||
454 | //! Returns the quality setting for the JPEG picture. | |
455 | int getJpegQuality(void); | |
456 | ||
457 | //! Returns the quality setting for the EXIF thumbnail in Jpeg picture. | |
458 | int getJpegThumbnailQuality(void); | |
459 | ||
460 | //! Returns the dimensions for EXIF thumbnail in Jpeg picture. | |
461 | bool getJpegThumbnailSize(int *w, int *h); | |
462 | ||
463 | //! Gets the maximum exposure compensation index. | |
464 | int getMaxExposureCompensation(void); | |
465 | ||
466 | //! Gets the maximum number of detected faces supported. | |
467 | int getMaxNumDetectedFaces(void); | |
468 | ||
469 | //! Gets the maximum number of focus areas supported. | |
470 | int getMaxNumFocusAreas(void); | |
471 | ||
472 | //! Gets the maximum number of metering areas supported. | |
473 | int getMaxNumMeteringAreas(void); | |
474 | ||
475 | //! Gets the maximum zoom value allowed for snapshot. | |
476 | int getMaxZoom(void); | |
477 | ||
478 | //! Gets the current metering areas. | |
479 | int getMeteringAreas(ExynosRect *rects); | |
480 | ||
481 | //! Gets the minimum exposure compensation index. | |
482 | int getMinExposureCompensation(void); | |
483 | ||
484 | //! Returns the image format for pictures. | |
485 | int getPictureFormat(void); | |
486 | ||
487 | //! Returns the dimension setting for pictures. | |
488 | bool getPictureSize(int *w, int *h); | |
489 | ||
490 | //Camera.Size getPreferredPreviewSizeForVideo(); | |
491 | ||
492 | //! Returns the image format for preview frames got from Camera.PreviewCallback. | |
493 | int getPreviewFormat(void); | |
494 | ||
495 | //! Returns the current minimum and maximum preview fps. | |
496 | bool getPreviewFpsRange(int *min, int *max); | |
497 | ||
498 | //! This method is deprecated. replaced by getPreviewFpsRange(int[]) | |
499 | int getPreviewFrameRate(void); | |
500 | ||
501 | //! Returns the dimensions setting for preview pictures. | |
502 | bool getPreviewSize(int *w, int *h); | |
503 | ||
504 | //! Gets scene mode | |
505 | int getSceneMode(void); | |
506 | ||
507 | //! Gets the supported antibanding values. | |
508 | int getSupportedAntibanding(void); | |
509 | ||
510 | //! Gets the supported color effects. | |
511 | int getSupportedColorEffects(void); | |
512 | ||
513 | //! Check whether the target support Flash | |
514 | int getSupportedFlashModes(void); | |
515 | ||
516 | //! Gets the supported focus modes. | |
517 | int getSupportedFocusModes(void); | |
518 | ||
519 | //! Gets the supported jpeg thumbnail sizes. | |
520 | bool getSupportedJpegThumbnailSizes(int *w, int *h); | |
521 | ||
522 | // List<Integer> getSupportedPictureFormats() | |
523 | ||
524 | //! Gets the supported picture sizes. | |
525 | bool getSupportedPictureSizes(int *w, int *h); | |
526 | ||
527 | //List<Integer> getSupportedPreviewFormats() | |
528 | ||
529 | //List<int[]> getSupportedPreviewFpsRange() | |
530 | ||
531 | //List<Integer> getSupportedPreviewFrameRates() | |
532 | ||
533 | //! Gets the supported preview sizes. | |
534 | bool getSupportedPreviewSizes(int *w, int *h); | |
535 | ||
536 | //! Gets the supported scene modes. | |
537 | int getSupportedSceneModes(void); | |
538 | ||
539 | //! Gets the supported video frame sizes that can be used by MediaRecorder. | |
540 | bool getSupportedVideoSizes(int *w, int *h); | |
541 | ||
542 | //! Gets the supported white balance. | |
543 | int getSupportedWhiteBalance(void); | |
544 | ||
545 | //! Gets the vertical angle of view in degrees. | |
546 | float getVerticalViewAngle(void); | |
547 | ||
548 | //! Gets the current state of video stabilization. | |
549 | bool getVideoStabilization(void); | |
550 | ||
551 | //! Gets the current white balance setting. | |
552 | int getWhiteBalance(void); | |
553 | ||
554 | //! Gets current zoom value. | |
555 | int getZoom(void); | |
556 | ||
557 | //List<Integer> getZoomRatios() | |
558 | //! Gets max zoom ratio | |
559 | int getMaxZoomRatio(void); | |
560 | ||
561 | //! Returns true if auto-exposure locking is supported. | |
562 | bool isAutoExposureLockSupported(void); | |
563 | ||
564 | //! Returns true if auto-white balance locking is supported. | |
565 | bool isAutoWhiteBalanceLockSupported(void); | |
566 | ||
567 | //! Returns true if smooth zoom is supported. | |
568 | bool isSmoothZoomSupported(void); | |
569 | ||
570 | //! Returns true if video snapshot is supported. | |
571 | bool isVideoSnapshotSupported(void); | |
572 | ||
573 | //! Returns true if video stabilization is supported. | |
574 | bool isVideoStabilizationSupported(void); | |
575 | ||
576 | //! Returns true if zoom is supported. | |
577 | bool isZoomSupported(void); | |
578 | ||
579 | //void remove(String key) | |
580 | ||
581 | //void removeGpsData() | |
582 | ||
583 | //void set(String key, String value) | |
584 | ||
585 | //void set(String key, int value) | |
586 | ||
587 | //! Sets the antibanding. | |
588 | bool setAntibanding(int value); | |
589 | ||
590 | //! Sets the auto-exposure lock state. | |
591 | bool setAutoExposureLock(bool toggle); | |
592 | ||
593 | //! Sets the auto-white balance lock state. | |
594 | bool setAutoWhiteBalanceLock(bool toggle); | |
595 | ||
596 | //! Sets the current color effect setting. | |
597 | bool setColorEffect(int value); | |
598 | ||
599 | //! Sets the exposure compensation index. | |
600 | bool setExposureCompensation(int value); | |
601 | ||
602 | //! Sets the flash mode. | |
603 | bool setFlashMode(int value); | |
604 | ||
605 | //! Sets focus z. | |
606 | bool setFocusAreas(int num, ExynosRect* rects, int *weights); | |
607 | ||
608 | //! Sets focus areas. (Using ExynosRect2) | |
609 | bool setFocusAreas(int num, ExynosRect2* rect2s, int *weights); | |
610 | ||
611 | //! Sets the focus mode. | |
612 | bool setFocusMode(int value); | |
613 | ||
614 | //! Sets GPS altitude. | |
615 | bool setGpsAltitude(const char *gpsAltitude); | |
616 | ||
617 | //! Sets GPS latitude coordinate. | |
618 | bool setGpsLatitude(const char *gpsLatitude); | |
619 | ||
620 | //! Sets GPS longitude coordinate. | |
621 | bool setGpsLongitude(const char *gpsLongitude); | |
622 | ||
623 | //! Sets GPS processing method. | |
624 | bool setGpsProcessingMethod(const char *gpsProcessingMethod); | |
625 | ||
626 | //! Sets GPS timestamp. | |
627 | bool setGpsTimeStamp(const char *gpsTimestamp); | |
628 | ||
629 | //! Sets Jpeg quality of captured picture. | |
630 | bool setJpegQuality(int quality); | |
631 | ||
632 | //! Sets the quality of the EXIF thumbnail in Jpeg picture. | |
633 | bool setJpegThumbnailQuality(int quality); | |
634 | ||
635 | //! Sets the dimensions for EXIF thumbnail in Jpeg picture. | |
636 | bool setJpegThumbnailSize(int w, int h); | |
637 | ||
638 | //! Sets metering areas. | |
639 | bool setMeteringAreas(int num, ExynosRect *rects, int *weights); | |
640 | ||
641 | //! Sets metering areas.(Using ExynosRect2) | |
642 | bool setMeteringAreas(int num, ExynosRect2 *rect2s, int *weights); | |
643 | ||
48bac8e5 JS |
644 | //! Cancel metering areas. |
645 | bool cancelMeteringAreas(); | |
646 | ||
20c51683 JC |
647 | //! Sets the image format for pictures. |
648 | bool setPictureFormat(int colorFormat); | |
649 | ||
650 | //! Sets the dimensions for pictures. | |
651 | bool setPictureSize(int w, int h); | |
652 | ||
653 | //! Sets the image format for preview pictures. | |
654 | bool setPreviewFormat(int colorFormat); | |
655 | ||
656 | //void setPreviewFpsRange(int min, int max) | |
657 | ||
658 | // ! This method is deprecated. replaced by setPreviewFpsRange(int, int) | |
659 | bool setPreviewFrameRate(int fps); | |
660 | ||
661 | //! Sets the dimensions for preview pictures. | |
662 | bool setPreviewSize(int w, int h); | |
663 | ||
664 | //! Sets recording mode hint. | |
665 | bool setRecordingHint(bool hint); | |
666 | ||
667 | //! Sets the rotation angle in degrees relative to the orientation of the camera. | |
668 | bool setRotation(int rotation); | |
669 | ||
670 | //! Gets the rotation angle in degrees relative to the orientation of the camera. | |
671 | int getRotation(void); | |
672 | ||
673 | //! Sets the scene mode. | |
674 | bool setSceneMode(int value); | |
675 | ||
676 | //! Enables and disables video stabilization. | |
677 | bool setVideoStabilization(bool toggle); | |
678 | ||
679 | //! Sets the white balance. | |
680 | bool setWhiteBalance(int value); | |
681 | ||
682 | //! Sets current zoom value. | |
683 | bool setZoom(int value); | |
684 | ||
685 | //void unflatten(String flattened) | |
686 | ||
687 | private: | |
688 | enum MODE | |
689 | { | |
690 | PREVIEW_MODE = 0, | |
691 | VIDEO_MODE, | |
692 | PICTURE_MODE, | |
693 | }; | |
694 | ||
695 | struct devInfo { | |
696 | int fd; | |
697 | pollfd events; | |
698 | bool flagStart; | |
699 | }; | |
700 | ||
701 | bool m_flagCreate; | |
702 | ||
703 | int m_cameraId; | |
704 | ||
705 | ExynosCameraInfo *m_defaultCameraInfo; | |
706 | ExynosCameraInfo *m_curCameraInfo; | |
707 | ||
708 | int m_jpegQuality; | |
709 | int m_jpegThumbnailQuality; | |
710 | ||
711 | int m_currentZoom; | |
564463a9 | 712 | bool m_recordingHint; |
20c51683 JC |
713 | |
714 | // v4l2 sub-dev file description | |
715 | devInfo m_sensorDev; | |
716 | devInfo m_mipiDev; | |
717 | devInfo m_fliteDev; | |
718 | devInfo m_gscPreviewDev; | |
719 | devInfo m_gscVideoDev; | |
720 | devInfo m_gscPictureDev; | |
721 | ||
48bac8e5 JS |
722 | #ifdef USE_DIGITAL_ZOOM |
723 | devInfo m_gscBayerDev; | |
724 | devInfo *m_bayerDev; | |
725 | #endif | |
726 | ||
20c51683 JC |
727 | devInfo *m_previewDev; |
728 | devInfo *m_videoDev; | |
729 | devInfo *m_pictureDev; | |
730 | ||
731 | bool m_tryPreviewStop; | |
732 | bool m_tryVideoStop; | |
733 | bool m_tryPictureStop; | |
734 | ||
735 | bool m_flagStartFaceDetection; | |
736 | bool m_flagAutoFocusRunning; | |
737 | ||
738 | char m_cameraName[32]; | |
739 | bool m_internalISP; | |
564463a9 | 740 | bool m_touchAFMode; |
48bac8e5 JS |
741 | bool m_isTouchMetering; |
742 | ||
743 | bool m_focusIdle; | |
20c51683 JC |
744 | |
745 | // media controller variable | |
746 | struct media_device *m_media; | |
747 | struct media_entity *m_sensorEntity; | |
748 | struct media_entity *m_mipiEntity; | |
749 | struct media_entity *m_fliteSdEntity; | |
750 | struct media_entity *m_fliteVdEntity; | |
751 | struct media_entity *m_gscSdEntity; | |
752 | struct media_entity *m_gscVdEntity; | |
753 | struct media_entity *m_ispSensorEntity; | |
754 | struct media_entity *m_ispFrontEntity; | |
755 | struct media_entity *m_ispBackEntity; | |
48bac8e5 | 756 | struct media_entity *m_ispBayerEntity; |
20c51683 JC |
757 | struct media_entity *m_ispScalercEntity; |
758 | struct media_entity *m_ispScalerpEntity; | |
759 | struct media_entity *m_isp3dnrEntity; | |
760 | ||
761 | bool m_validPreviewBuf[VIDEO_MAX_FRAME]; | |
762 | bool m_validVideoBuf[VIDEO_MAX_FRAME]; | |
763 | bool m_validPictureBuf[VIDEO_MAX_FRAME]; | |
764 | ||
765 | struct ExynosBuffer m_previewBuf[VIDEO_MAX_FRAME]; | |
766 | struct ExynosBuffer m_videoBuf[VIDEO_MAX_FRAME]; | |
767 | struct ExynosBuffer m_pictureBuf[VIDEO_MAX_FRAME]; | |
768 | ||
769 | exif_attribute_t mExifInfo; | |
770 | ||
771 | private: | |
772 | bool m_setWidthHeight(int mode, | |
773 | int fd, | |
774 | struct pollfd *event, | |
775 | int w, | |
776 | int h, | |
777 | int colorFormat, | |
778 | struct ExynosBuffer *buf, | |
779 | bool *validBuf); | |
780 | bool m_setZoom(int fd, int zoom, int w, int h); | |
781 | bool m_setCrop(int fd, int w, int h, int zoom); | |
782 | bool m_getCropRect(unsigned int src_w, unsigned int src_h, | |
783 | unsigned int dst_w, unsigned int dst_h, | |
784 | unsigned int *crop_x, unsigned int *crop_y, | |
785 | unsigned int *crop_w, unsigned int *crop_h, | |
786 | int zoom); | |
787 | ||
788 | void m_setExifFixedAttribute(void); | |
564463a9 | 789 | void m_setExifChangedAttribute(exif_attribute_t *exifInfo, ExynosRect *rect); |
20c51683 JC |
790 | void m_secRect2SecRect2(ExynosRect *rect, ExynosRect2 *rect2); |
791 | void m_secRect22SecRect(ExynosRect2 *rect2, ExynosRect *rect); | |
792 | void m_printFormat(int colorFormat, const char *arg); | |
793 | ||
794 | /////////////////////////////////////////////////// | |
795 | // Additional API. | |
796 | /////////////////////////////////////////////////// | |
797 | public: | |
48bac8e5 JS |
798 | //! Focus mode |
799 | enum { | |
800 | FOCUS_MODE_CONTINUOUS_PICTURE_MACRO = (1 << 8), //!< \n | |
801 | }; | |
802 | ||
20c51683 JC |
803 | //! Metering |
804 | enum { | |
805 | METERING_MODE_AVERAGE = (1 << 0), //!< \n | |
806 | METERING_MODE_CENTER = (1 << 1), //!< \n | |
807 | METERING_MODE_MATRIX = (1 << 2), //!< \n | |
808 | METERING_MODE_SPOT = (1 << 3), //!< \n | |
809 | }; | |
810 | ||
811 | //! Contrast | |
812 | enum { | |
813 | CONTRAST_AUTO = (1 << 0), //!< \n | |
814 | CONTRAST_MINUS_2 = (1 << 1), //!< \n | |
815 | CONTRAST_MINUS_1 = (1 << 2), //!< \n | |
816 | CONTRAST_DEFAULT = (1 << 3), //!< \n | |
817 | CONTRAST_PLUS_1 = (1 << 4), //!< \n | |
818 | CONTRAST_PLUS_2 = (1 << 5), //!< \n | |
819 | }; | |
820 | //! Camera Shot mode | |
821 | enum SHOT_MODE { | |
822 | SHOT_MODE_SINGLE = 0, //!< | |
823 | SHOT_MODE_CONTINUOUS = 1, //!< | |
824 | SHOT_MODE_PANORAMA = 2, //!< | |
825 | SHOT_MODE_SMILE = 3, //!< | |
826 | SHOT_MODE_SELF = 6, //!< | |
827 | }; | |
828 | ||
829 | //! Sets camera angle | |
830 | bool setAngle(int angle); | |
831 | ||
832 | //! Gets camera angle | |
833 | int getAngle(void); | |
834 | ||
835 | //! Sets metering areas. | |
836 | bool setMeteringMode(int value); | |
837 | //! Gets metering | |
838 | int getMeteringMode(void); | |
839 | ||
840 | //! Sets Top-down mirror | |
841 | bool setTopDownMirror(void); | |
842 | //! Sets Left-right mirror | |
843 | bool setLRMirror(void); | |
844 | ||
845 | //! Sets brightness | |
846 | bool setBrightness(int brightness); | |
847 | //! Gets brightness | |
848 | int getBrightness(void); | |
849 | ||
850 | //! Sets ISO | |
851 | bool setISO(int iso); | |
852 | //! Gets ISO | |
853 | int getISO(void); | |
854 | ||
855 | //! Sets Contrast | |
856 | bool setContrast(int value); | |
857 | //! Gets Contrast | |
858 | int getContrast(void); | |
859 | ||
860 | //! Sets Saturation | |
861 | bool setSaturation(int saturation); | |
862 | //! Gets Saturation | |
863 | int getSaturation(void); | |
864 | ||
865 | //! Sets Sharpness | |
866 | bool setSharpness(int sharpness); | |
867 | //! Gets Sharpness | |
868 | int getSharpness(void); | |
869 | ||
870 | // ! Sets Hue | |
871 | bool setHue(int hue); | |
872 | // ! Gets Hue | |
873 | int getHue(void); | |
874 | ||
875 | //! Sets WDR | |
876 | bool setWDR(bool toggle); | |
877 | //! Gets WDR | |
878 | bool getWDR(void); | |
879 | ||
880 | //! Sets anti shake | |
881 | bool setAntiShake(bool toggle); | |
882 | //! Gets anti shake | |
883 | bool getAntiShake(void); | |
884 | ||
885 | //! Sets object tracking | |
886 | bool setObjectTracking(bool toggle); | |
887 | //! Gets object tracking | |
888 | bool getObjectTracking(void); | |
889 | //! Start or stop object tracking operation | |
890 | bool setObjectTrackingStart(bool toggle); | |
891 | //! Gets status of object tracking operation | |
892 | int getObjectTrackingStatus(void); | |
893 | //! Sets x, y position for object tracking operation | |
894 | bool setObjectPosition(int x, int y); | |
895 | ||
896 | //! Sets smart auto | |
897 | bool setSmartAuto(bool toggle); | |
898 | //! Gets smart auto | |
899 | bool getSmartAuto(void); | |
900 | //! Gets the status of smart auto operation | |
901 | int getSmartAutoStatus(void); | |
902 | ||
903 | //! Sets beauty shot | |
904 | bool setBeautyShot(bool toggle); | |
905 | //! Gets beauty shot | |
906 | bool getBeautyShot(void); | |
907 | ||
908 | //! Start or stop the touch auto focus operation | |
909 | bool setTouchAFStart(bool toggle); | |
910 | ||
911 | //! Sets gamma | |
912 | bool setGamma(bool toggle); | |
913 | //! Gets gamma | |
914 | bool getGamma(void); | |
915 | ||
916 | //! Sets ODC | |
917 | bool setODC(bool toggle); | |
918 | //! Gets ODC | |
919 | bool getODC(void); | |
920 | ||
921 | //! Sets Slow AE | |
922 | bool setSlowAE(bool toggle); | |
923 | //! Gets Slow AE | |
924 | bool getSlowAE(void); | |
925 | ||
926 | //! Sets Shot mode | |
927 | bool setShotMode(int shotMode); | |
928 | //! Gets Shot mode | |
929 | int getShotMode(void); | |
930 | ||
931 | //! Sets 3DNR | |
932 | bool set3DNR(bool toggle); | |
933 | //! Gets 3DNR | |
934 | bool get3DNR(void); | |
935 | }; | |
936 | ||
564463a9 JS |
937 | }; // namespace android |
938 | ||
939 | #endif // EXYNOS_CAMERA_H__ |