ExynosCamera.cpp revision f4979f5067ab25d0e385b791ba3770eb156e0e94
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 4839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin | 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; 12659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin req.memory = V4L2_MEMORY_USERPTR; 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; 13289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.memory = V4L2_MEMORY_USERPTR; 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; 13689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.memory = V4L2_MEMORY_USERPTR; 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++) { 13739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.m.planes[i].m.userptr = (unsigned long)m_previewBuf[buf->reserved.p].virt.extP[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; 14769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin req.memory = V4L2_MEMORY_USERPTR; 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; 15329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.memory = V4L2_MEMORY_USERPTR; 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; 15839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.memory = V4L2_MEMORY_USERPTR; 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++) { 15889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.m.planes[i].m.userptr = (unsigned long)m_videoBuf[buf->reserved.p].virt.extP[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; 16599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin req.memory = V4L2_MEMORY_USERPTR; 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; 17159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.memory = V4L2_MEMORY_USERPTR; 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; 17609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.memory = V4L2_MEMORY_USERPTR; 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++) { 17659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.m.planes[i].m.userptr = (unsigned long)m_pictureBuf[buf->reserved.p].virt.extP[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++) { 34029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (buf[i].virt.p != NULL || buf[i].phys.p != 0) { 34039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin validBuf[i] = true; 34049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin numOfBuf++; 34059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 34069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin validBuf[i] = false; 34079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin struct v4l2_format v4l2_fmt; 34119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin struct v4l2_pix_format pixfmt; 34129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int bpp; 34139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int planes; 34149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin memset(&v4l2_fmt, 0, sizeof(struct v4l2_format)); 34169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin memset(&pixfmt, 0, sizeof(pixfmt)); 34179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch(mode) { 34199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case PREVIEW_MODE: 34209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case VIDEO_MODE: 34219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; 34229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin V4L2_PIX_2_YUV_INFO(colorFormat, &bpp, &planes); 34249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_fmt.fmt.pix_mp.width = w; 34269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_fmt.fmt.pix_mp.height = h; 34279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_fmt.fmt.pix_mp.pixelformat = colorFormat; 34289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_fmt.fmt.pix_mp.num_planes = planes; 34299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_fmt(fd, &v4l2_fmt) < 0) { 3431f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_fmt() fail", __func__); 34329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 34339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 34359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case PICTURE_MODE: 34369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; 34379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin pixfmt.width = w; 34399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin pixfmt.height = h; 34409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin pixfmt.pixelformat = colorFormat; 34419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (pixfmt.pixelformat == V4L2_PIX_FMT_JPEG) 34429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin pixfmt.colorspace = V4L2_COLORSPACE_JPEG; 34439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_fmt.fmt.pix = pixfmt; 34459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_fmt(fd, &v4l2_fmt) < 0) { 3447f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_fmt() fail", __func__); 34489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 34499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 34519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 34529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 34539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin struct v4l2_requestbuffers req; 34569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin req.count = numOfBuf; 34579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; 34589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin req.memory = V4L2_MEMORY_USERPTR; 34599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_reqbufs(fd, &req) < 0) { 3461f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_reqbufs(%d) fail", __func__, numOfBuf); 34629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 34639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin for (int i = 0; i < VIDEO_MAX_FRAME; i++) { 34669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (validBuf[i] == true) { 34679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin struct v4l2_buffer v4l2_buf; 34699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin struct v4l2_plane planes[VIDEO_MAX_PLANES]; 34709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.m.planes = planes; 34729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; 34739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.memory = V4L2_MEMORY_USERPTR; 34749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.index = buf[i].reserved.p; 34759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.length = 0; 34769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin for (int j = 0; j < 3; j++) { 34789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.m.planes[j].m.userptr = (unsigned long)buf[i].virt.extP[j]; 34799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.m.planes[j].length = buf[i].size.extS[j]; 34809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (buf[i].size.extS[j] != 0) 34829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_buf.length++; 34839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_qbuf(fd, &v4l2_buf) < 0) { 3486f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_qbuf(%d) fail", __func__, i); 34879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 34889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 34919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin /* 34939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_currentZoom = -1; 34949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 34959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_setZoom(fd, m_curCameraInfo->zoom, w, h) == false) 3496f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):m_setZoom(%d, %d) fail", __func__, mode, m_curCameraInfo->zoom); 34979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin */ 34989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 34999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 35009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::m_setZoom(int fd, int zoom, int w, int h) 35029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 35039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int ret = true; 35049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_currentZoom != zoom) { 35069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_currentZoom = zoom; 35079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int real_zoom = 0; 35099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_defaultCameraInfo->hwZoomSupported == true) 35119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin real_zoom = 0; // just adjust ratio, not digital zoom. 35129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 35139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin real_zoom = zoom; // adjust ratio, digital zoom 35149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ret = m_setCrop(fd, w, h, real_zoom); 35169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (ret == false) 3517f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):m_setCrop(%d, %d) fail", __func__, w, h); 35189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 35199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return ret; 35219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 35229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::m_setCrop(int fd, int w, int h, int zoom) 35249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 35259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_cropcap cropcap; 35269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin v4l2_crop crop; 35279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int crop_x = 0; 35289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int crop_y = 0; 35299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int crop_w = 0; 35309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int crop_h = 0; 35319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 35339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_cropcap(fd, &cropcap) < 0) { 3535f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_cropcap() fail)", __func__); 35369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 35379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 35389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_getCropRect(cropcap.bounds.width, cropcap.bounds.height, 35409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin w, h, 35419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin &crop_x, &crop_y, 35429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin &crop_w, &crop_h, 35439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin zoom); 35449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin cropcap.defrect.left = crop_x; 35469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin cropcap.defrect.top = crop_y; 35479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin cropcap.defrect.width = crop_w; 35489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin cropcap.defrect.height = crop_h; 35499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 35509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin crop.c = cropcap.defrect; 35519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_crop(fd, &crop) < 0) { 3553f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_crop() fail(%d))", __func__, zoom); 35549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 35559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 35569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin /* 3558f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 1 w : %d", w); 3559f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 1 h : %d", h); 3560f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 1 zoom : %d", zoom); 3561f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 1 cropcap.bounds.w : %d", cropcap.bounds.width); 3562f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 1 cropcap.bounds.h : %d", cropcap.bounds.height); 3563f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 2 crop_x : %d", crop_x); 3564f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 2 crop_y : %d", crop_y); 3565f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 2 crop_w : %d", crop_w); 3566f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 2 crop_h : %d", crop_h); 3567f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 2 cropcap.defrect.left : %d", cropcap.defrect.left); 3568f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 2 cropcap.defrect.top : %d", cropcap.defrect.top); 3569f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 2 cropcap.defrect.width : %d", cropcap.defrect.width); 3570f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("## 2 cropcap.defrect.height: %d", cropcap.defrect.height); 35719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin */ 35729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 35749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 35759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::m_getCropRect(unsigned int src_w, unsigned int src_h, 35779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int dst_w, unsigned int dst_h, 35789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int *crop_x, unsigned int *crop_y, 35799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int *crop_w, unsigned int *crop_h, 35809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int zoom) 35819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 35829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin #define DEFAULT_ZOOM_RATIO (4) // 4x zoom 35839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin #define DEFAULT_ZOOM_RATIO_SHIFT (2) 35849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int max_zoom = m_defaultCameraInfo->maxZoom; 35859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_w = src_w; 35879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_h = src_h; 35889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if ( src_w != dst_w 35909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin || src_h != dst_h) { 35919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin float src_ratio = 1.0f; 35929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin float dst_ratio = 1.0f; 35939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin // ex : 1024 / 768 35959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin src_ratio = (float)src_w / (float)src_h; 35969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 35979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin // ex : 352 / 288 35989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin dst_ratio = (float)dst_w / (float)dst_h; 35999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (src_ratio != dst_ratio) { 36019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (src_ratio <= dst_ratio) { 36029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin // shrink h 36039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_w = src_w; 36049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_h = src_w / dst_ratio; 36059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { //(src_ratio > dst_ratio) 36069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin // shrink w 36079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_w = src_h * dst_ratio; 36089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_h = src_h; 36099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 36109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 36119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (zoom != 0) { 36139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int zoom_w_step = 36149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin (*crop_w - (*crop_w >> DEFAULT_ZOOM_RATIO_SHIFT)) / max_zoom; 36159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_w = *crop_w - (zoom_w_step * zoom); 36179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int zoom_h_step = 36199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin (*crop_h - (*crop_h >> DEFAULT_ZOOM_RATIO_SHIFT)) / max_zoom; 36209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_h = *crop_h - (zoom_h_step * zoom); 36229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 36239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 36249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin #define CAMERA_CROP_WIDTH_RESTRAIN_NUM (0x10) // 16 36269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int w_align = (*crop_w & (CAMERA_CROP_WIDTH_RESTRAIN_NUM - 1)); 36279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (w_align != 0) { 36289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if ( (CAMERA_CROP_WIDTH_RESTRAIN_NUM >> 1) <= w_align 36299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin && *crop_w + (CAMERA_CROP_WIDTH_RESTRAIN_NUM - w_align) <= dst_w) { 36309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_w += (CAMERA_CROP_WIDTH_RESTRAIN_NUM - w_align); 36319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 36329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 36339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_w -= w_align; 36349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 36359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin #define CAMERA_CROP_HEIGHT_RESTRAIN_NUM (0x2) // 2 36379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned int h_align = (*crop_h & (CAMERA_CROP_HEIGHT_RESTRAIN_NUM - 1)); 36389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (h_align != 0) { 36399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if ( (CAMERA_CROP_HEIGHT_RESTRAIN_NUM >> 1) <= h_align 36409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin && *crop_h + (CAMERA_CROP_HEIGHT_RESTRAIN_NUM - h_align) <= dst_h) { 36419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_h += (CAMERA_CROP_HEIGHT_RESTRAIN_NUM - h_align); 36429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 36439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 36449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_h -= h_align; 36459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 36469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_x = (src_w - *crop_w) >> 1; 36489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin *crop_y = (src_h - *crop_h) >> 1; 36499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 36519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 36529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_setExifFixedAttribute(void) 36549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 36559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin char property[PROPERTY_VALUE_MAX]; 36569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //2 0th IFD TIFF Tags 36589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Maker 36599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin property_get("ro.product.brand", property, EXIF_DEF_MAKER); 36609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strncpy((char *)mExifInfo.maker, property, 36619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin sizeof(mExifInfo.maker) - 1); 36629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.maker[sizeof(mExifInfo.maker) - 1] = '\0'; 36639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Model 36649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin property_get("ro.product.model", property, EXIF_DEF_MODEL); 36659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strncpy((char *)mExifInfo.model, property, 36669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin sizeof(mExifInfo.model) - 1); 36679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.model[sizeof(mExifInfo.model) - 1] = '\0'; 36689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Software 36699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin property_get("ro.build.id", property, EXIF_DEF_SOFTWARE); 36709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strncpy((char *)mExifInfo.software, property, 36719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin sizeof(mExifInfo.software) - 1); 36729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.software[sizeof(mExifInfo.software) - 1] = '\0'; 36739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 YCbCr Positioning 36759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.ycbcr_positioning = EXIF_DEF_YCBCR_POSITIONING; 36769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 36779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //2 0th IFD Exif Private Tags 36789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 F Number 36799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.fnumber.num = EXIF_DEF_FNUMBER_NUM; 36809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.fnumber.den = EXIF_DEF_FNUMBER_DEN; 36819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Exposure Program 36829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.exposure_program = EXIF_DEF_EXPOSURE_PROGRAM; 36839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Exif Version 36849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin memcpy(mExifInfo.exif_version, EXIF_DEF_EXIF_VERSION, sizeof(mExifInfo.exif_version)); 36859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Aperture 36869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin uint32_t av = APEX_FNUM_TO_APERTURE((double)mExifInfo.fnumber.num/mExifInfo.fnumber.den); 36879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.aperture.num = av*EXIF_DEF_APEX_DEN; 36889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.aperture.den = EXIF_DEF_APEX_DEN; 36899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Maximum lens aperture 36909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.max_aperture.num = mExifInfo.aperture.num; 36919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.max_aperture.den = mExifInfo.aperture.den; 36929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Lens Focal Length 36939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.focal_length.num = m_defaultCameraInfo->focalLengthNum; 36949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.focal_length.den = m_defaultCameraInfo->focalLengthDen; 36959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 User Comments 36969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strcpy((char *)mExifInfo.user_comment, EXIF_DEF_USERCOMMENTS); 36979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Color Space information 36989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.color_space = EXIF_DEF_COLOR_SPACE; 36999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Exposure Mode 37009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.exposure_mode = EXIF_DEF_EXPOSURE_MODE; 37019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //2 0th IFD GPS Info Tags 37039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin unsigned char gps_version[4] = { 0x02, 0x02, 0x00, 0x00 }; 37049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin memcpy(mExifInfo.gps_version_id, gps_version, sizeof(gps_version)); 37059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //2 1th IFD TIFF Tags 37079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.compression_scheme = EXIF_DEF_COMPRESSION; 37089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.x_resolution.num = EXIF_DEF_RESOLUTION_NUM; 37099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.x_resolution.den = EXIF_DEF_RESOLUTION_DEN; 37109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.y_resolution.num = EXIF_DEF_RESOLUTION_NUM; 37119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.y_resolution.den = EXIF_DEF_RESOLUTION_DEN; 37129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mExifInfo.resolution_unit = EXIF_DEF_RESOLUTION_UNIT; 37139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 37149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_setExifChangedAttribute(exif_attribute_t *exifInfo, ExynosRect *rect) 37169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 37179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //2 0th IFD TIFF Tags 37189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Width 37199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->width = rect->w; 37209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Height 37219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->height = rect->h; 37229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Orientation 37239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (m_curCameraInfo->rotation) { 37249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 90: 37259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->orientation = EXIF_ORIENTATION_90; 37269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 180: 37289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->orientation = EXIF_ORIENTATION_180; 37299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 270: 37319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->orientation = EXIF_ORIENTATION_270; 37329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 0: 37349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 37359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->orientation = EXIF_ORIENTATION_UP; 37369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 37389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Date time 37399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin time_t rawtime; 37409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin struct tm *timeinfo; 37419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin time(&rawtime); 37429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin timeinfo = localtime(&rawtime); 37439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strftime((char *)exifInfo->date_time, 20, "%Y:%m:%d %H:%M:%S", timeinfo); 37449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //2 0th IFD Exif Private Tags 37469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Exposure Time 37479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int shutterSpeed = 100; 37489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin /* TBD - front camera needs to be fixed to support this g_ctrl, 37499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin it current returns a negative err value, so avoid putting 37509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin odd value into exif for now */ 37519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if ( exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_EXIF_SHUTTERSPEED, &shutterSpeed) < 0 37529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin || shutterSpeed < 0) { 3753f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail, using 100", __func__); 37549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin shutterSpeed = 100; 37559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 37569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->exposure_time.num = 1; 37589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin // x us -> 1/x s */ 37599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->exposure_time.den = (uint32_t)(1000000 / shutterSpeed); 37609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 ISO Speed Rating 37629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int iso = m_curCameraInfo->iso; 37639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin /* TBD - front camera needs to be fixed to support this g_ctrl, 37659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin it current returns a negative err value, so avoid putting 37669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin odd value into exif for now */ 37679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if ( exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_EXIF_ISO, &iso) < 0 37689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin || iso < 0) { 3769f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail, using ISO_100", __func__); 37709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin iso = ISO_100; 37719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 37729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (iso) { 37749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case ISO_50: 37759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->iso_speed_rating = 50; 37769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case ISO_100: 37789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->iso_speed_rating = 100; 37799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case ISO_200: 37819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->iso_speed_rating = 200; 37829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case ISO_400: 37849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->iso_speed_rating = 400; 37859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case ISO_800: 37879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->iso_speed_rating = 800; 37889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case ISO_1600: 37909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->iso_speed_rating = 1600; 37919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 37939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->iso_speed_rating = 100; 37949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 37959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 37969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 37979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin uint32_t av, tv, bv, sv, ev; 37989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin av = APEX_FNUM_TO_APERTURE((double)exifInfo->fnumber.num / exifInfo->fnumber.den); 37999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin tv = APEX_EXPOSURE_TO_SHUTTER((double)exifInfo->exposure_time.num / exifInfo->exposure_time.den); 38009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin sv = APEX_ISO_TO_FILMSENSITIVITY(exifInfo->iso_speed_rating); 38019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bv = av + tv - sv; 38029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ev = av + tv; 3803f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("Shutter speed=%d us, iso=%d", shutterSpeed, exifInfo->iso_speed_rating); 3804f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGD("AV=%d, TV=%d, SV=%d", av, tv, sv); 38059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Shutter Speed 38079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->shutter_speed.num = tv * EXIF_DEF_APEX_DEN; 38089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->shutter_speed.den = EXIF_DEF_APEX_DEN; 38099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Brightness 38109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->brightness.num = bv*EXIF_DEF_APEX_DEN; 38119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->brightness.den = EXIF_DEF_APEX_DEN; 38129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Exposure Bias 38139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->sceneMode == SCENE_MODE_BEACH || 38149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->sceneMode == SCENE_MODE_SNOW) { 38159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->exposure_bias.num = EXIF_DEF_APEX_DEN; 38169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->exposure_bias.den = EXIF_DEF_APEX_DEN; 38179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 38189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->exposure_bias.num = 0; 38199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->exposure_bias.den = 0; 38209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 38219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Metering Mode 38229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (m_curCameraInfo->metering) { 38239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case METERING_MODE_CENTER: 38249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->metering_mode = EXIF_METERING_CENTER; 38259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 38269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case METERING_MODE_MATRIX: 38279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->metering_mode = EXIF_METERING_MULTISPOT; 38289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 38299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case METERING_MODE_SPOT: 38309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->metering_mode = EXIF_METERING_SPOT; 38319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 38329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case METERING_MODE_AVERAGE: 38339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 38349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->metering_mode = EXIF_METERING_AVERAGE; 38359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 38369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 38379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Flash 38399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int flash = EXIF_DEF_FLASH; 38409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if ( m_curCameraInfo->flashMode == FLASH_MODE_OFF 38419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin || exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_EXIF_FLASH, &flash) < 0 38429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin || flash < 0) 38439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->flash = EXIF_DEF_FLASH; 38449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 38459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->flash = flash; 38469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 White Balance 38489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->whiteBalance == WHITE_BALANCE_AUTO) 38499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->white_balance = EXIF_WB_AUTO; 38509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 38519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->white_balance = EXIF_WB_MANUAL; 38529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //3 Scene Capture Type 38549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (m_curCameraInfo->sceneMode) { 38559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case SCENE_MODE_PORTRAIT: 38569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->scene_capture_type = EXIF_SCENE_PORTRAIT; 38579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 38589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case SCENE_MODE_LANDSCAPE: 38599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->scene_capture_type = EXIF_SCENE_LANDSCAPE; 38609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 38619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case SCENE_MODE_NIGHT: 38629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->scene_capture_type = EXIF_SCENE_NIGHT; 38639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 38649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 38659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->scene_capture_type = EXIF_SCENE_STANDARD; 38669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 38679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 38689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //2 0th IFD GPS Info Tags 38709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->gpsLatitude != 0 && m_curCameraInfo->gpsLongitude != 0) { 38719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->gpsLatitude > 0) 38729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strcpy((char *)exifInfo->gps_latitude_ref, "N"); 38739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 38749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strcpy((char *)exifInfo->gps_latitude_ref, "S"); 38759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->gpsLongitude > 0) 38779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strcpy((char *)exifInfo->gps_longitude_ref, "E"); 38789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 38799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin strcpy((char *)exifInfo->gps_longitude_ref, "W"); 38809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->gpsAltitude > 0) 38829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_altitude_ref = 0; 38839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 38849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_altitude_ref = 1; 38859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin double latitude = fabs(m_curCameraInfo->gpsLatitude / 10000.0); 38879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin double longitude = fabs(m_curCameraInfo->gpsLongitude / 10000.0); 38889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin double altitude = fabs(m_curCameraInfo->gpsAltitude / 100.0); 38899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_latitude[0].num = (uint32_t)latitude; 38919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_latitude[0].den = 1; 38929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_latitude[1].num = (uint32_t)((latitude - exifInfo->gps_latitude[0].num) * 60); 38939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_latitude[1].den = 1; 38949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_latitude[2].num = (uint32_t)((((latitude - exifInfo->gps_latitude[0].num) * 60) 38959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin - exifInfo->gps_latitude[1].num) * 60); 38969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_latitude[2].den = 1; 38979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 38989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_longitude[0].num = (uint32_t)longitude; 38999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_longitude[0].den = 1; 39009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_longitude[1].num = (uint32_t)((longitude - exifInfo->gps_longitude[0].num) * 60); 39019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_longitude[1].den = 1; 39029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_longitude[2].num = (uint32_t)((((longitude - exifInfo->gps_longitude[0].num) * 60) 39039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin - exifInfo->gps_longitude[1].num) * 60); 39049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_longitude[2].den = 1; 39059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_altitude.num = (uint32_t)altitude; 39079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_altitude.den = 1; 39089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin struct tm tm_data; 39109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin gmtime_r(&m_curCameraInfo->gpsTimestamp, &tm_data); 39119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_timestamp[0].num = tm_data.tm_hour; 39129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_timestamp[0].den = 1; 39139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_timestamp[1].num = tm_data.tm_min; 39149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_timestamp[1].den = 1; 39159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_timestamp[2].num = tm_data.tm_sec; 39169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->gps_timestamp[2].den = 1; 39179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin snprintf((char*)exifInfo->gps_datestamp, sizeof(exifInfo->gps_datestamp), 39189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin "%04d:%02d:%02d", tm_data.tm_year + 1900, tm_data.tm_mon + 1, tm_data.tm_mday); 39199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->enableGps = true; 39219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 39229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->enableGps = false; 39239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 39249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //2 1th IFD TIFF Tags 39269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->widthThumb = m_curCameraInfo->thumbnailW; 39279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin exifInfo->heightThumb = m_curCameraInfo->thumbnailH; 39289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 39299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_secRect2SecRect2(ExynosRect *rect, ExynosRect2 *rect2) 39319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 39329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin rect2->x1 = rect->x; 39339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin rect2->y1 = rect->y; 39349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin rect2->x2 = rect->x + rect->w; 39359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin rect2->y2 = rect->y + rect->h; 39369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 39379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_secRect22SecRect(ExynosRect2 *rect2, ExynosRect *rect) 39399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 39409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin rect->x = rect2->x1; 39419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin rect->y = rect2->y1; 39429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin rect->w = rect2->x2 - rect2->x1; 39439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin rect->h = rect2->y2 - rect2->y1; 39449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 39459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinvoid ExynosCamera::m_printFormat(int colorFormat, const char *arg) 39479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 39489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (colorFormat) { 39499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_YUV420: 3950f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_YUV420", arg); 39519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_YVU420: 3953f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_YVU420", arg); 39549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_YVU420M: 3956f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_YVU420M", arg); 39579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_NV12M: 3959f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_NV12M", arg); 39609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_NV12: 3962f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_NV12", arg); 39639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_NV12T: 3965f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_NV12T", arg); 39669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_NV21: 3968f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_NV21", arg); 39699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_YUV422P: 3971f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_YUV422PP", arg); 39729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_YUYV: 3974f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_YUYV", arg); 39759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_UYVY: 3977f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_UYVYI", arg); 39789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case V4L2_PIX_FMT_RGB565: 3980f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):V4L2_PIX_FMT_RGB565", arg); 39819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 3983f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("DEBUG(%s):Unknown Format", arg); 39849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 39859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 39869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 39879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/////////////////////////////////////////////////// 39899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin// Additional API. 39909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/////////////////////////////////////////////////// 39919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 39929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setAngle(int angle) 39939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 39949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->angle != angle) { 39959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (angle) { 39969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case -360: 39979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 0: 39989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 360: 39999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->angle = 0; 40009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case -270: 40039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 90: 40049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->angle = 90; 40059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case -180: 40089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 180: 40099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->angle = 180; 40109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case -90: 40139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 270: 40149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->angle = 270; 40159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 4018f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid angle(%d)", __func__, angle); 40199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 40209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 40239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_ROTATION, angle) < 0) { 4024f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 40259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 40269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 40319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 40329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getAngle(void) 40349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 40359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->angle; 40369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 40379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setISO(int iso) 40399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 40409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalValue = -1; 40419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (iso) { 40439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 50: 40449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ISO_50; 40459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 100: 40479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ISO_100; 40489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 200: 40509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ISO_200; 40519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 400: 40539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ISO_400; 40549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 800: 40569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ISO_800; 40579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 1600: 40599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ISO_1600; 40609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case 0: 40629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 40639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ISO_AUTO; 40649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 40659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < ISO_AUTO || ISO_MAX <= internalValue) { 4068f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue); 40699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 40709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->iso != iso) { 40739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->iso = iso; 40749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 40759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 40769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_ISO, internalValue) < 0) { 4077f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 40789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 40799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 40819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_ISO, internalValue) < 0) { 4082f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 40839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 40849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 40889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 40909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 40919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getISO(void) 40939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 40949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->iso; 40959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 40969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 40979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setContrast(int value) 40989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 40999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalValue = -1; 41009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 41019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (value) { 41029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case CONTRAST_AUTO: 41039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 41049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::IS_CONTRAST_AUTO; 41059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 4106f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGW("WARN(%s):Invalid contrast value (%d)", __func__, value); 41079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 41089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 41099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case CONTRAST_MINUS_2: 41109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 41119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::IS_CONTRAST_MINUS_2; 41129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 41139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::CONTRAST_MINUS_2; 41149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 41159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case CONTRAST_MINUS_1: 41169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 41179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::IS_CONTRAST_MINUS_1; 41189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 41199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::CONTRAST_MINUS_1; 41209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 41219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case CONTRAST_DEFAULT: 41229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 41239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::IS_CONTRAST_DEFAULT; 41249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 41259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::CONTRAST_DEFAULT; 41269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 41279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case CONTRAST_PLUS_1: 41289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 41299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::IS_CONTRAST_PLUS_1; 41309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 41319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::CONTRAST_PLUS_1; 41329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 41339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case CONTRAST_PLUS_2: 41349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 41359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::IS_CONTRAST_PLUS_2; 41369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 41379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ::CONTRAST_PLUS_2; 41389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 41399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 4140f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Unsupported value(%d)", __func__, value); 41419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 41429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 41439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 41459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 41469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < ::IS_CONTRAST_AUTO || ::IS_CONTRAST_MAX <= internalValue) { 4147f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue); 41489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 41499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 41519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < ::CONTRAST_MINUS_2 || ::CONTRAST_MAX <= internalValue) { 4152f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue); 41539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 41549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 41579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->contrast != value) { 41589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->contrast = value; 41599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 41609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 41619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_CONTRAST, internalValue) < 0) { 4162f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 41639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 41649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 41669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_CONTRAST, internalValue) < 0) { 4167f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 41689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 41699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 41749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 41759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 41769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 41779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getContrast(void) 41789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 41799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->contrast; 41809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 41819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 41829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSaturation(int saturation) 41839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 41849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalValue = saturation + SATURATION_DEFAULT; 41859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < SATURATION_MINUS_2 || SATURATION_MAX <= internalValue) { 4186f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue); 41879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 41889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 41909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->saturation != saturation) { 41919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->saturation = saturation; 41929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 41939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 41949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_SATURATION, internalValue) < 0) { 4195f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 41969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 41979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 41989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 41999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SATURATION, internalValue) < 0) { 4200f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 42019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 42029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 42089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 42099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSaturation(void) 42119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 42129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->saturation; 42139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 42149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSharpness(int sharpness) 42169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 42179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalValue = sharpness + SHARPNESS_DEFAULT; 42189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < SHARPNESS_MINUS_2 || SHARPNESS_MAX <= internalValue) { 4219f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue); 42209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 42219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->sharpness != sharpness) { 42249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->sharpness = sharpness; 42259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 42269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 42279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_SHARPNESS, internalValue) < 0) { 4228f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 42299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 42309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 42329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SHARPNESS, internalValue) < 0) { 4233f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 42349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 42359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 42419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 42429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSharpness(void) 42449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 42459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->sharpness; 42469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 42479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setHue(int hue) 42499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 42509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalValue = hue; 42519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 42539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue += IS_HUE_DEFAULT; 42549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < IS_HUE_MINUS_2 || IS_HUE_MAX <= internalValue) { 4255f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid hue (%d)", __func__, hue); 42569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 42579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 4259f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGV("WARN(%s):Not supported hue setting", __func__); 42609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 42619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->hue != hue) { 42649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->hue = hue; 42659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 42669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_HUE, internalValue) < 0) { 4267f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 42689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 42699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 42749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 42759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getHue(void) 42779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 42789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->hue; 42799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 42809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setWDR(bool toggle) 42829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 42839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalWdr; 42849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (toggle == true) { 42869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 42879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalWdr = IS_DRC_BYPASS_ENABLE; 42889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 42899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalWdr = IS_DRC_BYPASS_DISABLE; 42909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 42919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 42929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalWdr = WDR_ON; 42939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 42949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalWdr = WDR_OFF; 42959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 42969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 42979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->wdr != toggle) { 42989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->wdr = toggle; 42999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 43009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 43019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_SET_DRC, internalWdr) < 0) { 4302f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 43039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 43049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 43069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_WDR, internalWdr) < 0) { 4307f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 43089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 43099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 43159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 43169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getWDR(void) 43189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 43199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->wdr; 43209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 43219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setAntiShake(bool toggle) 43239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 43249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalValue = ANTI_SHAKE_OFF; 43259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (toggle == true) 43279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = ANTI_SHAKE_STILL_ON; 43289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->antiShake != toggle) { 43309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->antiShake = toggle; 43319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 43329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_ANTI_SHAKE, internalValue) < 0) { 4333f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 43349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 43359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 43409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 43419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getAntiShake(void) 43439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 43449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->antiShake; 43459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 43469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setMeteringMode(int value) 43489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 43499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalValue = -1; 43509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin switch (value) { 43529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case METERING_MODE_AVERAGE: 43539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 43549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = IS_METERING_AVERAGE; 43559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 43569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = METERING_MATRIX; 43579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 43589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case METERING_MODE_MATRIX: 43599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 43609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = IS_METERING_MATRIX; 43619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 43629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = METERING_MATRIX; 43639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 43649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case METERING_MODE_CENTER: 43659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 43669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = IS_METERING_CENTER; 43679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 43689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = METERING_CENTER; 43699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 43709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin case METERING_MODE_SPOT: 43719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) 43729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = IS_METERING_SPOT; 43739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin else 43749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue = METERING_SPOT; 43759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 43769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin default: 4377f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Unsupported value(%d)", __func__, value); 43789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 43799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin break; 43809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 43839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < IS_METERING_AVERAGE || IS_METERING_MAX <= internalValue) { 4384f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue); 43859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 43869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 43889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue <= METERING_BASE || METERING_MAX <= internalValue) { 4389f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue (%d)", __func__, internalValue); 43909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 43919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 43939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 43949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->metering != value) { 43959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->metering = value; 43969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 43979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 43989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_METERING, internalValue) < 0) { 4399f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 44009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 44019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 44039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_METERING, internalValue) < 0) { 4404f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 44059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 44069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 44129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 44139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getMeteringMode(void) 44159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 44169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->metering; 44179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 44189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setObjectTracking(bool toggle) 44209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 44219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->objectTracking = toggle; 44229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 44239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 44249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getObjectTracking(void) 44269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 44279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->objectTracking; 44289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 44299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setObjectTrackingStart(bool toggle) 44319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 44329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->objectTrackingStart != toggle) { 44339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->objectTrackingStart = toggle; 44349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int startStop = (toggle == true) ? 1 : 0; 44369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_OBJ_TRACKING_START_STOP, startStop) < 0) { 4437f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 44389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 44399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 44439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 44449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getObjectTrackingStatus(void) 44469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 44479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int ret = 0; 44489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_OBJ_TRACKING_STATUS, &ret) < 0) { 4450f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail", __func__); 44519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return -1; 44529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return ret; 44549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 44559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setObjectPosition(int x, int y) 44579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 44589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->previewW == 640) 44599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin x = x - 80; 44609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_OBJECT_POSITION_X, x) < 0) { 4462f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 44639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 44649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_OBJECT_POSITION_Y, y) < 0) { 4467f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 44689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 44699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 44729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 44739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setTouchAFStart(bool toggle) 44759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 44769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->touchAfStart != toggle) { 44779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->touchAfStart = toggle; 44789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int startStop = (toggle == true) ? 1 : 0; 44799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_TOUCH_AF_START_STOP, startStop) < 0) { 4481f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 44829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 44839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 44859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 44879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 44889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSmartAuto(bool toggle) 44909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 44919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->smartAuto != toggle) { 44929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->smartAuto = toggle; 44939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int smartAuto = (toggle == true) ? SMART_AUTO_ON : SMART_AUTO_OFF; 44959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 44969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 44979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SMART_AUTO, smartAuto) < 0) { 4498f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 44999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 45009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 45059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 45069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getSmartAuto(void) 45089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 45099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->smartAuto; 45109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 45119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getSmartAutoStatus(void) 45139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 45149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int autoscene_status = -1; 45159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->smartAuto == true) { 45179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_g_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SMART_AUTO_STATUS, &autoscene_status) < 0) { 4518f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_g_ctrl() fail", __func__); 45199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return -1; 45209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if ((autoscene_status < SMART_AUTO_STATUS_AUTO) || (autoscene_status > SMART_AUTO_STATUS_MAX)) { 4523f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid getSmartAutoStatus (%d)", __func__, autoscene_status); 45249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return -1; 45259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return autoscene_status; 45289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 45299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setBeautyShot(bool toggle) 45319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 45329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->beautyShot != toggle) { 45339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->beautyShot = toggle; 45349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int beautyShot = (toggle == true) ? BEAUTY_SHOT_ON : BEAUTY_SHOT_OFF; 45359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 45379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_BEAUTY_SHOT, beautyShot) < 0) { 4538f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 45399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 45409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 45459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 45469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getBeautyShot(void) 45489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 45499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->beautyShot; 45509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 45519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setTopDownMirror(void) 45539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 45549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_previewDev->fd <= 0) { 4555f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Camera was closed", __func__); 45569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 45579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_VFLIP, 1) < 0) { 4560f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 45619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 45629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 45659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 45669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setLRMirror(void) 45689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 45699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_previewDev->fd <= 0) { 4570f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Camera was closed", __func__); 45719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 45729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_HFLIP, 1) < 0) { 4575f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 45769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 45779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 45809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 45819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setBrightness(int brightness) 45839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 45849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int internalValue = brightness; 45859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 45869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 45879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue += IS_BRIGHTNESS_DEFAULT; 45889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < IS_BRIGHTNESS_MINUS_2 || IS_BRIGHTNESS_PLUS_2 < internalValue) { 4589f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue); 45909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 45919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 45939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin internalValue += EV_DEFAULT; 45949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (internalValue < EV_MINUS_4 || EV_PLUS_4 < internalValue) { 4595f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid internalValue(%d)", __func__, internalValue); 45969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 45979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 45999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->brightness != brightness) { 46019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->brightness = brightness; 46029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 46039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_internalISP == true) { 46049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_BRIGHTNESS, internalValue) < 0) { 4605f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 46069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 46079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } else { 46099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_BRIGHTNESS, internalValue) < 0) { 4610f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 46119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 46129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 46189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 46199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getBrightness(void) 46219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 46229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->brightness; 46239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 46249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setGamma(bool toggle) 46269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 46279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->gamma != toggle) { 46289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->gamma = toggle; 46299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int gamma = (toggle == true) ? GAMMA_ON : GAMMA_OFF; 46319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 46339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_GAMMA, gamma) < 0) { 4634f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 46359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 46369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 46419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 46429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getGamma(void) 46449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 46459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->gamma; 46469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 46479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setODC(bool toggle) 46499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 46509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_previewDev->flagStart == true) { 46519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->odc != toggle) { 46529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->odc = toggle; 46539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int odc = (toggle == true) ? CAMERA_ODC_ON : CAMERA_ODC_OFF; 46559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_ODC, odc) < 0) { 4657f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 46589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 46599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 46649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 46659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getODC(void) 46679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 46689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->odc; 46699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 46709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setSlowAE(bool toggle) 46729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 46739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->slowAE != toggle) { 46749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->slowAE = toggle; 46759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int slow_ae = (toggle == true) ? SLOW_AE_ON : SLOW_AE_OFF; 46779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 46799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_SLOW_AE, slow_ae) < 0) { 4680f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 46819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 46829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 46859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 46879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 46889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::getSlowAE(void) 46909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 46919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->slowAE; 46929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 46939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 46949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::setShotMode(int shotMode) 46959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 46969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (shotMode < SHOT_MODE_SINGLE || SHOT_MODE_SELF < shotMode) { 4697f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):Invalid shotMode (%d)", __func__, shotMode); 46989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 46999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 47009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->shotMode != shotMode) { 47029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->shotMode = shotMode; 47039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_flagCreate == true) { 47059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_IS_CAMERA_SHOT_MODE_NORMAL, shotMode) < 0) { 4706f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 47079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 47089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 47099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 47109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 47119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 47139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 47149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinint ExynosCamera::getShotMode(void) 47169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 47179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->shotMode; 47189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 47199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::set3DNR(bool toggle) 47219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 47229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_previewDev->flagStart == true) { 47239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (m_curCameraInfo->tdnr != toggle) { 47249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin m_curCameraInfo->tdnr = toggle; 47259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int tdnr = (toggle == true) ? CAMERA_3DNR_ON : CAMERA_3DNR_OFF; 47279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin if (exynos_v4l2_s_ctrl(m_previewDev->fd, V4L2_CID_CAMERA_SET_3DNR, tdnr) < 0) { 4729f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin ALOGE("ERR(%s):exynos_v4l2_s_ctrl() fail", __func__); 47309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 47319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 47329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 47339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 47349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 47369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 47379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinbool ExynosCamera::get3DNR(void) 47399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin{ 47409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return m_curCameraInfo->tdnr; 47419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin} 47429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 47439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}; // namespace android 4744