19426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/*
29426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * Copyright 2008, The Android Open Source Project
39426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * Copyright 2010, Samsung Electronics Co. LTD
49426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
59426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * Licensed under the Apache License, Version 2.0 (the "License");
69426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * you may not use this file except in compliance with the License.
79426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * You may obtain a copy of the License at
89426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
99426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *      http://www.apache.org/licenses/LICENSE-2.0
109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * Unless required by applicable law or agreed to in writing, software
129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * distributed under the License is distributed toggle an "AS IS" BASIS,
139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * See the License for the specific language governing permissions and
159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * limitations under the License.
169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin */
179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/*!
199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * \file      ExynosCamera.cpp
209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * \brief     source file for CAMERA HAL MODULE
219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * \author    thun.hwang(thun.hwang@samsung.com)
229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * \date      2010/06/03
239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * <b>Revision History: </b>
259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * - 2011/12/31 : thun.hwang(thun.hwang@samsung.com) \n
269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *   Initial version
279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * - 2012/01/18 : Sangwoo, Park(sw5771.park@samsung.com) \n
299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *   Adjust Doxygen Document
309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * - 2012/02/01 : Sangwoo, Park(sw5771.park@samsung.com) \n
329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *   Adjust libv4l2
339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *   Adjust struct ExynosCameraInfo
349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *   External ISP feature
359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * - 2012/03/14 : sangwoo.park(sw5771.park@samsung.com) \n
379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *   Change file, class name to ExynosXXX.
389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin */
399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/**
419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * @page ExynosCamera
429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * @section Introduction
449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * ExynosCamera is for camera preview,takePicture and recording.
459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * (Currently libseccamera is included in Android Camera HAL(libcamera.so).
469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * @section Copyright
489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *  Copyright (c) 2008-2011 Samsung Electronics Co., Ltd.All rights reserved. \n
499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *  Proprietary and Confidential
509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * @image html samsung.png
529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin */
539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin//#define LOG_NDEBUG 0
559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define LOG_TAG "ExynosCamera"
569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/* FIXME: This define will be removed when functions are stable */
589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin//#define USE_DIS
599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin//#define USE_3DNR
609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin//#define USE_ODC
619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <utils/Log.h>
639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include "ExynosCamera.h"
659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include "exynos_format.h"
669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinusing namespace android;
689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinnamespace android {
709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung ShinExynosCameraInfo::ExynosCameraInfo()
729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewW = 2560;
749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewH = 1920;
759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewColorFormat = V4L2_PIX_FMT_NV21;
769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoW = 1920;
779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoH = 1080;
789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    prefVideoPreviewW = 640;
799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    prefVideoPreviewH = 360;
809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoColorFormat = V4L2_PIX_FMT_NV12M;
819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureW = 2560;
829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureH = 1920;
839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureColorFormat = V4L2_PIX_FMT_YUYV;
849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    thumbnailW = 320;
859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    thumbnailH = 240;
869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiBandingList =
889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::ANTIBANDING_OFF
899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_50HZ
909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_60HZ
919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_OFF;
929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiBanding = ExynosCamera::ANTIBANDING_OFF;
939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    effectList =
959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::EFFECT_NONE
969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_MONO
979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_NEGATIVE
989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_SOLARIZE
999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_SEPIA
1009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_POSTERIZE
1019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_WHITEBOARD
1029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_BLACKBOARD
1039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_AQUA;
1049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    effect = ExynosCamera::EFFECT_NONE;
1059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    flashModeList =
1079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::FLASH_MODE_OFF
1089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_AUTO
1099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_ON
1109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_RED_EYE
1119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_TORCH;
1129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    flashMode = ExynosCamera::FLASH_MODE_OFF;
1139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focusModeList =
1159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::FOCUS_MODE_AUTO
1169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_INFINITY
1179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_MACRO
1189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_FIXED
1199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_EDOF
1209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_CONTINUOUS_VIDEO
1219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_CONTINUOUS_PICTURE
1229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_TOUCH;
1239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focusMode = ExynosCamera::FOCUS_MODE_AUTO;
1249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sceneModeList =
1269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::SCENE_MODE_AUTO
1279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_ACTION
1289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_PORTRAIT
1299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_LANDSCAPE
1309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_NIGHT
1319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_NIGHT_PORTRAIT
1329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_THEATRE
1339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_BEACH
1349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SNOW
1359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SUNSET
1369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_STEADYPHOTO
1379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_FIREWORKS
1389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SPORTS
1399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_PARTY
1409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_CANDLELIGHT;
1419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sceneMode = ExynosCamera::SCENE_MODE_AUTO;
1429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    whiteBalanceList =
1449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::WHITE_BALANCE_AUTO
1459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_INCANDESCENT
1469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_FLUORESCENT
1479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_WARM_FLUORESCENT
1489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_DAYLIGHT
1499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_CLOUDY_DAYLIGHT
1509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_TWILIGHT
1519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_SHADE;
1529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    whiteBalance = ExynosCamera::WHITE_BALANCE_AUTO;
1539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoWhiteBalanceLockSupported = false;
1559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoWhiteBalanceLock = false;
1569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rotation = 0;
1589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    minExposure = -2;
1599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxExposure = 2;
1609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exposure = 0;
1619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoExposureLockSupported = false;
1639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoExposureLock = false;
1649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    fps = 30;
1669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focalLengthNum = 9;
1679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focalLengthDen = 10;
1689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    supportVideoStabilization = false;
1699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    applyVideoStabilization = false;
1709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoStabilization = false;
1719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumMeteringAreas = 0;
1729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumDetectedFaces = 0;
1739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumFocusAreas = 0;
1749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxZoom = ZOOM_LEVEL_MAX;
1759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    hwZoomSupported = false;
1769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    zoom = 0;
1779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsAltitude = 0;
1789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsLatitude = 0;
1799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsLongitude = 0;
1809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsTimestamp = 0;
1819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
1829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // Additional API default Value.
1839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    angle = 0;
1849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiShake = false;
1859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    beautyShot = false;
1869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    brightness = 0;
1879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    contrast = ExynosCamera::CONTRAST_DEFAULT;
1889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gamma = false;
1899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    hue = 2; // 2 is default;
1909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    iso = 0;
1919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    metering = ExynosCamera::METERING_MODE_CENTER;
1929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    objectTracking = false;
1939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    objectTrackingStart = false;
1949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    saturation = 0;
1959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sharpness = 0;
1969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    shotMode = ExynosCamera::SHOT_MODE_SINGLE;
1979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    slowAE = false;
1989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    smartAuto = false;
1999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    touchAfStart = false;
2009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    wdr = false;
2019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    tdnr = false;
2029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    odc = false;
2039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
2049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung ShinExynosCameraInfoM5M0::ExynosCameraInfoM5M0()
2069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
2079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewW = 1280;
2089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewH = 720;
2099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewColorFormat = V4L2_PIX_FMT_YVU420M;
2109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoW = 1280;
2119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoH = 720;
2129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    prefVideoPreviewW = 640;
2139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    prefVideoPreviewH = 360;
2149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoColorFormat = V4L2_PIX_FMT_NV12M;
2159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureW = 1280;
2169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureH = 720;
2179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureColorFormat = V4L2_PIX_FMT_YUYV;
2189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    thumbnailW = 320;
2199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    thumbnailH = 240;
2209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiBandingList = ExynosCamera::ANTIBANDING_OFF;
2229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiBanding = ExynosCamera::ANTIBANDING_OFF;
2239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    effectList =
2259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::EFFECT_NONE
2269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_MONO
2279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_NEGATIVE
2289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_SOLARIZE
2299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_SEPIA
2309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_POSTERIZE
2319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_WHITEBOARD
2329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_BLACKBOARD
2339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_AQUA;
2349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    effect = ExynosCamera::EFFECT_NONE;
2359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    flashModeList =
2379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::FLASH_MODE_OFF
2389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_AUTO
2399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_ON
2409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_RED_EYE
2419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_TORCH;
2429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    flashMode = ExynosCamera::FLASH_MODE_OFF;
2439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focusModeList =
2459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::FOCUS_MODE_AUTO
2469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_INFINITY
2479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_MACRO
2489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_FIXED
2499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_EDOF
2509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_CONTINUOUS_VIDEO
2519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_CONTINUOUS_PICTURE
2529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_TOUCH
2539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
2549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focusMode = ExynosCamera::FOCUS_MODE_AUTO;
2559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sceneModeList =
2579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::SCENE_MODE_AUTO
2589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_ACTION
2599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_PORTRAIT
2609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_LANDSCAPE
2619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_NIGHT
2629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_NIGHT_PORTRAIT
2639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_THEATRE
2649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_BEACH
2659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SNOW
2669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SUNSET
2679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_STEADYPHOTO
2689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_FIREWORKS
2699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SPORTS
2709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_PARTY
2719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_CANDLELIGHT;
2729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sceneMode = ExynosCamera::SCENE_MODE_AUTO;
2739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    whiteBalanceList =
2759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::WHITE_BALANCE_AUTO
2769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_INCANDESCENT
2779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_FLUORESCENT
2789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_WARM_FLUORESCENT
2799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_DAYLIGHT
2809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_CLOUDY_DAYLIGHT
2819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_TWILIGHT
2829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_SHADE
2839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
2849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    whiteBalance = ExynosCamera::WHITE_BALANCE_AUTO;
2859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoWhiteBalanceLockSupported = false;
2879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoWhiteBalanceLock = false;
2889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rotation = 0;
2909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    minExposure = -2;
2919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxExposure = 2;
2929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exposure = 0;
2939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoExposureLockSupported = false;
2959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoExposureLock = false;
2969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
2979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    fps = 30;
2989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focalLengthNum = 343;
2999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focalLengthDen = 100;
3009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    supportVideoStabilization = false;
3019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    applyVideoStabilization = false;
3029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoStabilization = false;
3039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumMeteringAreas = 64;
3049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumDetectedFaces = 16;
3059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumFocusAreas = 2;
3069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxZoom = ZOOM_LEVEL_MAX;
3079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    hwZoomSupported = false;
3089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    zoom = 0;
3099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsAltitude = 0;
3109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsLatitude = 0;
3119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsLongitude = 0;
3129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsTimestamp = 0;
3139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
3149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
3159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung ShinExynosCameraInfoS5K6A3::ExynosCameraInfoS5K6A3()
3169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
3179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewW = 1280;
3189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewH =  720;
3199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewColorFormat = V4L2_PIX_FMT_YVU420M;
3209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoW = 1280;
3219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoH =  720;
3229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    prefVideoPreviewW = 640;
3239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    prefVideoPreviewH = 360;
3249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoColorFormat = V4L2_PIX_FMT_NV12M;
3259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureW = 1280;
3269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureH =  720;
3279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureColorFormat = V4L2_PIX_FMT_YUYV;
3289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    thumbnailW = 320;
3299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    thumbnailH = 240;
3309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
3319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiBandingList =
3329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::ANTIBANDING_OFF
3339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_50HZ
3349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_60HZ
3359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_OFF;
3369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiBanding = ExynosCamera::ANTIBANDING_OFF;
3379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
3389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    effectList =
3399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::EFFECT_NONE
3409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_MONO
3419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_NEGATIVE
3429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_SOLARIZE
3439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_SEPIA
3449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_POSTERIZE
3459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_WHITEBOARD
3469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_BLACKBOARD
3479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_AQUA
3489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
3499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    effect = ExynosCamera::EFFECT_NONE;
3509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
3519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    flashModeList =
3529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::FLASH_MODE_OFF
3539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FLASH_MODE_AUTO
3549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FLASH_MODE_ON
3559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FLASH_MODE_RED_EYE
3569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FLASH_MODE_TORCH
3579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
3589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    flashMode = ExynosCamera::FLASH_MODE_OFF;
3599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
3609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focusModeList =
3619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //  ExynosCamera::FOCUS_MODE_AUTO
3629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_INFINITY
3639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_MACRO
3649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //|
3659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ExynosCamera::FOCUS_MODE_FIXED
3669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_EDOF
3679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_CONTINUOUS_VIDEO
3689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_CONTINUOUS_PICTURE
3699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_TOUCH
3709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
3719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focusMode = ExynosCamera::FOCUS_MODE_FIXED;
3729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
3739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sceneModeList =
3749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::SCENE_MODE_AUTO
3759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_ACTION
3769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_PORTRAIT
3779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_LANDSCAPE
3789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_NIGHT
3799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_NIGHT_PORTRAIT
3809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_THEATRE
3819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_BEACH
3829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SNOW
3839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SUNSET
3849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_STEADYPHOTO
3859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_FIREWORKS
3869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SPORTS
3879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_PARTY
3889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_CANDLELIGHT;
3899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sceneMode = ExynosCamera::SCENE_MODE_AUTO;
3909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
3919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    whiteBalanceList =
3929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::WHITE_BALANCE_AUTO
3939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_INCANDESCENT
3949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_FLUORESCENT
3959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_WARM_FLUORESCENT
3969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_DAYLIGHT
3979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_CLOUDY_DAYLIGHT
3989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_TWILIGHT
3999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_SHADE
4009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
4019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    whiteBalance = ExynosCamera::WHITE_BALANCE_AUTO;
4029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoWhiteBalanceLockSupported = true;
4049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoWhiteBalanceLock = false;
4059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rotation = 0;
4079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    minExposure = -2;
4089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxExposure = 2;
4099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exposure = 0;
4109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoExposureLockSupported = true;
4129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoExposureLock = false;
4139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    fps = 30;
4159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focalLengthNum = 9;
4169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focalLengthDen = 10;
4179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    supportVideoStabilization = false;
4189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    applyVideoStabilization = false;
4199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoStabilization = false;
4209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumMeteringAreas = 64;
4219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumDetectedFaces = 16;
4229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumFocusAreas = 0;
4239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxZoom = ZOOM_LEVEL_MAX;
4249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    hwZoomSupported = false;
4259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    zoom = 0;
4269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsAltitude = 0;
4279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsLatitude = 0;
4289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsLongitude = 0;
4299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsTimestamp = 0;
4309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
4319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung ShinExynosCameraInfoS5K4E5::ExynosCameraInfoS5K4E5()
4339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
4349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewW = 1920;
4359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewH = 1080;
4369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    previewColorFormat = V4L2_PIX_FMT_YVU420M;
4379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoW = 1920;
4389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoH = 1080;
4399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    prefVideoPreviewW = 640;
4409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    prefVideoPreviewH = 360;
4419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoColorFormat = V4L2_PIX_FMT_NV12M;
4429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureW = 2560;
4439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureH = 1920;
4449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    pictureColorFormat = V4L2_PIX_FMT_YUYV;
4459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    thumbnailW = 320;
4469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    thumbnailH = 240;
4479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiBandingList =
4499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::ANTIBANDING_OFF
4509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_50HZ
4519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_60HZ
4529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::ANTIBANDING_OFF;
4539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    antiBanding = ExynosCamera::ANTIBANDING_OFF;
4549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    effectList =
4569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::EFFECT_NONE
4579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_MONO
4589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_NEGATIVE
4599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_SOLARIZE
4609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::EFFECT_SEPIA
4619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_POSTERIZE
4629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_WHITEBOARD
4639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_BLACKBOARD
4649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::EFFECT_AQUA
4659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
4669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    effect = ExynosCamera::EFFECT_NONE;
4679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    flashModeList =
4699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::FLASH_MODE_OFF
4709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_AUTO
4719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_ON
4729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FLASH_MODE_RED_EYE
4739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FLASH_MODE_TORCH;
4749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    flashMode = ExynosCamera::FLASH_MODE_OFF;
4759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focusModeList =
4779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::FOCUS_MODE_AUTO
4789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_INFINITY
4799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_MACRO
4809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_FIXED
4819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::FOCUS_MODE_EDOF
4829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_CONTINUOUS_VIDEO
48388cc230929f380e97a664d83299a7cf7deb45ac7Dima Zavin    //    | ExynosCamera::FOCUS_MODE_CONTINUOUS_PICTURE
4849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::FOCUS_MODE_TOUCH
4859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
4869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focusMode = ExynosCamera::FOCUS_MODE_AUTO;
4879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
4889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sceneModeList =
4899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::SCENE_MODE_AUTO
4909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_ACTION
4919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_PORTRAIT
4929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_LANDSCAPE
4939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_NIGHT
4949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_NIGHT_PORTRAIT
4959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::SCENE_MODE_THEATRE
4969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_BEACH
4979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SNOW
4989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SUNSET
4999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_STEADYPHOTO
5009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_FIREWORKS
5019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_SPORTS
5029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_PARTY
5039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::SCENE_MODE_CANDLELIGHT;
5049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sceneMode = ExynosCamera::SCENE_MODE_AUTO;
5059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    whiteBalanceList =
5079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin          ExynosCamera::WHITE_BALANCE_AUTO
5089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_INCANDESCENT
5099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_FLUORESCENT
5109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_WARM_FLUORESCENT
5119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_DAYLIGHT
5129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        | ExynosCamera::WHITE_BALANCE_CLOUDY_DAYLIGHT
5139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_TWILIGHT
5149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //| ExynosCamera::WHITE_BALANCE_SHADE
5159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ;
5169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    whiteBalance = ExynosCamera::WHITE_BALANCE_AUTO;
5179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoWhiteBalanceLockSupported = true;
5199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoWhiteBalanceLock = false;
5209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rotation = 0;
5229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    minExposure = -2;
5239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxExposure = 2;
5249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exposure = 0;
5259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoExposureLockSupported = true;
5279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    autoExposureLock = false;
5289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    fps = 30;
5309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focalLengthNum = 9;
5319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    focalLengthDen = 10;
5329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    supportVideoStabilization = true;
5339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    applyVideoStabilization = false;
5349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    videoStabilization = false;
5359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumMeteringAreas = 64;
5369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumDetectedFaces = 16;
5379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxNumFocusAreas = 2;
5389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    maxZoom = ZOOM_LEVEL_MAX;
5399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    hwZoomSupported = false;
5409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    zoom = 0;
5419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsAltitude = 0;
5429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsLatitude = 0;
5439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsLongitude = 0;
5449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    gpsTimestamp = 0;
5459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
5469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin//////////////////////////////////////////////////
5489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define PFX_NODE                            "/dev/video"
5509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define M5MOLS_ENTITY_NAME                  "M5MOLS 5-001f"
5529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define PFX_SUBDEV_ENTITY_MIPI_CSIS         "s5p-mipi-csis"
5539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define PFX_SUBDEV_ENTITY_FLITE             "flite-subdev"
5549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define PFX_SUBDEV_ENTITY_GSC_CAP           "gsc-cap-subdev"
5559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define PFX_VIDEODEV_ENTITY_FLITE           "exynos-fimc-lite"
5569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define PFX_VIDEODEV_ENTITY_GSC_CAP         "exynos-gsc"
5579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define MEDIA_DEV_INTERNAL_ISP              "/dev/media2"
5599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define MEDIA_DEV_EXTERNAL_ISP              "/dev/media1"
5609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_VD_NODE_OFFSET                  (40)              //INTERNAL_ISP
5619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define FLITE_VD_NODE_OFFSET                (36)              //External ISP
5629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define VIDEO_NODE_PREVIEW_ID               (3)
5649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define VIDEO_NODE_RECODING_ID              (2)
5659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define VIDEO_NODE_SNAPSHOT_ID              (1)
5669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_SENSOR_MAX_ENTITIES             1
5689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_SENSOR_PAD_SOURCE_FRONT         0
5699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_SENSOR_PADS_NUM                 1
5709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_FRONT_MAX_ENTITIES              1
5729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_FRONT_PAD_SINK                  0
5739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_FRONT_PAD_SOURCE_BACK           1
5749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_FRONT_PAD_SOURCE_BAYER          2
5759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_FRONT_PAD_SOURCE_SCALERC        3
5769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_FRONT_PADS_NUM                  4
5779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_BACK_MAX_ENTITIES               1
5799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_BACK_PAD_SINK                   0
5809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_BACK_PAD_SOURCE_3DNR            1
5819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_BACK_PAD_SOURCE_SCALERP         2
5829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_BACK_PADS_NUM                   3
5839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_MODULE_NAME                     "exynos5-fimc-is"
5859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_SENSOR_ENTITY_NAME              "exynos5-fimc-is-sensor"
5869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_FRONT_ENTITY_NAME               "exynos5-fimc-is-front"
5879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_BACK_ENTITY_NAME                "exynos5-fimc-is-back"
5889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_VIDEO_BAYER_NAME                "exynos5-fimc-is-bayer"
5899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_VIDEO_SCALERC_NAME              "exynos5-fimc-is-scalerc"
5909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_VIDEO_3DNR_NAME                 "exynos5-fimc-is-3dnr"
5919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define ISP_VIDEO_SCALERP_NAME              "exynos5-fimc-is-scalerp"
5929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define MIPI_NUM                            1
5949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define FLITE_NUM                           1
5959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define GSC_NUM                             0
5969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define PFX_SUBDEV_NODE                     "/dev/v4l-subdev"
5989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
5999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/*
6009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * V 4 L 2   F I M C   E X T E N S I O N S
6019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *
6029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin */
6039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_ROTATION                   (V4L2_CID_PRIVATE_BASE + 0)
6049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_PADDR_Y                    (V4L2_CID_PRIVATE_BASE + 1)
6059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_PADDR_CB                   (V4L2_CID_PRIVATE_BASE + 2)
6069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_PADDR_CR                   (V4L2_CID_PRIVATE_BASE + 3)
6079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_PADDR_CBCR                 (V4L2_CID_PRIVATE_BASE + 4)
6089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_STREAM_PAUSE               (V4L2_CID_PRIVATE_BASE + 53)
6099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_CAM_JPEG_MAIN_SIZE         (V4L2_CID_PRIVATE_BASE + 32)
6119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_CAM_JPEG_MAIN_OFFSET       (V4L2_CID_PRIVATE_BASE + 33)
6129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_CAM_JPEG_THUMB_SIZE        (V4L2_CID_PRIVATE_BASE + 34)
6139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_CAM_JPEG_THUMB_OFFSET      (V4L2_CID_PRIVATE_BASE + 35)
6149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_CAM_JPEG_POSTVIEW_OFFSET   (V4L2_CID_PRIVATE_BASE + 36)
6159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_CID_CAM_JPEG_QUALITY           (V4L2_CID_PRIVATE_BASE + 37)
6169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_PIX_FMT_YVYU           v4l2_fourcc('Y', 'V', 'Y', 'U')
6189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/* FOURCC for FIMC specific */
6209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_PIX_FMT_VYUY           v4l2_fourcc('V', 'Y', 'U', 'Y')
6219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_PIX_FMT_NV16           v4l2_fourcc('N', 'V', '1', '6')
6229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_PIX_FMT_NV61           v4l2_fourcc('N', 'V', '6', '1')
6239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define V4L2_PIX_FMT_NV12T          v4l2_fourcc('T', 'V', '1', '2')
6249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin///////////////////////////////////////////////////
6269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin// Google Official API : Camera.Parameters
6279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin// http://developer.android.com/reference/android/hardware/Camera.Parameters.html
6289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin///////////////////////////////////////////////////
6299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung ShinExynosCamera::ExynosCamera() :
6319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_flagCreate(false),
6329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_cameraId(CAMERA_ID_BACK),
6339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_defaultCameraInfo(NULL),
6349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo(NULL),
6359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_jpegQuality(100),
6369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_jpegThumbnailQuality(100),
6379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_currentZoom(-1)
6389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
6399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&m_sensorDev, 0, sizeof(struct devInfo));
6409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&m_mipiDev, 0, sizeof(struct devInfo));
6419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&m_fliteDev, 0, sizeof(struct devInfo));
6429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&m_gscPreviewDev, 0, sizeof(struct devInfo));
6439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&m_gscVideoDev, 0, sizeof(struct devInfo));
6449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&m_gscPictureDev, 0, sizeof(struct devInfo));
6459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_previewDev = NULL;
6479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_videoDev   = NULL;
6489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_pictureDev = NULL;
6499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_tryPreviewStop = true;
6519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_tryVideoStop   = true;
6529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_tryPictureStop = true;
6539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_flagStartFaceDetection = false;
6559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_flagAutoFocusRunning = false;
6569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_sensorEntity = NULL;
6589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_mipiEntity = NULL;
6599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_fliteSdEntity = NULL;
6609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_fliteVdEntity = NULL;
6619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_gscSdEntity = NULL;
6629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_gscVdEntity = NULL;
6639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_ispSensorEntity = NULL;
6649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_ispFrontEntity = NULL;
6659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_ispBackEntity = NULL;
6669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_ispScalercEntity = NULL;
6679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_ispScalerpEntity = NULL;
6689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_isp3dnrEntity = NULL;
6699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < VIDEO_MAX_FRAME; i++) {
6729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_validPreviewBuf[i] = false;
6739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_validVideoBuf  [i] = false;
6749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_validPictureBuf[i] = false;
6759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
6769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset((void *)m_cameraName, 0, 32);
6789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_internalISP = true;
6809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_media = NULL;
6819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&mExifInfo, 0, sizeof(mExifInfo));
6839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
6849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung ShinExynosCamera::~ExynosCamera()
6869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
6879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == true)
6889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        destroy();
6899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
6909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::create(int cameraId)
6929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
6939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int ret = 0;
6949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int i;
6959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int devNum;
6969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    char node[30];
6979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
6989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct media_link   *links = NULL;
6999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == true) {
701f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Already created", __func__);
7029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
7039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
7049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_cameraId = cameraId;
7069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ExynosBuffer nullBuf;
7089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < VIDEO_MAX_FRAME; i++) {
7109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_validPreviewBuf[i] = false;
7119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_validVideoBuf  [i] = false;
7129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_validPictureBuf[i] = false;
7139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_previewBuf[i] = nullBuf;
7159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_videoBuf[i]   = nullBuf;
7169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_pictureBuf[i] = nullBuf;
7179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
7189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_cameraId == CAMERA_ID_BACK)
7209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_internalISP = true;
7219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // m_internalISP = false; // external ISP.
7229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else
7239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_internalISP = true;
7249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
7269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////////////////
7279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //  internal ISP
7289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////////////////
7299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // media device open
7309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_media = exynos_media_open(MEDIA_DEV_INTERNAL_ISP);
7319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_media == NULL) {
732f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Cannot open media device (error : %s)", __func__, strerror(errno));
7339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
7349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
7359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////
7379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // GET ENTITIES
7389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////
7399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // ISP sensor subdev
7409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        memset(&node, 0x00, sizeof(node));
7419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(node, ISP_SENSOR_ENTITY_NAME);
7429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_ispSensorEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
7439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // ISP front subdev
7459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        memset(&node, 0x00, sizeof(node));
7469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(node, ISP_FRONT_ENTITY_NAME);
7479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_ispFrontEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
7489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // ISP back subdev
7509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        memset(&node, 0x00, sizeof(node));
7519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(node, ISP_BACK_ENTITY_NAME);
7529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_ispBackEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
7539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // ISP ScalerC video node
7559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        memset(&node, 0x00, sizeof(node));
7569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(node, ISP_VIDEO_SCALERC_NAME);
7579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_ispScalercEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
7589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // ISP ScalerP video node
7609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        memset(&node, 0x00, sizeof(node));
7619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(node, ISP_VIDEO_SCALERP_NAME);
7629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_ispScalerpEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
7639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // ISP 3DNR video node
7659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        memset(&node, 0x00, sizeof(node));
7669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(node, ISP_VIDEO_3DNR_NAME);
7679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_isp3dnrEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
7689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
769f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_ispSensorEntity  : numlink : %d", __func__, m_ispSensorEntity->num_links);
770f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_ispFrontEntity   : numlink : %d", __func__, m_ispFrontEntity->num_links);
771f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_ispBackEntity    : numlink : %d", __func__, m_ispBackEntity->num_links);
772f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_ispScalercEntity : numlink : %d", __func__, m_ispScalercEntity->num_links);
773f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_ispScalerpEntity : numlink : %d", __func__, m_ispScalerpEntity->num_links);
774f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_isp3dnrEntity    : numlink : %d", __func__, m_isp3dnrEntity->num_links);
7759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////
7779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // SETUP LINKS
7789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////
7799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // SENSOR TO FRONT
7809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        links = m_ispSensorEntity->links;
7819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (links == NULL ||
7829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links->source->entity != m_ispSensorEntity ||
7839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links->sink->entity != m_ispFrontEntity) {
784f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Can not make link isp_sensor to isp_front", __func__);
7859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
7869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        } else if (exynos_media_setup_link(m_media, links->source, links->sink, MEDIA_LNK_FL_ENABLED) < 0) {
787f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Can not make setup isp_sensor to isp_front", __func__);
7889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
7899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
790f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):[LINK SUCCESS] Sensor to front", __func__);
7919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
7929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // FRONT TO BACK
7939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        for (i = 0; i < m_ispFrontEntity->num_links; i++) {
7949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links = &m_ispFrontEntity->links[i];
7959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (links == NULL ||
7969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->source->entity != m_ispFrontEntity ||
7979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->sink->entity != m_ispBackEntity) {
798f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGV("DEBUG(%s):i=%d: links->source->entity : %p, m_ispFrontEntity : %p", __func__, i,
7999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->source->entity, m_ispFrontEntity);
800f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGV("DEBUG(%s):i=%d: links->sink->entity : %p, m_ispBackEntity : %p", __func__, i,
8019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->sink->entity, m_ispBackEntity);
8029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                continue;
8039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else if (exynos_media_setup_link(m_media, links->source, links->sink, MEDIA_LNK_FL_ENABLED) < 0) {
804f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):Can not make setup isp_front to isp_back", __func__);
8059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                goto err;
8069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
8079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
808f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):[LINK SUCCESS] front to back", __func__);
8099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // BACK TO ScalerP Video
8119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        for (i = 0; i < m_ispBackEntity->num_links; i++) {
8129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links = &m_ispBackEntity->links[i];
8139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (links == NULL ||
8149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->source->entity != m_ispBackEntity ||
8159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->sink->entity != m_ispScalerpEntity) {
816f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGV("DEBUG(%s):i=%d: links->source->entity : %p, m_ispBackEntity : %p", __func__, i,
8179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->source->entity, m_ispBackEntity);
818f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGV("DEBUG(%s):i=%d: links->sink->entity : %p, m_ispScalerpEntity : %p", __func__, i,
8199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->sink->entity, m_ispScalerpEntity);
8209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                continue;
8219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else if (exynos_media_setup_link(m_media, links->source, links->sink, MEDIA_LNK_FL_ENABLED) < 0) {
822f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):Can not make setup isp_back to scalerP", __func__);
8239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                goto err;
8249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
8259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
826f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):[LINK SUCCESS] back to scalerP", __func__);
8279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s%d", PFX_NODE, (ISP_VD_NODE_OFFSET + VIDEO_NODE_PREVIEW_ID));
8299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_gscPreviewDev.fd = exynos_v4l2_open(node, O_RDWR, 0);
8309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_gscPreviewDev.fd <= 0) {
831f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_open(%s) fail (error : %s)", __func__, node, strerror(errno));
8329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
8339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
8349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_previewDev = &m_gscPreviewDev;
8359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s%d", PFX_NODE, (ISP_VD_NODE_OFFSET + VIDEO_NODE_RECODING_ID));
8379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_gscVideoDev.fd = exynos_v4l2_open(node, O_RDWR, 0);
8389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_gscVideoDev.fd <= 0) {
839f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_open(%s) fail (error : %s)", __func__, node, strerror(errno));
8409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
8419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
8429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_videoDev = &m_gscVideoDev;
8439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s%d", PFX_NODE, (ISP_VD_NODE_OFFSET + VIDEO_NODE_SNAPSHOT_ID));
8459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_gscPictureDev.fd = exynos_v4l2_open(node, O_RDWR, 0);
8469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_gscPictureDev.fd <= 0) {
847f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_open(%s) fail (error : %s)", __func__, node, strerror(errno));
8489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
8499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
8509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_pictureDev = &m_gscPictureDev;
8519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
8539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////////////////
8549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //  external ISP
8559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////////////////
8569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // media device open
8579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_media = exynos_media_open(MEDIA_DEV_EXTERNAL_ISP);
8589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_media == NULL) {
859f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Cannot open media device (error : %s)", __func__, strerror(errno));
8609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
8619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
8629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////
8649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // GET ENTITIES
8659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////
8669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // camera subdev
8679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(node, M5MOLS_ENTITY_NAME);
868f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):node : %s", __func__, node);
8699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_sensorEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
870f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_sensorEntity : 0x%p", __func__, m_sensorEntity);
8719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // mipi subdev
8739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s.%d", PFX_SUBDEV_ENTITY_MIPI_CSIS, MIPI_NUM);
874f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):node : %s", __func__, node);
8759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_mipiEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
876f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_mipiEntity : 0x%p", __func__, m_mipiEntity);
8779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // fimc-lite subdev
8799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s.%d", PFX_SUBDEV_ENTITY_FLITE, FLITE_NUM);
880f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):node : %s", __func__, node);
8819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_fliteSdEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
882f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_fliteSdEntity : 0x%p", __func__, m_fliteSdEntity);
8839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // fimc-lite videodev
8859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s.%d", PFX_VIDEODEV_ENTITY_FLITE, FLITE_NUM);
886f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):node : %s", __func__, node);
8879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_fliteVdEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
888f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_fliteVdEntity : 0x%p", __func__, m_fliteVdEntity);
8899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // gscaler subdev
8919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s.%d", PFX_SUBDEV_ENTITY_GSC_CAP, GSC_NUM);
892f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):node : %s", __func__, node);
8939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_gscSdEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
894f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_gscSdEntity : 0x%p", __func__, m_gscSdEntity);
8959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
8969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // gscaler videodev
8979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s.%d", PFX_VIDEODEV_ENTITY_GSC_CAP, GSC_NUM);
898f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):node : %s", __func__, node);
8999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_gscVdEntity = exynos_media_get_entity_by_name(m_media, node, strlen(node));
900f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_gscVdEntity : 0x%p", __func__, m_gscVdEntity);
9019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
902f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):sensor_sd : numlink : %d", __func__, m_sensorEntity->num_links);
903f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):mipi_sd   : numlink : %d", __func__, m_mipiEntity->num_links);
904f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):flite_sd  : numlink : %d", __func__, m_fliteSdEntity->num_links);
905f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):flite_vd  : numlink : %d", __func__, m_fliteVdEntity->num_links);
906f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):gsc_sd    : numlink : %d", __func__, m_gscSdEntity->num_links);
907f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):gsc_vd    : numlink : %d", __func__, m_gscVdEntity->num_links);
9089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
9099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////
9109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // SETUP LINKS
9119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //////////////////
9129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // sensor subdev to mipi subdev
9139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        links = m_sensorEntity->links;
9149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (links == NULL ||
9159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links->source->entity != m_sensorEntity ||
9169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links->sink->entity != m_mipiEntity) {
917f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Cannot make link camera sensor to mipi", __func__);
9189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
9199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
9209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
9219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_media_setup_link(m_media,  links->source,  links->sink, MEDIA_LNK_FL_ENABLED) < 0) {
922f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Cannot make setup camera sensor to mipi", __func__);
9239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
9249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
925f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):[LINK SUCCESS] sensor subdev to mipi subdev", __func__);
9269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
9279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // mipi subdev to fimc-lite subdev
9289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        for (i = 0; i < m_mipiEntity->num_links; i++) {
9299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links = &m_mipiEntity->links[i];
930f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("DEBUG(%s):i=%d: links->source->entity : %p, m_mipiEntity : %p", __func__, i,
9319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->source->entity, m_mipiEntity);
932f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("DEBUG(%s):i=%d: links->sink->entity : %p, m_fliteSdEntity : %p", __func__, i,
9339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->sink->entity, m_fliteSdEntity);
9349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (links == NULL ||
9359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->source->entity != m_mipiEntity ||
9369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->sink->entity != m_fliteSdEntity) {
9379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                continue;
9389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else if (exynos_media_setup_link(m_media,  links->source,  links->sink, MEDIA_LNK_FL_ENABLED) < 0) {
939f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):Cannot make setup mipi subdev to fimc-lite subdev", __func__);
9409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                goto err;
9419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
9429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
943f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):[LINK SUCCESS] mipi subdev to fimc-lite subdev", __func__);
9449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
9459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // fimc-lite subdev TO fimc-lite video dev
9469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        for (i = 0; i < m_fliteSdEntity->num_links; i++) {
9479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links = &m_fliteSdEntity->links[i];
948f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("DEBUG(%s):i=%d: links->source->entity : %p, m_fliteSdEntity : %p", __func__, i,
9499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->source->entity, m_fliteSdEntity);
950f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("DEBUG(%s):i=%d: links->sink->entity : %p, m_fliteVdEntity : %p", __func__, i,
9519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->sink->entity, m_fliteVdEntity);
9529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (links == NULL ||
9539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->source->entity != m_fliteSdEntity ||
9549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->sink->entity != m_fliteVdEntity) {
9559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                continue;
9569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else if (exynos_media_setup_link(m_media,  links->source,  links->sink, MEDIA_LNK_FL_ENABLED) < 0) {
957f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):Cannot make setup fimc-lite subdev to fimc-lite video dev", __func__);
9589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                goto err;
9599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
9609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
961f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):[LINK SUCCESS] fimc-lite subdev to fimc-lite video dev", __func__);
9629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
9639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // fimc-lite subdev to gscaler subdev
9649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        for (i = 0; i < m_gscSdEntity->num_links; i++) {
9659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links = &m_gscSdEntity->links[i];
966f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("DEBUG(%s):i=%d: links->source->entity : %p, m_fliteSdEntity : %p", __func__, i,
9679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->source->entity, m_fliteSdEntity);
968f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("DEBUG(%s):i=%d: links->sink->entity : %p, m_gscSdEntity : %p", __func__, i,
9699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->sink->entity, m_gscSdEntity);
9709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (links == NULL ||
9719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->source->entity != m_fliteSdEntity ||
9729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->sink->entity != m_gscSdEntity) {
9739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                continue;
9749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else if (exynos_media_setup_link(m_media, links->source, links->sink, MEDIA_LNK_FL_ENABLED) < 0) {
975f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):Cannot make setup fimc-lite subdev to gscaler subdev", __func__);
9769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                goto err;
9779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
9789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
979f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):[LINK SUCCESS] fimc-lite subdev to gscaler subdev", __func__);
9809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
9819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // gscaler subdev to gscaler video dev
9829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        for (i = 0; i < m_gscVdEntity->num_links; i++) {
9839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            links = &m_gscVdEntity->links[i];
984f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("DEBUG(%s):i=%d: links->source->entity : %p, m_gscSdEntity : %p", __func__, i,
9859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->source->entity, m_gscSdEntity);
986f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("DEBUG(%s):i=%d: links->sink->entity : %p, m_gscVdEntity : %p", __func__, i,
9879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    links->sink->entity, m_gscVdEntity);
9889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (links == NULL ||
9899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->source->entity != m_gscSdEntity ||
9909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                links->sink->entity != m_gscVdEntity) {
9919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                continue;
9929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else if (exynos_media_setup_link(m_media, links->source, links->sink, MEDIA_LNK_FL_ENABLED) < 0) {
993f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):Cannot make setup gscaler subdev to gscaler video dev", __func__);
9949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                goto err;
9959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
9969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
997f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):[LINK SUCCESS] gscaler subdev to gscaler video dev", __func__);
9989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
9999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        sprintf(node, "%s%d", PFX_NODE, (FLITE_VD_NODE_OFFSET + VIDEO_NODE_PREVIEW_ID));
10009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_fliteDev.fd = exynos_v4l2_open(node, O_RDWR, 0);
10019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_fliteDev.fd <= 0) {
1002f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_open(%s) fail (error : %s)", __func__, node, strerror(errno));
10039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto err;
10049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
10059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_previewDev = &m_fliteDev;
10069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_videoDev   = &m_fliteDev;
10079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_pictureDev = &m_fliteDev;
10089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
10099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_previewDev->flagStart = false;
10119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_videoDev->flagStart   = false;
10129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_pictureDev->flagStart = false;
10139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_tryPreviewStop = true;
10159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_tryVideoStop   = true;
10169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_tryPictureStop = true;
10179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_flagStartFaceDetection = false;
10199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_flagAutoFocusRunning = false;
10209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_enuminput(m_previewDev->fd, m_cameraId, m_cameraName) == false) {
1022f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_enuminput(%d, %s) fail", __func__, m_cameraId, m_cameraName);
10239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto err;
10249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
10259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // HACK
10279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_cameraId == CAMERA_ID_BACK)
10289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(m_cameraName, "S5K4E5");
10299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else
10309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        strcpy(m_cameraName, "S5K6A3");
10319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_s_input(m_previewDev->fd, m_cameraId) < 0) {
1033f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_s_input() fail", __func__);
10349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto err;
10359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
10369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (strcmp((const char*)m_cameraName, "S5K4E5") == 0) {
10389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_defaultCameraInfo  = new ExynosCameraInfoS5K4E5;
10399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo      = new ExynosCameraInfoS5K4E5;
10409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else if (strcmp((const char*)m_cameraName, "S5K6A3") == 0) {
10419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_defaultCameraInfo  = new ExynosCameraInfoS5K6A3;
10429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo      = new ExynosCameraInfoS5K6A3;
10439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else if (strcmp((const char*)m_cameraName, "M5M0") == 0) {
10449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_defaultCameraInfo  = new ExynosCameraInfoM5M0;
10459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo      = new ExynosCameraInfoM5M0;
10469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
1047f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):invalid camera Name (%s) fail", __func__, m_cameraName);
10489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto err;
10499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
10509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_setExifFixedAttribute();
10529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_flagCreate = true;
10549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
10559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinerr:
10579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo)
10589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        delete m_defaultCameraInfo;
10599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_defaultCameraInfo = NULL;
10609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo)
10629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        delete m_curCameraInfo;
10639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo = NULL;
10649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (0 < m_videoDev->fd)
10669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exynos_v4l2_close(m_videoDev->fd);
10679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_videoDev->fd = 0;
10689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (0 < m_pictureDev->fd)
10709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exynos_v4l2_close(m_pictureDev->fd);
10719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_pictureDev->fd = 0;
10729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (0 < m_previewDev->fd)
10749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exynos_v4l2_close(m_previewDev->fd);
10759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_previewDev->fd = 0;
10769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_media)
10789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exynos_media_close(m_media);
10799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_media = NULL;
10809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return false;
10829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
10839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::destroy(void)
10859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
10869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1087f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created", __func__);
10889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
10899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
10909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_pictureDev->flagStart == true)
10929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        stopPicture();
10939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_videoDev->flagStart == true)
10959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        stopVideo();
10969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
10979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == true)
10989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        stopPreview();
10999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo)
11019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        delete m_defaultCameraInfo;
11029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_defaultCameraInfo = NULL;
11039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo)
11059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        delete m_curCameraInfo;
11069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo = NULL;
11079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // close m_previewDev->fd after stopVideo() because stopVideo()
11099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // uses m_previewDev->fd to change frame rate
11109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (0 < m_videoDev->fd)
11119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exynos_v4l2_close(m_videoDev->fd);
11129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_videoDev->fd = 0;
11139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (0 < m_pictureDev->fd)
11159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exynos_v4l2_close(m_pictureDev->fd);
11169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_pictureDev->fd = 0;
11179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (0 < m_previewDev->fd)
11199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exynos_v4l2_close(m_previewDev->fd);
11209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_previewDev->fd = 0;
11219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_media)
11239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exynos_media_close(m_media);
11249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_media = NULL;
11259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_flagCreate = false;
11279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
11299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
11309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::flagCreate(void)
11329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
11339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_flagCreate;
11349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
11359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getCameraId(void)
11379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
11389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_cameraId;
11399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
11409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinchar *ExynosCamera::getCameraName(void)
11429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
11439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_cameraName;
11449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
11459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getPreviewFd(void)
11479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
11489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_previewDev->fd;
11499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
11509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getPictureFd(void)
11529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
11539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_pictureDev->fd;
11549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
11559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getVideoFd(void)
11579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
11589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_videoDev->fd;
11599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
11609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::startPreview(void)
11629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
11639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1164f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet Created", __func__);
11659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
11669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
11679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == false) {
11699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_setWidthHeight(PREVIEW_MODE,
11709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_previewDev->fd,
11719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             &m_previewDev->events,
11729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->previewW,
11739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->previewH,
11749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->previewColorFormat,
11759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_previewBuf,
11769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_validPreviewBuf) == false) {
1177f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):m_setWidthHeight() fail", __func__);
11789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
11799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
11809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (setPreviewFrameRate(m_curCameraInfo->fps) == false)
1182f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Fail toggle setPreviewFrameRate(%d)",
11839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                __func__, m_curCameraInfo->fps);
11849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_streamon(m_previewDev->fd, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) < 0) {
1186f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_streamon() fail", __func__);
11879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
11889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
11899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_curCameraInfo->focusMode == FOCUS_MODE_CONTINUOUS_VIDEO
11919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            || m_curCameraInfo->focusMode == FOCUS_MODE_CONTINUOUS_PICTURE) {
11929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_CAF_START_STOP, CAF_START) < 0) {
1193f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
11949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
11959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
11969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
11979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
11989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin		m_tryPreviewStop = false;
11999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_previewDev->flagStart = true;
12009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/* TODO */
12029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/* DIS is only supported BACK camera(4E5) currently. */
12039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifdef USE_DIS
12049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        bool toggle = getVideoStabilization();
12059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (setVideoStabilization(toggle) == false)
1207f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):setVideoStabilization() fail", __func__);
12089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
12099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifdef USE_3DNR
12119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_recordingHint == true && getCameraId() == CAMERA_ID_BACK) {
12129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (set3DNR(true) == false)
1213f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):set3DNR() fail", __func__);
12149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
12159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
12169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifdef USE_ODC
12189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (setODC(true) == false)
1219f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):setODC() fail", __func__);
12209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
12219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
12229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
12249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
12259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::stopPreview(void)
12279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
12289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1229f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet Created", __func__);
12309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
12319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
12329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == true) {
12349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_curCameraInfo->flashMode == FLASH_MODE_TORCH)
12369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            setFlashMode(FLASH_MODE_OFF);
12379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_tryPreviewStop = true;
12399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // skip stopPreview
12419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (   (m_previewDev == m_videoDev   && m_tryVideoStop == false)
12429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            || (m_previewDev == m_pictureDev && m_tryPictureStop == false))
12439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return true;
12449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/* TODO */
12469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/* Can not use 3DNR, ODC and DIS function because HW problem at exynos5250 EVT0 */
12479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifdef USE_3DNR
12489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (set3DNR(false) == false)
1249f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):set3DNR() fail", __func__);
12509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
12519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifdef USE_ODC
12539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (setODC(false) == false)
1254f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):setODC() fail", __func__);
12559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
12569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_streamoff(m_previewDev->fd, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) < 0) {
1258f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_streamoff() fail", __func__);
12599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
12609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
12619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        struct v4l2_requestbuffers req;
12639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        req.count  = 0;
12649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        req.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1265471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin        req.memory = V4L2_MEMORY_DMABUF;
12669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_reqbufs(m_previewDev->fd, &req) < 0) {
1268f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_reqbufs() fail", __func__);
12699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
12709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
12719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_previewDev->flagStart = false;
12739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_flagStartFaceDetection = false;
12759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
12769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
12789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
12799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::flagStartPreview(void)
12819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
12829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_previewDev->flagStart;
12839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
12849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getPreviewMaxBuf(void)
12869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
12879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return VIDEO_MAX_FRAME;
12889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
12899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setPreviewBuf(ExynosBuffer *buf)
12919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
12929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1293f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
12949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
12959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
12969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
12979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (VIDEO_MAX_FRAME <= buf->reserved.p) {
1298f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):index(%d) must smaller than %d", __func__, buf->reserved.p, VIDEO_MAX_FRAME);
12999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
13009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_previewBuf[buf->reserved.p] = *buf;
13039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // HACK : Driver not yet support cb,cr of YV12
13059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_previewBuf[buf->reserved.p].virt.extP[1] = buf->virt.extP[2];
13069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_previewBuf[buf->reserved.p].virt.extP[2] = buf->virt.extP[1];
13079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
13099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
13109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getPreviewBuf(ExynosBuffer *buf)
13129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
13139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1314f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
13159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
13169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == false) {
1319f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet preview started fail", __func__);
13209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
13219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_buffer v4l2_buf;
13249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_plane  planes[VIDEO_MAX_PLANES];
13259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.m.planes = planes;
13279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.type     = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1328471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin    v4l2_buf.memory   = V4L2_MEMORY_DMABUF;
13299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.length   = 0;
13309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < 3; i++) {
13329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_previewBuf[0].size.extS[i] != 0)
13339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.length++;
13349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_dqbuf(m_previewDev->fd, &v4l2_buf) < 0) {
1337f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_dqbuf() fail", __func__);
13389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
13399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (VIDEO_MAX_FRAME <= v4l2_buf.index) {
1342f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):wrong index = %d", __func__, v4l2_buf.index);
13439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
13449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *buf = m_previewBuf[v4l2_buf.index];
13479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
13499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
13509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::putPreviewBuf(ExynosBuffer *buf)
13529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
13539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1354f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
13559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
13569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_validPreviewBuf[buf->reserved.p] == false) {
1359f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid index(%d)", __func__, buf->reserved.p);
13609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
13619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_buffer v4l2_buf;
13649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_plane  planes[VIDEO_MAX_PLANES];
13659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.m.planes = planes;
13679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.type     = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1368471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin    v4l2_buf.memory   = V4L2_MEMORY_DMABUF;
13699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.index    = buf->reserved.p;
13709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.length   = 0;
13719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < 3; i++) {
1373471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin        v4l2_buf.m.planes[i].m.fd= m_previewBuf[buf->reserved.p].fd.extFd[i];
13749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_buf.m.planes[i].length   = m_previewBuf[buf->reserved.p].size.extS[i];
13759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_previewBuf[buf->reserved.p].size.extS[i] != 0)
13779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.length++;
13789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_qbuf(m_previewDev->fd, &v4l2_buf) < 0) {
1381f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_qbuf() fail", __func__);
13829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
13839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
13849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
13869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
13879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setVideoSize(int w, int h)
13899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
13909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->videoW = w;
13919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->videoH = h;
13929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
13939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifdef USE_3DNR_DMAOUT
13949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // HACK : Video 3dnr port support resize. So, we must make max size video w, h
13959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->videoW = m_defaultCameraInfo->videoW;
13969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->videoH = m_defaultCameraInfo->videoH;
13979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
13989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
13999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
14009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getVideoSize(int *w, int *h)
14029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
14039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w = m_curCameraInfo->videoW;
14049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h = m_curCameraInfo->videoH;
14059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
14069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
14079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setVideoFormat(int colorFormat)
14099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
14109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->videoColorFormat = colorFormat;
14119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
14129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
14139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getVideoFormat(void)
14159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
14169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->videoColorFormat;
14179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
14189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::startVideo(void)
14209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
14219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1422f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet Created", __func__);
14239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
14249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
14259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifdef USE_3DNR_DMAOUT
14279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_videoDev->flagStart == false) {
14289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_setWidthHeight(VIDEO_MODE,
14299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_videoDev->fd,
14309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             &m_videoDev->events,
14319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->videoW,
14329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->videoH,
14339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->videoColorFormat,
14349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_videoBuf,
14359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_validVideoBuf) == false) {
1436f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):m_setWidthHeight() fail", __func__);
14379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
14389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
14399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_streamon(m_videoDev->fd, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) < 0) {
1441f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_streamon() fail", __func__);
14429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
14439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
14449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_tryVideoStop = false;
14469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_videoDev->flagStart = true;
14479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
14489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
14499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
14519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
14529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::stopVideo(void)
14549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
14559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1456f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet Created", __func__);
14579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
14589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
14599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_videoDev->flagStart == true) {
14619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_tryVideoStop = true;
14639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // skip stopVideo
14659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (   (m_videoDev == m_previewDev && m_tryPreviewStop == false)
14669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            || (m_videoDev == m_pictureDev && m_tryPictureStop == false))
14679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return true;
14689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_streamoff(m_videoDev->fd, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) < 0) {
1470f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_streamoff() fail", __func__);
14719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
14729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
14739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        struct v4l2_requestbuffers req;
14749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        req.count  = 0;
14759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        req.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1476471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin        req.memory = V4L2_MEMORY_DMABUF;
14779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_reqbufs(m_videoDev->fd, &req) < 0) {
1479f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_reqbufs() fail", __func__);
14809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
14819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
14829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_videoDev->flagStart = false;
14849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
14859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
14879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
14889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::flagStartVideo(void)
14909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
14919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_videoDev->flagStart;
14929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
14939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getVideoMaxBuf(void)
14959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
14969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return VIDEO_MAX_FRAME;
14979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
14989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
14999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setVideoBuf(ExynosBuffer *buf)
15009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
15019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1502f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
15039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (VIDEO_MAX_FRAME <= buf->reserved.p) {
1507f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):index(%d) must smaller than %d", __func__, buf->reserved.p, VIDEO_MAX_FRAME);
15089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_videoBuf[buf->reserved.p] = *buf;
15129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
15139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
15149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getVideoBuf(ExynosBuffer *buf)
15169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
15179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1518f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
15199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_videoDev->flagStart == false) {
1523f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet video started fail", __func__);
15249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_buffer v4l2_buf;
15289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_plane  planes[VIDEO_MAX_PLANES];
15299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.m.planes = planes;
15319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.type     = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1532471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin    v4l2_buf.memory   = V4L2_MEMORY_DMABUF;
15339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.length   = 0;
15349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < 3; i++) {
15369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_videoBuf[0].size.extS[i] != 0)
15379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.length++;
15389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_dqbuf(m_videoDev->fd, &v4l2_buf) < 0) {
1541f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_dqbuf() fail", __func__);
15429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (VIDEO_MAX_FRAME <= v4l2_buf.index) {
1546f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):wrong index = %d", __func__, v4l2_buf.index);
15479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *buf = m_videoBuf[v4l2_buf.index];
15519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
15539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
15549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::putVideoBuf(ExynosBuffer *buf)
15569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
15579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1558f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
15599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_videoDev->flagStart == false) {
15639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        /* this can happen when recording frames are returned after
15649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         * the recording is stopped at the driver level.  we don't
15659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         * need to return the buffers in this case and we've seen
15669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         * cases where fimc could crash if we called qbuf and it
15679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         * wasn't expecting it.
15689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         */
1569f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):recording not in progress, ignoring", __func__);
15709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
15719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_validVideoBuf[buf->reserved.p] == false) {
1574f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid index(%d)", __func__, buf->reserved.p);
15759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_buffer v4l2_buf;
15799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_plane  planes[VIDEO_MAX_PLANES];
15809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.m.planes = planes;
15829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.type     = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1583471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin    v4l2_buf.memory   = V4L2_MEMORY_DMABUF;
15849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.index    = buf->reserved.p;
15859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.length   = 0;
15869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < 3; i++) {
1588471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin        v4l2_buf.m.planes[i].m.fd = (unsigned long)m_videoBuf[buf->reserved.p].fd.extFd[i];
15899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_buf.m.planes[i].length   = m_videoBuf[buf->reserved.p].size.extS[i];
15909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_videoBuf[buf->reserved.p].size.extS[i] != 0)
15929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.length++;
15939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
15959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_qbuf(m_videoDev->fd, &v4l2_buf) < 0) {
1596f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_qbuf() fail", __func__);
15979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
15989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
15999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
16019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
16029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::startPicture(void)
16049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
16059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1606f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet Created", __func__);
16079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
16089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
16099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_pictureDev->flagStart == false) {
16119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_setWidthHeight(PICTURE_MODE,
16129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_pictureDev->fd,
16139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             &m_pictureDev->events,
16149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->pictureW,
16159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->pictureH,
16169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_curCameraInfo->pictureColorFormat,
16179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_pictureBuf,
16189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                             m_validPictureBuf) == false) {
1619f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):m_setWidthHeight() fail", __func__);
16209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
16219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
16229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_streamon(m_pictureDev->fd, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) < 0) {
1624f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_streamon() fail", __func__);
16259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
16269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
16279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_tryPictureStop = false;
16299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_pictureDev->flagStart = true;
16309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
16319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
16339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
16349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::stopPicture(void)
16369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
16379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1638f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet Created", __func__);
16399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
16409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
16419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_pictureDev->flagStart == true) {
16439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_tryPictureStop = true;
16459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // skip stopPicture
16479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (   (m_pictureDev == m_previewDev && m_tryPreviewStop == false)
16489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            || (m_pictureDev == m_videoDev   && m_tryVideoStop == false))
16499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return true;
16509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_streamoff(m_pictureDev->fd, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) < 0) {
1652f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_streamoff() fail", __func__);
16539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
16549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
16559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        struct v4l2_requestbuffers req;
16579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        req.count  = 0;
16589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        req.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1659471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin        req.memory = V4L2_MEMORY_DMABUF;
16609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_reqbufs(m_pictureDev->fd, &req) < 0) {
1662f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_reqbufs() fail", __func__);
16639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
16649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
16659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_pictureDev->flagStart = false;
16679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
16689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
16709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
16719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::flagStartPicture(void)
16739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
16749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_pictureDev->flagStart;
16759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
16769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getPictureMaxBuf(void)
16789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
16799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return VIDEO_MAX_FRAME;
16809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
16819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setPictureBuf(ExynosBuffer *buf)
16839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
16849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1685f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
16869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
16879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
16889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (VIDEO_MAX_FRAME <= buf->reserved.p) {
1690f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):index(%d) must smaller than %d", __func__, buf->reserved.p, VIDEO_MAX_FRAME);
16919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
16929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
16939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_pictureBuf[buf->reserved.p] = *buf;
16959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
16969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
16979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
16989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getPictureBuf(ExynosBuffer *buf)
16999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
17009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1701f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
17029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
17039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_pictureDev->flagStart == false) {
1706f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet picture started fail", __func__);
17079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
17089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_buffer v4l2_buf;
17119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_plane  planes[VIDEO_MAX_PLANES];
17129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.m.planes = planes;
17149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.type     = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1715471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin    v4l2_buf.memory   = V4L2_MEMORY_DMABUF;
17169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.length   = 0;
17179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < 3; i++) {
17199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_pictureBuf[0].size.extS[i] != 0)
17209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.length++;
17219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_dqbuf(m_pictureDev->fd, &v4l2_buf) < 0) {
1724f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_dqbuf() fail", __func__);
17259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
17269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (VIDEO_MAX_FRAME <= v4l2_buf.index) {
1729f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):wrong index = %d", __func__, v4l2_buf.index);
17309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
17319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *buf = m_pictureBuf[v4l2_buf.index];
17349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
17369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
17379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::putPictureBuf(ExynosBuffer *buf)
17399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
17409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == false) {
1741f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet created fail", __func__);
17429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
17439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_pictureDev->flagStart == false) {
1746f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Not yet picture started fail", __func__);
17479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
17489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_validPictureBuf[buf->reserved.p] == false) {
1751f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid index(%d)", __func__, buf->reserved.p);
17529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
17539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_buffer v4l2_buf;
17569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_plane  planes[VIDEO_MAX_PLANES];
17579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.m.planes = planes;
17599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.type     = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
1760471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin    v4l2_buf.memory   = V4L2_MEMORY_DMABUF;
17619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.index    = buf->reserved.p;
17629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_buf.length   = 0;
17639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < 3; i++) {
1765471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin        v4l2_buf.m.planes[i].m.fd = (unsigned long)m_pictureBuf[buf->reserved.p].fd.extFd[i];
17669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_buf.m.planes[i].length   = m_pictureBuf[buf->reserved.p].size.extS[i];
17679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_pictureBuf[buf->reserved.p].size.extS[i] != 0)
17699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.length++;
17709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_qbuf(m_pictureDev->fd, &v4l2_buf) < 0) {
1773f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_qbuf() fail", __func__);
17749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
17759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
17789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
17799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::yuv2Jpeg(ExynosBuffer *yuvBuf,
17819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                            ExynosBuffer *jpegBuf,
17829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                            ExynosRect *rect)
17839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
17849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned char *addr;
17859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ExynosJpegEncoderForCamera jpegEnc;
17879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    bool ret = false;
17889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int *yuvSize = yuvBuf->size.extS;
17909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.create()) {
1792f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.create() fail", __func__);
17939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
17949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
17959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
17969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.setQuality(m_jpegQuality)) {
1797f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.setQuality() fail", __func__);
17989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
17999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.setSize(rect->w, rect->h)) {
1802f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.setSize() fail", __func__);
18039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
18049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.setColorFormat(rect->colorFormat)) {
1807f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.setColorFormat() fail", __func__);
18089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
18099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.setJpegFormat(V4L2_PIX_FMT_JPEG_422)) {
1812f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.setJpegFormat() fail", __func__);
18139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
18149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->thumbnailW != 0 && m_curCameraInfo->thumbnailH != 0) {
18179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        mExifInfo.enableThumb = true;
18189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (jpegEnc.setThumbnailSize(m_curCameraInfo->thumbnailW, m_curCameraInfo->thumbnailH)) {
1819f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):jpegEnc.setThumbnailSize(%d, %d) fail", __func__, m_curCameraInfo->thumbnailW, m_curCameraInfo->thumbnailH);
18209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            goto jpeg_encode_done;
18219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
18229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (0 < m_jpegThumbnailQuality && m_jpegThumbnailQuality <= 100) {
18249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (jpegEnc.setThumbnailQuality(m_jpegThumbnailQuality)) {
1825f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):jpegEnc.setThumbnailSize(%d, %d) fail", __func__, m_curCameraInfo->thumbnailW, m_curCameraInfo->thumbnailH);
18269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                goto jpeg_encode_done;
18279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
18289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
18299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_setExifChangedAttribute(&mExifInfo, rect);
18319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
18329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        mExifInfo.enableThumb = false;
18339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.setInBuf((char **)&(yuvBuf->virt.p), (int *)yuvSize)) {
1836f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.setInBuf() fail", __func__);
18379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
18389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.setOutBuf(jpegBuf->virt.p, jpegBuf->size.extS[0] + jpegBuf->size.extS[1] + jpegBuf->size.extS[2])) {
1841f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.setOutBuf() fail", __func__);
18429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
18439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.updateConfig()) {
1846f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.updateConfig() fail", __func__);
18479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
18489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.encode((int *)&jpegBuf->size.s, &mExifInfo)) {
1851f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):jpegEnc.encode() fail", __func__);
18529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto jpeg_encode_done;
18539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ret = true;
18569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinjpeg_encode_done:
18589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (jpegEnc.flagCreate() == true)
18609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        jpegEnc.destroy();
18619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return ret;
18639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
18649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::autoFocus(void)
18669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
18679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->fd <= 0) {
1868f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Camera was closed", __func__);
18699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
18709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagAutoFocusRunning == true) {
1873f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGD("DEBUG(%s):m_flagAutoFocusRunning == true", __func__);
18749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
18759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
18769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
18779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (m_curCameraInfo->focusMode) {
18789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_AUTO:
18799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_INFINITY:
18809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_MACRO:
18819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_touchAFMode == true) {
18829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (setFocusMode(FOCUS_MODE_TOUCH) == false) {
1883f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s): %d: setFocusMode(FOCUS_MODE_TOUCH) fail", __func__, __LINE__);
18849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
18859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
18869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        } else {
18879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_AUTO_FOCUS, AUTO_FOCUS_ON) < 0) {
1888f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
18899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
18909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
18919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
18929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
18939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_CONTINUOUS_VIDEO:
18949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_CONTINUOUS_PICTURE:
18959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        /* Doing nothing. Because we assume that continuous focus mode is
18969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin           always focused on. */
18979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
18989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_TOUCH:
18999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (setFocusMode(FOCUS_MODE_TOUCH) == false) {
1900f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s): %d: setFocusMode(FOCUS_MODE_TOUCH) fail", __func__, __LINE__);
19019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
19029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
19039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
19049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_FIXED:
19059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
19069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_EDOF:
19079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
1908f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, m_curCameraInfo->focusMode);
19099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
19109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
19119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
19129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_flagAutoFocusRunning = true;
19149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
19169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
19179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::cancelAutoFocus(void)
19199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
19209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->fd <= 0) {
1921f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Camera was closed", __func__);
19229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
19239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
19249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagAutoFocusRunning == false) {
1926f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):m_flagAutoFocusRunning == false", __func__);
19279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
19289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
19299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (m_curCameraInfo->focusMode) {
19319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_AUTO:
19329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_INFINITY:
19339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_MACRO:
19349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_AUTO_FOCUS, AUTO_FOCUS_OFF) < 0) {
1935f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
19369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
19379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
19389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
19399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_CONTINUOUS_VIDEO:
19409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_CONTINUOUS_PICTURE:
19419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        /* Doing nothing. Because we assume that continuous focus mode is
19429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin           always focused on. */
19439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
19449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_TOUCH:
19459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (setFocusMode(FOCUS_MODE_TOUCH) == false) {
1946f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s): %d: setFocusMode(FOCUS_MODE_TOUCH) fail", __func__, __LINE__);
19479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
19489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
19499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_touchAFMode = false;
19509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
19519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_FIXED:
19529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
19539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_EDOF:
19549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
1955f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, m_curCameraInfo->focusMode);
19569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
19579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
19589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
19599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_flagAutoFocusRunning = false;
19619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
19639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
19649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getFucusModeResult(void)
19669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
19679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int ret = 0;
19689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define AF_WATING_TIME       (100000)  //  100msec
19709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define TOTAL_AF_WATING_TIME (2000000) // 2000msec
19719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (unsigned int i = 0; i < TOTAL_AF_WATING_TIME; i += AF_WATING_TIME) {
19739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagAutoFocusRunning == false)
19759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return -1;
19769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_AUTO_FOCUS_RESULT, &ret) < 0) {
1978f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail", __func__);
19799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return -1;
19809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
19819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (strcmp((const char*)m_cameraName, "S5K4E5") == 0) {
19839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            switch(ret) {
19849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            case 0x00: // AF Running
19859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                ret = 0;
19869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
19879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            case 0x02: // AF succeed
19889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                ret = 1;
19899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
19909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            case 0x01:
19919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            default :  // AF fail
19929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                ret = -1;
19939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
19949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
19959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (ret != 0)
19979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
19989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
19999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        } else if (strcmp((const char*)m_cameraName, "M5M0") == 0) {
20009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            switch(ret) {
20019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            case 0x00: // AF Running
20029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                ret = 0;
20039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
20049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            case 0x01: // AF succeed
20059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                ret = 1;
20069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
20079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            case 0x02: // AF cancel
20089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                ret = 0;
20099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
20109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            default:  // AF fail
20119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                ret = -1;
20129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
20139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
20149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (ret != 0)
20169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                break;
20179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        } else {
20189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            ret = -1;
20199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            break;
20209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
20219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        usleep(AF_WATING_TIME);
20239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
20249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return ret;
20269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
20279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::startFaceDetection(void)
20299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
20309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagStartFaceDetection == true) {
2031f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGD("DEBUG(%s):Face detection already started..", __func__);
20329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
20339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
20349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == true) {
20369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        //if (this->setFocusMode(FOCUS_MODE_AUTO) == false)
2037f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        //    ALOGE("ERR(%s):Fail setFocusMode", __func__);
20389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true) {
20409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_FD_SET_MAX_FACE_NUMBER, m_defaultCameraInfo->maxNumDetectedFaces) < 0) {
2041f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
20429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
20439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
20449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CMD_FD, IS_FD_COMMAND_START) < 0) {
2046f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
20479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
20489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
20499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        } else {
20509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_FACE_DETECTION, FACE_DETECTION_ON) < 0) {
2051f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
20529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
20539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
20549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
20559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_flagStartFaceDetection = true;
20569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
20579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
20589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
20599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::stopFaceDetection(void)
20619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
20629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagStartFaceDetection == false) {
2063f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGD("DEBUG(%s):Face detection already stopped..", __func__);
20649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
20659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
20669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == true) {
20689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true) {
20699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CMD_FD, IS_FD_COMMAND_STOP) < 0) {
2070f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
20719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
20729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
20739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        } else {
20749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_FACE_DETECTION, FACE_DETECTION_OFF) < 0) {
2075f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
20769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
20779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
20789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
20799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_flagStartFaceDetection = false;
20809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
20819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
20829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
20839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::flagStartFaceDetection(void)
20859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
20869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_flagStartFaceDetection;
20879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
20889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setFaceDetectLock(bool toggle)
20909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
20919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int lock = (toggle == true) ? 1 : 0;
20929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
20939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_FACEDETECT_LOCKUNLOCK, lock) < 0) {
2094f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
20959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
20969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
20979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
20989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
20999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::startSmoothZoom(int value)
21019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
21029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->hwZoomSupported == false) {
2103f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):m_defaultCameraInfo->hwZoomSupported == false", __func__);
21049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
21059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
21069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return this->setZoom(value);
21089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
21099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::stopSmoothZoom(void)
21119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
21129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // TODO
21139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
21149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
21159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getAntibanding(void)
21179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
21189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->antiBanding;
21199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
21209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getAutoExposureLock(void)
21229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
21239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->autoExposureLock;
21249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
21259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getAutoWhiteBalanceLock(void)
21279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
21289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->autoWhiteBalanceLock;
21299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
21309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getColorEffect(void)
21329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
21339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->effect;
21349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
21359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getDetectedFacesAreas(int num,
21379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                        int *id,
21389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                        int *score,
21399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                        ExynosRect *face,
21409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                        ExynosRect *leftEye,
21419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                        ExynosRect *rightEye,
21429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                        ExynosRect *mouth)
21439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
21449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumDetectedFaces == 0) {
2145f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):maxNumDetectedFaces == 0 fail", __func__);
21469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return -1;
21479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
21489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagStartFaceDetection == false) {
2150f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGD("DEBUG(%s):m_flagStartFaceDetection == false", __func__);
21519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return 0;
21529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
21539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumDetectedFaces < num)
21559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        num = m_defaultCameraInfo->maxNumDetectedFaces;
21569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // width   : 0 ~ previewW
21589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // height  : 0 ~ previewH
21599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // if eye, mouth is not detectable : -1, -1
21609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ExynosRect2 *face2     = new ExynosRect2[num];
21619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ExynosRect2 *leftEye2  = new ExynosRect2[num];
21629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ExynosRect2 *rightEye2 = new ExynosRect2[num];
21639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ExynosRect2 *mouth2    = new ExynosRect2[num];
21649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    num = getDetectedFacesAreas(num, id, score, face2, leftEye2, rightEye2, mouth2);
21669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < num; i++) {
21689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_secRect22SecRect(&face2[i], &face[i]);
21709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        face[i].fullW = m_curCameraInfo->previewW;
21719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        face[i].fullH = m_curCameraInfo->previewH;
21729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_secRect22SecRect(&leftEye2[i], &leftEye[i]);
21749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        leftEye[i].fullW = m_curCameraInfo->previewW;
21759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        leftEye[i].fullH = m_curCameraInfo->previewH;
21769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_secRect22SecRect(&rightEye2[i], &rightEye[i]);
21789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        rightEye[i].fullW = m_curCameraInfo->previewW;
21799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        rightEye[i].fullH = m_curCameraInfo->previewH;
21809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_secRect22SecRect(&mouth2[i], &mouth[i]);
21829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        mouth[i].fullW = m_curCameraInfo->previewW;
21839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        mouth[i].fullH = m_curCameraInfo->previewH;
21849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
21859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    delete [] face2;
21879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    delete [] leftEye2;
21889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    delete [] rightEye2;
21899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    delete [] mouth2;
21909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return num;
21929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
21939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
21949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getDetectedFacesAreas(int num,
21959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                     int *id,
21969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                     int *score,
21979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                     ExynosRect2 *face,
21989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                     ExynosRect2 *leftEye,
21999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                     ExynosRect2 *rightEye,
22009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                     ExynosRect2 *mouth)
22019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
22029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumDetectedFaces == 0) {
2203f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):maxNumDetectedFaces == 0 fail", __func__);
22049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return -1;
22059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
22069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagStartFaceDetection == false) {
2208f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGD("DEBUG(%s):m_flagStartFaceDetection == false", __func__);
22099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return 0;
22109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
22119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int i = 0;
22139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumDetectedFaces < num)
22159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        num = m_defaultCameraInfo->maxNumDetectedFaces;
22169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    const unsigned int numOfFDEntity = 1 + ((V4L2_CID_IS_FD_GET_NEXT - V4L2_CID_IS_FD_GET_FACE_FRAME_NUMBER) * num);
22189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // width   : 0 ~ previewW
22209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // height  : 0 ~ previewH
22219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // if eye, mouth is not detectable : -1, -1
22229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_ext_controls fd_ctrls;
22239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_ext_control *fd_ctrl = new struct v4l2_ext_control[numOfFDEntity];
22249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_ext_control *cur_ctrl;
22259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cur_ctrl = &fd_ctrl[0];
22279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cur_ctrl->id = V4L2_CID_IS_FD_GET_FACE_COUNT;
22289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cur_ctrl++;
22299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (i = 0; i < num; i++) {
22319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_FACE_FRAME_NUMBER;
22329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_FACE_CONFIDENCE;
22349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_FACE_TOPLEFT_X;
22369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_FACE_TOPLEFT_Y;
22389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_FACE_BOTTOMRIGHT_X;
22409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_FACE_BOTTOMRIGHT_Y;
22429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_LEFT_EYE_TOPLEFT_X;
22449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_LEFT_EYE_TOPLEFT_Y;
22469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_LEFT_EYE_BOTTOMRIGHT_X;
22489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_LEFT_EYE_BOTTOMRIGHT_Y;
22509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_RIGHT_EYE_TOPLEFT_X;
22529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_RIGHT_EYE_TOPLEFT_Y;
22549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_RIGHT_EYE_BOTTOMRIGHT_X;
22569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_RIGHT_EYE_BOTTOMRIGHT_Y;
22589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_MOUTH_TOPLEFT_X;
22609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_MOUTH_TOPLEFT_Y;
22629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_MOUTH_BOTTOMRIGHT_X;
22649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_MOUTH_BOTTOMRIGHT_Y;
22669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl->id = V4L2_CID_IS_FD_GET_NEXT;
22689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
22709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    fd_ctrls.ctrl_class = V4L2_CTRL_CLASS_CAMERA;
22729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    fd_ctrls.count = i + 1;
22739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    fd_ctrls.controls = fd_ctrl;
22749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_g_ext_ctrl(m_previewDev->fd, &fd_ctrls) < 0) {
2276f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_g_ext_ctrl() fail", __func__);
22779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        num = -1;
22789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        goto done;
22799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
22809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cur_ctrl = &fd_ctrl[0];
22829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    num = cur_ctrl->value;
22839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cur_ctrl++;
22849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (i = 0; i < num; i++) {
22869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        id[i] = cur_ctrl->value;
22879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        score[i] = cur_ctrl->value;
22899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
22919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        face[i].x1 = cur_ctrl->value;
22929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        face[i].y1 = cur_ctrl->value;
22949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        face[i].x2 = cur_ctrl->value;
22969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        face[i].y2 = cur_ctrl->value;
22989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
22999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        leftEye[i].x1 = cur_ctrl->value;
23019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        leftEye[i].y1 = cur_ctrl->value;
23039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        leftEye[i].x2 = cur_ctrl->value;
23059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        leftEye[i].y2 = cur_ctrl->value;
23079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        rightEye[i].x1 = cur_ctrl->value;
23109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        rightEye[i].y1 = cur_ctrl->value;
23129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        rightEye[i].x2 = cur_ctrl->value;
23149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        rightEye[i].y2 = cur_ctrl->value;
23169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        mouth[i].x1 = cur_ctrl->value;
23199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        mouth[i].y1 = cur_ctrl->value;
23219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        mouth[i].x2 = cur_ctrl->value;
23239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        mouth[i].y2 = cur_ctrl->value;
23259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        cur_ctrl++;
23269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
23279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shindone:
23299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    delete [] fd_ctrl;
23309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return num;
23329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getExposureCompensation(void)
23359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->exposure;
23379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinfloat ExynosCamera::getExposureCompensationStep(void)
23409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // CameraParameters.h
23429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // The exposure compensation step. Exposure compensation index multiply by
23439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // step eqals to EV. Ex: if exposure compensation index is 6 and step is
23449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // 0.3333, EV is -2.
23459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // Example value: "0.333333333" or "0.5". Read only.
23469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // -> But, this formula doesn't works in apps.
23479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return 1.0f;
23489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getFlashMode(void)
23519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->flashMode;
23539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getFocalLength(int *num, int *den)
23569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *num = m_defaultCameraInfo->focalLengthNum;
23589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *num = m_defaultCameraInfo->focalLengthDen;
23599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
23609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getFocusAreas(ExynosRect *rects)
23639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // TODO
23659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return 0;
23669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getFocusDistances(float *output)
23699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // TODO
23719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return 0;
23729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getFocusMode(void)
23759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->focusMode;
23779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinfloat ExynosCamera::getHorizontalViewAngle(void)
23809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //TODO
23829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return 51.2f;
23839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getJpegQuality(void)
23869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_jpegQuality;
23889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getJpegThumbnailQuality(void)
23919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_jpegThumbnailQuality;
23939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
23949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
23959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getJpegThumbnailSize(int *w, int  *h)
23969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
23979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w  = m_curCameraInfo->thumbnailW;
23989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h  = m_curCameraInfo->thumbnailH;
23999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
24009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMaxExposureCompensation(void)
24039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->maxExposure;
24059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMaxNumDetectedFaces(void)
24089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->maxNumDetectedFaces;
24109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMaxNumFocusAreas(void)
24139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->maxNumFocusAreas;
24159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMaxNumMeteringAreas(void)
24189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->maxNumMeteringAreas;
24209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMaxZoom(void)
24239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->maxZoom;
24259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMeteringAreas(ExynosRect *rects)
24289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // TODO
24309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return 0;
24319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMinExposureCompensation(void)
24349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->minExposure;
24369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getPictureFormat(void)
24399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->pictureColorFormat;
24419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getPictureSize(int *w, int *h)
24449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w = m_curCameraInfo->pictureW;
24469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h = m_curCameraInfo->pictureH;
24479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
24489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getPreviewFormat(void)
24519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->previewColorFormat;
24539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getPreviewFpsRange(int *min, int *max)
24569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *min = 1;
24589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *max = m_defaultCameraInfo->fps;
24599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
24609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getPreviewFrameRate(void)
24639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->fps;
24659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getPreviewSize(int *w, int *h)
24689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w = m_curCameraInfo->previewW;
24709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h = m_curCameraInfo->previewH;
24719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
24729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSceneMode(void)
24759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->sceneMode;
24779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSupportedAntibanding(void)
24809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->antiBandingList;
24829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSupportedColorEffects(void)
24859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->effectList;
24879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSupportedFlashModes(void)
24909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->flashModeList;
24929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSupportedFocusModes(void)
24959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
24969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->focusModeList;
24979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
24989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
24999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getSupportedJpegThumbnailSizes(int *w, int *h)
25009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w  = m_defaultCameraInfo->thumbnailW;
25029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h  = m_defaultCameraInfo->thumbnailH;
25039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
25049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getSupportedPictureSizes(int *w, int *h)
25079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w = m_defaultCameraInfo->pictureW;
25099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h = m_defaultCameraInfo->pictureH;
25109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
25119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getSupportedPreviewSizes(int *w, int *h)
25149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w = m_defaultCameraInfo->previewW;
25169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h = m_defaultCameraInfo->previewH;
25179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
25189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSupportedSceneModes(void)
25219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->sceneModeList;
25239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getSupportedVideoSizes(int *w, int *h)
25269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w = m_defaultCameraInfo->videoW;
25289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h = m_defaultCameraInfo->videoH;
25299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
25309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getPreferredPreivewSizeForVideo(int *w, int *h)
25339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *w = m_defaultCameraInfo->prefVideoPreviewW;
25359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *h = m_defaultCameraInfo->prefVideoPreviewH;
25369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
25379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSupportedWhiteBalance(void)
25409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->whiteBalanceList;
25429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinfloat ExynosCamera::getVerticalViewAngle(void)
25459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // TODO
25479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return 39.4f;
25489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getVideoStabilization(void)
25519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->videoStabilization;
25539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getWhiteBalance(void)
25569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->whiteBalance;
25589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getZoom(void)
25619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->zoom;
25639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMaxZoomRatio(void)
25669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return 400;
25689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::isAutoExposureLockSupported(void)
25719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->autoExposureLockSupported;
25739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::isAutoWhiteBalanceLockSupported(void)
25769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->autoWhiteBalanceLockSupported;
25789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::isSmoothZoomSupported(void)
25819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->hwZoomSupported == true)
25839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
25849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else
25859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
25869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::isVideoSnapshotSupported(void)
25899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
25919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::isVideoStabilizationSupported(void)
25949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
25959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_defaultCameraInfo->supportVideoStabilization;
25969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
25979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
25989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::isZoomSupported(void)
25999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
26009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
26019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
26029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setAntibanding(int value)
26049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
26059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
26069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (value) {
26089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ANTIBANDING_AUTO:
26099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::ANTI_BANDING_AUTO;
26109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
26119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ANTIBANDING_50HZ:
26129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::ANTI_BANDING_50HZ;
26139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
26149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ANTIBANDING_60HZ:
26159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::ANTI_BANDING_60HZ;
26169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
26179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ANTIBANDING_OFF:
26189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::ANTI_BANDING_OFF;
26199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
26209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
2621f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, value);
26229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
26239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
26249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
26259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
26279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < ::IS_AFC_DISABLE || ::IS_AFC_MAX <= internalValue) {
2628f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid value (%d)", __func__, value);
26299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
26309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
26319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
26329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < ::ANTI_BANDING_AUTO || ::ANTI_BANDING_OFF < internalValue) {
2633f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
26349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
26359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
26369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
26379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->antiBanding != value) {
26399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->antiBanding = value;
26409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
26419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_AFC_MODE, internalValue) < 0) {
2642f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
26439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
26449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
26459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
26469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
26479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
26499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
26509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setAutoExposureLock(bool toggle)
26529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
26539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
26549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->autoExposureLock == toggle)
26569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
26579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->autoExposureLock = toggle;
26599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->autoExposureLock == true && m_curCameraInfo->autoWhiteBalanceLock == true)
26619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = AE_LOCK_AWB_LOCK;
26629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else if (m_curCameraInfo->autoExposureLock == true && m_curCameraInfo->autoWhiteBalanceLock == false)
26639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = AE_LOCK_AWB_UNLOCK;
26649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else if (m_curCameraInfo->autoExposureLock == false && m_curCameraInfo->autoWhiteBalanceLock == true)
26659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = AE_UNLOCK_AWB_LOCK;
26669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else // if (m_curCameraInfo->autoExposureLock == false && m_curCameraInfo->autoWhiteBalanceLock == false)
26679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = AE_UNLOCK_AWB_UNLOCK;
26689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == true) {
26709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_AEAWB_LOCK_UNLOCK, internalValue) < 0) {
2671f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
26729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
26739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
26749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
26759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
26769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
26779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setAutoWhiteBalanceLock(bool toggle)
26799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
26809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
26819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->autoWhiteBalanceLock == toggle)
26839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
26849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->autoWhiteBalanceLock = toggle;
26869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->autoExposureLock == true && m_curCameraInfo->autoWhiteBalanceLock == true)
26889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = AE_LOCK_AWB_LOCK;
26899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else if (m_curCameraInfo->autoExposureLock == true && m_curCameraInfo->autoWhiteBalanceLock == false)
26909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = AE_LOCK_AWB_UNLOCK;
26919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else if (m_curCameraInfo->autoExposureLock == false && m_curCameraInfo->autoWhiteBalanceLock == true)
26929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = AE_UNLOCK_AWB_LOCK;
26939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else // if (m_curCameraInfo->autoExposureLock == false && m_curCameraInfo->autoWhiteBalanceLock == false)
26949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = AE_UNLOCK_AWB_UNLOCK;
26959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
26969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == true) {
26979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_AEAWB_LOCK_UNLOCK, internalValue) < 0) {
2698f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
26999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
27009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
27019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
27029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
27039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
27049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
27059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setColorEffect(int value)
27069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
27079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
27089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
27099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (value) {
27109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_NONE:
27119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
27129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_IMAGE_EFFECT_DISABLE;
27139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
27149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IMAGE_EFFECT_NONE;
27159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
27169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_MONO:
27179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
27189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_IMAGE_EFFECT_MONOCHROME;
27199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
27209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IMAGE_EFFECT_BNW;
27219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
27229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_NEGATIVE:
27239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = IS_IMAGE_EFFECT_NEGATIVE_MONO;
27249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
27259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_SEPIA:
27269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
27279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_IMAGE_EFFECT_SEPIA;
27289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
27299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IMAGE_EFFECT_SEPIA;
27309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
27319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_AQUA:
27329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_SOLARIZE:
27339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_POSTERIZE:
27349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_WHITEBOARD:
27359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case EFFECT_BLACKBOARD:
27369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
2737f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, value);
27389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
27399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
27409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
27419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
27429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
27439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < ::IS_IMAGE_EFFECT_DISABLE || ::IS_IMAGE_EFFECT_MAX <= internalValue) {
2744f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue);
27459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
27469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
27479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
27489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue <= ::IMAGE_EFFECT_BASE || ::IMAGE_EFFECT_MAX <= internalValue) {
2749f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue);
27509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
27519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
27529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
27539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
27549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->effect != value) {
27559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->effect = value;
27569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
27579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
27589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_IMAGE_EFFECT, internalValue) < 0) {
2759f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
27609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
27619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
27629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
27639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_EFFECT, internalValue) < 0) {
2764f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
27659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
27669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
27679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
27689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
27699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
27709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
27719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
27729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
27739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
27749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setExposureCompensation(int value)
27759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
27769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = value;
27779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
27789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
27799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue += IS_EXPOSURE_DEFAULT;
27809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < IS_EXPOSURE_MINUS_2 || IS_EXPOSURE_PLUS_2 < internalValue) {
2781f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue);
27829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
27839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
27849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
27859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue += EV_DEFAULT;
27869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < EV_MINUS_4 || EV_PLUS_4 < internalValue) {
2787f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue);
27889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
27899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
27909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
27919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
27929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->exposure != value) {
27939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->exposure = value;
27949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
27959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
27969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_EXPOSURE, internalValue) < 0) {
2797f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
27989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
27999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
28009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
28019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (this->setBrightness(value) == false) {
2802f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):setBrightness() fail", __func__);
28039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
28049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
28059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
28069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
28079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
28089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
28109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
28119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setFlashMode(int value)
28139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
28149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
28159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (value) {
28179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FLASH_MODE_OFF:
28189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FLASH_MODE_OFF;
28199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
28209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FLASH_MODE_AUTO:
28219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FLASH_MODE_AUTO;
28229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
28239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FLASH_MODE_ON:
28249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FLASH_MODE_ON;
28259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
28269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FLASH_MODE_TORCH:
28279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FLASH_MODE_TORCH;
28289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
28299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FLASH_MODE_RED_EYE:
28309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
2831f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, value);
28329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
28339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
28349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
28359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (internalValue <= ::FLASH_MODE_BASE || ::FLASH_MODE_MAX <= internalValue) {
2837f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid value (%d)", __func__, value);
28389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
28399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
28409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->flashMode != value) {
28429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->flashMode = value;
28439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
28449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_FLASH_MODE, internalValue) < 0) {
2845f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
28469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
28479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
28489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
28499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
28509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
28529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
28539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setFocusAreas(int num, ExynosRect* rects, int *weights)
28559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
28569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumFocusAreas == 0) {
2857f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):maxNumFocusAreas is 0. so, ignored", __func__);
28589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
28599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
28609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    bool ret = true;
28629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ExynosRect2 *rect2s = new ExynosRect2[num];
28649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < num; i++)
28659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_secRect2SecRect2(&rects[i], &rect2s[i]);
28669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ret = setFocusAreas(num, rect2s, weights);
28689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    delete [] rect2s;
28709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return ret;
28729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
28739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setFocusAreas(int num, ExynosRect2* rect2s, int *weights)
28759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
28769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumFocusAreas == 0) {
2877f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):maxNumFocusAreas is 0. so, ignored", __func__);
28789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
28799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
28809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int new_x = 0;
28829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int new_y = 0;
28839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumFocusAreas < num)
28859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        num = m_defaultCameraInfo->maxNumFocusAreas;
28869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
28879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == true) {
28889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        for (int i = 0; i < num; i++) {
28899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (   num == 1
28909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                && rect2s[0].x1 == 0
28919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                && rect2s[0].y1 == 0
28929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                && rect2s[0].x2 == m_curCameraInfo->previewW
28939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                && rect2s[0].y2 == m_curCameraInfo->previewH)  {
28949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                // TODO : driver decide focus areas -> focus center.
28959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                new_x = (m_curCameraInfo->previewW) / 2;
28969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                new_y = (m_curCameraInfo->previewH) / 2;
28979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
28989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                new_x = (rect2s[i].x1 + rect2s[i].x2) / 2;
28999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                new_y = (rect2s[i].y1 + rect2s[i].y2) / 2;
29009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
29019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            m_touchAFMode = true;
29039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (   exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_OBJECT_POSITION_X, new_x) < 0
29049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                && exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_OBJECT_POSITION_Y, new_y) < 0) {
2905f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
29069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
29079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
29089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
29099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
29109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
29129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
29139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setFocusMode(int value)
29159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
29169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
29179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (value) {
29199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_AUTO:
29209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FOCUS_MODE_AUTO;
29219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_touchAFMode = false;
29229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
29239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_INFINITY:
29249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FOCUS_MODE_INFINITY;
29259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_touchAFMode = false;
29269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
29279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_MACRO:
29289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FOCUS_MODE_MACRO;
29299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_touchAFMode = false;
29309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
29319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_CONTINUOUS_VIDEO:
29329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_CONTINUOUS_PICTURE:
29339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FOCUS_MODE_CONTINOUS;
29349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_touchAFMode = false;
29359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
29369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_TOUCH:
29379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FOCUS_MODE_TOUCH;
29389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_touchAFMode = true;
29399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
29409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_FIXED:
29419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::FOCUS_MODE_FIXED;
29429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_touchAFMode = false;
29439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
29449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case FOCUS_MODE_EDOF:
29459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
29469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_touchAFMode = false;
2947f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, value);
29489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
29499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
29509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
29519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (::FOCUS_MODE_MAX <= internalValue) {
2953f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
29549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
29559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
29569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->focusMode != value) {
29589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->focusMode = value;
29599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
29609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_FOCUS_MODE, internalValue) < 0) {
2961f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
29629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
29639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
29649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
29659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
29669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
29689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
29699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setGpsAltitude(const char *gpsAltitude)
29719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
29729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    double conveted_altitude = 0;
29739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (gpsAltitude == NULL)
29759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->gpsAltitude = 0;
29769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else {
29779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        conveted_altitude = atof(gpsAltitude);
29789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->gpsAltitude = (long)(conveted_altitude * 100 / 1);
29799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
29809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
29829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
29839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setGpsLatitude(const char *gpsLatitude)
29859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
29869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    double conveted_latitude = 0;
29879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (gpsLatitude == NULL)
29899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->gpsLatitude = 0;
29909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else {
29919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        conveted_latitude = atof(gpsLatitude);
29929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->gpsLatitude = (long)(conveted_latitude * 10000 / 1);
29939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
29949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
29969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
29979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
29989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setGpsLongitude(const char *gpsLongitude)
29999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
30009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    double conveted_longitude = 0;
30019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (gpsLongitude == NULL)
30039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->gpsLongitude = 0;
30049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else {
30059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        conveted_longitude = atof(gpsLongitude);
30069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->gpsLongitude = (long)(conveted_longitude * 10000 / 1);
30079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
30089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
30109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
30119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setGpsProcessingMethod(const char *gpsProcessingMethod)
30139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
30149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(mExifInfo.gps_processing_method, 0, sizeof(mExifInfo.gps_processing_method));
30159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (gpsProcessingMethod != NULL) {
30179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        size_t len = strlen(gpsProcessingMethod);
30189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (len > sizeof(mExifInfo.gps_processing_method)) {
30199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            len = sizeof(mExifInfo.gps_processing_method);
30209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
30219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        memcpy(mExifInfo.gps_processing_method, gpsProcessingMethod, len);
30229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
30239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
30259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
30269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setGpsTimeStamp(const char *gpsTimestamp)
30289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
30299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (gpsTimestamp == NULL)
30309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->gpsTimestamp = 0;
30319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else
30329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->gpsTimestamp = atol(gpsTimestamp);
30339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
30359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
30369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setJpegQuality(int quality)
30389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
30399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (quality < JPEG_QUALITY_MIN || JPEG_QUALITY_MAX < quality) {
3040f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid quality (%d)", __func__, quality);
30419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
30429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
30439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_jpegQuality = quality;
30459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
30479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
30489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setJpegThumbnailQuality(int quality)
30509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
30519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (quality < JPEG_QUALITY_MIN || JPEG_QUALITY_MAX < quality) {
3052f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid quality (%d)", __func__, quality);
30539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
30549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
30559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_jpegThumbnailQuality = quality;
30579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
30599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
30609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setJpegThumbnailSize(int w, int h)
30629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
30639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->thumbnailW = w;
30649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->thumbnailH = h;
30659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
30669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
30679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setMeteringAreas(int num, ExynosRect *rects, int *weights)
30699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
30709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumMeteringAreas == 0) {
3071f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):maxNumMeteringAreas is 0. so, ignored", __func__);
30729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
30739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
30749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumMeteringAreas < num)
30769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        num = m_defaultCameraInfo->maxNumMeteringAreas;
30779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == true) {
30799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        for (int i = 0; i < num; i++) {
30809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (   exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_METERING_POSITION_X, rects[i].x) < 0
30819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                && exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_METERING_POSITION_Y, rects[i].y) < 0
30829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                && exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_METERING_WINDOW_X,   rects[i].w) < 0
30839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                && exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_METERING_WINDOW_Y,   rects[i].h) < 0) {
3084f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
30859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
30869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
30879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
30889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
30899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
30919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
30929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
30939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setMeteringAreas(int num, ExynosRect2 *rect2s, int *weights)
30949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
30959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_defaultCameraInfo->maxNumMeteringAreas == 0) {
3096f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):maxNumMeteringAreas is 0. so, ignored", __func__);
30979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return true;
30989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
30999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    bool ret = true;
31019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ExynosRect *rects = new ExynosRect[num];
31039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < num; i++)
31049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_secRect22SecRect(&rect2s[i], &rects[i]);
31059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    /* FIXME: Currnetly HW dose not support metering area */
31079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //ret = setMeteringAreas(num, rects, weights);
31089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    delete [] rects;
31109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return ret;
31129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setPictureFormat(int colorFormat)
31159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->pictureColorFormat = colorFormat;
31179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#if defined(LOG_NDEBUG) && LOG_NDEBUG == 0
31199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_printFormat(m_curCameraInfo->pictureColorFormat, "PictureFormat");
31209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
31219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
31229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setPictureSize(int w, int h)
31259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->pictureW = w;
31279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->pictureH = h;
31289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // HACK : Camera cannot support zoom. So, we must make max size picture w, h
31309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->pictureW = m_defaultCameraInfo->pictureW;
31319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->pictureH = m_defaultCameraInfo->pictureH;
31329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
31349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setPreviewFormat(int colorFormat)
31379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->previewColorFormat = colorFormat;
31399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#if defined(LOG_NDEBUG) && LOG_NDEBUG == 0
31419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_printFormat(m_curCameraInfo->previewColorFormat, "PreviewtFormat");
31429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif
31439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
31459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setPreviewFrameRate(int fps)
31489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (fps < FRAME_RATE_AUTO || FRAME_RATE_MAX < fps)
3150f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid fps(%d)", __func__, fps);
31519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_flagCreate == true) {
31539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->fps = fps;
31549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_FRAME_RATE, fps) < 0) {
3155f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
31569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
31579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
31589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
31599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
31619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setPreviewSize(int w, int h)
31649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->previewW = w;
31669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->previewH = h;
31679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
31689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setRecordingHint(bool hint)
31719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // TODO : fixed fps?
31739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    /* DIS is only possible recording hint is true. */
31749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_recordingHint = hint;
31759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
31769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setRotation(int rotation)
31799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     if (rotation < 0) {
3181f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin         ALOGE("ERR(%s):Invalid rotation (%d)", __func__, rotation);
31829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         return false;
31839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     }
31849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     m_curCameraInfo->rotation = rotation;
31859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     return true;
31879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getRotation(void)
31909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->rotation;
31929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
31939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSceneMode(int value)
31959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
31969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
31979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
31989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (value) {
31999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_AUTO:
32009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_NONE;
32019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_PORTRAIT:
32039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_PORTRAIT;
32049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_LANDSCAPE:
32069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_LANDSCAPE;
32079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_NIGHT:
32099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_NIGHTSHOT;
32109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_BEACH:
32129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_BEACH_SNOW;
32139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_SNOW:
32159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_BEACH_SNOW;
32169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_SUNSET:
32189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_SUNSET;
32199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_FIREWORKS:
32219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_FIREWORKS;
32229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_SPORTS:
32249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_SPORTS;
32259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_PARTY:
32279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_PARTY_INDOOR;
32289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_CANDLELIGHT:
32309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_CANDLE_LIGHT;
32319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_STEADYPHOTO:
32339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ::SCENE_MODE_TEXT;
32349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_ACTION:
32369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_NIGHT_PORTRAIT:
32379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_THEATRE:
32389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
3239f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, value);
32409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
32419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
32439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (internalValue <= ::SCENE_MODE_BASE || ::SCENE_MODE_MAX <= internalValue) {
3245f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid value (%d)", __func__, internalValue);
32469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
32479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
32489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->sceneMode != value) {
32509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->sceneMode = value;
32519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
32529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SCENE_MODE, internalValue) < 0) {
3253f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
32549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
32559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
32569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
32579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
32589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
32609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
32619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setVideoStabilization(bool toggle)
32639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
32649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->videoStabilization = toggle;
32659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == true) {
32679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_curCameraInfo->applyVideoStabilization != toggle) {
32689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            int dis = (toggle == true) ? CAMERA_DIS_ON : CAMERA_DIS_OFF;
32709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_DIS, dis) < 0) {
3272f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
32739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
32749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
32759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                m_curCameraInfo->applyVideoStabilization = toggle;
32769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin	    }
32779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
32789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
32799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
32809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
32819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setWhiteBalance(int value)
32839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
32849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
32859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
32869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (value) {
32879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case WHITE_BALANCE_AUTO:
32889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
32899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_AWB_AUTO;
32909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
32919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::WHITE_BALANCE_AUTO;
32929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case WHITE_BALANCE_INCANDESCENT:
32949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
32959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_AWB_TUNGSTEN;
32969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
32979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::WHITE_BALANCE_TUNGSTEN;
32989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
32999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case WHITE_BALANCE_FLUORESCENT:
33009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
33019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_AWB_FLUORESCENT;
33029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
33039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::WHITE_BALANCE_FLUORESCENT;
33049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
33059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case WHITE_BALANCE_DAYLIGHT:
33069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
33079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_AWB_DAYLIGHT;
33089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
33099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::WHITE_BALANCE_SUNNY;
33109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
33119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case WHITE_BALANCE_CLOUDY_DAYLIGHT:
33129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
33139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_AWB_CLOUDY;
33149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
33159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::WHITE_BALANCE_CLOUDY;
33169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
33179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case WHITE_BALANCE_WARM_FLUORESCENT:
33189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case WHITE_BALANCE_TWILIGHT:
33199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case WHITE_BALANCE_SHADE:
33209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
3321f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, value);
33229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
33239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
33249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
33259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
33269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
33279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < ::IS_AWB_AUTO || ::IS_AWB_MAX <= internalValue) {
3328f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue);
33299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
33309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
33319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
33329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue <= ::WHITE_BALANCE_BASE || ::WHITE_BALANCE_MAX <= internalValue) {
3333f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue);
33349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
33359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
33369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
33379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
33389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->whiteBalance != value) {
33399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->whiteBalance = value;
33409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
33419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
33429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_AWB_MODE, internalValue) < 0) {
3343f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
33449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
33459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
33469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
33479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_WHITE_BALANCE, internalValue) < 0) {
3348f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
33499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
33509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
33519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
33529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
33539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
33549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
33559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
33569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
33579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
33589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setZoom(int value)
33599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
33609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (value < ZOOM_LEVEL_0 || ZOOM_LEVEL_MAX <= value) {
3361f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid value (%d)", __func__, value);
33629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
33639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
33649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
33659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->zoom != value) {
33669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->zoom = value;
33679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_defaultCameraInfo->hwZoomSupported == true) {
33689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_flagCreate == true) {
33699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_ZOOM, value) < 0) {
3370f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
33719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
33729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
33739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
33749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        } else {
33759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_setZoom(m_previewDev->fd, m_curCameraInfo->zoom, m_curCameraInfo->previewW, m_curCameraInfo->previewH) == false) {
3376f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):m_setZoom(%d) fail", __func__, m_curCameraInfo->zoom);
33779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
33789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
33799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
33809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
33819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
33829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
33839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
33849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
33859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::m_setWidthHeight(int mode,
33869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                 int fd,
33879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                 struct pollfd *event,
33889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                 int w,
33899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                 int h,
33909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                 int colorFormat,
33919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                 struct ExynosBuffer *buf,
33929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                 bool *validBuf)
33939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
33949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // Get and throw away the first frame since it is often garbled.
33959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(event, 0, sizeof(struct pollfd));
33969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    event->fd = fd;
33979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    event->events = POLLIN | POLLERR;
33989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
33999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int numOfBuf = 0;
34009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < VIDEO_MAX_FRAME; i++) {
3402471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin        if (buf[i].virt.p != NULL || buf[i].phys.p != 0 ||
3403471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin	    buf[i].fd.fd >= 0) {
34049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            validBuf[i] = true;
34059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            numOfBuf++;
34069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        } else {
34079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            validBuf[i] = false;
34089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
34099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
34109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_format v4l2_fmt;
34129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_pix_format pixfmt;
34139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int bpp;
34149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int planes;
34159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&v4l2_fmt, 0, sizeof(struct v4l2_format));
34179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memset(&pixfmt, 0, sizeof(pixfmt));
34189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch(mode) {
34209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case PREVIEW_MODE:
34219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case VIDEO_MODE:
34229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
34239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        V4L2_PIX_2_YUV_INFO(colorFormat, &bpp, &planes);
34259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_fmt.fmt.pix_mp.width = w;
34279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_fmt.fmt.pix_mp.height = h;
34289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_fmt.fmt.pix_mp.pixelformat = colorFormat;
34299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_fmt.fmt.pix_mp.num_planes = planes;
34309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_s_fmt(fd, &v4l2_fmt) < 0) {
3432f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_s_fmt() fail", __func__);
34339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
34349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
34359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
34369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case PICTURE_MODE:
34379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
34389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        pixfmt.width = w;
34409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        pixfmt.height = h;
34419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        pixfmt.pixelformat = colorFormat;
34429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (pixfmt.pixelformat == V4L2_PIX_FMT_JPEG)
34439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            pixfmt.colorspace = V4L2_COLORSPACE_JPEG;
34449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        v4l2_fmt.fmt.pix = pixfmt;
34469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_s_fmt(fd, &v4l2_fmt) < 0) {
3448f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_s_fmt() fail", __func__);
34499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
34509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
34519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
34529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
34539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
34549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
34559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct v4l2_requestbuffers req;
34579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    req.count  = numOfBuf;
34589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    req.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
3459471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin    req.memory = V4L2_MEMORY_DMABUF;
34609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_reqbufs(fd, &req) < 0) {
3462f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_reqbufs(%d) fail", __func__, numOfBuf);
34639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
34649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
34659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    for (int i = 0; i < VIDEO_MAX_FRAME; i++) {
34679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (validBuf[i] == true) {
34689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            struct v4l2_buffer v4l2_buf;
34709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            struct v4l2_plane planes[VIDEO_MAX_PLANES];
34719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.m.planes = planes;
34739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.type     = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
3474471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin            v4l2_buf.memory   = V4L2_MEMORY_DMABUF;
34759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.index    = buf[i].reserved.p;
34769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            v4l2_buf.length   = 0;
34779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            for (int j = 0; j < 3; j++) {
3479471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin                v4l2_buf.m.planes[j].m.fd = buf[i].fd.extFd[j];
34809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                v4l2_buf.m.planes[j].length   = buf[i].size.extS[j];
34819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (buf[i].size.extS[j] != 0)
34839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    v4l2_buf.length++;
34849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
34859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_qbuf(fd, &v4l2_buf) < 0) {
3487f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_qbuf(%d) fail", __func__, i);
34889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
34899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
34909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
34919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
34929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    /*
34949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_currentZoom = -1;
34959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
34969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_setZoom(fd, m_curCameraInfo->zoom, w, h) == false)
3497f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):m_setZoom(%d, %d) fail", __func__, mode, m_curCameraInfo->zoom);
34989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    */
34999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
35009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
35019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::m_setZoom(int fd, int zoom, int w, int h)
35039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
35049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int ret = true;
35059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_currentZoom != zoom) {
35079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_currentZoom = zoom;
35089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        int real_zoom = 0;
35109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_defaultCameraInfo->hwZoomSupported == true)
35129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            real_zoom = 0; // just adjust ratio, not digital zoom.
35139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
35149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            real_zoom = zoom; // adjust ratio, digital zoom
35159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        ret = m_setCrop(fd, w, h, real_zoom);
35179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (ret == false)
3518f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):m_setCrop(%d, %d) fail", __func__, w, h);
35199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
35209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return ret;
35229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
35239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::m_setCrop(int fd, int w, int h, int zoom)
35259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
35269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_cropcap cropcap;
35279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    v4l2_crop crop;
35289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int crop_x = 0;
35299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int crop_y = 0;
35309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int crop_w = 0;
35319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int crop_h = 0;
35329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
35349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_cropcap(fd, &cropcap) < 0)  {
3536f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_cropcap() fail)", __func__);
35379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
35389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
35399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_getCropRect(cropcap.bounds.width, cropcap.bounds.height,
35419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                  w,                    h,
35429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                  &crop_x,              &crop_y,
35439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                  &crop_w,              &crop_h,
35449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                  zoom);
35459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cropcap.defrect.left   = crop_x;
35479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cropcap.defrect.top    = crop_y;
35489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cropcap.defrect.width  = crop_w;
35499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    cropcap.defrect.height = crop_h;
35509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
35519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    crop.c    = cropcap.defrect;
35529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_s_crop(fd, &crop) < 0) {
3554f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_s_crop() fail(%d))", __func__, zoom);
35559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
35569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
35579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    /*
3559f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 1 w                     : %d", w);
3560f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 1 h                     : %d", h);
3561f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 1 zoom                  : %d", zoom);
3562f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 1 cropcap.bounds.w      : %d", cropcap.bounds.width);
3563f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 1 cropcap.bounds.h      : %d", cropcap.bounds.height);
3564f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 2 crop_x                : %d", crop_x);
3565f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 2 crop_y                : %d", crop_y);
3566f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 2 crop_w                : %d", crop_w);
3567f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 2 crop_h                : %d", crop_h);
3568f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 2 cropcap.defrect.left  : %d", cropcap.defrect.left);
3569f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 2 cropcap.defrect.top   : %d", cropcap.defrect.top);
3570f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 2 cropcap.defrect.width : %d", cropcap.defrect.width);
3571f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("## 2 cropcap.defrect.height: %d", cropcap.defrect.height);
35729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    */
35739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
35759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
35769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::m_getCropRect(unsigned int  src_w,  unsigned int   src_h,
35789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                              unsigned int  dst_w,  unsigned int   dst_h,
35799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                              unsigned int *crop_x, unsigned int *crop_y,
35809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                              unsigned int *crop_w, unsigned int *crop_h,
35819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                              int           zoom)
35829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
35839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    #define DEFAULT_ZOOM_RATIO        (4) // 4x zoom
35849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    #define DEFAULT_ZOOM_RATIO_SHIFT  (2)
35859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int max_zoom = m_defaultCameraInfo->maxZoom;
35869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *crop_w = src_w;
35889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *crop_h = src_h;
35899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (   src_w != dst_w
35919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        || src_h != dst_h) {
35929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        float src_ratio = 1.0f;
35939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        float dst_ratio = 1.0f;
35949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // ex : 1024 / 768
35969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        src_ratio = (float)src_w / (float)src_h;
35979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
35989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        // ex : 352  / 288
35999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        dst_ratio = (float)dst_w / (float)dst_h;
36009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (src_ratio != dst_ratio) {
36029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (src_ratio <= dst_ratio) {
36039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                // shrink h
36049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                *crop_w = src_w;
36059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                *crop_h = src_w / dst_ratio;
36069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else  { //(src_ratio > dst_ratio)
36079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                // shrink w
36089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                *crop_w = src_h * dst_ratio;
36099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                *crop_h = src_h;
36109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
36119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
36129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (zoom != 0) {
36149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            unsigned int zoom_w_step =
36159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                        (*crop_w - (*crop_w  >> DEFAULT_ZOOM_RATIO_SHIFT)) / max_zoom;
36169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            *crop_w  = *crop_w - (zoom_w_step * zoom);
36189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            unsigned int zoom_h_step =
36209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                        (*crop_h - (*crop_h >> DEFAULT_ZOOM_RATIO_SHIFT)) / max_zoom;
36219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            *crop_h = *crop_h - (zoom_h_step * zoom);
36239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
36249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
36259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    #define CAMERA_CROP_WIDTH_RESTRAIN_NUM  (0x10) // 16
36279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int w_align = (*crop_w & (CAMERA_CROP_WIDTH_RESTRAIN_NUM - 1));
36289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (w_align != 0) {
36299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (  (CAMERA_CROP_WIDTH_RESTRAIN_NUM >> 1) <= w_align
36309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            && *crop_w + (CAMERA_CROP_WIDTH_RESTRAIN_NUM - w_align) <= dst_w) {
36319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            *crop_w += (CAMERA_CROP_WIDTH_RESTRAIN_NUM - w_align);
36329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
36339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
36349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            *crop_w -= w_align;
36359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
36369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    #define CAMERA_CROP_HEIGHT_RESTRAIN_NUM  (0x2) // 2
36389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned int h_align = (*crop_h & (CAMERA_CROP_HEIGHT_RESTRAIN_NUM - 1));
36399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (h_align != 0) {
36409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (  (CAMERA_CROP_HEIGHT_RESTRAIN_NUM >> 1) <= h_align
36419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            && *crop_h + (CAMERA_CROP_HEIGHT_RESTRAIN_NUM - h_align) <= dst_h) {
36429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            *crop_h += (CAMERA_CROP_HEIGHT_RESTRAIN_NUM - h_align);
36439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
36449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
36459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            *crop_h -= h_align;
36469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
36479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *crop_x = (src_w - *crop_w) >> 1;
36499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    *crop_y = (src_h - *crop_h) >> 1;
36509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
36529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
36539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_setExifFixedAttribute(void)
36559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
36569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    char property[PROPERTY_VALUE_MAX];
36579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //2 0th IFD TIFF Tags
36599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Maker
36609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    property_get("ro.product.brand", property, EXIF_DEF_MAKER);
36619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    strncpy((char *)mExifInfo.maker, property,
36629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                sizeof(mExifInfo.maker) - 1);
36639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.maker[sizeof(mExifInfo.maker) - 1] = '\0';
36649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Model
36659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    property_get("ro.product.model", property, EXIF_DEF_MODEL);
36669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    strncpy((char *)mExifInfo.model, property,
36679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                sizeof(mExifInfo.model) - 1);
36689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.model[sizeof(mExifInfo.model) - 1] = '\0';
36699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Software
36709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    property_get("ro.build.id", property, EXIF_DEF_SOFTWARE);
36719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    strncpy((char *)mExifInfo.software, property,
36729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                sizeof(mExifInfo.software) - 1);
36739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.software[sizeof(mExifInfo.software) - 1] = '\0';
36749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 YCbCr Positioning
36769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.ycbcr_positioning = EXIF_DEF_YCBCR_POSITIONING;
36779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
36789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //2 0th IFD Exif Private Tags
36799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 F Number
36809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.fnumber.num = EXIF_DEF_FNUMBER_NUM;
36819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.fnumber.den = EXIF_DEF_FNUMBER_DEN;
36829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Exposure Program
36839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.exposure_program = EXIF_DEF_EXPOSURE_PROGRAM;
36849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Exif Version
36859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memcpy(mExifInfo.exif_version, EXIF_DEF_EXIF_VERSION, sizeof(mExifInfo.exif_version));
36869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Aperture
36879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    uint32_t av = APEX_FNUM_TO_APERTURE((double)mExifInfo.fnumber.num/mExifInfo.fnumber.den);
36889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.aperture.num = av*EXIF_DEF_APEX_DEN;
36899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.aperture.den = EXIF_DEF_APEX_DEN;
36909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Maximum lens aperture
36919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.max_aperture.num = mExifInfo.aperture.num;
36929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.max_aperture.den = mExifInfo.aperture.den;
36939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Lens Focal Length
36949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.focal_length.num = m_defaultCameraInfo->focalLengthNum;
36959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.focal_length.den = m_defaultCameraInfo->focalLengthDen;
36969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 User Comments
36979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    strcpy((char *)mExifInfo.user_comment, EXIF_DEF_USERCOMMENTS);
36989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Color Space information
36999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.color_space = EXIF_DEF_COLOR_SPACE;
37009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Exposure Mode
37019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.exposure_mode = EXIF_DEF_EXPOSURE_MODE;
37029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //2 0th IFD GPS Info Tags
37049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    unsigned char gps_version[4] = { 0x02, 0x02, 0x00, 0x00 };
37059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    memcpy(mExifInfo.gps_version_id, gps_version, sizeof(gps_version));
37069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //2 1th IFD TIFF Tags
37089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.compression_scheme = EXIF_DEF_COMPRESSION;
37099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.x_resolution.num = EXIF_DEF_RESOLUTION_NUM;
37109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.x_resolution.den = EXIF_DEF_RESOLUTION_DEN;
37119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.y_resolution.num = EXIF_DEF_RESOLUTION_NUM;
37129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.y_resolution.den = EXIF_DEF_RESOLUTION_DEN;
37139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    mExifInfo.resolution_unit = EXIF_DEF_RESOLUTION_UNIT;
37149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
37159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_setExifChangedAttribute(exif_attribute_t *exifInfo, ExynosRect *rect)
37179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
37189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //2 0th IFD TIFF Tags
37199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Width
37209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->width = rect->w;
37219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Height
37229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->height = rect->h;
37239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Orientation
37249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (m_curCameraInfo->rotation) {
37259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 90:
37269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->orientation = EXIF_ORIENTATION_90;
37279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 180:
37299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->orientation = EXIF_ORIENTATION_180;
37309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 270:
37329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->orientation = EXIF_ORIENTATION_270;
37339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 0:
37359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
37369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->orientation = EXIF_ORIENTATION_UP;
37379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
37399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Date time
37409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    time_t rawtime;
37419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    struct tm *timeinfo;
37429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    time(&rawtime);
37439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    timeinfo = localtime(&rawtime);
37449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    strftime((char *)exifInfo->date_time, 20, "%Y:%m:%d %H:%M:%S", timeinfo);
37459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //2 0th IFD Exif Private Tags
37479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Exposure Time
37489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int shutterSpeed = 100;
37499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    /* TBD - front camera needs to be fixed to support this g_ctrl,
37509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin       it current returns a negative err value, so avoid putting
37519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin       odd value into exif for now */
37529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (   exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_EXIF_SHUTTERSPEED, &shutterSpeed) < 0
37539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        || shutterSpeed < 0) {
3754f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail, using 100", __func__);
37559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        shutterSpeed = 100;
37569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
37579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->exposure_time.num = 1;
37599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    // x us -> 1/x s */
37609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->exposure_time.den = (uint32_t)(1000000 / shutterSpeed);
37619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 ISO Speed Rating
37639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int iso = m_curCameraInfo->iso;
37649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    /* TBD - front camera needs to be fixed to support this g_ctrl,
37669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin       it current returns a negative err value, so avoid putting
37679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin       odd value into exif for now */
37689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (   exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_EXIF_ISO, &iso) < 0
37699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        || iso < 0) {
3770f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail, using ISO_100", __func__);
37719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        iso = ISO_100;
37729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
37739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (iso) {
37759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ISO_50:
37769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->iso_speed_rating = 50;
37779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ISO_100:
37799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->iso_speed_rating = 100;
37809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ISO_200:
37829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->iso_speed_rating = 200;
37839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ISO_400:
37859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->iso_speed_rating = 400;
37869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ISO_800:
37889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->iso_speed_rating = 800;
37899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case ISO_1600:
37919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->iso_speed_rating = 1600;
37929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
37949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->iso_speed_rating = 100;
37959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
37969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
37979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
37989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    uint32_t av, tv, bv, sv, ev;
37999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    av = APEX_FNUM_TO_APERTURE((double)exifInfo->fnumber.num / exifInfo->fnumber.den);
38009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    tv = APEX_EXPOSURE_TO_SHUTTER((double)exifInfo->exposure_time.num / exifInfo->exposure_time.den);
38019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    sv = APEX_ISO_TO_FILMSENSITIVITY(exifInfo->iso_speed_rating);
38029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    bv = av + tv - sv;
38039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    ev = av + tv;
3804f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("Shutter speed=%d us, iso=%d", shutterSpeed, exifInfo->iso_speed_rating);
3805f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin    ALOGD("AV=%d, TV=%d, SV=%d", av, tv, sv);
38069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Shutter Speed
38089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->shutter_speed.num = tv * EXIF_DEF_APEX_DEN;
38099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->shutter_speed.den = EXIF_DEF_APEX_DEN;
38109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Brightness
38119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->brightness.num = bv*EXIF_DEF_APEX_DEN;
38129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->brightness.den = EXIF_DEF_APEX_DEN;
38139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Exposure Bias
38149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->sceneMode == SCENE_MODE_BEACH ||
38159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->sceneMode == SCENE_MODE_SNOW) {
38169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->exposure_bias.num = EXIF_DEF_APEX_DEN;
38179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->exposure_bias.den = EXIF_DEF_APEX_DEN;
38189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
38199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->exposure_bias.num = 0;
38209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->exposure_bias.den = 0;
38219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
38229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Metering Mode
38239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (m_curCameraInfo->metering) {
38249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case METERING_MODE_CENTER:
38259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->metering_mode = EXIF_METERING_CENTER;
38269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
38279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case METERING_MODE_MATRIX:
38289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->metering_mode = EXIF_METERING_MULTISPOT;
38299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
38309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case METERING_MODE_SPOT:
38319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->metering_mode = EXIF_METERING_SPOT;
38329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
38339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case METERING_MODE_AVERAGE:
38349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
38359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->metering_mode = EXIF_METERING_AVERAGE;
38369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
38379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
38389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Flash
38409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int flash = EXIF_DEF_FLASH;
38419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (   m_curCameraInfo->flashMode == FLASH_MODE_OFF
38429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        || exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_EXIF_FLASH, &flash) < 0
38439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        || flash < 0)
38449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->flash = EXIF_DEF_FLASH;
38459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else
38469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->flash = flash;
38479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 White Balance
38499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->whiteBalance == WHITE_BALANCE_AUTO)
38509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->white_balance = EXIF_WB_AUTO;
38519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    else
38529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->white_balance = EXIF_WB_MANUAL;
38539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //3 Scene Capture Type
38559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (m_curCameraInfo->sceneMode) {
38569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_PORTRAIT:
38579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->scene_capture_type = EXIF_SCENE_PORTRAIT;
38589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
38599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_LANDSCAPE:
38609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->scene_capture_type = EXIF_SCENE_LANDSCAPE;
38619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
38629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case SCENE_MODE_NIGHT:
38639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->scene_capture_type = EXIF_SCENE_NIGHT;
38649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
38659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
38669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->scene_capture_type = EXIF_SCENE_STANDARD;
38679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
38689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
38699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //2 0th IFD GPS Info Tags
38719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->gpsLatitude != 0 && m_curCameraInfo->gpsLongitude != 0) {
38729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_curCameraInfo->gpsLatitude > 0)
38739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            strcpy((char *)exifInfo->gps_latitude_ref, "N");
38749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
38759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            strcpy((char *)exifInfo->gps_latitude_ref, "S");
38769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_curCameraInfo->gpsLongitude > 0)
38789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            strcpy((char *)exifInfo->gps_longitude_ref, "E");
38799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
38809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            strcpy((char *)exifInfo->gps_longitude_ref, "W");
38819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_curCameraInfo->gpsAltitude > 0)
38839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            exifInfo->gps_altitude_ref = 0;
38849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
38859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            exifInfo->gps_altitude_ref = 1;
38869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        double latitude = fabs(m_curCameraInfo->gpsLatitude / 10000.0);
38889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        double longitude = fabs(m_curCameraInfo->gpsLongitude / 10000.0);
38899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        double altitude = fabs(m_curCameraInfo->gpsAltitude / 100.0);
38909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_latitude[0].num = (uint32_t)latitude;
38929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_latitude[0].den = 1;
38939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_latitude[1].num = (uint32_t)((latitude - exifInfo->gps_latitude[0].num) * 60);
38949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_latitude[1].den = 1;
38959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_latitude[2].num = (uint32_t)((((latitude - exifInfo->gps_latitude[0].num) * 60)
38969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                        - exifInfo->gps_latitude[1].num) * 60);
38979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_latitude[2].den = 1;
38989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
38999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_longitude[0].num = (uint32_t)longitude;
39009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_longitude[0].den = 1;
39019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_longitude[1].num = (uint32_t)((longitude - exifInfo->gps_longitude[0].num) * 60);
39029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_longitude[1].den = 1;
39039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_longitude[2].num = (uint32_t)((((longitude - exifInfo->gps_longitude[0].num) * 60)
39049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                                        - exifInfo->gps_longitude[1].num) * 60);
39059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_longitude[2].den = 1;
39069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_altitude.num = (uint32_t)altitude;
39089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_altitude.den = 1;
39099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        struct tm tm_data;
39119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        gmtime_r(&m_curCameraInfo->gpsTimestamp, &tm_data);
39129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_timestamp[0].num = tm_data.tm_hour;
39139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_timestamp[0].den = 1;
39149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_timestamp[1].num = tm_data.tm_min;
39159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_timestamp[1].den = 1;
39169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_timestamp[2].num = tm_data.tm_sec;
39179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->gps_timestamp[2].den = 1;
39189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        snprintf((char*)exifInfo->gps_datestamp, sizeof(exifInfo->gps_datestamp),
39199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                "%04d:%02d:%02d", tm_data.tm_year + 1900, tm_data.tm_mon + 1, tm_data.tm_mday);
39209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->enableGps = true;
39229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
39239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        exifInfo->enableGps = false;
39249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
39259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    //2 1th IFD TIFF Tags
39279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->widthThumb = m_curCameraInfo->thumbnailW;
39289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    exifInfo->heightThumb = m_curCameraInfo->thumbnailH;
39299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
39309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_secRect2SecRect2(ExynosRect *rect, ExynosRect2 *rect2)
39329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
39339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rect2->x1 = rect->x;
39349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rect2->y1 = rect->y;
39359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rect2->x2 = rect->x + rect->w;
39369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rect2->y2 = rect->y + rect->h;
39379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
39389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_secRect22SecRect(ExynosRect2 *rect2, ExynosRect *rect)
39409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
39419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rect->x = rect2->x1;
39429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rect->y = rect2->y1;
39439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rect->w = rect2->x2 - rect2->x1;
39449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    rect->h = rect2->y2 - rect2->y1;
39459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
39469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_printFormat(int colorFormat, const char *arg)
39489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
39499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (colorFormat) {
39509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_YUV420:
3951f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_YUV420", arg);
39529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_YVU420:
3954f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_YVU420", arg);
39559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_YVU420M:
3957f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_YVU420M", arg);
39589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_NV12M:
3960f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_NV12M", arg);
39619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_NV12:
3963f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_NV12", arg);
39649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_NV12T:
3966f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_NV12T", arg);
39679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_NV21:
3969f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_NV21", arg);
39709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_YUV422P:
3972f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_YUV422PP", arg);
39739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_YUYV:
3975f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_YUYV", arg);
39769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_UYVY:
3978f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_UYVYI", arg);
39799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case V4L2_PIX_FMT_RGB565:
3981f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):V4L2_PIX_FMT_RGB565", arg);
39829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
3984f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGV("DEBUG(%s):Unknown Format", arg);
39859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
39869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
39879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
39889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin///////////////////////////////////////////////////
39909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin// Additional API.
39919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin///////////////////////////////////////////////////
39929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
39939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setAngle(int angle)
39949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
39959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->angle != angle) {
39969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        switch (angle) {
39979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case -360:
39989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case    0:
39999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case  360:
40009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            m_curCameraInfo->angle = 0;
40019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            break;
40029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case -270:
40049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case   90:
40059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            m_curCameraInfo->angle = 90;
40069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            break;
40079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case -180:
40099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case  180:
40109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            m_curCameraInfo->angle = 180;
40119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            break;
40129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case  -90:
40149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        case  270:
40159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            m_curCameraInfo->angle = 270;
40169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            break;
40179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        default:
4019f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid angle(%d)", __func__, angle);
40209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
40219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
40229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
40249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_ROTATION, angle) < 0) {
4025f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
40269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
40279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
40289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
40299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
40309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
40329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
40339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getAngle(void)
40359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
40369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->angle;
40379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
40389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setISO(int iso)
40409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
40419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
40429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (iso) {
40449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 50:
40459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ISO_50;
40469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
40479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 100:
40489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ISO_100;
40499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
40509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 200:
40519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ISO_200;
40529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
40539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 400:
40549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ISO_400;
40559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
40569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 800:
40579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ISO_800;
40589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
40599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 1600:
40609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ISO_1600;
40619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
40629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case 0:
40639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
40649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ISO_AUTO;
40659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
40669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
40679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (internalValue < ISO_AUTO || ISO_MAX <= internalValue) {
4069f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
40709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
40719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
40729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->iso != iso) {
40749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->iso = iso;
40759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
40769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
40779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_ISO, internalValue) < 0) {
4078f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
40799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
40809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
40819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
40829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_ISO, internalValue) < 0) {
4083f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
40849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
40859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
40869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
40879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
40889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
40899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
40919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
40929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getISO(void)
40949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
40959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->iso;
40969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
40979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
40989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setContrast(int value)
40999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
41009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
41019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
41029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (value) {
41039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case CONTRAST_AUTO:
41049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
41059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_CONTRAST_AUTO;
41069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
4107f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGW("WARN(%s):Invalid contrast value (%d)", __func__, value);
41089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return true;
41099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
41109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case CONTRAST_MINUS_2:
41119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
41129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_CONTRAST_MINUS_2;
41139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
41149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::CONTRAST_MINUS_2;
41159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
41169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case CONTRAST_MINUS_1:
41179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
41189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_CONTRAST_MINUS_1;
41199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
41209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::CONTRAST_MINUS_1;
41219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
41229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case CONTRAST_DEFAULT:
41239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
41249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_CONTRAST_DEFAULT;
41259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
41269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::CONTRAST_DEFAULT;
41279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
41289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case CONTRAST_PLUS_1:
41299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
41309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_CONTRAST_PLUS_1;
41319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
41329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::CONTRAST_PLUS_1;
41339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
41349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case CONTRAST_PLUS_2:
41359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
41369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::IS_CONTRAST_PLUS_2;
41379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
41389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = ::CONTRAST_PLUS_2;
41399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
41409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
4141f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, value);
41429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
41439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
41449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
41459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
41469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
41479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < ::IS_CONTRAST_AUTO || ::IS_CONTRAST_MAX <= internalValue) {
4148f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
41499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
41509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
41519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
41529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < ::CONTRAST_MINUS_2 || ::CONTRAST_MAX <= internalValue) {
4153f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
41549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
41559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
41569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
41579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
41589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->contrast != value) {
41599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->contrast = value;
41609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
41619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
41629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_CONTRAST, internalValue) < 0) {
4163f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
41649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
41659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
41669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
41679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_CONTRAST, internalValue) < 0) {
4168f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
41699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
41709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
41719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
41729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
41739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
41749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
41759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
41769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
41779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
41789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getContrast(void)
41799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
41809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->contrast;
41819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
41829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
41839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSaturation(int saturation)
41849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
41859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = saturation + SATURATION_DEFAULT;
41869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (internalValue < SATURATION_MINUS_2 || SATURATION_MAX <= internalValue) {
4187f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
41889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
41899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
41909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
41919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->saturation != saturation) {
41929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->saturation = saturation;
41939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
41949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
41959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_SATURATION, internalValue) < 0) {
4196f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
41979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
41989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
41999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
42009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SATURATION, internalValue) < 0) {
4201f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
42029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
42039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
42049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
42059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
42069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
42079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
42099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
42109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSaturation(void)
42129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
42139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->saturation;
42149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
42159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSharpness(int sharpness)
42179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
42189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = sharpness + SHARPNESS_DEFAULT;
42199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (internalValue < SHARPNESS_MINUS_2 || SHARPNESS_MAX <= internalValue) {
4220f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
42219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
42229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
42239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->sharpness != sharpness) {
42259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->sharpness = sharpness;
42269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
42279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
42289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_SHARPNESS, internalValue) < 0) {
4229f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
42309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
42319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
42329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
42339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SHARPNESS, internalValue) < 0) {
4234f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
42359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
42369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
42379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
42389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
42399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
42409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
42429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
42439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSharpness(void)
42459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
42469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->sharpness;
42479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
42489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setHue(int hue)
42509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
42519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = hue;
42529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
42549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue += IS_HUE_DEFAULT;
42559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < IS_HUE_MINUS_2 || IS_HUE_MAX <= internalValue) {
4256f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid hue (%d)", __func__, hue);
42579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
42589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
42599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
4260f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGV("WARN(%s):Not supported hue setting", __func__);
42619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return true;
42629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
42639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->hue != hue) {
42659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->hue = hue;
42669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
42679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_HUE, internalValue) < 0) {
4268f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
42699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
42709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
42719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
42729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
42739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
42759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
42769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getHue(void)
42789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
42799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->hue;
42809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
42819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setWDR(bool toggle)
42839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
42849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalWdr;
42859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (toggle == true) {
42879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
42889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalWdr = IS_DRC_BYPASS_ENABLE;
42899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
42909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalWdr = IS_DRC_BYPASS_DISABLE;
42919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
42929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
42939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalWdr = WDR_ON;
42949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
42959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalWdr = WDR_OFF;
42969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
42979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
42989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->wdr != toggle) {
42999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->wdr = toggle;
43009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
43019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
43029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_SET_DRC, internalWdr) < 0) {
4303f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
43049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
43059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
43069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
43079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_WDR, internalWdr) < 0) {
4308f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
43099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
43109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
43119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
43129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
43139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
43149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
43169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
43179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getWDR(void)
43199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
43209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->wdr;
43219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
43229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setAntiShake(bool toggle)
43249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
43259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = ANTI_SHAKE_OFF;
43269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (toggle == true)
43289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue = ANTI_SHAKE_STILL_ON;
43299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->antiShake != toggle) {
43319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->antiShake = toggle;
43329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
43339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_ANTI_SHAKE, internalValue) < 0) {
4334f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
43359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
43369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
43379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
43389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
43399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
43419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
43429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getAntiShake(void)
43449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
43459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->antiShake;
43469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
43479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setMeteringMode(int value)
43499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
43509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = -1;
43519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    switch (value) {
43539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case METERING_MODE_AVERAGE:
43549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
43559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = IS_METERING_AVERAGE;
43569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
43579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = METERING_MATRIX;
43589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
43599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case METERING_MODE_MATRIX:
43609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
43619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = IS_METERING_MATRIX;
43629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
43639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = METERING_MATRIX;
43649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
43659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case METERING_MODE_CENTER:
43669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
43679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = IS_METERING_CENTER;
43689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
43699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = METERING_CENTER;
43709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
43719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    case METERING_MODE_SPOT:
43729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_internalISP == true)
43739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = IS_METERING_SPOT;
43749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        else
43759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            internalValue = METERING_SPOT;
43769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
43779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    default:
4378f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Unsupported value(%d)", __func__, value);
43799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
43809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        break;
43819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
43829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
43849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < IS_METERING_AVERAGE || IS_METERING_MAX <= internalValue) {
4385f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
43869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
43879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
43889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
43899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue <= METERING_BASE || METERING_MAX <= internalValue) {
4390f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue);
43919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
43929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
43939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
43949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
43959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->metering != value) {
43969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->metering = value;
43979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
43989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
43999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_METERING, internalValue) < 0) {
4400f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
44019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
44029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
44039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
44049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_METERING, internalValue) < 0) {
4405f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
44069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
44079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
44089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
44099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
44109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
44119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
44139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
44149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMeteringMode(void)
44169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
44179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->metering;
44189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
44199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setObjectTracking(bool toggle)
44219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
44229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    m_curCameraInfo->objectTracking = toggle;
44239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
44249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
44259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getObjectTracking(void)
44279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
44289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->objectTracking;
44299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
44309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setObjectTrackingStart(bool toggle)
44329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
44339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->objectTrackingStart != toggle) {
44349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->objectTrackingStart = toggle;
44359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        int startStop = (toggle == true) ? 1 : 0;
44379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_OBJ_TRACKING_START_STOP, startStop) < 0) {
4438f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
44399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
44409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
44419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
44429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
44449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
44459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getObjectTrackingStatus(void)
44479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
44489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int ret = 0;
44499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_OBJ_TRACKING_STATUS, &ret) < 0) {
4451f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail", __func__);
44529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return -1;
44539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
44549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return ret;
44559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
44569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setObjectPosition(int x, int y)
44589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
44599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->previewW == 640)
44609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        x = x - 80;
44619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_OBJECT_POSITION_X, x) < 0) {
4463f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
44649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
44659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
44669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_OBJECT_POSITION_Y, y) < 0) {
4468f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
44699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
44709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
44719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
44739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
44749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setTouchAFStart(bool toggle)
44769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
44779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->touchAfStart != toggle) {
44789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->touchAfStart = toggle;
44799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        int startStop = (toggle == true) ? 1 : 0;
44809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_TOUCH_AF_START_STOP, startStop) < 0) {
4482f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
44839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
44849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
44859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
44869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
44889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
44899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSmartAuto(bool toggle)
44919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
44929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->smartAuto != toggle) {
44939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->smartAuto = toggle;
44949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        int smartAuto = (toggle == true) ? SMART_AUTO_ON : SMART_AUTO_OFF;
44969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
44979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
44989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SMART_AUTO, smartAuto) < 0) {
4499f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
45009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
45019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
45029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
45039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
45049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
45069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
45079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getSmartAuto(void)
45099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
45109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->smartAuto;
45119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
45129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSmartAutoStatus(void)
45149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
45159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int autoscene_status = -1;
45169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->smartAuto == true) {
45189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SMART_AUTO_STATUS, &autoscene_status) < 0) {
4519f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail", __func__);
45209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return -1;
45219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
45229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if ((autoscene_status < SMART_AUTO_STATUS_AUTO) || (autoscene_status > SMART_AUTO_STATUS_MAX)) {
4524f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid getSmartAutoStatus (%d)", __func__, autoscene_status);
45259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return -1;
45269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
45279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
45289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return autoscene_status;
45299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
45309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setBeautyShot(bool toggle)
45329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
45339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->beautyShot != toggle) {
45349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->beautyShot = toggle;
45359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        int beautyShot = (toggle == true) ? BEAUTY_SHOT_ON : BEAUTY_SHOT_OFF;
45369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
45389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_BEAUTY_SHOT, beautyShot) < 0) {
4539f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
45409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
45419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
45429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
45439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
45449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
45469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
45479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getBeautyShot(void)
45499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
45509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->beautyShot;
45519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
45529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setTopDownMirror(void)
45549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
45559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->fd <= 0) {
4556f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Camera was closed", __func__);
45579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
45589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
45599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_VFLIP, 1) < 0) {
4561f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
45629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
45639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
45649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
45669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
45679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setLRMirror(void)
45699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
45709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->fd <= 0) {
4571f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Camera was closed", __func__);
45729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
45739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
45749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_HFLIP, 1) < 0) {
4576f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
45779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
45789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
45799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
45819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
45829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setBrightness(int brightness)
45849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
45859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    int internalValue = brightness;
45869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
45879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_internalISP == true) {
45889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue += IS_BRIGHTNESS_DEFAULT;
45899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < IS_BRIGHTNESS_MINUS_2 || IS_BRIGHTNESS_PLUS_2 < internalValue) {
4590f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue);
45919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
45929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
45939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    } else {
45949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        internalValue += EV_DEFAULT;
45959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (internalValue < EV_MINUS_4 || EV_PLUS_4 < internalValue) {
4596f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin            ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue);
45979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            return false;
45989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
45999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
46009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->brightness != brightness) {
46029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->brightness = brightness;
46039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
46049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (m_internalISP == true) {
46059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_BRIGHTNESS, internalValue) < 0) {
4606f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
46079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
46089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
46099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            } else {
46109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_BRIGHTNESS, internalValue) < 0) {
4611f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                    ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
46129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                    return false;
46139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                }
46149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
46159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
46169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
46179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
46199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
46209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getBrightness(void)
46229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
46239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->brightness;
46249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
46259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setGamma(bool toggle)
46279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
46289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     if (m_curCameraInfo->gamma != toggle) {
46299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         m_curCameraInfo->gamma = toggle;
46309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         int gamma = (toggle == true) ? GAMMA_ON : GAMMA_OFF;
46329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
46349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin             if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_GAMMA, gamma) < 0) {
4635f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                 ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
46369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                 return false;
46379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin             }
46389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         }
46399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     }
46409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     return true;
46429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
46439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getGamma(void)
46459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
46469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->gamma;
46479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
46489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setODC(bool toggle)
46509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
46519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == true) {
46529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_curCameraInfo->odc != toggle) {
46539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            m_curCameraInfo->odc = toggle;
46549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            int odc = (toggle == true) ? CAMERA_ODC_ON : CAMERA_ODC_OFF;
46569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_ODC, odc) < 0) {
4658f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
46599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
46609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
46619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
46629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
46639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     return true;
46659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
46669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getODC(void)
46689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
46699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->odc;
46709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
46719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSlowAE(bool toggle)
46739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
46749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     if (m_curCameraInfo->slowAE != toggle) {
46759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         m_curCameraInfo->slowAE = toggle;
46769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         int slow_ae = (toggle == true) ? SLOW_AE_ON : SLOW_AE_OFF;
46789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
46809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_SLOW_AE, slow_ae) < 0) {
4681f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
46829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
46839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
46849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin         }
46859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     }
46869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     return true;
46889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
46899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getSlowAE(void)
46919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
46929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->slowAE;
46939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
46949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
46959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setShotMode(int shotMode)
46969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
46979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (shotMode < SHOT_MODE_SINGLE || SHOT_MODE_SELF < shotMode) {
4698f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin        ALOGE("ERR(%s):Invalid shotMode (%d)", __func__, shotMode);
46999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        return false;
47009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
47019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_curCameraInfo->shotMode != shotMode) {
47039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        m_curCameraInfo->shotMode = shotMode;
47049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_flagCreate == true) {
47069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_SHOT_MODE_NORMAL, shotMode) < 0) {
4707f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
47089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
47099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
47109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
47119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
47129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return true;
47149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
47159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getShotMode(void)
47179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
47189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->shotMode;
47199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
47209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::set3DNR(bool toggle)
47229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
47239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    if (m_previewDev->flagStart == true) {
47249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        if (m_curCameraInfo->tdnr != toggle) {
47259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            m_curCameraInfo->tdnr = toggle;
47269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            int tdnr = (toggle == true) ? CAMERA_3DNR_ON : CAMERA_3DNR_OFF;
47289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_3DNR, tdnr) < 0) {
4730f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin                ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__);
47319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin                return false;
47329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin            }
47339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin        }
47349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    }
47359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin     return true;
47379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
47389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::get3DNR(void)
47409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{
47419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin    return m_curCameraInfo->tdnr;
47429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}
47439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin
47449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}; // namespace android
4745