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)) 75 namespace 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 */ 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; 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 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 193 struct ExynosCameraInfoS5K3H7 : public ExynosCameraInfo 194 { 195 public: 196 ExynosCameraInfoS5K3H7(); 197 }; 198 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 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 298 private: 299 //! Constructor 300 ExynosCamera(); 301 //! Destructor 302 virtual ~ExynosCamera(); 303 304 public: 305 //! Gets the Camera instance createInstance(void)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 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; 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 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); 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 /////////////////////////////////////////////////// 797 public: 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