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
59#include <videodev2.h>
60#include <videodev2_exynos_camera.h>
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
74#define ALIGN(x,  a)       (((x) + (a) - 1) & ~((a) - 1))
75namespace android {
76
77#define GAIA_FW_BETA                        1
78/* FIXME: This is for test. We remove this after test */
79#define USE_DIGITAL_ZOOM
80
81//! struct for Camera sensor information
82/*!
83 * \ingroup Exynos
84 */
85struct ExynosCameraInfo
86{
87public:
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;
133    bool supportVideoStabilization;
134    bool applyVideoStabilization;
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
171public:
172    ExynosCameraInfo();
173};
174
175struct ExynosCameraInfoM5M0 : public ExynosCameraInfo
176{
177public:
178    ExynosCameraInfoM5M0();
179};
180
181struct ExynosCameraInfoS5K6A3 : public ExynosCameraInfo
182{
183public:
184    ExynosCameraInfoS5K6A3();
185};
186
187struct ExynosCameraInfoS5K4E5 : public ExynosCameraInfo
188{
189public:
190    ExynosCameraInfoS5K4E5();
191};
192
193struct ExynosCameraInfoS5K3H7 : public ExynosCameraInfo
194{
195public:
196    ExynosCameraInfoS5K3H7();
197};
198
199//! ExynosCamera
200/*!
201 * \ingroup Exynos
202 */
203class ExynosCamera : public virtual RefBase {
204
205///////////////////////////////////////////////////
206// Google Official API : Camera.Parameters
207// http://developer.android.com/reference/android/hardware/Camera.Parameters.html
208///////////////////////////////////////////////////
209public:
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
246    //! Focus mode
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
255        FOCUS_MODE_TOUCH              = (1 << 7), //!< \n
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
298private:
299    //! Constructor
300    ExynosCamera();
301    //! Destructor
302    virtual ~ExynosCamera();
303
304public:
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
387    bool            yuv2Jpeg(ExynosBuffer *yuvBuf, ExynosBuffer *jpegBuf, ExynosRect *rect);
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
644    //! Cancel metering areas.
645    bool            cancelMeteringAreas();
646
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
687private:
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;
712    bool            m_recordingHint;
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
722#ifdef USE_DIGITAL_ZOOM
723    devInfo         m_gscBayerDev;
724    devInfo        *m_bayerDev;
725#endif
726
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;
740    bool            m_touchAFMode;
741    bool            m_isTouchMetering;
742
743    bool            m_focusIdle;
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;
756    struct media_entity *m_ispBayerEntity;
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
771private:
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);
789    void            m_setExifChangedAttribute(exif_attribute_t *exifInfo, ExynosRect *rect);
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///////////////////////////////////////////////////
797public:
798    //! Focus mode
799    enum {
800        FOCUS_MODE_CONTINUOUS_PICTURE_MACRO = (1 << 8), //!< \n
801    };
802
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
937}; // namespace android
938
939#endif // EXYNOS_CAMERA_H__
940