16f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 26f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Redistribution and use in source and binary forms, with or without 46f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * modification, are permitted provided that the following conditions are 56f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * met: 66f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * * Redistributions of source code must retain the above copyright 76f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * notice, this list of conditions and the following disclaimer. 86f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * * Redistributions in binary form must reproduce the above 96f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * copyright notice, this list of conditions and the following 106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * disclaimer in the documentation and/or other materials provided 116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * with the distribution. 126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * * Neither the name of The Linux Foundation nor the names of its 136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * contributors may be used to endorse or promote products derived 146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * from this software without specific prior written permission. 156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev */ 296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define LOG_TAG "QCameraParameters" 316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <cutils/properties.h> 336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <math.h> 346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <utils/Errors.h> 356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <string.h> 366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <stdlib.h> 376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <gralloc_priv.h> 386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include "QCamera2HWI.h" 396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include "QCameraParameters.h" 406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define ASPECT_TOLERANCE 0.001 426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define FLIP_V_H (FLIP_H | FLIP_V) 436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevnamespace qcamera { 456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Parameter keys to communicate between camera application and driver. 466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_HFR_SIZES[] = "hfr-size-values"; 476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_MODE[] = "preview-frame-rate-mode"; 486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_PREVIEW_FRAME_RATE_MODES[] = "preview-frame-rate-modes"; 496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_AUTO_MODE[] = "frame-rate-auto"; 506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_FIXED_MODE[] = "frame-rate-fixed"; 516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_TOUCH_AF_AEC[] = "touch-af-aec"; 526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_TOUCH_AF_AEC[] = "touch-af-aec-values"; 536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_TOUCH_INDEX_AEC[] = "touch-index-aec"; 546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_TOUCH_INDEX_AF[] = "touch-index-af"; 556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SCENE_DETECT[] = "scene-detect"; 566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_SCENE_DETECT[] = "scene-detect-values"; 576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_ISO_MODE[] = "iso"; 586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_ISO_MODES[] = "iso-values"; 596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_LENSSHADE[] = "lensshade"; 606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_LENSSHADE_MODES[] = "lensshade-values"; 616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_AUTO_EXPOSURE[] = "auto-exposure"; 626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_AUTO_EXPOSURE[] = "auto-exposure-values"; 636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_DENOISE[] = "denoise"; 646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_DENOISE[] = "denoise-values"; 656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_FOCUS_ALGO[] = "selectable-zone-af"; 666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_FOCUS_ALGOS[] = "selectable-zone-af-values"; 676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_FACE_DETECTION[] = "face-detection"; 686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_FACE_DETECTION[] = "face-detection-values"; 696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_FACE_RECOGNITION[] = "face-recognition"; 706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_FACE_RECOGNITION[] = "face-recognition-values"; 716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MEMORY_COLOR_ENHANCEMENT[] = "mce"; 726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_MEM_COLOR_ENHANCE_MODES[] = "mce-values"; 736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_DIS[] = "dis"; 746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_DIS_MODES[] = "dis-values"; 756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_VIDEO_HIGH_FRAME_RATE[] = "video-hfr"; 766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_HIGH_FRAME_RATE_MODES[] = "video-hfr-values"; 776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_REDEYE_REDUCTION[] = "redeye-reduction"; 786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_REDEYE_REDUCTION[] = "redeye-reduction-values"; 796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_HIGH_DYNAMIC_RANGE_IMAGING[] = "hdr"; 806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_HDR_IMAGING_MODES[] = "hdr-values"; 816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_ZSL[] = "zsl"; 826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_ZSL_MODES[] = "zsl-values"; 836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_ZSL_BURST_INTERVAL[] = "capture-burst-interval"; 846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_ZSL_BURST_LOOKBACK[] = "capture-burst-retroactive"; 856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_ZSL_QUEUE_DEPTH[] = "capture-burst-queue-depth"; 866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_CAMERA_MODE[] = "camera-mode"; 876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_AE_BRACKET_HDR[] = "ae-bracket-hdr"; 886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_AE_BRACKET_MODES[] = "ae-bracket-hdr-values"; 896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_RAW_FORMATS[] = "raw-format-values"; 906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_RAW_FORMAT[] = "raw-format"; 916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_ORIENTATION[] = "orientation"; 926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SELECTABLE_ZONE_AF[] = "selectable-zone-af"; 936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_CAPTURE_BURST_EXPOSURE[] = "capture-burst-exposures"; 946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_NUM_SNAPSHOT_PER_SHUTTER[] = "num-snaps-per-shutter"; 956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_NO_DISPLAY_MODE[] = "no-display-mode"; 966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_RAW_PICUTRE_SIZE[] = "raw-size"; 976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_SKIN_TONE_ENHANCEMENT_MODES[] = "skinToneEnhancement-values"; 986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_LIVESNAPSHOT_SIZES[] = "supported-live-snapshot-sizes"; 996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_HDR_NEED_1X[] = "hdr-need-1x"; 1006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_PREVIEW_FLIP[] = "preview-flip"; 1016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_VIDEO_FLIP[] = "video-flip"; 1026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SNAPSHOT_PICTURE_FLIP[] = "snapshot-picture-flip"; 1036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_FLIP_MODES[] = "flip-mode-values"; 1042f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Liconst char QCameraParameters::KEY_QC_VIDEO_HDR[] = "video-hdr"; 1052f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Liconst char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_HDR_MODES[] = "video-hdr-values"; 1066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for effect settings. 1086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::EFFECT_EMBOSS[] = "emboss"; 1096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::EFFECT_SKETCH[] = "sketch"; 1106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::EFFECT_NEON[] = "neon"; 1116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for auto exposure settings. 1136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::TOUCH_AF_AEC_OFF[] = "touch-off"; 1146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::TOUCH_AF_AEC_ON[] = "touch-on"; 1156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for scene mode settings. 1176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::SCENE_MODE_ASD[] = "asd"; // corresponds to CAMERA_BESTSHOT_AUTO in HAL 1186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::SCENE_MODE_BACKLIGHT[] = "backlight"; 1196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::SCENE_MODE_FLOWERS[] = "flowers"; 1206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::SCENE_MODE_AR[] = "AR"; 1216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::SCENE_MODE_HDR[] = "hdr"; 1226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Formats for setPreviewFormat and setPictureFormat. 1246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::PIXEL_FORMAT_YUV420SP_ADRENO[] = "yuv420sp-adreno"; 1256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::PIXEL_FORMAT_YV12[] = "yuv420p"; 1266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::PIXEL_FORMAT_NV12[] = "nv12"; 1276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for raw image formats 1296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_YUYV[] = "yuv-raw8-yuyv"; 1306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_YVYU[] = "yuv-raw8-yvyu"; 1316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_UYVY[] = "yuv-raw8-uyvy"; 1326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_VYUY[] = "yuv-raw8-vyuy"; 1336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GBRG[] = "bayer-qcom-8gbrg"; 1346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GRBG[] = "bayer-qcom-8grbg"; 1356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8RGGB[] = "bayer-qcom-8rggb"; 1366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8BGGR[] = "bayer-qcom-8bggr"; 1376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GBRG[] = "bayer-qcom-10gbrg"; 1386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GRBG[] = "bayer-qcom-10grbg"; 1396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10RGGB[] = "bayer-qcom-10rggb"; 1406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10BGGR[] = "bayer-qcom-10bggr"; 1416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GBRG[] = "bayer-qcom-12gbrg"; 1426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GRBG[] = "bayer-qcom-12grbg"; 1436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12RGGB[] = "bayer-qcom-12rggb"; 1446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12BGGR[] = "bayer-qcom-12bggr"; 1456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GBRG[] = "bayer-mipi-8gbrg"; 1466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GRBG[] = "bayer-mipi-8grbg"; 1476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8RGGB[] = "bayer-mipi-8rggb"; 1486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8BGGR[] = "bayer-mipi-8bggr"; 1496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GBRG[] = "bayer-mipi-10gbrg"; 1506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GRBG[] = "bayer-mipi-10grbg"; 1516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10RGGB[] = "bayer-mipi-10rggb"; 1526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10BGGR[] = "bayer-mipi-10bggr"; 1536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GBRG[] = "bayer-mipi-12gbrg"; 1546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GRBG[] = "bayer-mipi-12grbg"; 1556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12RGGB[] = "bayer-mipi-12rggb"; 1566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12BGGR[] = "bayer-mipi-12bggr"; 1576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GBRG[] = "bayer-ideal-qcom-8gbrg"; 1586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GRBG[] = "bayer-ideal-qcom-8grbg"; 1596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8RGGB[] = "bayer-ideal-qcom-8rggb"; 1606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8BGGR[] = "bayer-ideal-qcom-8bggr"; 1616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GBRG[] = "bayer-ideal-qcom-10gbrg"; 1626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GRBG[] = "bayer-ideal-qcom-10grbg"; 1636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10RGGB[] = "bayer-ideal-qcom-10rggb"; 1646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10BGGR[] = "bayer-ideal-qcom-10bggr"; 1656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GBRG[] = "bayer-ideal-qcom-12gbrg"; 1666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GRBG[] = "bayer-ideal-qcom-12grbg"; 1676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12RGGB[] = "bayer-ideal-qcom-12rggb"; 1686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12BGGR[] = "bayer-ideal-qcom-12bggr"; 1696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GBRG[] = "bayer-ideal-mipi-8gbrg"; 1706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GRBG[] = "bayer-ideal-mipi-8grbg"; 1716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8RGGB[] = "bayer-ideal-mipi-8rggb"; 1726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8BGGR[] = "bayer-ideal-mipi-8bggr"; 1736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GBRG[] = "bayer-ideal-mipi-10gbrg"; 1746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GRBG[] = "bayer-ideal-mipi-10grbg"; 1756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10RGGB[] = "bayer-ideal-mipi-10rggb"; 1766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10BGGR[] = "bayer-ideal-mipi-10bggr"; 1776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GBRG[] = "bayer-ideal-mipi-12gbrg"; 1786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GRBG[] = "bayer-ideal-mipi-12grbg"; 1796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12RGGB[] = "bayer-ideal-mipi-12rggb"; 1806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12BGGR[] = "bayer-ideal-mipi-12bggr"; 1816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GBRG[] = "bayer-ideal-plain8-8gbrg"; 1826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GRBG[] = "bayer-ideal-plain8-8grbg"; 1836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8RGGB[] = "bayer-ideal-plain8-8rggb"; 1846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8BGGR[] = "bayer-ideal-plain8-8bggr"; 1856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GBRG[] = "bayer-ideal-plain16-8gbrg"; 1866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GRBG[] = "bayer-ideal-plain16-8grbg"; 1876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8RGGB[] = "bayer-ideal-plain16-8rggb"; 1886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8BGGR[] = "bayer-ideal-plain16-8bggr"; 1896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GBRG[] = "bayer-ideal-plain16-10gbrg"; 1906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GRBG[] = "bayer-ideal-plain16-10grbg"; 1916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10RGGB[] = "bayer-ideal-plain16-10rggb"; 1926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10BGGR[] = "bayer-ideal-plain16-10bggr"; 1936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GBRG[] = "bayer-ideal-plain16-12gbrg"; 1946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GRBG[] = "bayer-ideal-plain16-12grbg"; 1956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12RGGB[] = "bayer-ideal-plain16-12rggb"; 1966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12BGGR[] = "bayer-ideal-plain16-12bggr"; 1976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for ISO Settings 1996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::ISO_AUTO[] = "auto"; 2006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::ISO_HJR[] = "ISO_HJR"; 2016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::ISO_100[] = "ISO100"; 2026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::ISO_200[] = "ISO200"; 2036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::ISO_400[] = "ISO400"; 2046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::ISO_800[] = "ISO800"; 2056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::ISO_1600[] = "ISO1600"; 2066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for auto exposure settings. 2086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AUTO_EXPOSURE_FRAME_AVG[] = "frame-average"; 2096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AUTO_EXPOSURE_CENTER_WEIGHTED[] = "center-weighted"; 2106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AUTO_EXPOSURE_SPOT_METERING[] = "spot-metering"; 2116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AUTO_EXPOSURE_SMART_METERING[] = "smart-metering"; 2126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AUTO_EXPOSURE_USER_METERING[] = "user-metering"; 2136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AUTO_EXPOSURE_SPOT_METERING_ADV[] = "spot-metering-adv"; 2146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AUTO_EXPOSURE_CENTER_WEIGHTED_ADV[] = "center-weighted-adv"; 2156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_GPS_LATITUDE_REF[] = "gps-latitude-ref"; 2176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_GPS_LONGITUDE_REF[] = "gps-longitude-ref"; 2186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_GPS_ALTITUDE_REF[] = "gps-altitude-ref"; 2196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_GPS_STATUS[] = "gps-status"; 2206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_HISTOGRAM[] = "histogram"; 2226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_HISTOGRAM_MODES[] = "histogram-values"; 2236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VALUE_ENABLE[] = "enable"; 2256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VALUE_DISABLE[] = "disable"; 2266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VALUE_OFF[] = "off"; 2276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VALUE_ON[] = "on"; 2286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VALUE_TRUE[] = "true"; 2296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VALUE_FALSE[] = "false"; 2306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SHARPNESS[] = "sharpness"; 2326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MIN_SHARPNESS[] = "min-sharpness"; 2336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MAX_SHARPNESS[] = "max-sharpness"; 2346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SHARPNESS_STEP[] = "sharpness-step"; 2356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_CONTRAST[] = "contrast"; 2366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MIN_CONTRAST[] = "min-contrast"; 2376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MAX_CONTRAST[] = "max-contrast"; 2386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_CONTRAST_STEP[] = "contrast-step"; 2396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SATURATION[] = "saturation"; 2406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MIN_SATURATION[] = "min-saturation"; 2416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MAX_SATURATION[] = "max-saturation"; 2426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SATURATION_STEP[] = "saturation-step"; 2436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_BRIGHTNESS[] = "luma-adaptation"; 2446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MIN_BRIGHTNESS[] = "min-brightness"; 2456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MAX_BRIGHTNESS[] = "max-brightness"; 2466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_BRIGHTNESS_STEP[] = "brightness-step"; 2476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SCE_FACTOR[] = "skinToneEnhancement"; 2486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MIN_SCE_FACTOR[] = "min-sce-factor"; 2496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MAX_SCE_FACTOR[] = "max-sce-factor"; 2506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SCE_FACTOR_STEP[] = "sce-factor-step"; 2516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_SUPPORTED_CAMERA_FEATURES[] = "qc-camera-features"; 2536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::KEY_QC_MAX_NUM_REQUESTED_FACES[] = "qc-max-num-requested-faces"; 2546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//Values for DENOISE 2566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::DENOISE_OFF[] = "denoise-off"; 2576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::DENOISE_ON[] = "denoise-on"; 2586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for selectable zone af Settings 2606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::FOCUS_ALGO_AUTO[] = "auto"; 2616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::FOCUS_ALGO_SPOT_METERING[] = "spot-metering"; 2626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::FOCUS_ALGO_CENTER_WEIGHTED[] = "center-weighted"; 2636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::FOCUS_ALGO_FRAME_AVERAGE[] = "frame-average"; 2646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for HFR settings. 2666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VIDEO_HFR_OFF[] = "off"; 2676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VIDEO_HFR_2X[] = "60"; 2686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VIDEO_HFR_3X[] = "90"; 2696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VIDEO_HFR_4X[] = "120"; 2706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::VIDEO_HFR_5X[] = "150"; 2716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for HDR Bracketing settings. 2736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AE_BRACKET_OFF[] = "Off"; 2746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::AE_BRACKET[] = "AE-Bracket"; 2756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Values for FLIP settings. 2776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::FLIP_MODE_OFF[] = "off"; 2786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::FLIP_MODE_V[] = "flip-v"; 2796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::FLIP_MODE_H[] = "flip-h"; 2806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char QCameraParameters::FLIP_MODE_VH[] = "flip-vh"; 2816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevstatic const char* portrait = "portrait"; 2836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevstatic const char* landscape = "landscape"; 2846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst cam_dimension_t QCameraParameters::THUMBNAIL_SIZES_MAP[] = { 2866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 512, 288 }, //1.777778 2876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 480, 288 }, //1.666667 2886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 256, 154 }, //1.66233 2896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 432, 288 }, //1.5 2906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 320, 240 }, //1.33333 2916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 176, 144 }, //1.222222 2926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 0, 0 } // required by Android SDK 2936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 2946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 2956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::AUTO_EXPOSURE_MAP[] = { 2966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AUTO_EXPOSURE_FRAME_AVG, CAM_AEC_MODE_FRAME_AVERAGE }, 2976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AUTO_EXPOSURE_CENTER_WEIGHTED, CAM_AEC_MODE_CENTER_WEIGHTED }, 2986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AUTO_EXPOSURE_SPOT_METERING, CAM_AEC_MODE_SPOT_METERING }, 2996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AUTO_EXPOSURE_SMART_METERING, CAM_AEC_MODE_SMART_METERING }, 3006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AUTO_EXPOSURE_USER_METERING, CAM_AEC_MODE_USER_METERING }, 3016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AUTO_EXPOSURE_SPOT_METERING_ADV, CAM_AEC_MODE_SPOT_METERING_ADV }, 3026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AUTO_EXPOSURE_CENTER_WEIGHTED_ADV, CAM_AEC_MODE_CENTER_WEIGHTED_ADV }, 3036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 3046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::PREVIEW_FORMATS_MAP[] = { 3066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {PIXEL_FORMAT_YUV420SP, CAM_FORMAT_YUV_420_NV21}, 3076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {PIXEL_FORMAT_YUV420P, CAM_FORMAT_YUV_420_YV12}, 3086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {PIXEL_FORMAT_YUV420SP_ADRENO, CAM_FORMAT_YUV_420_NV21_ADRENO}, 3096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {PIXEL_FORMAT_YV12, CAM_FORMAT_YUV_420_YV12}, 3106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {PIXEL_FORMAT_NV12, CAM_FORMAT_YUV_420_NV12} 3116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 3126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::PICTURE_TYPES_MAP[] = { 3146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {PIXEL_FORMAT_JPEG, CAM_FORMAT_JPEG}, 3157fde32d818742141a39fda194e66b84109182affEmilian Peev {PIXEL_FORMAT_YUV422SP, CAM_FORMAT_YUV_422_NV16}, 3166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_YUV_RAW_8BIT_YUYV, CAM_FORMAT_YUV_RAW_8BIT_YUYV}, 3176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_YUV_RAW_8BIT_YVYU, CAM_FORMAT_YUV_RAW_8BIT_YVYU}, 3186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_YUV_RAW_8BIT_UYVY, CAM_FORMAT_YUV_RAW_8BIT_UYVY}, 3196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_YUV_RAW_8BIT_VYUY, CAM_FORMAT_YUV_RAW_8BIT_VYUY}, 3206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GBRG, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GBRG}, 3216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GRBG, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GRBG}, 3226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8RGGB, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_RGGB}, 3236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8BGGR, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_BGGR}, 3246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GBRG, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GBRG}, 3256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GRBG, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GRBG}, 3266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10RGGB, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_RGGB}, 3276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10BGGR, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_BGGR}, 3286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GBRG, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GBRG}, 3296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GRBG, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GRBG}, 3306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12RGGB, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_RGGB}, 3316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12BGGR, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_BGGR}, 3326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GBRG, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GBRG}, 3336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GRBG, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GRBG}, 3346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8RGGB, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_RGGB}, 3356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8BGGR, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_BGGR}, 3366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GBRG, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG}, 3376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GRBG, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GRBG}, 3386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10RGGB, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_RGGB}, 3396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10BGGR, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_BGGR}, 3406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GBRG, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GBRG}, 3416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GRBG, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GRBG}, 3426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12RGGB, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_RGGB}, 3436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12BGGR, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_BGGR}, 3446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GBRG}, 3456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GRBG}, 3466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_RGGB}, 3476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_BGGR}, 3486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GBRG}, 3496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GRBG}, 3506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_RGGB}, 3516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_BGGR}, 3526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GBRG}, 3536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GRBG}, 3546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_RGGB}, 3556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_BGGR}, 3566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GBRG}, 3576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GRBG}, 3586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_RGGB}, 3596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_BGGR}, 3606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GBRG}, 3616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GRBG}, 3626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_RGGB}, 3636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_BGGR}, 3646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GBRG}, 3656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GRBG}, 3666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_RGGB}, 3676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_BGGR}, 3686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GBRG}, 3696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GRBG}, 3706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_RGGB}, 3716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_BGGR}, 3726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GBRG}, 3736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GRBG}, 3746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_RGGB}, 3756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_BGGR}, 3766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GBRG}, 3776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GRBG}, 3786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_RGGB}, 3796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_BGGR}, 3806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GBRG}, 3816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GRBG}, 3826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_RGGB}, 3836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_BGGR} 3846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 3856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::RAW_FORMATS_MAP[] = { 3876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 3886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::FOCUS_MODES_MAP[] = { 3906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_MODE_AUTO, CAM_FOCUS_MODE_AUTO }, 3916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_MODE_INFINITY, CAM_FOCUS_MODE_INFINITY }, 3926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_MODE_MACRO, CAM_FOCUS_MODE_MACRO }, 3936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_MODE_FIXED, CAM_FOCUS_MODE_FIXED }, 3946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_MODE_EDOF, CAM_FOCUS_MODE_EDOF }, 3956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_MODE_CONTINUOUS_PICTURE, CAM_FOCUS_MODE_CONTINOUS_PICTURE }, 3966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_MODE_CONTINUOUS_VIDEO, CAM_FOCUS_MODE_CONTINOUS_VIDEO } 3976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 3986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::EFFECT_MODES_MAP[] = { 4006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_NONE, CAM_EFFECT_MODE_OFF }, 4016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_MONO, CAM_EFFECT_MODE_MONO }, 4026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_NEGATIVE, CAM_EFFECT_MODE_NEGATIVE }, 4036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_SOLARIZE, CAM_EFFECT_MODE_SOLARIZE }, 4046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_SEPIA, CAM_EFFECT_MODE_SEPIA }, 4056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_POSTERIZE, CAM_EFFECT_MODE_POSTERIZE }, 4066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_WHITEBOARD, CAM_EFFECT_MODE_WHITEBOARD }, 4076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_BLACKBOARD, CAM_EFFECT_MODE_BLACKBOARD }, 4086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_AQUA, CAM_EFFECT_MODE_AQUA }, 4096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_EMBOSS, CAM_EFFECT_MODE_EMBOSS }, 4106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_SKETCH, CAM_EFFECT_MODE_SKETCH }, 4116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { EFFECT_NEON, CAM_EFFECT_MODE_NEON } 4126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::SCENE_MODES_MAP[] = { 4156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_AUTO, CAM_SCENE_MODE_OFF }, 4166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_ACTION, CAM_SCENE_MODE_ACTION }, 4176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_PORTRAIT, CAM_SCENE_MODE_PORTRAIT }, 4186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_LANDSCAPE, CAM_SCENE_MODE_LANDSCAPE }, 4196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_NIGHT, CAM_SCENE_MODE_NIGHT }, 4206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_NIGHT_PORTRAIT, CAM_SCENE_MODE_NIGHT_PORTRAIT }, 4216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_THEATRE, CAM_SCENE_MODE_THEATRE }, 4226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_BEACH, CAM_SCENE_MODE_BEACH }, 4236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_SNOW, CAM_SCENE_MODE_SNOW }, 4246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_SUNSET, CAM_SCENE_MODE_SUNSET }, 4256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_STEADYPHOTO, CAM_SCENE_MODE_ANTISHAKE }, 4266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_FIREWORKS , CAM_SCENE_MODE_FIREWORKS }, 4276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_SPORTS , CAM_SCENE_MODE_SPORTS }, 4286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_PARTY, CAM_SCENE_MODE_PARTY }, 4296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_CANDLELIGHT, CAM_SCENE_MODE_CANDLELIGHT }, 4306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_ASD, CAM_SCENE_MODE_AUTO }, 4316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_BACKLIGHT, CAM_SCENE_MODE_BACKLIGHT }, 4326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_FLOWERS, CAM_SCENE_MODE_FLOWERS }, 4336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_AR, CAM_SCENE_MODE_AR }, 4346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { SCENE_MODE_HDR, CAM_SCENE_MODE_OFF }, 4356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::FLASH_MODES_MAP[] = { 4386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FLASH_MODE_OFF, CAM_FLASH_MODE_OFF }, 4396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FLASH_MODE_AUTO, CAM_FLASH_MODE_AUTO }, 4406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FLASH_MODE_ON, CAM_FLASH_MODE_ON }, 4416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FLASH_MODE_TORCH, CAM_FLASH_MODE_TORCH } 4426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::FOCUS_ALGO_MAP[] = { 4456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_ALGO_AUTO, CAM_FOCUS_ALGO_AUTO }, 4466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_ALGO_SPOT_METERING, CAM_FOCUS_ALGO_SPOT }, 4476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_ALGO_CENTER_WEIGHTED, CAM_FOCUS_ALGO_CENTER_WEIGHTED }, 4486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { FOCUS_ALGO_FRAME_AVERAGE, CAM_FOCUS_ALGO_AVERAGE } 4496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::WHITE_BALANCE_MODES_MAP[] = { 4526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { WHITE_BALANCE_AUTO, CAM_WB_MODE_AUTO }, 4536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { WHITE_BALANCE_INCANDESCENT, CAM_WB_MODE_INCANDESCENT }, 4546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { WHITE_BALANCE_FLUORESCENT, CAM_WB_MODE_FLUORESCENT }, 4556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { WHITE_BALANCE_WARM_FLUORESCENT,CAM_WB_MODE_WARM_FLUORESCENT}, 4566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { WHITE_BALANCE_DAYLIGHT, CAM_WB_MODE_DAYLIGHT }, 4576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { WHITE_BALANCE_CLOUDY_DAYLIGHT, CAM_WB_MODE_CLOUDY_DAYLIGHT }, 4586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { WHITE_BALANCE_TWILIGHT, CAM_WB_MODE_TWILIGHT }, 4596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { WHITE_BALANCE_SHADE, CAM_WB_MODE_SHADE } 4606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::ANTIBANDING_MODES_MAP[] = { 4636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ANTIBANDING_OFF, CAM_ANTIBANDING_MODE_OFF }, 4646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ANTIBANDING_50HZ, CAM_ANTIBANDING_MODE_50HZ }, 4656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ANTIBANDING_60HZ, CAM_ANTIBANDING_MODE_60HZ }, 4666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ANTIBANDING_AUTO, CAM_ANTIBANDING_MODE_AUTO } 4676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::ISO_MODES_MAP[] = { 4706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ISO_AUTO, CAM_ISO_MODE_AUTO }, 4716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ISO_HJR, CAM_ISO_MODE_DEBLUR }, 4726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ISO_100, CAM_ISO_MODE_100 }, 4736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ISO_200, CAM_ISO_MODE_200 }, 4746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ISO_400, CAM_ISO_MODE_400 }, 4756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ISO_800, CAM_ISO_MODE_800 }, 4766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { ISO_1600, CAM_ISO_MODE_1600 } 4776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::HFR_MODES_MAP[] = { 4806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VIDEO_HFR_OFF, CAM_HFR_MODE_OFF }, 4816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VIDEO_HFR_2X, CAM_HFR_MODE_60FPS }, 4826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VIDEO_HFR_3X, CAM_HFR_MODE_90FPS }, 4836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VIDEO_HFR_4X, CAM_HFR_MODE_120FPS }, 4846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VIDEO_HFR_5X, CAM_HFR_MODE_150FPS } 4856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::BRACKETING_MODES_MAP[] = { 4886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AE_BRACKET_OFF, CAM_EXP_BRACKETING_OFF }, 4896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { AE_BRACKET, CAM_EXP_BRACKETING_ON } 4906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::ON_OFF_MODES_MAP[] = { 4936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VALUE_OFF, 0 }, 4946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VALUE_ON, 1 } 4956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 4966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 4976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::TOUCH_AF_AEC_MODES_MAP[] = { 4986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { QCameraParameters::TOUCH_AF_AEC_OFF, 0 }, 4996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { QCameraParameters::TOUCH_AF_AEC_ON, 1 } 5006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 5016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::ENABLE_DISABLE_MODES_MAP[] = { 5036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VALUE_ENABLE, 1 }, 5046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VALUE_DISABLE, 0 } 5056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 5066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::DENOISE_ON_OFF_MODES_MAP[] = { 5086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { DENOISE_OFF, 0 }, 5096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { DENOISE_ON, 1 } 5106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 5116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::TRUE_FALSE_MODES_MAP[] = { 5136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VALUE_FALSE, 0}, 5146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { VALUE_TRUE, 1} 5156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 5166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst QCameraParameters::QCameraMap QCameraParameters::FLIP_MODES_MAP[] = { 5186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {FLIP_MODE_OFF, 0}, 5196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {FLIP_MODE_V, FLIP_V}, 5206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {FLIP_MODE_H, FLIP_H}, 5216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev {FLIP_MODE_VH, FLIP_V_H} 5226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; 5236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define DEFAULT_CAMERA_AREA "(0, 0, 0, 0, 0)" 5256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define DATA_PTR(MEM_OBJ,INDEX) MEM_OBJ->getPtr( INDEX ) 5266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 5286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : QCameraParameters 5296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: default constructor of QCameraParameters 5316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 5336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : None 5356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 5366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevQCameraParameters::QCameraParameters() 5376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev : CameraParameters(), 5386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability(NULL), 5396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCamOpsTbl(NULL), 5406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamHeap(NULL), 5416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamBuf(NULL), 5426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bZslMode(false), 543744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bZslMode_new(false), 5446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bRecordingHint(false), 545744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bRecordingHint_new(false), 5466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bHistogramEnabled(false), 5476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_nFaceProcMask(0), 5486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bDebugFps(false), 5496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mFocusMode(CAM_FOCUS_MODE_MAX), 5506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mPreviewFormat(CAM_FORMAT_YUV_420_NV21), 5516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mPictureFormat(CAM_FORMAT_JPEG), 5526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart(false), 5536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNoDisplayMode(false), 5546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bWNROn(false), 5556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedLockCAF(false), 5566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bCAFLocked(false), 5576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bAFRunning(false), 5586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_tempMap() 5596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 5601d1acf66461fdc4e078a8f1b335d6ac0f48ea89eNick Kralevich char value[PROPERTY_VALUE_MAX]; 5616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // TODO: may move to parameter instead of sysprop 5626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.debug.sf.showfps", value, "0"); 5636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bDebugFps = atoi(value) > 0 ? true : false; 5646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // For thermal mode, it should be set as system property 5666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // because system property applies to all applications, while 5676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // parameters only apply to specific app. 5686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.camera.thermal.mode", value, "fps"); 5696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (!strcmp(value, "frameskip")) { 5706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_ThermalMode = QCAMERA_THERMAL_ADJUST_FRAMESKIP; 5716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 5726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (strcmp(value, "fps")) 5736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid camera thermal mode %s", __func__, value); 5746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_ThermalMode = QCAMERA_THERMAL_ADJUST_FPS; 5756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 5766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&m_LiveSnapshotSize, 0, sizeof(m_LiveSnapshotSize)); 5786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 5796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 5816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : QCameraParameters 5826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: constructor of QCameraParameters 5846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 5866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : parameters in string 5876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 5886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : None 5896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 5906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevQCameraParameters::QCameraParameters(const String8 ¶ms) 5916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev : CameraParameters(params), 5926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability(NULL), 5936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCamOpsTbl(NULL), 5946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamHeap(NULL), 5956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamBuf(NULL), 5966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bZslMode(false), 597744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bZslMode_new(false), 5986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bRecordingHint(false), 599744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bRecordingHint_new(false), 6006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bHistogramEnabled(false), 6016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_nFaceProcMask(0), 6026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bDebugFps(false), 6036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mFocusMode(CAM_FOCUS_MODE_MAX), 6046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mPreviewFormat(CAM_FORMAT_YUV_420_NV21), 6056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mPictureFormat(CAM_FORMAT_JPEG), 6066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart(false), 6076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNoDisplayMode(false), 6086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bWNROn(false), 6096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedLockCAF(false), 6106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bCAFLocked(false), 6116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bAFRunning(false), 6126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_tempMap() 6136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 6146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&m_LiveSnapshotSize, 0, sizeof(m_LiveSnapshotSize)); 6156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 6166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 6176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 6186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : ~QCameraParameters 6196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: deconstructor of QCameraParameters 6216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 6236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : None 6256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 6266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevQCameraParameters::~QCameraParameters() 6276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 6286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev deinit(); 6296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 6306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 6316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 6326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : createSizesString 6336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: create string obj contains array of dimensions 6356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 6376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @sizes : array of dimensions 6386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len : size of dimension array 6396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : string obj 6416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 6426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevString8 QCameraParameters::createSizesString(const cam_dimension_t *sizes, int len) 6436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 6446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 6456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char buffer[32]; 6466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 6476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (len > 0) { 6486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), "%dx%d", sizes[0].width, sizes[0].height); 6496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 6506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 1; i < len; i++) { 6526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), ",%dx%d", sizes[i].width, sizes[i].height); 6536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 6546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return str; 6566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 6576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 6586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 6596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : createValuesString 6606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: create string obj contains array of values from map when matched 6626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * from input values array 6636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 6656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @values : array of values 6666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len : size of values array 6676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @map : map contains the mapping between values and enums 6686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @map_len : size of the map 6696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : string obj 6716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 6726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevString8 QCameraParameters::createValuesString(const int *values, 6736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int len, 6746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const QCameraMap* map, 6756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int map_len) 6766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 6776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 6786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int count = 0; 6796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 6806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < len; i++ ) { 6816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int j = 0; j < map_len; j ++) 6826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (map[j].val == values[i]) { 6836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL != map[j].desc) { 6846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (count > 0) { 6856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(","); 6866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(map[j].desc); 6886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev count++; 6896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; //loop j 6906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 6936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return str; 6946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 6956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 6966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 6976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : createValuesStringFromMap 6986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 6996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: create string obj contains array of values directly from map 7006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 7026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @map : map contains the mapping between values and enums 7036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @map_len : size of the map 7046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : string obj 7066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 7076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevString8 QCameraParameters::createValuesStringFromMap(const QCameraMap* map, 7086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int map_len) 7096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 7106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 7116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 7126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < map_len; i++) { 7136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL != map[i].desc) { 7146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (i > 0) { 7156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(","); 7166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(map[i].desc); 7186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return str; 7216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 7226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 7236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 7246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : createZoomRatioValuesString 7256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: create string obj contains array of zoom ratio values 7276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 7296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @zoomRaios : array of zoom ratios 7306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @length : size of the array 7316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : string obj 7336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 7346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevString8 QCameraParameters::createZoomRatioValuesString(int *zoomRatios, int length) 7356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 7366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 7376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char buffer[32] = {0}; 7386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 7396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(length > 0){ 7406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), "%d", zoomRatios[0]); 7416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 7426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 7446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i =1;i<length;i++){ 7456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(buffer, 0, sizeof(buffer)); 7466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), ",%d", zoomRatios[i]); 7476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 7486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return str; 7506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 7516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 7526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 7536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : createHfrValuesString 7546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: create string obj contains array of hfr values from map when 7566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * matched from input hfr values 7576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 7596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @values : array of hfr info 7606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len : size of the array 7616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @map : map of hfr string value and enum 7626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * map_len : size of map 7636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : string obj 7656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 7666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevString8 QCameraParameters::createHfrValuesString( 7676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const cam_hfr_info_t *values, 7686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int len, 7696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const QCameraMap* map, 7706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int map_len) 7716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 7726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 7736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int count = 0; 7746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 7756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < len; i++ ) { 7766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int j = 0; j < map_len; j ++) 7776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (map[j].val == (int)values[i].mode) { 7786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL != map[j].desc) { 7796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (count > 0) { 7806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(","); 7816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(map[j].desc); 7836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev count++; 7846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; //loop j 7856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 7886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return str; 7896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 7906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 7916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 7926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : createHfrSizesString 7936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: create string obj contains array of hfr sizes 7956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 7966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 7976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @values : array of hfr info 7986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len : size of the array 7996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : string obj 8016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 8026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevString8 QCameraParameters::createHfrSizesString( 8036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const cam_hfr_info_t *values, 8046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int len) 8056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 8066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 8076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char buffer[32]; 8086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 8096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (len > 0) { 8106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), "%dx%d", 8116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev values[0].dim.width, values[0].dim.height); 8126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 8136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 8146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 1; i < len; i++) { 8156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), ",%dx%d", 8166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev values[i].dim.width, values[i].dim.height); 8176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 8186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 8196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return str; 8206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 8216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 8226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 823744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * FUNCTION : compareFPSValues 824744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * 825744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * DESCRIPTION: helper function for fps sorting 826744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * 827744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * PARAMETERS : 828744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * @p1 : first array element 829744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * @p2 : second array element 830744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * 831744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * RETURN : -1 - left element is greater than right 832744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * 0 - elements are equals 833744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * 1 - left element is less than right 834744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy *==========================================================================*/ 835744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddyint QCameraParameters::compareFPSValues(const void *p1, const void *p2) 836744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy{ 837744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if ( *( (int *) p1) > *( (int *) p2) ) { 838744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return -1; 839744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } else if ( *( (int *) p1) < *( (int *) p2) ) { 840744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return 1; 841744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 842744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 843744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return 0; 844744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy} 845744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 846744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy/*=========================================================================== 8476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : createFpsString 8486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: create string obj contains array of FPS rates 8506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 8526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @fps : array of fps ranges 8536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len : size of the array 8546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : string obj 8566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 8576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevString8 QCameraParameters::createFpsString(const cam_fps_range_t *fps, int len) 8586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 8596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 8606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char buffer[32]; 861744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy int duplicate = INT_MAX; 862744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 863744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy int *fpsValues = new int[len]; 8646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 8656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < len; i++ ) { 866744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy fpsValues[i] = int(fps[i].max_fps); 867744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 868744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 869744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy qsort(fpsValues, len, sizeof(int), compareFPSValues); 870744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 871744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy for (int i = 0; i < len; i++ ) { 872744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if ( duplicate != fpsValues[i] ) { 873744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy snprintf(buffer, sizeof(buffer), "%d", fpsValues[i]); 874744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy str.append(buffer); 875744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if (i < len-1) { 876744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy str.append(","); 877744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 878744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy duplicate = fpsValues[i]; 879744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 8806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 881744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 882744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy delete [] fpsValues; 883744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 8846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return str; 8856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 8866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 8876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 8886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : createFpsRangeString 8896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: create string obj contains array of FPS ranges 8916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 8936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @fps : array of fps ranges 8946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len : size of the array 8956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @default_fps_index : reference to index of default fps range 8966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 8976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : string obj 8986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 8996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevString8 QCameraParameters::createFpsRangeString(const cam_fps_range_t* fps, 9006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int len, 9016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int &default_fps_index) 9026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 9036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 9046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char buffer[32]; 9056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int max_range = 0; 9066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int min_fps, max_fps; 9076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 9086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (len > 0) { 9096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev min_fps = int(fps[0].min_fps * 1000); 9106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev max_fps = int(fps[0].max_fps * 1000); 9116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev max_range = max_fps - min_fps; 9126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default_fps_index = 0; 9136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), "(%d,%d)", min_fps, max_fps); 9146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 9156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 1; i < len; i++) { 9176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev min_fps = int(fps[i].min_fps * 1000); 9186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev max_fps = int(fps[i].max_fps * 1000); 9196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (max_range < (max_fps - min_fps)) { 9206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev max_range = max_fps - min_fps; 9216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default_fps_index = i; 9226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), ",(%d,%d)", min_fps, max_fps); 9246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 9256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return str; 9276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 9286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 9296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 9306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : lookupAttr 9316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: lookup a value by its name 9336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 9356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @attr : map contains <name, value> 9366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len : size of the map 9376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @name : name to be looked up 9386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : valid value if found 9406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NAME_NOT_FOUND if not found 9416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 9426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::lookupAttr(const QCameraMap arr[], int len, const char *name) 9436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 9446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (name) { 9456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < len; i++) { 9466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (!strcmp(arr[i].desc, name)) 9476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return arr[i].val; 9486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NAME_NOT_FOUND; 9516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 9526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 9536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 9546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : lookupNameByValue 9556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: lookup a name by its value 9576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 9596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @attr : map contains <name, value> 9606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @len : size of the map 9616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @value : value to be looked up 9626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : name str or NULL if not found 9646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 9656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char *QCameraParameters::lookupNameByValue(const QCameraMap arr[], int len, int value) 9666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 9676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < len; i++) { 9686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (arr[i].val == value) { 9696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return arr[i].desc; 9706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 9726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NULL; 9736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 9746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 9756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 9766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setPreviewSize 9776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set preview size from user setting 9796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 9816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 9826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 9836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 9846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 9856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 9866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 9876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setPreviewSize(const QCameraParameters& params) 9886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 9896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int width, height; 9906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev params.getPreviewSize(&width, &height); 9916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("Requested preview size %d x %d", width, height); 9926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 9936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Validate the preview size 9946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (size_t i = 0; i < m_pCapability->preview_sizes_tbl_cnt; ++i) { 9956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (width == m_pCapability->preview_sizes_tbl[i].width 9966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev && height == m_pCapability->preview_sizes_tbl[i].height) { 9976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // check if need to restart preview in case of preview size change 9986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int old_width, old_height; 9996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::getPreviewSize(&old_width, &old_height); 10006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (width != old_width || height != old_height) { 10016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart = true; 10026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // set the new value 1005744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CameraParameters::setPreviewSize(width, height); 10066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 10076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid preview size requested: %dx%d", width, height); 10106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 10116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 10126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 10146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setPictureSize 10156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 10166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set picture size from user setting 10176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 10186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 10196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 10206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 10216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 10226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 10236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 10246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 10256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setPictureSize(const QCameraParameters& params) 10266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 10276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int width, height; 10286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev params.getPictureSize(&width, &height); 10296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("Requested picture size %d x %d", width, height); 10306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Validate the picture size 10326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (size_t i = 0; i < m_pCapability->picture_sizes_tbl_cnt; ++i) { 10336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (width == m_pCapability->picture_sizes_tbl[i].width 10346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev && height == m_pCapability->picture_sizes_tbl[i].height) { 10356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // check if need to restart preview in case of picture size change 10366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int old_width, old_height; 10376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::getPictureSize(&old_width, &old_height); 10386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((m_bZslMode || m_bRecordingHint) && 10396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (width != old_width || height != old_height)) { 10406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart = true; 10416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // set the new value 1044744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CameraParameters::setPictureSize(width, height); 10456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 10466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid picture size requested: %dx%d", width, height); 10496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 10506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 10516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 10536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setVideoSize 10546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 10556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set video size from user setting 10566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 10576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 10586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 10596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 10606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 10616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 10626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 10636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 10646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setVideoSize(const QCameraParameters& params) 10656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 10666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str= NULL; 10676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int width, height; 10686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str = params.get(KEY_VIDEO_SIZE); 10696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(!str) { 10706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //If application didn't set this parameter string, use the values from 10716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //getPreviewSize() as video dimensions. 10726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev params.getPreviewSize(&width, &height); 10736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("No Record Size requested, use the preview dimensions"); 10746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 10756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev params.getVideoSize(&width, &height); 10766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Validate the video size 10796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (size_t i = 0; i < m_pCapability->video_sizes_tbl_cnt; ++i) { 10806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (width == m_pCapability->video_sizes_tbl[i].width 10816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev && height == m_pCapability->video_sizes_tbl[i].height) { 10826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // check if need to restart preview in case of video size change 10836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int old_width, old_height; 10846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::getVideoSize(&old_width, &old_height); 10856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_bRecordingHint && 10866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (width != old_width || height != old_height)) { 10876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart = true; 10886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // set the new value 1091744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CameraParameters::setVideoSize(width, height); 10926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 10936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 10956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 10966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid video size requested: %dx%d", width, height); 10976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 10986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 10996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 11016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setLiveSnapshotSize 11026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 11036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set live snapshot size 11046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 11056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 11066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 11076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 11086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 11096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 11106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 11116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 11126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setLiveSnapshotSize(const QCameraParameters& params) 11136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 11141d1acf66461fdc4e078a8f1b335d6ac0f48ea89eNick Kralevich char value[PROPERTY_VALUE_MAX]; 11156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.camera.opt.livepic", value, "1"); 11166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool useOptimal = atoi(value) > 0 ? true : false; 11176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // use picture size from user setting 11196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev params.getPictureSize(&m_LiveSnapshotSize.width, &m_LiveSnapshotSize.height); 11206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11213f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li uint8_t livesnapshot_sizes_tbl_cnt = m_pCapability->livesnapshot_sizes_tbl_cnt; 11223f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li cam_dimension_t *livesnapshot_sizes_tbl = &m_pCapability->livesnapshot_sizes_tbl[0]; 11233f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li 11243f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li // check if HFR is enabled 11253f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li const char *hfrStr = params.get(KEY_QC_VIDEO_HIGH_FRAME_RATE); 11263f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li cam_hfr_mode_t hfrMode = CAM_HFR_MODE_OFF; 11273f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if (hfrStr != NULL) { 11283f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li int32_t value = lookupAttr(HFR_MODES_MAP, 11293f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li sizeof(HFR_MODES_MAP)/sizeof(QCameraMap), 11303f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li hfrStr); 11313f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if (value != NAME_NOT_FOUND) { 11323f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li // if HFR is enabled, change live snapshot size 11333f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if (value > CAM_HFR_MODE_OFF) { 11343f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li for (int i = 0; i < m_pCapability->hfr_tbl_cnt; i++) { 11353f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if (m_pCapability->hfr_tbl[i].mode == value) { 11363f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li livesnapshot_sizes_tbl_cnt = 11373f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li m_pCapability->hfr_tbl[i].livesnapshot_sizes_tbl_cnt; 11383f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li livesnapshot_sizes_tbl = 11393f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li &m_pCapability->hfr_tbl[i].livesnapshot_sizes_tbl[0]; 11403f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li hfrMode = m_pCapability->hfr_tbl[i].mode; 11413f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li break; 11423f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li } 11433f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li } 11443f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li } 11453f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li } 11463f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li } 11473f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li 11483f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if (useOptimal || hfrMode != CAM_HFR_MODE_OFF) { 11496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool found = false; 11506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // first check if picture size is within the list of supported sizes 11523f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li for (int i = 0; i < livesnapshot_sizes_tbl_cnt; ++i) { 11533f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if (m_LiveSnapshotSize.width == livesnapshot_sizes_tbl[i].width && 11543f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li m_LiveSnapshotSize.height == livesnapshot_sizes_tbl[i].height) { 11556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev found = true; 11566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (!found) { 11616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // use optimal live snapshot size from supported list, 11626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // that has same preview aspect ratio 11636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int width = 0, height = 0; 11646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev params.getPreviewSize(&width, &height); 11656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev double previewAspectRatio = (double)width / height; 11673f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li for (int i = 0; i < livesnapshot_sizes_tbl_cnt; ++i) { 11683f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li double ratio = (double)livesnapshot_sizes_tbl[i].width / 11693f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li livesnapshot_sizes_tbl[i].height; 11706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (fabs(previewAspectRatio - ratio) <= ASPECT_TOLERANCE) { 11713f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li m_LiveSnapshotSize = livesnapshot_sizes_tbl[i]; 11726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev found = true; 11736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 11746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11773f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if (!found && hfrMode != CAM_HFR_MODE_OFF) { 11786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Cannot find matching aspect ration from supported live snapshot list 11793f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li // choose the max dim from preview and video size 11803f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li ALOGI("%s: Cannot find matching aspect ratio, choose max of preview or video size", __func__); 11813f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li params.getVideoSize(&m_LiveSnapshotSize.width, &m_LiveSnapshotSize.height); 11823f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if (m_LiveSnapshotSize.width < width && m_LiveSnapshotSize.height < height) { 11833f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li m_LiveSnapshotSize.width = width; 11843f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li m_LiveSnapshotSize.height = height; 11853f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li } 11866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 11896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: live snapshot size %d x %d", __func__, 11906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_LiveSnapshotSize.width, m_LiveSnapshotSize.height); 11916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 11936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 11946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 11956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 11966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setPreviewFormat 11976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 11986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set preview format from user setting 11996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 12016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 12026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 12046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 12056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 12066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 12076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setPreviewFormat(const QCameraParameters& params) 12086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 12096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.getPreviewFormat(); 12106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t previewFormat = 12116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev lookupAttr(PREVIEW_FORMATS_MAP, 12126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(PREVIEW_FORMATS_MAP) / sizeof(QCameraMap), 12136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str); 12146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (previewFormat != NAME_NOT_FOUND) { 12156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mPreviewFormat = (cam_format_t)previewFormat; 12166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1217744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CameraParameters::setPreviewFormat(str); 12186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: format %d\n", __func__, mPreviewFormat); 12196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 12206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid preview format value: %s", (str == NULL) ? "NULL" : str); 12226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 12236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 12246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 12266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setPictureFormat 12276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set picture format from user setting 12296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 12316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 12326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 12346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 12356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 12366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 12376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setPictureFormat(const QCameraParameters& params) 12386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 12396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.getPictureFormat(); 12406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t pictureFormat = 12416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev lookupAttr(PICTURE_TYPES_MAP, 12426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(PICTURE_TYPES_MAP) / sizeof(QCameraMap), 12436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str); 12446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (pictureFormat != NAME_NOT_FOUND) { 12456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mPictureFormat = pictureFormat; 12466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1247744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CameraParameters::setPictureFormat(str); 12486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: format %d\n", __func__, mPictureFormat); 12496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 12506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid picture format value: %s", (str == NULL) ? "NULL" : str); 12526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 12536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 12546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 12566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setJpegThumbnailSize 12576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set jpeg thumbnail size from user setting 12596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 12616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 12626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 12636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 12646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 12656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 12666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 12676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setJpegThumbnailSize(const QCameraParameters& params) 12686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 12696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int width = params.getInt(KEY_JPEG_THUMBNAIL_WIDTH); 12706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int height = params.getInt(KEY_JPEG_THUMBNAIL_HEIGHT); 12716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("requested jpeg thumbnail size %d x %d", width, height); 12736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int sizes_cnt = sizeof(THUMBNAIL_SIZES_MAP) / sizeof(cam_dimension_t); 12756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int pic_width = 0, pic_height = 0; 12776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev params.getPictureSize(&pic_width, &pic_height); 12786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (pic_height == 0) { 12796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: picture size is invalid (%d x %d)", __func__, pic_width, pic_height); 12806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 12816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev double picAspectRatio = (double)pic_width / pic_height; 12836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int optimalWidth = 0, optimalHeight = 0; 12856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (width != 0 || height != 0) { 12866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // If input jpeg thumnmail size is (0,0), meaning no thumbnail needed 12876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // hornor this setting. 12886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Otherwise, find optimal jpeg thumbnail size that has same aspect ration 12896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // as picture size 12906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 12916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Try to find a size matches aspect ratio and has the largest width 12926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < sizes_cnt; i++) { 12936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (THUMBNAIL_SIZES_MAP[i].height == 0) { 12946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // No thumbnail case, just skip 12956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev continue; 12966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 12976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev double ratio = 12986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (double)THUMBNAIL_SIZES_MAP[i].width / THUMBNAIL_SIZES_MAP[i].height; 12996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (fabs(ratio - picAspectRatio) > ASPECT_TOLERANCE) { 13006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev continue; 13016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (THUMBNAIL_SIZES_MAP[i].width > optimalWidth) { 13036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev optimalWidth = THUMBNAIL_SIZES_MAP[i].width; 13046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev optimalHeight = THUMBNAIL_SIZES_MAP[i].height; 13056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 1309744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy set(KEY_JPEG_THUMBNAIL_WIDTH, optimalWidth); 1310744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy set(KEY_JPEG_THUMBNAIL_HEIGHT, optimalHeight); 13116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 13126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 13136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 13146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 13156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setJpegQuality 13166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set jpeg encpding quality from user setting 13186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 13206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 13216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 13236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 13246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 13256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 13266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setJpegQuality(const QCameraParameters& params) 13276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 13286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 13296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int quality = params.getInt(KEY_JPEG_QUALITY); 13306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (quality >= 0 && quality <= 100) { 13316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_JPEG_QUALITY, quality); 13326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 13336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid jpeg quality=%d", __func__, quality); 13346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = BAD_VALUE; 13356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 13376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev quality = params.getInt(KEY_JPEG_THUMBNAIL_QUALITY); 13386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (quality >= 0 && quality <= 100) { 1339744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy set(KEY_JPEG_THUMBNAIL_QUALITY, quality); 13406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 13416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid jpeg thumbnail quality=%d", __func__, quality); 13426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = BAD_VALUE; 13436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 13456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 13466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 13476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 13486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setOrientaion 13496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set orientaion from user setting 13516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 13536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 13546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 13566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 13576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 13586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 13596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setOrientation(const QCameraParameters& params) 13606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 13616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_ORIENTATION); 13626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 13636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 13646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (strcmp(str, portrait) == 0 || strcmp(str, landscape) == 0) { 13656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Camera service needs this to decide if the preview frames and raw 13666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // pictures should be rotated. 1367744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy set(KEY_QC_ORIENTATION, str); 13686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 13696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid orientation value: %s", __func__, str); 13706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 13716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 13746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 13756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 13766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 13776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAutoExposure 13786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set auto exposure value from user setting 13806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 13826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 13836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 13846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 13856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 13866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 13876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 13886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAutoExposure(const QCameraParameters& params) 13896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 13906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_AUTO_EXPOSURE); 13916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_AUTO_EXPOSURE); 13926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 13936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 13946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 13956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setAutoExposure(str); 13966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 13986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 13996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 14006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 14016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 14026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setPreviewFpsRange 14036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set preview FPS range from user setting 14056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 14076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 14086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 14106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 14116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 14126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 14136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setPreviewFpsRange(const QCameraParameters& params) 14146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 14156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int minFps,maxFps; 14166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int prevMinFps, prevMaxFps; 14176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int rc = NO_ERROR; 14186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool found = false; 14196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 14206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::getPreviewFpsRange(&prevMinFps, &prevMaxFps); 14216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: Existing FpsRange Values:(%d, %d)", __func__, prevMinFps, prevMaxFps); 14226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev params.getPreviewFpsRange(&minFps, &maxFps); 14236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: Requested FpsRange Values:(%d, %d)", __func__, minFps, maxFps); 14246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 14256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(minFps == prevMinFps && maxFps == prevMaxFps) { 14266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: No change in FpsRange", __func__); 14276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_ERROR; 14286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev goto end; 14296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for(int i = 0; i < m_pCapability->fps_ranges_tbl_cnt; i++) { 14316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // if the value is in the supported list 14326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(minFps >= m_pCapability->fps_ranges_tbl[i].min_fps * 1000 && 14336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev maxFps <= m_pCapability->fps_ranges_tbl[i].max_fps * 1000) { 14346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev found = true; 14356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: FPS i=%d : minFps = %d, maxFps = %d ", __func__, i, minFps, maxFps); 14366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setPreviewFpsRange(minFps, maxFps); 14376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 14386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(found == false){ 14416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: error: FPS range value not supported", __func__); 14426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = BAD_VALUE; 14436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevend: 14456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 14466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 14476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 14486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 14496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setPreviewFrameRate 14506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set preview frame rate from user setting 14526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 14546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 14556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 14576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 14586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 14596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 14606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setPreviewFrameRate(const QCameraParameters& params) 14616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 14626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint16_t fps = (uint16_t)params.getPreviewFrameRate(); 14636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: requested preview frame rate is %d", __func__, fps); 14646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::setPreviewFrameRate(fps); 14656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 14666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 14676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 14686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 14696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setEffect 14706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set effect value from user setting 14726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 14746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 14756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 14776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 14786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 14796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 14806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setEffect(const QCameraParameters& params) 14816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 14826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_EFFECT); 14836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_EFFECT); 14846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 14856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 14866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 14876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setEffect(str); 14886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 14906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 14916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 14926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 14936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 14946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFocusMode 14956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set focus mode from user setting 14976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 14986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 14996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 15006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 15026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 15036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 15046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 15056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFocusMode(const QCameraParameters& params) 15066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 15076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_FOCUS_MODE); 15086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_FOCUS_MODE); 15096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 15106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 15116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 15126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setFocusMode(str); 15136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 15166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 15176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 15186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 15196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setBrightness 15206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set brightness control value from user setting 15226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 15246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 15256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 15276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 15286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 15296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 15306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setBrightness(const QCameraParameters& params) 15316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 15326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int currentBrightness = getInt(KEY_QC_BRIGHTNESS); 15336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int brightness = params.getInt(KEY_QC_BRIGHTNESS); 15346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (currentBrightness != brightness) { 15356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (brightness >= m_pCapability->brightness_ctrl.min_value && 15366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev brightness <= m_pCapability->brightness_ctrl.max_value) { 15376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV(" new brightness value : %d ", brightness); 15386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setBrightness(brightness); 15396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 15406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid value %d out of (%d, %d)", 15416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, brightness, 15426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->brightness_ctrl.min_value, 15436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->brightness_ctrl.max_value); 15446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 15456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 15476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: No brightness value changed.", __func__); 15486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 15496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 15516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 15526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 15536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSharpness 15546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set sharpness control value from user setting 15566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 15586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 15596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 15616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 15626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 15636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 15646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSharpness(const QCameraParameters& params) 15656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 15666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int shaprness = params.getInt(KEY_QC_SHARPNESS); 15676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int prev_sharp = getInt(KEY_QC_SHARPNESS); 15686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_sharp != shaprness) { 15696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if((shaprness >= m_pCapability->sharpness_ctrl.min_value) && 15706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (shaprness <= m_pCapability->sharpness_ctrl.max_value)) { 15716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV(" new sharpness value : %d ", shaprness); 15726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setSharpness(shaprness); 15736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 15746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid value %d out of (%d, %d)", 15756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, shaprness, 15766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->sharpness_ctrl.min_value, 15776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->sharpness_ctrl.max_value); 15786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 15796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 15816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: No value change in shaprness", __func__); 15826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 15836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 15846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 15856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 15866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 15876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSkintoneEnahancement 15886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set skin tone enhancement factor from user setting 15906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 15926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 15936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 15946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 15956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 15966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 15976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 15986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSkinToneEnhancement(const QCameraParameters& params) 15996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 16006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int sceFactor = params.getInt(KEY_QC_SCE_FACTOR); 16016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int prev_sceFactor = getInt(KEY_QC_SCE_FACTOR); 16026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_sceFactor != sceFactor) { 16036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if((sceFactor >= m_pCapability->sce_ctrl.min_value) && 16046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (sceFactor <= m_pCapability->sce_ctrl.max_value)) { 16056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV(" new Skintone Enhancement value : %d ", sceFactor); 16066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setSkinToneEnhancement(sceFactor); 16076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 16086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid value %d out of (%d, %d)", 16096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, sceFactor, 16106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->sce_ctrl.min_value, 16116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->sce_ctrl.max_value); 16126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 16136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 16156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: No value change in skintone enhancement factor", __func__); 16166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 16176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 16196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 16206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 16216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSaturation 16226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set saturation control value from user setting 16246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 16266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 16276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 16296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 16306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 16316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 16326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSaturation(const QCameraParameters& params) 16336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 16346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int saturation = params.getInt(KEY_QC_SATURATION); 16356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int prev_sat = getInt(KEY_QC_SATURATION); 16366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_sat != saturation) { 16376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if((saturation >= m_pCapability->saturation_ctrl.min_value) && 16386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (saturation <= m_pCapability->saturation_ctrl.max_value)) { 16396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV(" new saturation value : %d ", saturation); 16406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setSaturation(saturation); 16416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 16426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid value %d out of (%d, %d)", 16436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, saturation, 16446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->saturation_ctrl.min_value, 16456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->saturation_ctrl.max_value); 16466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 16476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 16496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: No value change in saturation factor", __func__); 16506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 16516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 16536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 16546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 16556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setContrast 16566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set contrast control value from user setting 16586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 16606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 16616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 16636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 16646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 16656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 16666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setContrast(const QCameraParameters& params) 16676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 16686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int contrast = params.getInt(KEY_QC_CONTRAST); 16696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int prev_contrast = getInt(KEY_QC_CONTRAST); 16706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_contrast != contrast) { 16716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if((contrast >= m_pCapability->contrast_ctrl.min_value) && 16726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (contrast <= m_pCapability->contrast_ctrl.max_value)) { 16736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV(" new contrast value : %d ", contrast); 16746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = setContrast(contrast); 16756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 16766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 16776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid value %d out of (%d, %d)", 16786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, contrast, 16796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->contrast_ctrl.min_value, 16806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->contrast_ctrl.max_value); 16816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 16826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 16846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: No value change in contrast", __func__); 16856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 16866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 16876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 16886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 16896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 16906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setExposureCompensation 16916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set exposure compensation value from user setting 16936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 16956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 16966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 16976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 16986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 16996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 17006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 17016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setExposureCompensation(const QCameraParameters & params) 17026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 17036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int expComp = params.getInt(KEY_EXPOSURE_COMPENSATION); 17046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int prev_expComp = getInt(KEY_EXPOSURE_COMPENSATION); 17056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_expComp != expComp) { 17066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if((expComp >= m_pCapability->exposure_compensation_min) && 17076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (expComp <= m_pCapability->exposure_compensation_max)) { 17086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV(" new Exposure Compensation value : %d ", expComp); 17096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setExposureCompensation(expComp); 17106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 17116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid value %d out of (%d, %d)", 17126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, expComp, 17136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->exposure_compensation_min, 17146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->exposure_compensation_max); 17156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 17166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 17186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: No value change in Exposure Compensation", __func__); 17196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 17206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 17226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 17236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 17246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setWhiteBalance 17256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set white balance value from user setting 17276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 17296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 17306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 17326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 17336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 17346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 17356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setWhiteBalance(const QCameraParameters& params) 17366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 17376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_WHITE_BALANCE); 17386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_WHITE_BALANCE); 17396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 17406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 17416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 17426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setWhiteBalance(str); 17436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 17466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 17476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 17486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 17496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAntibanding 17506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set antibanding value from user setting 17526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 17546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 17556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 17576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 17586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 17596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 17606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAntibanding(const QCameraParameters& params) 17616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 17626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_ANTIBANDING); 17636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_ANTIBANDING); 17646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 17656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 17666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 17676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setAntibanding(str); 17686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 17716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 17726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 17736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 17746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSceneDetect 17756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set scenen detect value from user setting 17776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 17796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 17806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 17816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 17826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 17836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 17846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 17856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSceneDetect(const QCameraParameters& params) 17866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 17876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_SCENE_DETECT); 17886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_SCENE_DETECT); 17896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 17906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 17916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 17926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setSceneDetect(str); 17936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 17956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 17966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 17976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 17986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 17992f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * FUNCTION : setVideoHDR 18002f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * 18012f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * DESCRIPTION: set video HDR value from user setting 18022f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * 18032f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * PARAMETERS : 18042f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * @params : user setting parameters 18052f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * 18062f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * RETURN : int32_t type of status 18072f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * NO_ERROR -- success 18082f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * none-zero failure code 18092f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li *==========================================================================*/ 18102f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Liint32_t QCameraParameters::setVideoHDR(const QCameraParameters& params) 18112f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li{ 18122f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li const char *str = params.get(KEY_QC_VIDEO_HDR); 18132f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li const char *prev_str = get(KEY_QC_VIDEO_HDR); 18142f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li if (str != NULL) { 18152f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li if (prev_str == NULL || 18162f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li strcmp(str, prev_str) != 0) { 18172f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li return setVideoHDR(str); 18182f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li } 18192f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li } 18202f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li return NO_ERROR; 18212f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li} 18222f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li 18232f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li/*=========================================================================== 18246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFaceRecognition 18256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set face recognition mode from user setting 18276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 18296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 18306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 18326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 18336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 18346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 18356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFaceRecognition(const QCameraParameters& params) 18366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 18376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_FACE_RECOGNITION); 18386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_FACE_RECOGNITION); 18396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 18406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 18416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 18426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int maxFaces = params.getInt(KEY_QC_MAX_NUM_REQUESTED_FACES); 18436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setFaceRecognition(str, maxFaces); 18446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 18476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 18486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 18496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 18506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setZoom 18516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set zoom value from user setting 18536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 18556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 18566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 18586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 18596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 18606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 18616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setZoom(const QCameraParameters& params) 18626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 18636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((m_pCapability->zoom_supported == 0 || 18646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->zoom_ratio_tbl_cnt == 0)) { 18656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: no zoom support", __func__); 18666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 18676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 18696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int zoomLevel = params.getInt(KEY_ZOOM); 18706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if((zoomLevel < 0) || 18716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (zoomLevel >= m_pCapability->zoom_ratio_tbl_cnt)) { 18726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid value %d out of (%d, %d)", 18736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, zoomLevel, 18746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 0, m_pCapability->zoom_ratio_tbl_cnt-1); 18756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 18766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 18786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int prevZoomLevel = getInt(KEY_ZOOM); 18796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prevZoomLevel == zoomLevel) { 18806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: No value change in contrast", __func__); 18816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 18826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 18836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 18846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setZoom(zoomLevel); 18856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 18866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 18876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 18886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setISOValue 18896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set ISO value from user setting 18916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 18936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 18946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 18956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 18966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 18976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 18986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 18996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setISOValue(const QCameraParameters& params) 19006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 19016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_ISO_MODE); 19026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_ISO_MODE); 19036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 19046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 19056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 19066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setISOValue(str); 19076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 19106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 19116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 19126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 19136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setRotation 19146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set rotation value from user setting 19166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 19186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 19196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 19216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 19226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 19236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 19246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setRotation(const QCameraParameters& params) 19256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 19266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int rotation = params.getInt(KEY_ROTATION); 19276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rotation != -1) { 19286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rotation == 0 || rotation == 90 || 19296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rotation == 180 || rotation == 270) { 19306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_ROTATION, rotation); 19316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 19326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid rotation value: %d", rotation); 19336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 19346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 19376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 19386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 19396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 19406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFlash 19416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set flash mode from user setting 19436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 19456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 19466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 19486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 19496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 19506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 19516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFlash(const QCameraParameters& params) 19526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 19536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_FLASH_MODE); 19546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_FLASH_MODE); 19556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 19566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 19576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 19586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setFlash(str); 19596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 19626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 19636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 19646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 19656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAecLock 19666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set AEC lock value from user setting 19686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 19706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 19716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 19736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 19746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 19756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 19766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAecLock(const QCameraParameters& params) 19776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 19786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_AUTO_EXPOSURE_LOCK); 19796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_AUTO_EXPOSURE_LOCK); 19806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 19816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 19826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 19836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setAecLock(str); 19846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 19866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 19876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 19886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 19896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 19906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAwbLock 19916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set AWB lock from user setting 19936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 19956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 19966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 19976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 19986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 19996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 20006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 20016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAwbLock(const QCameraParameters& params) 20026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 20036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_AUTO_WHITEBALANCE_LOCK); 20046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_AUTO_WHITEBALANCE_LOCK); 20056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 20066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 20076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 20086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setAwbLock(str); 20096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 20126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 20136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 20146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 20156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setMCEValue 20166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set memory color enhancement value from user setting 20186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 20206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 20216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 20236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 20246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 20256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 20266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setMCEValue(const QCameraParameters& params) 20276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 20286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_MEMORY_COLOR_ENHANCEMENT); 20296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_MEMORY_COLOR_ENHANCEMENT); 20306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 20316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 20326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 20336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setMCEValue(str); 20346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 20376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 20386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 20396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 20406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setDISValue 20416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: enable/disable DIS from user setting 20436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 20456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 20466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 20486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 20496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 20506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 20516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setDISValue(const QCameraParameters& params) 20526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 20536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_DIS); 20546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_DIS); 20556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 20566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 20576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 20586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setDISValue(str); 20596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 20626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 20636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 20646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 20656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setHighFrameRate 20666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set hight frame rate value from user setting 20686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 20706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 20716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 20736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 20746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 20756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 20766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setHighFrameRate(const QCameraParameters& params) 20776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 20786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_VIDEO_HIGH_FRAME_RATE); 20796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_VIDEO_HIGH_FRAME_RATE); 20806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 20816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 20826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 20836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setHighFrameRate(str); 20846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 20866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 20876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 20886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 20896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 20906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setLensShadeValue 20916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set lens shade value from user setting 20936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 20956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 20966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 20976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 20986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 20996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 21006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 21016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setLensShadeValue(const QCameraParameters& params) 21026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 21036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_LENSSHADE); 21046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_LENSSHADE); 21056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 21066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 21076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 21086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setLensShadeValue(str); 21096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 21126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 21136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 21146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 21156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFocusAreas 21166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set focus areas from user setting 21186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 21206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 21216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 21236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 21246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 21256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 21266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFocusAreas(const QCameraParameters& params) 21276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 21286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_FOCUS_AREAS); 21296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 21306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int max_num_af_areas = getInt(KEY_MAX_NUM_FOCUS_AREAS); 21316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(max_num_af_areas == 0) { 21326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: max num of AF area is 0, cannot set focus areas", __func__); 21336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 21346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 21366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_FOCUS_AREAS); 21376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 21386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 21396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setFocusAreas(str); 21406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 21436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 21446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 21456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 21466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setMeteringAreas 21476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set metering areas from user setting 21496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 21516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 21526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 21546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 21556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 21566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 21576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setMeteringAreas(const QCameraParameters& params) 21586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 21596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_METERING_AREAS); 21606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 21616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int max_num_mtr_areas = getInt(KEY_MAX_NUM_METERING_AREAS); 21626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(max_num_mtr_areas == 0) { 21636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: max num of metering areas is 0, cannot set focus areas", __func__); 21646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 21656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 21676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_METERING_AREAS); 21686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 21696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 21706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setMeteringAreas(str); 21716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 21736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 21746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 21756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 21766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 21776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSceneMode 21786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set scenen mode from user setting 21806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 21826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 21836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 21846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 21856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 21866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 21876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 21886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSceneMode(const QCameraParameters& params) 21896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 21906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_SCENE_MODE); 21916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_SCENE_MODE); 21926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 21936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 21946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 21956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((strcmp(str, SCENE_MODE_HDR) == 0) || 21966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ((prev_str != NULL) && (strcmp(prev_str, SCENE_MODE_HDR) == 0))) { 21976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: scene mode changed between HDR and non-HDR, need restart", __func__); 21986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart = true; 21996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // set if hdr 1x image is needed 22016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *need_hdr_1x = params.get(KEY_QC_HDR_NEED_1X); 22026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = 0; 22036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (need_hdr_1x != NULL && strcmp(need_hdr_1x, VALUE_TRUE) == 0) { 22046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev value = 1; 22056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_HDR_NEED_1X, need_hdr_1x); 22066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev AddSetParmEntryToBatch(m_pParamBuf, 22076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_HDR_NEED_1X, 22086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 22096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 22106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setSceneMode(str); 22136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 22166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 22176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 22196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSelectableZoneAf 22206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set selectable zone auto focus value from user setting 22226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 22246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 22256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 22276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 22286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 22296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 22306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSelectableZoneAf(const QCameraParameters& params) 22316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 22326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_SELECTABLE_ZONE_AF); 22336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_SELECTABLE_ZONE_AF); 22346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 22356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 22366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 22376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setSelectableZoneAf(str); 22386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 22416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 22426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 22446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAEBracket 22456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set AE bracket from user setting 22476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 22496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 22506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 22526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 22536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 22546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 22556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAEBracket(const QCameraParameters& params) 22566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 22576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *scene_mode = params.get(KEY_SCENE_MODE); 22586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (scene_mode != NULL && strcmp(scene_mode, SCENE_MODE_HDR) == 0) { 22596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: scene mode is HDR, overwrite AE bracket setting to off", __func__); 22606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setAEBracket(AE_BRACKET_OFF); 22616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *expStr = params.get(KEY_QC_CAPTURE_BURST_EXPOSURE); 22646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL != expStr && strlen(expStr) > 0) { 22656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_CAPTURE_BURST_EXPOSURE, expStr); 22666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 22676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char prop[PROPERTY_VALUE_MAX]; 22686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(prop, 0, sizeof(prop)); 22696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.capture.burst.exposures", prop, ""); 22706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (strlen(prop) > 0) { 22716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_CAPTURE_BURST_EXPOSURE, prop); 22726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 22736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_QC_CAPTURE_BURST_EXPOSURE); 22746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_AE_BRACKET_HDR); 22786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_AE_BRACKET_HDR); 22796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 22806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 22816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 22826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setAEBracket(str); 22836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 22856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 22866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 22876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 22886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 22896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setRedeyeReduction 22906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set red eye reduction setting from user setting 22926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 22946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 22956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 22966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 22976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 22986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 22996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 23006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setRedeyeReduction(const QCameraParameters& params) 23016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 23026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_REDEYE_REDUCTION); 23036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_REDEYE_REDUCTION); 23046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 23056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 23066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 23076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setRedeyeReduction(str); 23086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 23116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 23126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 23146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setGpsLocation 23156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 23166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set GPS location information from user setting 23176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 23186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 23196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 23206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 23216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 23226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 23236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 23246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 23256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setGpsLocation(const QCameraParameters& params) 23266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 23276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *method = params.get(KEY_GPS_PROCESSING_METHOD); 23286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (method) { 23296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_GPS_PROCESSING_METHOD, method); 23306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else { 23316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_GPS_PROCESSING_METHOD); 23326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *latitude = params.get(KEY_GPS_LATITUDE); 23356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (latitude) { 23366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_GPS_LATITUDE, latitude); 23376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else { 23386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_GPS_LATITUDE); 23396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *latitudeRef = params.get(KEY_QC_GPS_LATITUDE_REF); 23426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (latitudeRef) { 23436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_GPS_LATITUDE_REF, latitudeRef); 23446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else { 23456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_QC_GPS_LATITUDE_REF); 23466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *longitude = params.get(KEY_GPS_LONGITUDE); 23496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (longitude) { 23506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_GPS_LONGITUDE, longitude); 23516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else { 23526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_GPS_LONGITUDE); 23536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *longitudeRef = params.get(KEY_QC_GPS_LONGITUDE_REF); 23566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (longitudeRef) { 23576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_GPS_LONGITUDE_REF, longitudeRef); 23586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else { 23596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_QC_GPS_LONGITUDE_REF); 23606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *altitudeRef = params.get(KEY_QC_GPS_ALTITUDE_REF); 23636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (altitudeRef) { 23646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_GPS_ALTITUDE_REF, altitudeRef); 23656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else { 23666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_QC_GPS_ALTITUDE_REF); 23676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *altitude = params.get(KEY_GPS_ALTITUDE); 23706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (altitude) { 23716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_GPS_ALTITUDE, altitude); 23726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else { 23736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_GPS_ALTITUDE); 23746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *status = params.get(KEY_QC_GPS_STATUS); 23776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (status) { 23786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_GPS_STATUS, status); 23796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 23806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_QC_GPS_STATUS); 23816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *timestamp = params.get(KEY_GPS_TIMESTAMP); 23846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (timestamp) { 23856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_GPS_TIMESTAMP, timestamp); 23866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else { 23876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_GPS_TIMESTAMP); 23886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 23896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 23906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 23916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 23926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 23936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setNumOfSnapshot 23946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 23956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set number of snapshot per shutter from user setting 23966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 23976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 23986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 23996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 24006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 24016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 24026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 24036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setNumOfSnapshot() 24046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 24056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int nBurstNum = getBurstNum(); 24066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint8_t nExpnum = 0; 24076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 24086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *scene_mode = get(KEY_SCENE_MODE); 24096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (scene_mode != NULL && strcmp(scene_mode, SCENE_MODE_HDR) == 0) { 24106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* According to Android SDK, only one snapshot, 24116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * but OEM might have different requirement */ 24126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *need_hdr_1x = get(KEY_QC_HDR_NEED_1X); 24136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (need_hdr_1x != NULL && strcmp(need_hdr_1x, VALUE_TRUE) == 0) { 24146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev nExpnum = 2; // HDR needs both 1X and processed img 24156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 24166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev nExpnum = 1; // HDR only needs processed img 24176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 24196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *bracket_str = get(KEY_QC_AE_BRACKET_HDR); 24206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (bracket_str != NULL && strlen(bracket_str) > 0) { 24216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int value = lookupAttr(BRACKETING_MODES_MAP, 24226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(BRACKETING_MODES_MAP)/sizeof(QCameraMap), 24236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bracket_str); 24246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (value) { 24256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_EXP_BRACKETING_ON: 24266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 24276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev nExpnum = 0; 24286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str_val = get(KEY_QC_CAPTURE_BURST_EXPOSURE); 24296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((str_val != NULL) && (strlen(str_val) > 0)) { 24306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char prop[PROPERTY_VALUE_MAX]; 24316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(prop, 0, sizeof(prop)); 24326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcpy(prop, str_val); 24336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *saveptr = NULL; 24346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *token = strtok_r(prop, ",", &saveptr); 24356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev while (token != NULL) { 24366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev token = strtok_r(NULL, ",", &saveptr); 24376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev nExpnum++; 24386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (nExpnum == 0) { 24416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev nExpnum = 1; 24426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 24466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev nExpnum = 1; 24476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 24486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 24526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: nBurstNum = %d, nExpnum = %d", __func__, nBurstNum, nExpnum); 24536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_NUM_SNAPSHOT_PER_SHUTTER, nBurstNum * nExpnum); 24546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 24556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 24566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 24576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 24586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setRecordingHint 24596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 24606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set recording hint value from user setting 24616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 24626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 24636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 24646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 24656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 24666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 24676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 24686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 24696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setRecordingHint(const QCameraParameters& params) 24706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 24716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char * str = params.get(KEY_RECORDING_HINT); 24726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_RECORDING_HINT); 24736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 24746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || strcmp(str, prev_str) != 0) { 24756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(TRUE_FALSE_MODES_MAP, 24766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(TRUE_FALSE_MODES_MAP)/sizeof(QCameraMap), 24776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str); 24786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(value != NAME_NOT_FOUND){ 24796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_RECORDING_HINT, str); 24806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setRecordingHintValue(value); 24816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 24826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 24836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid recording hint value: %s", str); 24846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 24856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 24886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 24896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 24906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 24916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 24926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setNoDisplayMode 24936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 24946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set no display mode from user setting 24956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 24966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 24976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 24986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 24996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 25006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 25016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 25026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 25036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setNoDisplayMode(const QCameraParameters& params) 25046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 25056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str_val = params.get(KEY_QC_NO_DISPLAY_MODE); 25066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_NO_DISPLAY_MODE); 25076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str_val && strlen(str_val) > 0) { 25086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || strcmp(str_val, prev_str) != 0) { 25096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNoDisplayMode = atoi(str_val); 2510744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy set(KEY_QC_NO_DISPLAY_MODE, str_val); 25116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart = true; 25126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 25146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNoDisplayMode = false; 25156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("Param m_bNoDisplayMode = %d", m_bNoDisplayMode); 25176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 25186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 25196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 25216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setZslMode 25226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set ZSL mode from user setting 25246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 25266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 25276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 25296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 25306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 25316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 25326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setZslMode(const QCameraParameters& params) 25336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 25346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str_val = params.get(KEY_QC_ZSL); 25356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_val = get(KEY_QC_ZSL); 25366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str_val != NULL) { 25386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_val == NULL || strcmp(str_val, prev_val) != 0) { 25396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ON_OFF_MODES_MAP, 25406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ON_OFF_MODES_MAP)/sizeof(QCameraMap), 25416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str_val); 25426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 2543744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy set(KEY_QC_ZSL, str_val); 2544744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bZslMode_new = (value > 0)? true : false; 25456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // ZSL mode changed, need restart preview 25476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart = true; 25486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 25506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_ZSL_MODE, 25516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 25526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 25536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 25546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid ZSL mode value: %s", str_val); 25556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 25566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 25606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 25616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 25636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setWaveletDenoise 25646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set wavelet denoise value from user setting 25666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 25686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 25696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 25716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 25726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 25736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 25746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setWaveletDenoise(const QCameraParameters& params) 25756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 25766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_DENOISE); 25776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *prev_str = get(KEY_QC_DENOISE); 25786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 25796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (prev_str == NULL || 25806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strcmp(str, prev_str) != 0) { 25816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return setWaveletDenoise(str); 25826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 25846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 25856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 25866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 25876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 25886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setCameraMode 25896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set camera mode from user setting 25916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 25936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 25946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 25956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 25966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 25976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 25986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 25996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setCameraMode(const QCameraParameters& params) 26006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 26016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_CAMERA_MODE); 26026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 26036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_CAMERA_MODE, str); 26046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 26056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev remove(KEY_QC_CAMERA_MODE); 26066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 26086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 26096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 26116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setZslAttributes 26126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 26136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set ZSL related attributes from user setting 26146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 26156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 26166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 26176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 26186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 26196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 26206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 26216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 26226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setZslAttributes(const QCameraParameters& params) 26236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 26246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // TODO: may switch to pure param instead of sysprop 26251d1acf66461fdc4e078a8f1b335d6ac0f48ea89eNick Kralevich char prop[PROPERTY_VALUE_MAX]; 26266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_ZSL_BURST_INTERVAL); 26286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 26296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_ZSL_BURST_INTERVAL, str); 26306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 26316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(prop, 0, sizeof(prop)); 26326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.camera.zsl.interval", prop, "1"); 26336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_ZSL_BURST_INTERVAL, prop); 26346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str = params.get(KEY_QC_ZSL_BURST_LOOKBACK); 26376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 26386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_ZSL_BURST_LOOKBACK, str); 26396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 26406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(prop, 0, sizeof(prop)); 26416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.camera.zsl.backlookcnt", prop, "2"); 26426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_ZSL_BURST_LOOKBACK, prop); 26436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str = params.get(KEY_QC_ZSL_QUEUE_DEPTH); 26466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str != NULL) { 26476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_ZSL_QUEUE_DEPTH, str); 26486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 26496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(prop, 0, sizeof(prop)); 26506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.camera.zsl.queuedepth", prop, "2"); 26516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_ZSL_QUEUE_DEPTH, prop); 26526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 26556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 26566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 26586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFlip 26596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 26606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set preview/ video/ picture flip mode from user setting 26616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 26626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 26636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 26646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 26656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 26666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 26676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 26686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 26696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFlip(const QCameraParameters& params) 26706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 26716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_FLIP) == 0) { 26726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: flip is not supported.", __func__); 26736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 26746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //check preview flip setting 26776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = params.get(KEY_QC_PREVIEW_FLIP); 26786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL){ 26796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(FLIP_MODES_MAP, 26806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FLIP_MODES_MAP)/sizeof(QCameraMap), 26816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str); 26826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(value != NAME_NOT_FOUND){ 26836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_PREVIEW_FLIP, str); 26846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // check video filp setting 26886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str = params.get(KEY_QC_VIDEO_FLIP); 26896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL){ 26906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(FLIP_MODES_MAP, 26916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FLIP_MODES_MAP)/sizeof(QCameraMap), 26926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str); 26936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(value != NAME_NOT_FOUND){ 26946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_VIDEO_FLIP, str); 26956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 26976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 26986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // check picture filp setting 26996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str = params.get(KEY_QC_SNAPSHOT_PICTURE_FLIP); 27006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL){ 27016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(FLIP_MODES_MAP, 27026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FLIP_MODES_MAP)/sizeof(QCameraMap), 27036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str); 27046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(value != NAME_NOT_FOUND){ 27056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SNAPSHOT_PICTURE_FLIP, str); 27066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 27076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 27086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 27096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 27106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 27116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 27126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 27136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : updateParameters 27146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 27156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: update parameters from user setting 27166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 27176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 27186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @params : user setting parameters 27196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @needRestart : [output] if preview need restart upon setting changes 27206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 27216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 27226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 27236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 27246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 27256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::updateParameters(QCameraParameters& params, 27266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev bool &needRestart) 27276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 27286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t final_rc = NO_ERROR; 27296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc; 27306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart = false; 27316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 27326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(initBatchUpdate(m_pParamBuf) < 0 ) { 27336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to initialize group update table",__func__); 27346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = BAD_TYPE; 27356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev goto UPDATE_PARAM_DONE; 27366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 27376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 27386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setPreviewSize(params))) final_rc = rc; 27396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setVideoSize(params))) final_rc = rc; 27406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setPictureSize(params))) final_rc = rc; 27416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setPreviewFormat(params))) final_rc = rc; 27426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setPictureFormat(params))) final_rc = rc; 27436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setJpegThumbnailSize(params))) final_rc = rc; 27446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setJpegQuality(params))) final_rc = rc; 27456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setOrientation(params))) final_rc = rc; 27466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setRotation(params))) final_rc = rc; 27476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setNoDisplayMode(params))) final_rc = rc; 27486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setZslMode(params))) final_rc = rc; 27496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setZslAttributes(params))) final_rc = rc; 27506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setCameraMode(params))) final_rc = rc; 27516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setRecordingHint(params))) final_rc = rc; 27526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 27536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setPreviewFpsRange(params))) final_rc = rc; 27546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setPreviewFrameRate(params))) final_rc = rc; 27556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setAutoExposure(params))) final_rc = rc; 27566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setEffect(params))) final_rc = rc; 27576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setBrightness(params))) final_rc = rc; 27586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setZoom(params))) final_rc = rc; 27596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setSharpness(params))) final_rc = rc; 27606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setSaturation(params))) final_rc = rc; 27616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setContrast(params))) final_rc = rc; 27626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setFocusMode(params))) final_rc = rc; 27636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setISOValue(params))) final_rc = rc; 27646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setSkinToneEnhancement(params))) final_rc = rc; 27656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setFlash(params))) final_rc = rc; 27666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setAecLock(params))) final_rc = rc; 27676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setAwbLock(params))) final_rc = rc; 27686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setLensShadeValue(params))) final_rc = rc; 27696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setMCEValue(params))) final_rc = rc; 27706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setDISValue(params))) final_rc = rc; 27716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setHighFrameRate(params))) final_rc = rc; 27726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setAntibanding(params))) final_rc = rc; 27736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setExposureCompensation(params))) final_rc = rc; 27746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setWhiteBalance(params))) final_rc = rc; 27756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setSceneMode(params))) final_rc = rc; 27766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setFocusAreas(params))) final_rc = rc; 27776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setMeteringAreas(params))) final_rc = rc; 27786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setSelectableZoneAf(params))) final_rc = rc; 27796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setRedeyeReduction(params))) final_rc = rc; 27806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setAEBracket(params))) final_rc = rc; 27816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setGpsLocation(params))) final_rc = rc; 27826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setWaveletDenoise(params))) final_rc = rc; 27836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setFaceRecognition(params))) final_rc = rc; 27846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((rc = setFlip(params))) final_rc = rc; 27852f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li if ((rc = setVideoHDR(params))) final_rc = rc; 27866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 27873f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li // update live snapshot size after all other parameters are set 27883f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li if ((rc = setLiveSnapshotSize(params))) final_rc = rc; 27893f92cbaa5bde0dba1e4a9a67e5aa60fc0af2dfa0Muhua Li 27906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevUPDATE_PARAM_DONE: 27916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev needRestart = m_bNeedRestart; 27926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return final_rc; 27936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 27946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 27956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 27966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : commitParameters 27976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 27986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: commit parameter changes to backend 27996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 28006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 28016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 28026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 28036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 28046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 28056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 28066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::commitParameters() 28076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 28086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return commitSetBatch(); 28096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 28106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 28116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 28126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : initDefaultParameters 28136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 28146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: initialize default parameters for the first time 28156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 28166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 28176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 28186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 28196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 28206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 28216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 28226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::initDefaultParameters() 28236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 28246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(initBatchUpdate(m_pParamBuf) < 0 ) { 28256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to initialize group update table", __func__); 28266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_TYPE; 28276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 28286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 28296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /*************************Initialize Values******************************/ 28306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set read only parameters from camera capability 28316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SMOOTH_ZOOM_SUPPORTED, 28326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->smooth_zoom_supported? VALUE_TRUE : VALUE_FALSE); 28336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_ZOOM_SUPPORTED, 28346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->zoom_supported? VALUE_TRUE : VALUE_FALSE); 28356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_VIDEO_SNAPSHOT_SUPPORTED, 28366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->video_snapshot_supported? VALUE_TRUE : VALUE_FALSE); 28376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_VIDEO_STABILIZATION_SUPPORTED, 28386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->video_stablization_supported? VALUE_TRUE : VALUE_FALSE); 28396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, 28406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->auto_exposure_lock_supported? VALUE_TRUE : VALUE_FALSE); 28416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, 28426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->auto_wb_lock_supported? VALUE_TRUE : VALUE_FALSE); 28436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_CAMERA_FEATURES, 28446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->qcom_supported_feature_mask); 28456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_MAX_NUM_DETECTED_FACES_HW, m_pCapability->max_num_roi); 28466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_MAX_NUM_DETECTED_FACES_SW, m_pCapability->max_num_roi); 28476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MAX_NUM_REQUESTED_FACES, m_pCapability->max_num_roi); 28486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set focal length, horizontal view angle, and vertical view angle 28496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setFloat(KEY_FOCAL_LENGTH, m_pCapability->focal_length); 28506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setFloat(KEY_HORIZONTAL_VIEW_ANGLE, m_pCapability->hor_view_angle); 28516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setFloat(KEY_VERTICAL_VIEW_ANGLE, m_pCapability->ver_view_angle); 28526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 28536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set supported preview sizes 28546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->preview_sizes_tbl_cnt > 0 && 28556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->preview_sizes_tbl_cnt <= MAX_SIZES_CNT) { 28566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 previewSizeValues = createSizesString( 28576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->preview_sizes_tbl, m_pCapability->preview_sizes_tbl_cnt); 28586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_PREVIEW_SIZES, previewSizeValues.string()); 28596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: supported preview sizes: %s", __func__, previewSizeValues.string()); 28606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default preview size 28616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::setPreviewSize(m_pCapability->preview_sizes_tbl[0].width, 28626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->preview_sizes_tbl[0].height); 28636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 28646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: supported preview sizes cnt is 0 or exceeds max!!!", __func__); 28656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 28666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 28676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set supported video sizes 28686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->video_sizes_tbl_cnt > 0 && 28696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->video_sizes_tbl_cnt <= MAX_SIZES_CNT) { 28706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 videoSizeValues = createSizesString( 28716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->video_sizes_tbl, m_pCapability->video_sizes_tbl_cnt); 28726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_VIDEO_SIZES, videoSizeValues.string()); 28736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: supported video sizes: %s", __func__, videoSizeValues.string()); 28746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default video size 28756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::setVideoSize(m_pCapability->video_sizes_tbl[0].width, 28766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->video_sizes_tbl[0].height); 28776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 28786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Set preferred Preview size for video 28796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 vSize = createSizesString(&m_pCapability->video_sizes_tbl[0], 1); 28806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, vSize.string()); 28816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 28826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: supported video sizes cnt is 0 or exceeds max!!!", __func__); 28836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 28846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 28856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set supported picture sizes 28866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->picture_sizes_tbl_cnt > 0 && 28876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->picture_sizes_tbl_cnt <= MAX_SIZES_CNT) { 28886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 pictureSizeValues = createSizesString( 28896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->picture_sizes_tbl, m_pCapability->picture_sizes_tbl_cnt); 28906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_PICTURE_SIZES, pictureSizeValues.string()); 28916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: supported pic sizes: %s", __func__, pictureSizeValues.string()); 28926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default picture size to the smallest resolution 28936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::setPictureSize( 28946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->picture_sizes_tbl[m_pCapability->picture_sizes_tbl_cnt-1].width, 28956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->picture_sizes_tbl[m_pCapability->picture_sizes_tbl_cnt-1].height); 28966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 28976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: supported picture sizes cnt is 0 or exceeds max!!!", __func__); 28986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 28996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set supported thumbnail sizes 29016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 thumbnailSizeValues = createSizesString( 29026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev THUMBNAIL_SIZES_MAP, 29036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(THUMBNAIL_SIZES_MAP)/sizeof(cam_dimension_t)); 29046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, thumbnailSizeValues.string()); 29056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default thumnail size 29066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_JPEG_THUMBNAIL_WIDTH, THUMBNAIL_SIZES_MAP[0].width); 29076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_JPEG_THUMBNAIL_HEIGHT, THUMBNAIL_SIZES_MAP[0].height); 29086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set supported livesnapshot sizes 29106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->livesnapshot_sizes_tbl_cnt > 0 && 29116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->livesnapshot_sizes_tbl_cnt <= MAX_SIZES_CNT) { 29126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 liveSnpashotSizeValues = createSizesString( 29136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->livesnapshot_sizes_tbl, 29146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->livesnapshot_sizes_tbl_cnt); 29156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_LIVESNAPSHOT_SIZES, liveSnpashotSizeValues.string()); 29166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: supported live snapshot sizes: %s", __func__, liveSnpashotSizeValues.string()); 29176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_LiveSnapshotSize = 29186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->livesnapshot_sizes_tbl[m_pCapability->livesnapshot_sizes_tbl_cnt-1]; 29196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 29206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set supported preview formats 29226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 previewFormatValues = createValuesString( 29236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_preview_fmts, 29246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_preview_fmt_cnt, 29256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev PREVIEW_FORMATS_MAP, 29266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(PREVIEW_FORMATS_MAP)/sizeof(QCameraMap)); 29276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_PREVIEW_FORMATS, previewFormatValues.string()); 29286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default preview format 29296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::setPreviewFormat(PIXEL_FORMAT_YUV420SP); 29306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default Video Format 29326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_VIDEO_FRAME_FORMAT, PIXEL_FORMAT_YUV420SP); 29336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set supported picture formats 29356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 pictureTypeValues(PIXEL_FORMAT_JPEG); 29366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str = createValuesString( 29376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_raw_fmts, 29386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_raw_fmt_cnt, 29396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev PICTURE_TYPES_MAP, 29406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(PICTURE_TYPES_MAP)/sizeof(QCameraMap)); 29416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (str.string() != NULL) { 29426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pictureTypeValues.append(","); 29436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pictureTypeValues.append(str); 29446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 29456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_PICTURE_FORMATS, pictureTypeValues.string()); 29476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default picture Format 29486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CameraParameters::setPictureFormat(PIXEL_FORMAT_JPEG); 29496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set raw image size 29506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char raw_size_str[32]; 29516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(raw_size_str, sizeof(raw_size_str), "%dx%d", 29526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->raw_dim.width, m_pCapability->raw_dim.height); 29536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_RAW_PICUTRE_SIZE, raw_size_str); 29546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //set default jpeg quality and thumbnail quality 29566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_JPEG_QUALITY, 85); 29576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_JPEG_THUMBNAIL_QUALITY, 85); 29586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set FPS ranges 29606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->fps_ranges_tbl_cnt > 0 && 29616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->fps_ranges_tbl_cnt <= MAX_SIZES_CNT) { 29626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int default_fps_index = 0; 29636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 fpsRangeValues = createFpsRangeString(m_pCapability->fps_ranges_tbl, 29646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->fps_ranges_tbl_cnt, 29656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default_fps_index); 29666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_PREVIEW_FPS_RANGE, fpsRangeValues.string()); 29676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int min_fps = 29696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int(m_pCapability->fps_ranges_tbl[default_fps_index].min_fps * 1000); 29706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int max_fps = 29716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int(m_pCapability->fps_ranges_tbl[default_fps_index].max_fps * 1000); 29726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setPreviewFpsRange(min_fps, max_fps); 29736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set legacy preview fps 29756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 fpsValues = createFpsString(m_pCapability->fps_ranges_tbl, 29766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->fps_ranges_tbl_cnt); 29776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_PREVIEW_FRAME_RATES, fpsValues.string()); 2978744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy CameraParameters::setPreviewFrameRate(int(m_pCapability->fps_ranges_tbl[default_fps_index].max_fps)); 29796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 29806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: supported fps ranges cnt is 0 or exceeds max!!!", __func__); 29816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 29826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set supported focus modes 29846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->supported_focus_modes_cnt > 0) { 29856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 focusModeValues = createValuesString( 29866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_focus_modes, 29876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_focus_modes_cnt, 29886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev FOCUS_MODES_MAP, 29896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FOCUS_MODES_MAP)/sizeof(QCameraMap)); 29906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_FOCUS_MODES, focusModeValues); 29916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 29926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default focus mode and update corresponding parameter buf 29936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *focusMode = lookupNameByValue(FOCUS_MODES_MAP, 29946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FOCUS_MODES_MAP)/sizeof(QCameraMap), 29956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_focus_modes[0]); 29966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (focusMode != NULL) { 29976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setFocusMode(focusMode); 29986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 29996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setFocusMode(FOCUS_MODE_FIXED); 30006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 30016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 30026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: supported focus modes cnt is 0!!!", __func__); 30036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 30046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set focus areas 30066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->max_num_focus_areas > MAX_ROI) { 30076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->max_num_focus_areas = MAX_ROI; 30086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 30096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_MAX_NUM_FOCUS_AREAS, m_pCapability->max_num_focus_areas); 30106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->max_num_focus_areas > 0) { 30116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setFocusAreas(DEFAULT_CAMERA_AREA); 30126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 30136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set metering areas 30156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->max_num_metering_areas > MAX_ROI) { 30166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->max_num_metering_areas = MAX_ROI; 30176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 30186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_MAX_NUM_METERING_AREAS, m_pCapability->max_num_metering_areas); 30196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->max_num_metering_areas > 0) { 30206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setMeteringAreas(DEFAULT_CAMERA_AREA); 30216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 30226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Saturation 30246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MIN_SATURATION, m_pCapability->saturation_ctrl.min_value); 30256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MAX_SATURATION, m_pCapability->saturation_ctrl.max_value); 30266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SATURATION_STEP, m_pCapability->saturation_ctrl.step); 30276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setSaturation(m_pCapability->saturation_ctrl.def_value); 30286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Sharpness 30306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MIN_SHARPNESS, m_pCapability->sharpness_ctrl.min_value); 30316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MAX_SHARPNESS, m_pCapability->sharpness_ctrl.max_value); 30326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SHARPNESS_STEP, m_pCapability->sharpness_ctrl.step); 30336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setSharpness(m_pCapability->sharpness_ctrl.def_value); 30346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Contrast 30366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MIN_CONTRAST, m_pCapability->contrast_ctrl.min_value); 30376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MAX_CONTRAST, m_pCapability->contrast_ctrl.max_value); 30386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_CONTRAST_STEP, m_pCapability->contrast_ctrl.step); 30396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setContrast(m_pCapability->contrast_ctrl.def_value); 30406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set SCE factor 30426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MIN_SCE_FACTOR, m_pCapability->sce_ctrl.min_value); // -100 30436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MAX_SCE_FACTOR, m_pCapability->sce_ctrl.max_value); // 100 30446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SCE_FACTOR_STEP, m_pCapability->sce_ctrl.step); // 10 30456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setSkinToneEnhancement(m_pCapability->sce_ctrl.def_value); // 0 30466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Brightness 30486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MIN_BRIGHTNESS, m_pCapability->brightness_ctrl.min_value); // 0 30496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_MAX_BRIGHTNESS, m_pCapability->brightness_ctrl.max_value); // 6 30506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_BRIGHTNESS_STEP, m_pCapability->brightness_ctrl.step); // 1 30516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setBrightness(m_pCapability->brightness_ctrl.def_value); 30526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Auto exposure 30546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 autoExposureValues = createValuesString( 30556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_aec_modes, 30566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_aec_modes_cnt, 30576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev AUTO_EXPOSURE_MAP, 30586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(AUTO_EXPOSURE_MAP) / sizeof(QCameraMap)); 30596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_AUTO_EXPOSURE, autoExposureValues.string()); 30606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setAutoExposure(AUTO_EXPOSURE_FRAME_AVG); 30616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Exposure Compensation 30636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_MAX_EXPOSURE_COMPENSATION, m_pCapability->exposure_compensation_max); // 12 30646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_MIN_EXPOSURE_COMPENSATION, m_pCapability->exposure_compensation_min); // -12 30656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setFloat(KEY_EXPOSURE_COMPENSATION_STEP, m_pCapability->exposure_compensation_step); // 1/6 30666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setExposureCompensation(m_pCapability->exposure_compensation_default); // 0 30676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Antibanding 30696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 antibandingValues = createValuesString( 30706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_antibandings, 30716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_antibandings_cnt, 30726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ANTIBANDING_MODES_MAP, 30736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ANTIBANDING_MODES_MAP) / sizeof(QCameraMap)); 30746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_ANTIBANDING, antibandingValues); 30756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setAntibanding(ANTIBANDING_OFF); 30766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Effect 30786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 effectValues = createValuesString( 30796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_effects, 30806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_effects_cnt, 30816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev EFFECT_MODES_MAP, 30826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(EFFECT_MODES_MAP) / sizeof(QCameraMap)); 30836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_EFFECTS, effectValues); 30846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setEffect(EFFECT_NONE); 30856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set WhiteBalance 30876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 whitebalanceValues = createValuesString( 30886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_white_balances, 30896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_white_balances_cnt, 30906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev WHITE_BALANCE_MODES_MAP, 30916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(WHITE_BALANCE_MODES_MAP) / sizeof(QCameraMap)); 30926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_WHITE_BALANCE, whitebalanceValues); 30936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setWhiteBalance(WHITE_BALANCE_AUTO); 30946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 30956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Flash mode 30966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 flashValues = createValuesString( 30976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_flash_modes, 30986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_flash_modes_cnt, 30996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev FLASH_MODES_MAP, 31006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FLASH_MODES_MAP) / sizeof(QCameraMap)); 31016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_FLASH_MODES, flashValues); 31026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setFlash(FLASH_MODE_OFF); 31036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Scene Mode 31056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 sceneModeValues = createValuesString( 31066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_scene_modes, 31076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_scene_modes_cnt, 31086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SCENE_MODES_MAP, 31096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(SCENE_MODES_MAP) / sizeof(QCameraMap)); 31106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_SUPPORTED_SCENE_MODES, sceneModeValues); 31116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setSceneMode(SCENE_MODE_AUTO); 31126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set ISO Mode 31146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 isoValues = createValuesString( 31156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_iso_modes, 31166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_iso_modes_cnt, 31176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ISO_MODES_MAP, 31186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ISO_MODES_MAP) / sizeof(QCameraMap)); 31196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_ISO_MODES, isoValues); 31206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setISOValue(ISO_AUTO); 31216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set HFR 31236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 hfrValues = createHfrValuesString( 31246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->hfr_tbl, 31256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->hfr_tbl_cnt, 31266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev HFR_MODES_MAP, 31276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(HFR_MODES_MAP) / sizeof(QCameraMap)); 31286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_VIDEO_HIGH_FRAME_RATE_MODES, hfrValues.string()); 31296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 hfrSizeValues = createHfrSizesString( 31306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->hfr_tbl, 31316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->hfr_tbl_cnt); 31326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_HFR_SIZES, hfrSizeValues.string()); 31336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setHighFrameRate(VIDEO_HFR_OFF); 31346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Focus algorithms 31366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 focusAlgoValues = createValuesString( 31376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int *)m_pCapability->supported_focus_algos, 31386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->supported_focus_algos_cnt, 31396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev FOCUS_ALGO_MAP, 31406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FOCUS_ALGO_MAP) / sizeof(QCameraMap)); 31416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_FOCUS_ALGOS, focusAlgoValues); 31426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setSelectableZoneAf(FOCUS_ALGO_AUTO); 31436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Zoom Ratios 31456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->zoom_supported > 0) { 31466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 zoomRatioValues = createZoomRatioValuesString( 31476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->zoom_ratio_tbl, 31486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->zoom_ratio_tbl_cnt); 31496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_ZOOM_RATIOS, zoomRatioValues); 31506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_MAX_ZOOM, m_pCapability->zoom_ratio_tbl_cnt - 1); 31516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setZoom(0); 31526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 31536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Bracketing/HDR 31556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char prop[PROPERTY_VALUE_MAX]; 31566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(prop, 0, sizeof(prop)); 31576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.capture.burst.exposures", prop, ""); 31586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (strlen(prop) > 0) { 31596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_CAPTURE_BURST_EXPOSURE, prop); 31606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 31616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 bracketingValues = createValuesStringFromMap( 31626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev BRACKETING_MODES_MAP, 31636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(BRACKETING_MODES_MAP) / sizeof(QCameraMap)); 31646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_AE_BRACKET_MODES, bracketingValues); 31656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setAEBracket(AE_BRACKET_OFF); 31666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Denoise 31686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 denoiseValues = createValuesStringFromMap( 31696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev DENOISE_ON_OFF_MODES_MAP, sizeof(DENOISE_ON_OFF_MODES_MAP) / sizeof(QCameraMap)); 31706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_DENOISE, denoiseValues.string()); 317111832bce7b58277c2eebd9236ac00342ca2d8bfcIvan Evlogiev#ifdef DEFAULT_DENOISE_MODE_ON 317211832bce7b58277c2eebd9236ac00342ca2d8bfcIvan Evlogiev setWaveletDenoise(DENOISE_ON); 317311832bce7b58277c2eebd9236ac00342ca2d8bfcIvan Evlogiev#else 31746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setWaveletDenoise(DENOISE_OFF); 317511832bce7b58277c2eebd9236ac00342ca2d8bfcIvan Evlogiev#endif 31766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set feature enable/disable 31786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 enableDisableValues = createValuesStringFromMap( 31796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ENABLE_DISABLE_MODES_MAP, sizeof(ENABLE_DISABLE_MODES_MAP) / sizeof(QCameraMap)); 31806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Lens Shading 31826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_LENSSHADE_MODES, enableDisableValues); 31836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setLensShadeValue(VALUE_ENABLE); 31846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set MCE 31866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_MEM_COLOR_ENHANCE_MODES, enableDisableValues); 31876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setMCEValue(VALUE_ENABLE); 31886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set DIS 31906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_DIS_MODES, enableDisableValues); 31916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setDISValue(VALUE_DISABLE); 31926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set Histogram 31946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_HISTOGRAM_MODES, enableDisableValues); 31956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_HISTOGRAM, VALUE_DISABLE); 31966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 31976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Set Red Eye Reduction 31986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_REDEYE_REDUCTION, enableDisableValues); 31996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setRedeyeReduction(VALUE_DISABLE); 32006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Set SkinTone Enhancement 32026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_SKIN_TONE_ENHANCEMENT_MODES, enableDisableValues); 32036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set feature on/off 32056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 onOffValues = createValuesStringFromMap( 32066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ON_OFF_MODES_MAP, sizeof(ON_OFF_MODES_MAP) / sizeof(QCameraMap)); 32076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Set Scene Detection 32096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_SCENE_DETECT, onOffValues); 32106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setSceneDetect(VALUE_OFF); 32116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Set Face Detection 32136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_FACE_DETECTION, onOffValues); 32146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_FACE_DETECTION, VALUE_OFF); 32156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Set Face Recognition 32176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_FACE_RECOGNITION, onOffValues); 32186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_FACE_RECOGNITION, VALUE_OFF); 32196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Set ZSL 32216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_ZSL_MODES, onOffValues); 3222cbc47426e57bd30f5a00ec92e166f6e2681ecd4cIvan Evlogiev#ifdef DEFAULT_ZSL_MODE_ON 3223cbc47426e57bd30f5a00ec92e166f6e2681ecd4cIvan Evlogiev set(KEY_QC_ZSL, VALUE_ON); 3224cbc47426e57bd30f5a00ec92e166f6e2681ecd4cIvan Evlogiev m_bZslMode = true; 3225cbc47426e57bd30f5a00ec92e166f6e2681ecd4cIvan Evlogiev#else 32266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_ZSL, VALUE_OFF); 3227cbc47426e57bd30f5a00ec92e166f6e2681ecd4cIvan Evlogiev m_bZslMode = false; 3228cbc47426e57bd30f5a00ec92e166f6e2681ecd4cIvan Evlogiev#endif 3229744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bZslMode_new = m_bZslMode; 32306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32312f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li //Set video HDR 32322f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_VIDEO_HDR) > 0) { 32332f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li set(KEY_QC_SUPPORTED_VIDEO_HDR_MODES, onOffValues); 32342f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li set(KEY_QC_VIDEO_HDR, VALUE_OFF); 32352f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li } 32362f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li 32376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Set Touch AF/AEC 32386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 touchValues = createValuesStringFromMap( 32396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev TOUCH_AF_AEC_MODES_MAP, sizeof(TOUCH_AF_AEC_MODES_MAP) / sizeof(QCameraMap)); 32406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_TOUCH_AF_AEC, touchValues); 32426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_TOUCH_AF_AEC, TOUCH_AF_AEC_OFF); 32436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //set flip mode 32456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_FLIP) > 0) { 32466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 flipModes = createValuesStringFromMap( 32476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev FLIP_MODES_MAP, sizeof(FLIP_MODES_MAP) / sizeof(QCameraMap)); 32486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SUPPORTED_FLIP_MODES, flipModes); 32496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_PREVIEW_FLIP, FLIP_MODE_OFF); 32506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_VIDEO_FLIP, FLIP_MODE_OFF); 32516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_SNAPSHOT_PICTURE_FLIP, FLIP_MODE_OFF); 32526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 32536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default Auto Exposure lock value 32556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setAecLock(VALUE_FALSE); 32566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default AWB_LOCK lock value 32586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev setAwbLock(VALUE_FALSE); 32596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set default Camera mode 32616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_CAMERA_MODE, 0); 32626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // TODO: hardcode for now until mctl add support for min_num_pp_bufs 32646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->min_num_pp_bufs = 3; 32656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = commitParameters(); 32676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 32686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = setNumOfSnapshot(); 32696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 32706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 32716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 32726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 32746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : init 32756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 32766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: initialize parameter obj 32776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 32786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 32796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @capabilities : ptr to camera capabilities 32806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @mmops : ptr to memory ops table for mapping/unmapping 32816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 32826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 32836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 32846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 32856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 32866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::init(cam_capability_t *capabilities, mm_camera_vtbl_t *mmOps) 32876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 32886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 32896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability = capabilities; 32916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCamOpsTbl = mmOps; 32926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 32936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Allocate Set Param Buffer 3294744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_pParamHeap = new QCameraHeapMemory(QCAMERA_ION_USE_CACHE); 32956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_pParamHeap->allocate(1, sizeof(parm_buffer_t)); 32966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(rc != OK) { 32976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = NO_MEMORY; 32986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Failed to allocate SETPARM Heap memory"); 32996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev goto TRANS_INIT_ERROR1; 33006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 33016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Map memory for parameters buffer 33036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_pCamOpsTbl->ops->map_buf(m_pCamOpsTbl->camera_handle, 33046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_MAPPING_BUF_TYPE_PARM_BUF, 33056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamHeap->getFd(0), 33066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(parm_buffer_t)); 33076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(rc < 0) { 33086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:failed to map SETPARM buffer",__func__); 33096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = FAILED_TRANSACTION; 33106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev goto TRANS_INIT_ERROR2; 33116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 33126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamBuf = (parm_buffer_t*) DATA_PTR(m_pParamHeap,0); 33136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev initDefaultParameters(); 33156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev goto TRANS_INIT_DONE; 33176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevTRANS_INIT_ERROR2: 33196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamHeap->deallocate(); 33206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevTRANS_INIT_ERROR1: 33226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev delete m_pParamHeap; 33236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamHeap = NULL; 33246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevTRANS_INIT_DONE: 33266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 33276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 33286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 33306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : deinit 33316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 33326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: deinitialize 33336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 33346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 33356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 33366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 33376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 33386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::deinit() 33396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 33406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //clear all entries in the map 33416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 emptyStr; 33426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev QCameraParameters::unflatten(emptyStr); 33436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL != m_pCamOpsTbl) { 33456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCamOpsTbl->ops->unmap_buf( 33466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCamOpsTbl->camera_handle, 33476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_MAPPING_BUF_TYPE_PARM_BUF); 33486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCamOpsTbl = NULL; 33496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 33506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability = NULL; 33516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL != m_pParamHeap) { 33526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamHeap->deallocate(); 33536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev delete m_pParamHeap; 33546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamHeap = NULL; 33556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pParamBuf = NULL; 33566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 33576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_tempMap.clear(); 33596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 33606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 33626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : parse_pair 33636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 33646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: helper function to parse string like "640x480" or "10000,20000" 33656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 33666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 33676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @str : input string to be parse 33686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @first : [output] first value of the pair 33696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @second : [output] second value of the pair 33706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @delim : [input] delimeter to seperate the pair 33716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @endptr : [output] ptr to the end of the pair string 33726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 33736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 33746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 33756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 33766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 33776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::parse_pair(const char *str, 33786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int *first, 33796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int *second, 33806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char delim, 33816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char **endptr = NULL) 33826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 33836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Find the first integer. 33846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *end; 33856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int w = (int)strtol(str, &end, 10); 33866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // If a delimeter does not immediately follow, give up. 33876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (*end != delim) { 33886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Cannot find delimeter (%c) in str=%s", delim, str); 33896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 33906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 33916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Find the second integer, immediately after the delimeter. 33936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int h = (int)strtol(end+1, &end, 10); 33946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *first = w; 33966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *second = h; 33976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 33986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (endptr) { 33996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *endptr = end; 34006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 34016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 34036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 34046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 34066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : parseSizesList 34076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: helper function to parse string containing sizes 34096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 34116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @sizesStr: [input] input string to be parse 34126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @sizes : [output] reference to store parsed sizes 34136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 34156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 34166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::parseSizesList(const char *sizesStr, Vector<Size> &sizes) 34176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 34186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (sizesStr == 0) { 34196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return; 34206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 34216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *sizeStartPtr = (char *)sizesStr; 34236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev while (true) { 34256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int width, height; 34266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int success = parse_pair(sizeStartPtr, &width, &height, 'x', 34276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &sizeStartPtr); 34286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (success == -1 || (*sizeStartPtr != ',' && *sizeStartPtr != '\0')) { 34296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Picture sizes string \"%s\" contains invalid character.", sizesStr); 34306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return; 34316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 34326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizes.push(Size(width, height)); 34336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (*sizeStartPtr == '\0') { 34356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return; 34366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 34376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeStartPtr++; 34386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 34396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 34406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 34426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getSupportedHfrSizes 34436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: return supported HFR sizes 34456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 34476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @sizes : [output] reference to a vector storing supported HFR sizes 34486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 34506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 34516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::getSupportedHfrSizes(Vector<Size> &sizes) 34526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 34536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *hfrSizesStr = get(KEY_QC_SUPPORTED_HFR_SIZES); 34546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev parseSizesList(hfrSizesStr, sizes); 34556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 34566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 34586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : adjustPreviewFpsRanges 34596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: adjust preview FPS ranges 34616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * according to external events 34626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 34646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @minFPS : min FPS value 34656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @maxFPS : max FPS value 34666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 34676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 34686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 34696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 34706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 34716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::adjustPreviewFpsRange(cam_fps_range_t *fpsRange) 34726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 34736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ( fpsRange == NULL ) { 34746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 34756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 34766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 3477744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if ( m_pParamBuf == NULL ) { 3478744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return NO_INIT; 3479744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 3480744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 34816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = initBatchUpdate(m_pParamBuf); 34826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ( rc != NO_ERROR ) { 34836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to initialize group update table", __func__); 34846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 34856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 34866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = AddSetParmEntryToBatch(m_pParamBuf, 34886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_FPS_RANGE, 34896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(cam_fps_range_t), 34906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fpsRange); 34916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ( rc != NO_ERROR ) { 34926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Parameters batch failed",__func__); 34936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 34946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 34956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 34966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = commitSetBatch(); 34976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ( rc != NO_ERROR ) { 34986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to commit batch parameters", __func__); 34996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 35006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 35016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 35026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 35036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 35046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 35056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 35066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setPreviewFpsRanges 35076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set preview FPS ranges 35096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 35116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @minFPS : min FPS value 35126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @maxFPS : max FPS value 35136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 35156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 35166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 35176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 35186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setPreviewFpsRange(int minFPS, int maxFPS) 35196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 35206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char str[32]; 35216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(str, sizeof(str), "%d,%d", minFPS, maxFPS); 35226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting preview fps range %s", __func__, str); 35236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_PREVIEW_FPS_RANGE, str); 35246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_fps_range_t fps_range = {(float)(minFPS / 1000.0), (float)(maxFPS / 1000.0)}; 35256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 35266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_FPS_RANGE, 35276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(cam_fps_range_t), 35286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &fps_range); 35296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 35306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 35316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 35326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAutoExposure 35336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set auto exposure 35356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 35376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @autoExp : auto exposure value string 35386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 35406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 35416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 35426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 35436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAutoExposure(const char *autoExp) 35446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 35456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (autoExp != NULL) { 35466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(AUTO_EXPOSURE_MAP, 35476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(AUTO_EXPOSURE_MAP)/sizeof(AUTO_EXPOSURE_MAP[0]), 35486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev autoExp); 35496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 35506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting auto exposure %s", __func__, autoExp); 35516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_AUTO_EXPOSURE, autoExp); 35526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 35536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_AEC_ALGO_TYPE, 35546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 35556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 35566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 35576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 35586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid auto exposure value: %s", (autoExp == NULL) ? "NULL" : autoExp); 35596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 35606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 35616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 35626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 35636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setEffect 35646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set effect 35666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 35686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @effect : effect value string 35696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 35716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 35726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 35736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 35746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setEffect(const char *effect) 35756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 35766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (effect != NULL) { 35776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(EFFECT_MODES_MAP, 35786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(EFFECT_MODES_MAP)/sizeof(QCameraMap), 35796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev effect); 35806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 35816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting effect %s", __func__, effect); 35826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_EFFECT, effect); 35836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 35846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_EFFECT, 35856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 35866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 35876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 35886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 35896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid effect value: %s", (effect == NULL) ? "NULL" : effect); 35906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 35916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 35926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 35936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 35946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setBrightness 35956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set brightness control value 35976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 35986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 35996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @brightness : brightness control value 36006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 36026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 36036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 36046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 36056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setBrightness(int brightness) 36066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 36076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char val[16]; 36086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sprintf(val, "%d", brightness); 36096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_BRIGHTNESS, val); 36106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 36116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = brightness; 36126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting brightness %s", __func__, val); 36136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 36146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_BRIGHTNESS, 36156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 36166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 36176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 36186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 36196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 36206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFocusMode 36216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set focus mode 36236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 36256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @focusMode : focus mode value string 36266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 36286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 36296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 36306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 36316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFocusMode(const char *focusMode) 36326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 36336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (focusMode != NULL) { 36346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(FOCUS_MODES_MAP, 36356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FOCUS_MODES_MAP)/sizeof(QCameraMap), 36366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev focusMode); 36376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 36386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting focus mode %s", __func__, focusMode); 36396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mFocusMode = (cam_focus_mode_type)value; 36406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 36416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // reset need lock CAF flag 36426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedLockCAF = false; 36436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bCAFLocked = false; 36446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bAFRunning = false; 36456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 36466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_FOCUS_MODE, focusMode); 36476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 36486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_FOCUS_MODE, 36496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 36506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 36516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 36526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 36536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid focus mode value: %s", (focusMode == NULL) ? "NULL" : focusMode); 36546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 36556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 36566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 36576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 36586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSharpness 36596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set sharpness control value 36616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 36636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @sharpness : sharpness control value 36646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 36666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 36676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 36686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 36696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSharpness(int sharpness) 36706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 36716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char val[16]; 36726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sprintf(val, "%d", sharpness); 36736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_SHARPNESS, val); 36746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting sharpness %s", __func__, val); 36756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 36766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = sharpness; 36776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 36786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_SHARPNESS, 36796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 36806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 36816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 36826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 36836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 36846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSkinToneEnhancement 36856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set skin tone enhancement value 36876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 36896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @sceFactore : skin tone enhancement factor value 36906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 36916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 36926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 36936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 36946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 36956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSkinToneEnhancement(int sceFactor) 36966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 36976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char val[16]; 36986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sprintf(val, "%d", sceFactor); 36996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_SCE_FACTOR, val); 37006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting skintone enhancement %s", __func__, val); 37016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 37026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = sceFactor; 37036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 37046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_SCE_FACTOR, 37056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 37066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 37076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 37086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 37096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 37106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSaturation 37116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set saturation control value 37136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 37156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @saturation : saturation control value 37166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 37186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 37196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 37206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 37216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSaturation(int saturation) 37226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 37236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char val[16]; 37246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sprintf(val, "%d", saturation); 37256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_SATURATION, val); 37266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting saturation %s", __func__, val); 37276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 37286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = saturation; 37296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 37306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_SATURATION, 37316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 37326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 37336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 37346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 37356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 37366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setContrast 37376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set contrast control value 37396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 37416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @contrast : contrast control value 37426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 37446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 37456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 37466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 37476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setContrast(int contrast) 37486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 37496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char val[16]; 37506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sprintf(val, "%d", contrast); 37516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_CONTRAST, val); 37526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting contrast %s", __func__, val); 37536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 37546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = contrast; 37556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 37566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_CONTRAST, 37576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 37586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 37596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 37606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 37616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 37626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSceneDetect 37636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set scenen detect value 37656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 37676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @sceneDetect : scene detect value string 37686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 37696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 37706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 37716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 37726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 37736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSceneDetect(const char *sceneDetect) 37746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 37756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (sceneDetect != NULL) { 37766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ON_OFF_MODES_MAP, 37776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ON_OFF_MODES_MAP)/sizeof(QCameraMap), 37786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sceneDetect); 37796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 37806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting Scene Detect %s", __func__, sceneDetect); 37816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_SCENE_DETECT, sceneDetect); 37826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 37836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_ASD_ENABLE, 37846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 37856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 37866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 37876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 37886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid Scene Detect value: %s", 37896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (sceneDetect == NULL) ? "NULL" : sceneDetect); 37906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 37916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 37926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 37936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 37942f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * FUNCTION : setVideoHDR 37952f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * 37962f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * DESCRIPTION: set video HDR value 37972f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * 37982f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * PARAMETERS : 37992f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * @videoHDR : svideo HDR value string 38002f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * 38012f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * RETURN : int32_t type of status 38022f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * NO_ERROR -- success 38032f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li * none-zero failure code 38042f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li *==========================================================================*/ 38052f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Liint32_t QCameraParameters::setVideoHDR(const char *videoHDR) 38062f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li{ 38072f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li if (videoHDR != NULL) { 38082f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li int32_t value = lookupAttr(ON_OFF_MODES_MAP, 38092f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li sizeof(ON_OFF_MODES_MAP)/sizeof(QCameraMap), 38102f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li videoHDR); 38112f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li if (value != NAME_NOT_FOUND) { 38122f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li ALOGD("%s: Setting Video HDR %s", __func__, videoHDR); 38132f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li updateParamEntry(KEY_QC_VIDEO_HDR, videoHDR); 38142f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li return AddSetParmEntryToBatch(m_pParamBuf, 38152f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li CAM_INTF_PARM_VIDEO_HDR, 38162f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li sizeof(value), 38172f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li &value); 38182f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li } 38192f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li } 38202f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li ALOGE("Invalid Video HDR value: %s", 38212f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li (videoHDR == NULL) ? "NULL" : videoHDR); 38222f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li return BAD_VALUE; 38232f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li} 38242f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li 38252f073d4cfa214187fc326377a1e0eecad84eaf3dMuhua Li/*=========================================================================== 38266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFaceRecognition 38276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 38286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set face recognition value 38296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 38306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 38316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @faceRecog : face recognition value string 38326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @maxFaces : number of max faces to be detected/recognized 38336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 38346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 38356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 38366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 38376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 38386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFaceRecognition(const char *faceRecog, int maxFaces) 38396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 38406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (faceRecog != NULL) { 38416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ON_OFF_MODES_MAP, 38426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ON_OFF_MODES_MAP)/sizeof(QCameraMap), 38436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceRecog); 38446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 38456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting face recognition %s", __func__, faceRecog); 38466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_FACE_RECOGNITION, faceRecog); 38476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 38486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int faceProcMask = m_nFaceProcMask; 38496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value > 0) { 38506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceProcMask |= CAM_FACE_PROCESS_MASK_RECOGNITION; 38516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 38526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceProcMask &= ~CAM_FACE_PROCESS_MASK_RECOGNITION; 38536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 38546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 38556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(m_nFaceProcMask == faceProcMask) { 38566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: face process mask not changed, no ops here", __func__); 38576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 38586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 38596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_nFaceProcMask = faceProcMask; 38606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: FaceProcMask -> %d", __func__, m_nFaceProcMask); 38616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 38626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // set parm for face process 38636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_fd_set_parm_t fd_set_parm; 38646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&fd_set_parm, 0, sizeof(cam_fd_set_parm_t)); 38656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fd_set_parm.fd_mode = m_nFaceProcMask; 38666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fd_set_parm.num_fd = maxFaces; 38676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 38686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 38696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_FD, 38706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(fd_set_parm), 38716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &fd_set_parm); 38726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 38736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 38746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid face recognition value: %s", (faceRecog == NULL) ? "NULL" : faceRecog); 38756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 38766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 38776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 38786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 38796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setZoom 38806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 38816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set zoom level 38826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 38836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 38846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @zoom_level : zoom level 38856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 38866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 38876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 38886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 38896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 38906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setZoom(int zoom_level) 38916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 38926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char val[16]; 38936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sprintf(val, "%d", zoom_level); 38946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_ZOOM, val); 38956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 38966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 38976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_ZOOM, 38986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(zoom_level), 38996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &zoom_level); 39006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 39016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 39026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 39036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setISOValue 39046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set ISO value 39066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 39086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @isoValue : ISO value string 39096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 39116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 39126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 39136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 39146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setISOValue(const char *isoValue) 39156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 39166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (isoValue != NULL) { 39176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ISO_MODES_MAP, 39186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ISO_MODES_MAP)/sizeof(QCameraMap), 39196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev isoValue); 39206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 39216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting ISO value %s", __func__, isoValue); 39226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_ISO_MODE, isoValue); 39236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 39246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_ISO, 39256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 39266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 39276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 39286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 39296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid ISO value: %s", 39306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (isoValue == NULL) ? "NULL" : isoValue); 39316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 39326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 39336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 39346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 39356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFlash 39366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set f;ash mode 39386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 39406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @flashStr : LED flash mode value string 39416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 39436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 39446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 39456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 39466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFlash(const char *flashStr) 39476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 39486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (flashStr != NULL) { 39496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(FLASH_MODES_MAP, 39506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FLASH_MODES_MAP)/sizeof(QCameraMap), 39516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev flashStr); 39526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 39536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting Flash value %s", __func__, flashStr); 39546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_FLASH_MODE, flashStr); 39556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 39566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_LED_MODE, 39576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 39586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 39596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 39606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 39616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid flash value: %s", (flashStr == NULL) ? "NULL" : flashStr); 39626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 39636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 39646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 39656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 39666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAecLock 39676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set AEC lock value 39696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 39716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @aecLockStr : AEC lock value string 39726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 39746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 39756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 39766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 39776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAecLock(const char *aecLockStr) 39786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 39796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (aecLockStr != NULL) { 39806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(TRUE_FALSE_MODES_MAP, 39816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(TRUE_FALSE_MODES_MAP)/sizeof(QCameraMap), 39826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev aecLockStr); 39836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 39846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting AECLock value %s", __func__, aecLockStr); 39856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_AUTO_EXPOSURE_LOCK, aecLockStr); 39866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 39876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_AEC_LOCK, 39886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 39896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 39906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 39916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 39926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid AECLock value: %s", (aecLockStr == NULL) ? "NULL" : aecLockStr); 39936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 39946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 39956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 39966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 39976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAwbLock 39986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 39996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set AWB lock value 40006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 40026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @awbLockStr : AWB lock value string 40036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 40056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 40066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 40076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 40086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAwbLock(const char *awbLockStr) 40096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 40106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (awbLockStr != NULL) { 40116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(TRUE_FALSE_MODES_MAP, 40126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(TRUE_FALSE_MODES_MAP)/sizeof(QCameraMap), 40136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev awbLockStr); 40146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 40156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting AWBLock value %s", __func__, awbLockStr); 40166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_AUTO_WHITEBALANCE_LOCK, awbLockStr); 40176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 40186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_AWB_LOCK, 40196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 40206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 40216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 40226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 40236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid AWBLock value: %s", (awbLockStr == NULL) ? "NULL" : awbLockStr); 40246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 40256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 40266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 40276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 40286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setMCEValue 40296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set memory color enhancement value 40316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 40336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @mceStr : MCE value string 40346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 40366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 40376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 40386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 40396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setMCEValue(const char *mceStr) 40406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 40416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (mceStr != NULL) { 40426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 40436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ENABLE_DISABLE_MODES_MAP)/sizeof(QCameraMap), 40446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev mceStr); 40456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 40466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting AWBLock value %s", __func__, mceStr); 40476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_MEMORY_COLOR_ENHANCEMENT, mceStr); 40486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 40496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_MCE, 40506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 40516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 40526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 40536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 40546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid MCE value: %s", (mceStr == NULL) ? "NULL" : mceStr); 40556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 40566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 40576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 40586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 40596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setDISValue 40606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set DIS value 40626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 40646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @disStr : DIS value string 40656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 40676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 40686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 40696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 40706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setDISValue(const char *disStr) 40716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 40726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (disStr != NULL) { 40736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 40746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ENABLE_DISABLE_MODES_MAP)/sizeof(QCameraMap), 40756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev disStr); 40766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 40776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting DIS value %s", __func__, disStr); 40786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_DIS, disStr); 40796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 40806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_DIS_ENABLE, 40816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 40826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 40836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 40846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 40856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid DIS value: %s", (disStr == NULL) ? "NULL" : disStr); 40866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 40876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 40886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 40896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 40906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setHighFrameRate 40916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set high frame rate 40936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 40956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @hfrStr : HFR value string 40966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 40976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 40986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 40996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 41006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 41016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setHighFrameRate(const char *hfrStr) 41026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 41036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (hfrStr != NULL) { 41046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(HFR_MODES_MAP, 41056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(HFR_MODES_MAP)/sizeof(QCameraMap), 41066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev hfrStr); 41076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 41086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // HFR value changed, need to restart preview 41096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bNeedRestart = true; 41106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Set HFR value 41116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting HFR value %s", __func__, hfrStr); 41126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_VIDEO_HIGH_FRAME_RATE, hfrStr); 41136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 41146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_HFR, 41156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 41166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 41176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 41186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 41196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid HFR value: %s", (hfrStr == NULL) ? "NULL" : hfrStr); 41206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 41216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 41226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 41236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 41246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setLensShadeValue 41256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set lens shade value 41276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 41296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @lensSahdeStr : lens shade value string 41306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 41326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 41336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 41346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 41356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setLensShadeValue(const char *lensShadeStr) 41366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 41376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (lensShadeStr != NULL) { 41386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 41396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ENABLE_DISABLE_MODES_MAP)/sizeof(QCameraMap), 41406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev lensShadeStr); 41416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 41426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting LensShade value %s", __func__, lensShadeStr); 41436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_LENSSHADE, lensShadeStr); 41446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 41456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_ROLLOFF, 41466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 41476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 41486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 41496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 41506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid LensShade value: %s", 41516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (lensShadeStr == NULL) ? "NULL" : lensShadeStr); 41526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 41536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 41546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 41556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 41566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setExposureCompensation 41576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set exposure compensation value 41596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 41616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @expComp : exposure compensation value 41626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 41646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 41656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 41666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 41676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setExposureCompensation(int expComp) 41686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 41696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char val[16]; 41706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sprintf(val, "%d", expComp); 41716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_EXPOSURE_COMPENSATION, val); 41726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 41736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Don't need to pass step as part of setParameter because 41746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // camera daemon is already aware of it. 41756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 41766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_EXPOSURE_COMPENSATION, 41776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(expComp), 41786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &expComp); 41796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 41806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 41816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 41826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setWhiteBalance 41836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set white balance mode 41856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 41876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @wbStr : white balance mode value string 41886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 41896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 41906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 41916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 41926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 41936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setWhiteBalance(const char *wbStr) 41946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 41956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (wbStr != NULL) { 41966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(WHITE_BALANCE_MODES_MAP, 41976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(WHITE_BALANCE_MODES_MAP)/sizeof(QCameraMap), 41986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev wbStr); 41996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 42006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting WhiteBalance value %s", __func__, wbStr); 42016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_WHITE_BALANCE, wbStr); 42026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 42036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_WHITE_BALANCE, 42046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 42056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 42066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid WhiteBalance value: %s", (wbStr == NULL) ? "NULL" : wbStr); 42096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 42106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 42116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 42126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 42136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAntibanding 42146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 42156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set antibanding value 42166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 42176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 42186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @antiBandingStr : antibanding value string 42196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 42206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 42216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 42226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 42236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 42246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAntibanding(const char *antiBandingStr) 42256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 42266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (antiBandingStr != NULL) { 42276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ANTIBANDING_MODES_MAP, 42286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ANTIBANDING_MODES_MAP)/sizeof(QCameraMap), 42296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev antiBandingStr); 42306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 42316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Setting AntiBanding value %s", __func__, antiBandingStr); 42326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_ANTIBANDING, antiBandingStr); 42336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 42346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_ANTIBANDING, 42356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 42366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 42376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("Invalid AntiBanding value: %s", 42406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (antiBandingStr == NULL) ? "NULL" : antiBandingStr); 42416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 42426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 42436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 42446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 42456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFocusAreas 42466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 42476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set focus areas 42486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 42496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 42506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @focusAreasStr : focus areas value string 42516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 42526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 42536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 42546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 42556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 42566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFocusAreas(const char *focusAreasStr) 42576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 42586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->max_num_focus_areas == 0 || 42596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev focusAreasStr == NULL) { 42606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: Parameter string is null", __func__); 42616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 42626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 42646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_area_t *areas = (cam_area_t *)malloc(sizeof(cam_area_t) * m_pCapability->max_num_focus_areas); 42656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL == areas) { 42666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: No memory for areas", __func__); 42676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_MEMORY; 42686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(areas, 0, sizeof(cam_area_t) * m_pCapability->max_num_focus_areas); 42706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int num_areas_found = 0; 42716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (parseCameraAreaString(focusAreasStr, 42726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->max_num_focus_areas, 42736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas, 42746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev num_areas_found) != NO_ERROR) { 42756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Failed to parse the string: %s", __func__, focusAreasStr); 42766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(areas); 42776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 42786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 42806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (validateCameraAreas(areas, num_areas_found) == false) { 42816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid areas specified : %s", __func__, focusAreasStr); 42826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(areas); 42836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 42846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 42866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_FOCUS_AREAS, focusAreasStr); 42876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 42886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //for special area string (0, 0, 0, 0, 0), set the num_areas_found to 0, 42896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //so no action is takenby the lower layer 42906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (num_areas_found == 1 && 42916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.left == 0 && 42926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.top == 0 && 42936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.width == 0 && 42946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.height == 0 && 42956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].weight == 0) { 42966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev num_areas_found = 0; 42976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 42986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 42996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int previewWidth, previewHeight; 43006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getPreviewSize(&previewWidth, &previewHeight); 43016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_roi_info_t af_roi_value; 43026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&af_roi_value, 0, sizeof(cam_roi_info_t)); 43036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev af_roi_value.num_roi = num_areas_found; 43046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < num_areas_found; i++) { 43056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: FocusArea[%d] = (%d, %d, %d, %d)", 43066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, i, (areas[i].rect.top), (areas[i].rect.left), 43076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (areas[i].rect.width), (areas[i].rect.height)); 43086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //transform the coords from (-1000, 1000) to (0, previewWidth or previewHeight) 43106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev af_roi_value.roi[i].left = (int32_t)((areas[i].rect.left + 1000.0f) * (previewWidth / 2000.0f)); 43116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev af_roi_value.roi[i].top = (int32_t)((areas[i].rect.top + 1000.0f) * (previewHeight / 2000.0f)); 43126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev af_roi_value.roi[i].width = (int32_t)(areas[i].rect.width * previewWidth / 2000.0f); 43136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev af_roi_value.roi[i].height = (int32_t)(areas[i].rect.height * previewHeight / 2000.0f); 43146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev af_roi_value.weight[i] = areas[i].weight; 43156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 43166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(areas); 43176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 43186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_AF_ROI, 43196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(af_roi_value), 43206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &af_roi_value); 43216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 43226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 43246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setMeteringAreas 43256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 43266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set metering areas value 43276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 43286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 43296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @meteringAreasStr : metering areas value string 43306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 43316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 43326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 43336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 43346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 43356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setMeteringAreas(const char *meteringAreasStr) 43366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 43376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pCapability->max_num_metering_areas == 0 || 43386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev meteringAreasStr == NULL) { 43396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: Parameter string is null", __func__); 43406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 43416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 43426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_area_t *areas = (cam_area_t *)malloc(sizeof(cam_area_t) * m_pCapability->max_num_metering_areas); 43446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL == areas) { 43456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: No memory for areas", __func__); 43466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_MEMORY; 43476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 43486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(areas, 0, sizeof(cam_area_t) * m_pCapability->max_num_metering_areas); 43496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int num_areas_found = 0; 43506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (parseCameraAreaString(meteringAreasStr, 43516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_pCapability->max_num_metering_areas, 43526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas, 43536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev num_areas_found) < 0) { 43546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Failed to parse the string: %s", __func__, meteringAreasStr); 43556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(areas); 43566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 43576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 43586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (validateCameraAreas(areas, num_areas_found) == false) { 43606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid areas specified : %s", __func__, meteringAreasStr); 43616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(areas); 43626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 43636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 43646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_METERING_AREAS, meteringAreasStr); 43666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //for special area string (0, 0, 0, 0, 0), set the num_areas_found to 0, 43686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //so no action is takenby the lower layer 43696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (num_areas_found == 1 && 43706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.left == 0 && 43716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.top == 0 && 43726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.width == 0 && 43736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.height == 0 && 43746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].weight == 0) { 43756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev num_areas_found = 0; 43766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 43776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_set_aec_roi_t aec_roi_value; 43786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int previewWidth, previewHeight; 43796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getPreviewSize(&previewWidth, &previewHeight); 43806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&aec_roi_value, 0, sizeof(cam_set_aec_roi_t)); 43826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (num_areas_found > 0) { 43836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev aec_roi_value.aec_roi_enable = CAM_AEC_ROI_ON; 43846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev aec_roi_value.aec_roi_type = CAM_AEC_ROI_BY_COORDINATE; 43856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (int i = 0; i < num_areas_found; i++) { 43876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: MeteringArea[%d] = (%d, %d, %d, %d)", 43886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, i, (areas[i].rect.top), (areas[i].rect.left), 43896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (areas[i].rect.width), (areas[i].rect.height)); 43906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 43916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //transform the coords from (-1000, 1000) to (0, previewWidth or previewHeight) 43926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev aec_roi_value.cam_aec_roi_position.coordinate[i].x = 43936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (uint32_t)(((areas[i].rect.left + areas[i].rect.width / 2) + 1000.0f) * previewWidth / 2000.0f) ; 43946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev aec_roi_value.cam_aec_roi_position.coordinate[i].y = 43956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (uint32_t)(((areas[i].rect.top + areas[i].rect.height / 2) + 1000.0f) * previewHeight / 2000.0f) ; 43966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 43976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 43986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev aec_roi_value.aec_roi_enable = CAM_AEC_ROI_OFF; 43996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 44006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev free(areas); 44016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 44026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_AEC_ROI, 44036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(aec_roi_value), 44046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &aec_roi_value); 44056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 44066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 44076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 44086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSceneMode 44096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set scene mode 44116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 44136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @sceneModeStr : scene mode value string 44146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 44166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 44176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 44186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 44196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSceneMode(const char *sceneModeStr) 44206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 44216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (sceneModeStr != NULL) { 44226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(SCENE_MODES_MAP, 44236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(SCENE_MODES_MAP)/sizeof(QCameraMap), 44246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sceneModeStr); 44256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 44266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: Setting SceneMode %s", __func__, sceneModeStr); 44276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_SCENE_MODE, sceneModeStr); 44286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = AddSetParmEntryToBatch(m_pParamBuf, 44296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_BESTSHOT_MODE, 44306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 44316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 44326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 44336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 44346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 44356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid Secene Mode: %s", 44366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, (sceneModeStr == NULL) ? "NULL" : sceneModeStr); 44376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 44386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 44396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 44406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 44416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setSelectableZoneAf 44426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set selectable zone AF algorithm 44446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 44466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @selZoneAFStr : selectable zone AF algorithm value string 44476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 44496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 44506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 44516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 44526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setSelectableZoneAf(const char *selZoneAFStr) 44536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 44546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (selZoneAFStr != NULL) { 44556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(FOCUS_ALGO_MAP, 44566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FOCUS_ALGO_MAP)/sizeof(QCameraMap), 44576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev selZoneAFStr); 44586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 44596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: Setting Selectable Zone AF value %s", __func__, selZoneAFStr); 44606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_SELECTABLE_ZONE_AF, selZoneAFStr); 44616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 44626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_FOCUS_ALGO_TYPE, 44636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 44646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 44656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 44666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 44676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid selectable zone af value: %s", 44686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, (selZoneAFStr == NULL) ? "NULL" : selZoneAFStr); 44696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 44706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 44716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 44726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 44736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setAEBracket 44746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set AE bracket value 44766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 44786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @aecBracketStr : AE bracket value string 44796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 44806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 44816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 44826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 44836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 44846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setAEBracket(const char *aecBracketStr) 44856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 44866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (aecBracketStr == NULL) { 44876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: setAEBracket with NULL value", __func__); 44886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 44896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 44906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 44916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_exp_bracketing_t expBracket; 44926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&expBracket, 0, sizeof(expBracket)); 44936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 44946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int value = lookupAttr(BRACKETING_MODES_MAP, 44956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(BRACKETING_MODES_MAP)/sizeof(QCameraMap), 44966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev aecBracketStr); 44976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (value) { 44986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_EXP_BRACKETING_ON: 44996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 45006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s, EXP_BRACKETING_ON", __func__); 45016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str_val = get(KEY_QC_CAPTURE_BURST_EXPOSURE); 45026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if ((str_val != NULL) && (strlen(str_val)>0)) { 45036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev expBracket.mode = CAM_EXP_BRACKETING_ON; 45046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strlcpy(expBracket.values, str_val, MAX_EXP_BRACKETING_LENGTH); 45056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: setting Exposure Bracketing value of %s", 45066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, expBracket.values); 45076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 45086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev else { 45096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* Apps not set capture-burst-exposures, error case fall into bracketing off mode */ 45106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: capture-burst-exposures not set, back to HDR OFF mode", __func__); 45116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev expBracket.mode = CAM_EXP_BRACKETING_OFF; 45126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 45136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 45146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 45156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 45166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev { 45176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s, EXP_BRACKETING_OFF", __func__); 45186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev expBracket.mode = CAM_EXP_BRACKETING_OFF; 45196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 45206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 45216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 45226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 45236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* save the value*/ 45246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_AE_BRACKET_HDR, aecBracketStr); 45256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 45266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_HDR, 45276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(expBracket), 45286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &expBracket); 45296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 45306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 45316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 45326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setRedeyeReduction 45336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 45346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set red eye reduction value 45356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 45366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 45376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @redeyeStr : red eye reduction value string 45386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 45396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 45406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 45416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 45426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 45436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setRedeyeReduction(const char *redeyeStr) 45446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 45456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (redeyeStr != NULL) { 45466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 45476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ENABLE_DISABLE_MODES_MAP)/sizeof(QCameraMap), 45486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev redeyeStr); 45496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 45506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGV("%s: Setting RedEye Reduce value %s", __func__, redeyeStr); 45516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_REDEYE_REDUCTION, redeyeStr); 45526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 45536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_REDEYE_REDUCTION, 45546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 45556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 45566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 45576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 45586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid RedEye Reduce value: %s", 45596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, (redeyeStr == NULL) ? "NULL" : redeyeStr); 45606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 45616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 45626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 45636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 45646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getWaveletDenoiseProcessPlate 45656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 45666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: query wavelet denoise process plate 45676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 45686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : None 45696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 45706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : WNR prcocess plate vlaue 45716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 45726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevcam_denoise_process_type_t QCameraParameters::getWaveletDenoiseProcessPlate() 45736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 45746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char prop[PROPERTY_VALUE_MAX]; 45756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(prop, 0, sizeof(prop)); 45766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.denoise.process.plates", prop, "0"); 45776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int processPlate = atoi(prop); 45786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch(processPlate) { 45796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case 0: 45806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return CAM_WAVELET_DENOISE_YCBCR_PLANE; 45816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case 1: 45826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return CAM_WAVELET_DENOISE_CBCR_ONLY; 45836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case 2: 45846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return CAM_WAVELET_DENOISE_STREAMLINE_YCBCR; 45856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case 3: 45866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return CAM_WAVELET_DENOISE_STREAMLINED_CBCR; 45876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 45886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return CAM_WAVELET_DENOISE_STREAMLINE_YCBCR; 45896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 45906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 45916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 45926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 45936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setWaveletDenoise 45946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 45956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set wavelet denoise value 45966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 45976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 45986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @wnrStr : wavelet denoise value string 45996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 46016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 46026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 46036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 46046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setWaveletDenoise(const char *wnrStr) 46056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 46066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (wnrStr != NULL) { 46076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int value = lookupAttr(DENOISE_ON_OFF_MODES_MAP, 46086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(DENOISE_ON_OFF_MODES_MAP)/sizeof(QCameraMap), 46096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev wnrStr); 46106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (value != NAME_NOT_FOUND) { 46116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev updateParamEntry(KEY_QC_DENOISE, wnrStr); 46126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 46136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_denoise_param_t temp; 46146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&temp, 0, sizeof(temp)); 46156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev temp.denoise_enable = value; 46166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bWNROn = (value != 0); 46176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_bWNROn) { 46186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev temp.process_plates = getWaveletDenoiseProcessPlate(); 46196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 46206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: Denoise enable=%d, plates=%d", 46216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, temp.denoise_enable, temp.process_plates); 46226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 46236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_WAVELET_DENOISE, 46246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(temp), 46256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &temp); 46266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 46276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 46286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid Denoise value: %s", __func__, (wnrStr == NULL) ? "NULL" : wnrStr); 46296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 46306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 46316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 46326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 46336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setPreviewFrameRateMode 46346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set preview frame rate mode 46366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 46386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @mode : preview frame rate mode 46396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 46416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 46426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::setPreviewFrameRateMode(const char *mode) 46436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 46446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_PREVIEW_FRAME_RATE_MODE, mode); 46456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 46466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 46476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 46486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getPreviewFrameRateMode 46496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get preview frame rate mode 46516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 46536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : preview frame rate mode string 46556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 46566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevconst char *QCameraParameters::getPreviewFrameRateMode() const 46576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 46586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return get(KEY_QC_PREVIEW_FRAME_RATE_MODE); 46596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 46606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 46616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 46626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setTouchIndexAec 46636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set touch index AEC 46656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 46676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @x,y : 46686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 46706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 46716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::setTouchIndexAec(int x, int y) 46726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 46736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char str[32]; 46746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(str, sizeof(str), "%dx%d", x, y); 46756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_TOUCH_INDEX_AEC, str); 46766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 46776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 46786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 46796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getTouchIndexAec 46806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get touch index AEC 46826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 46846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @x,y : 46856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 46866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 46876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 46886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::getTouchIndexAec(int *x, int *y) 46896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 46906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *x = -1; 46916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *y = -1; 46926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 46936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Get the current string, if it doesn't exist, leave the -1x-1 46946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *p = get(KEY_QC_TOUCH_INDEX_AEC); 46956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (p == 0) 46966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return; 46976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 46986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int tempX, tempY; 46996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (parse_pair(p, &tempX, &tempY, 'x') == 0) { 47006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *x = tempX; 47016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *y = tempY; 47026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 47036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 47046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 47056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 47066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setTouchIndexAf 47076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set touch index AF 47096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 47116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @x,y : 47126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 47146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 47156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::setTouchIndexAf(int x, int y) 47166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 47176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char str[32]; 47186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(str, sizeof(str), "%dx%d", x, y); 47196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(KEY_QC_TOUCH_INDEX_AF, str); 47206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 47216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 47226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 47236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getTouchIndexAf 47246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get touch index AF 47266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 47286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @x,y : 47296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 47316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 47326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::getTouchIndexAf(int *x, int *y) 47336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 47346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *x = -1; 47356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *y = -1; 47366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 47376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // Get the current string, if it doesn't exist, leave the -1x-1 47386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *p = get(KEY_QC_TOUCH_INDEX_AF); 47396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (p == 0) 47406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return; 47416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 47426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int tempX, tempY; 47436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (parse_pair(p, &tempX, &tempY, 'x') == 0) { 47446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *x = tempX; 47456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *y = tempY; 47466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 47476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 47486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 47496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 47506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getStreamFormat 47516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get stream format by its type 47536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 47556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @streamType : [input] stream type 47566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @format : [output] stream format 47576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 47586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 47596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 47606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 47616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 47626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getStreamFormat(cam_stream_type_t streamType, 47636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_format_t &format) 47646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 47656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t ret = NO_ERROR; 47666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 47676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev format = CAM_FORMAT_MAX; 47686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (streamType) { 47696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_PREVIEW: 47706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_POSTVIEW: 47716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev format = mPreviewFormat; 47726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 47736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_SNAPSHOT: 4774025ab8ca7a6d9228b3c8cc04a4f1741defe526edNagesh Subba Reddy case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT: 47757fde32d818742141a39fda194e66b84109182affEmilian Peev if ( mPictureFormat == CAM_FORMAT_YUV_422_NV16 ) { 47767fde32d818742141a39fda194e66b84109182affEmilian Peev format = CAM_FORMAT_YUV_422_NV16; 47777fde32d818742141a39fda194e66b84109182affEmilian Peev } else { 47781c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li char prop[PROPERTY_VALUE_MAX]; 47791c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li int snapshotFormat; 47801c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li memset(prop, 0, sizeof(prop)); 47811c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li property_get("persist.camera.snap.format", prop, "0"); 47821c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li snapshotFormat = atoi(prop); 47831c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li if(snapshotFormat == 1) { 47841c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li format = CAM_FORMAT_YUV_422_NV61; 47851c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li } else { 47861c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li format = CAM_FORMAT_YUV_420_NV21; 47871c6f92e72d612b773c8e92da909bbb64aaae0b57Muhua Li } 47887fde32d818742141a39fda194e66b84109182affEmilian Peev } 47896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 47906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_VIDEO: 47916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev format = CAM_FORMAT_YUV_420_NV12; 47926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 47936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_RAW: 47946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (mPictureFormat >= CAM_FORMAT_YUV_RAW_8BIT_YUYV) { 47956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev format = (cam_format_t)mPictureFormat; 47966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 47976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: invalid raw picture format: %d", __func__, mPictureFormat); 47986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ret = BAD_VALUE; 47996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 48006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_METADATA: 48026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_OFFLINE_PROC: 48036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_DEFAULT: 48046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 48056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 48076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 48086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return ret; 48096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 48106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 48116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 48126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getFlipMode 48136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 48146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get flip mode 48156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 48166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 48176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @cam_intf_parm_type_t : [input] stream type 48186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 48196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int type of flip mode 48206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 0 - no filp 48216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 1 - FLIP_H 48226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 2 - FLIP_V 48236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 3 - FLIP_H | FLIP_V 48246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 48256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getFlipMode(cam_stream_type_t type) 48266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 48276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = NULL; 48286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int flipMode = 0; // no flip 48296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 48306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch(type){ 48316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_PREVIEW: 48326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str = get(KEY_QC_PREVIEW_FLIP); 48336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_VIDEO: 48356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str = get(KEY_QC_VIDEO_FLIP); 48366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_SNAPSHOT: 4838025ab8ca7a6d9228b3c8cc04a4f1741defe526edNagesh Subba Reddy case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT: 48396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str = get(KEY_QC_SNAPSHOT_PICTURE_FLIP); 48406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 48426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGI("%s: No flip mode for stream type %d", __func__, type); 48436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 48456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 48466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL){ 48476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //Need give corresponding filp value based on flip mode strings 48486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int value = lookupAttr(FLIP_MODES_MAP, 48496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(FLIP_MODES_MAP)/sizeof(QCameraMap), str); 48506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(value != NAME_NOT_FOUND) 48516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev flipMode = value; 48526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 48536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 48546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: the filp mode of stream type %d is %d .", __func__, type, flipMode); 48556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return flipMode; 48566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 48576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 48586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 48596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getStreamDimension 48606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 48616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get stream dimension by its type 48626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 48636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 48646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @streamType : [input] stream type 48656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @dim : [output] stream dimension 48666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 48676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 48686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 48696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 48706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 48716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getStreamDimension(cam_stream_type_t streamType, 48726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_dimension_t &dim) 48736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 48746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t ret = NO_ERROR; 48756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&dim, 0, sizeof(cam_dimension_t)); 48766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 48776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (streamType) { 48786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_PREVIEW: 48796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getPreviewSize(&dim.width, &dim.height); 48806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_POSTVIEW: 48826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getPreviewSize(&dim.width, &dim.height); 48836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_SNAPSHOT: 4885025ab8ca7a6d9228b3c8cc04a4f1741defe526edNagesh Subba Reddy case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT: 48866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (getRecordingHintValue() == true) { 48876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // live snapshot 48886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getLiveSnapshotSize(dim); 48896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 48906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getPictureSize(&dim.width, &dim.height); 48916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 48926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_VIDEO: 48946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getVideoSize(&dim.width, &dim.height); 48956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_RAW: 48976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev dim = m_pCapability->raw_dim; 48986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 48996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_METADATA: 49006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev dim.width = sizeof(cam_metadata_info_t); 49016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev dim.height = 1; 49026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 49036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_OFFLINE_PROC: 49046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 49056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_STREAM_TYPE_DEFAULT: 49066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 49076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: no dimension for unsupported stream type %d", 49086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, streamType); 49096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ret = BAD_VALUE; 49106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 49116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 49126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return ret; 49136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 49146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 49156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 49166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getPreviewHalPixelFormat 49176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get preview HAL pixel format 49196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 49216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : HAL pixel format 49236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 49246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getPreviewHalPixelFormat() const 49256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 49266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t halPixelFormat; 49276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 49286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (mPreviewFormat) { 49296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_FORMAT_YUV_420_NV12: 49306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev halPixelFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP; 49316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 49326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_FORMAT_YUV_420_NV21: 49336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 49346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 49356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_FORMAT_YUV_420_NV21_ADRENO: 49366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO; 49376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 49386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_FORMAT_YUV_420_YV12: 49396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev halPixelFormat = HAL_PIXEL_FORMAT_YV12; 49406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 49416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_FORMAT_YUV_422_NV16: 49426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_FORMAT_YUV_422_NV61: 49436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev default: 49446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 49456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 49466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 49476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: format %d\n", __func__, halPixelFormat); 49486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return halPixelFormat; 49496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 49506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 49516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 49526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getthumbnailSize 49536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get thumbnail size 49556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 49576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @width, height : [output] thumbnail width and height 49586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : none 49606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 49616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevvoid QCameraParameters::getThumbnailSize(int *width, int *height) const 49626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 49636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *width = getInt(KEY_JPEG_THUMBNAIL_WIDTH); 49646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *height = getInt(KEY_JPEG_THUMBNAIL_HEIGHT); 49656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 49666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 49676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 49686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getZSLBurstInterval 49696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get ZSL burst interval setting 49716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 49736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : ZSL burst interval value 49756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 49766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getZSLBurstInterval() 49776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 49786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int interval = getInt(KEY_QC_ZSL_BURST_INTERVAL); 49796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (interval < 0) { 49806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev interval = 1; 49816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 49826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return interval; 49836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 49846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 49856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 49866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getZSLQueueDepth 49876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get ZSL queue depth 49896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 49916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 49926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : ZSL queue depth value 49936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 49946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getZSLQueueDepth() 49956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 49966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int qdepth = getInt(KEY_QC_ZSL_QUEUE_DEPTH); 49976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (qdepth < 0) { 49986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev qdepth = 2; 49996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 50006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return qdepth; 50016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 50026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 50036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 50046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getZSLBackLookCount 50056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get ZSL backlook count setting 50076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 50096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : ZSL backlook count value 50116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 50126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getZSLBackLookCount() 50136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 50146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int look_back = getInt(KEY_QC_ZSL_BURST_LOOKBACK); 50156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (look_back < 0) { 50166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev look_back = 2; 50176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 50186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return look_back; 50196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 50206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 50216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 50226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getZSLMaxUnmatchedFrames 50236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get allowed ZSL max unmatched frames number 50256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 50276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : ZSL backlook count value 50296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 50306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getMaxUnmatchedFramesInQueue() 50316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 50326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return m_pCapability->min_num_pp_bufs; 50336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 50346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 50356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 50366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setRecordingHintValue 50376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set recording hint 50396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 50416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @value : video hint value 50426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 50446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 50456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 50466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 50476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::setRecordingHintValue(int32_t value) 50486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 50496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: VideoHint = %d", __func__, value); 5050744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy bool newValue = (value > 0)? true : false; 5051744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 5052744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if ( m_bRecordingHint != newValue ) { 5053744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bNeedRestart = true; 5054744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bRecordingHint_new = newValue; 5055744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } else { 5056744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bRecordingHint_new = m_bRecordingHint; 5057744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 50586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return AddSetParmEntryToBatch(m_pParamBuf, 50596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_RECORDING_HINT, 50606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 50616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 50626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 50636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 50646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 50656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getNumOfSnapshots 50666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get number of snapshot per shutter 50686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 50706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : number of snapshot per shutter 50726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 50736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevuint8_t QCameraParameters::getNumOfSnapshots() 50746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 50756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int numOfSnapshot = getInt(KEY_QC_NUM_SNAPSHOT_PER_SHUTTER); 50766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (numOfSnapshot <= 0) { 50776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev numOfSnapshot = 1; // set to default value 50786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 50796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return (uint8_t)numOfSnapshot; 50806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 50816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 50826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 50836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getNumOfExtraHDRBufsIfNeeded 50846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get number of extra buffers needed by HDR if HDR is enabled 50866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 50886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 50896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : number of extra buffer needed by HDR; 0 if not HDR enabled 50906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 50916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevuint8_t QCameraParameters::getNumOfExtraHDRBufsIfNeeded() 50926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 50936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint8_t numOfBufs = 0; 50946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *scene_mode = get(KEY_SCENE_MODE); 50956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (scene_mode != NULL && strcmp(scene_mode, SCENE_MODE_HDR) == 0) { 50966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // HDR mode 50976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev numOfBufs = getBurstNum() * m_pCapability->min_num_hdr_bufs; 50986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 50996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return numOfBufs; 51006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 51016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 51026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 51036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getNumOfHDRBufsIfNeeded 51046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get number of buffers needed by HDR if HDR is enabled 51066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 51086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : number of buffer needed by HDR; 0 if not HDR enabled 51106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 51116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevuint8_t QCameraParameters::getNumOfHDRBufsIfNeeded() 51126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 51136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint8_t numOfBufs = 0; 51146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *scene_mode = get(KEY_SCENE_MODE); 51156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (scene_mode != NULL && strcmp(scene_mode, SCENE_MODE_HDR) == 0) { 51166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // HDR mode 51176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *need_hdr_1x = get(KEY_QC_HDR_NEED_1X); 51186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (need_hdr_1x != NULL && strcmp(need_hdr_1x, VALUE_TRUE) == 0) { 51196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev numOfBufs = 2; // HDR needs both 1X and processed img 51206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 51216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev numOfBufs = 1; // HDR only needs processed img 51226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 51236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 51246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev numOfBufs += m_pCapability->min_num_hdr_bufs; 51256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 51266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return numOfBufs; 51276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 51286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 51296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 51306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getBurstNum 51316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get burst number of snapshot 51336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 51356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : number of burst 51376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 51386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getBurstNum() 51396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 51406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char prop[PROPERTY_VALUE_MAX]; 51416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(prop, 0, sizeof(prop)); 51426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev property_get("persist.camera.snapshot.number", prop, "0"); 51436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int nBurstNum = atoi(prop); 51446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (nBurstNum > 0) { 51456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: Reading burst number = %d from properties", 51466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, nBurstNum); 51476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 51486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev nBurstNum = 1; 51496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 51506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return nBurstNum; 51516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 51526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 51536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 51546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getJpegQuality 51556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get jpeg encoding quality 51576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 51596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : jpeg encoding quality 51616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 51626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getJpegQuality() 51636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 51646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int quality = getInt(KEY_JPEG_QUALITY); 51656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (quality < 0) { 51666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev quality = 85; // set to default quality value 51676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 51686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return quality; 51696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 51706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 51716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 51726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getJpegRotation 51736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get rotation value 51756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 51776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : rotation value 51796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 51806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::getJpegRotation() { 51816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int rotation = getInt(KEY_ROTATION); 51826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rotation < 0) { 51836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rotation = 0; 51846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 51856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rotation; 51866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 51876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 51886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 51896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : parseGPSCoordinate 51906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: parse GPS coordinate string 51926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 51946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @coord_str : [input] coordinate string 51956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @coord : [output] ptr to struct to store coordinate 51966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 51976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 51986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 51996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 52006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 52016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint QCameraParameters::parseGPSCoordinate(const char *coord_str, rat_t* coord) 52026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 52036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(coord == NULL) { 52046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: error, invalid argument coord == NULL", __func__); 52056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 52066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 52076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev float degF = atof(coord_str); 52086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (degF < 0) { 52096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev degF = -degF; 52106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 52116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev float minF = (degF - (int) degF) * 60; 52126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev float secF = (minF - (int) minF) * 60; 52136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 52146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getRational(&coord[0], (int)degF, 1); 52156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getRational(&coord[1], (int)minF, 1); 52166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getRational(&coord[2], (int)(secF * 10000), 10000); 52176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 52186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 52196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 52206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 52216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getExifDateTime 52226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: query exif date time 52246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 52266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @dateTime : string to store exif date time 52276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @count : lenght of the dateTime string 52286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 52306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 52316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 52326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 52336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getExifDateTime(char *dateTime, uint32_t &count) 52346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 52356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //get time and date from system 52366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev time_t rawtime; 52371843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li struct tm * timeinfo = NULL; 52381843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li memset(&rawtime, 0, sizeof(rawtime)); 52396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev time(&rawtime); 52406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev timeinfo = localtime (&rawtime); 52411843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li if (timeinfo != NULL && count >= 20) { 52421843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li //Write datetime according to EXIF Spec 52431843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li //"YYYY:MM:DD HH:MM:SS" (20 chars including \0) 52441843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li snprintf(dateTime, 20, "%04d:%02d:%02d %02d:%02d:%02d", 52451843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, 52461843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li timeinfo->tm_mday, timeinfo->tm_hour, 52471843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li timeinfo->tm_min, timeinfo->tm_sec); 52481843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li count = 20; 52491843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li return NO_ERROR; 52501843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li } 52511843dcd973c7f9ba08362c524d1f731fa827b662Muhua Li return UNKNOWN_ERROR; 52526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 52536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 52546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 52556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getRational 52566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: compose rational struct 52586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 52606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @rat : ptr to struct to store rational info 52616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @num :num of the rational 52626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @denom : denom of the rational 52636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 52656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 52666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 52676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 52686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getRational(rat_t *rat, int num, int denom) 52696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 52706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (NULL == rat) { 52716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: NULL rat input", __func__); 52726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 52736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 52746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rat->num = num; 52756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rat->denom = denom; 52766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 52776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 52786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 52796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 52806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getExifFocalLength 52816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get exif focal lenght 52836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 52856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @focalLength : ptr to rational strcut to store focal lenght 52866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 52876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 52886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 52896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 52906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 52916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getExifFocalLength(rat_t *focalLength) 52926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 52936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int focalLengthValue = 52946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev (int)(getFloat(QCameraParameters::KEY_FOCAL_LENGTH) * FOCAL_LENGTH_DECIMAL_PRECISION); 52956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return getRational(focalLength, focalLengthValue, FOCAL_LENGTH_DECIMAL_PRECISION); 52966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 52976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 52986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 52996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getExifIsoSpeed 53006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get exif ISO speed 53026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 53046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : ISO speed value 53066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 53076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevuint16_t QCameraParameters::getExifIsoSpeed() 53086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 53096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint16_t isoSpeed = 0; 53106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *iso_str = get(QCameraParameters::KEY_QC_ISO_MODE); 53116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int iso_index = lookupAttr(ISO_MODES_MAP, 53126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(ISO_MODES_MAP)/sizeof(ISO_MODES_MAP[0]), iso_str); 53136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev switch (iso_index) { 53146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_ISO_MODE_AUTO: 53156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev isoSpeed = 0; 53166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 53176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_ISO_MODE_DEBLUR: 53186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev isoSpeed = 1; 53196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 53206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_ISO_MODE_100: 53216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev isoSpeed = 100; 53226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 53236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_ISO_MODE_200: 53246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev isoSpeed = 200; 53256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 53266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_ISO_MODE_400: 53276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev isoSpeed = 400; 53286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 53296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_ISO_MODE_800: 53306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev isoSpeed = 800; 53316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 53326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev case CAM_ISO_MODE_1600: 53336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev isoSpeed = 1600; 53346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev break; 53356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 53366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return isoSpeed; 53376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 53386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 53396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 53406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getExifGpsProcessingMethod 53416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get GPS processing method 53436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 53456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @gpsProcessingMethod : string to store GPS process method 53466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @count : lenght of the string 53476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 53496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 53506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 53516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 53526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getExifGpsProcessingMethod(char *gpsProcessingMethod, 53536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint32_t &count) 53546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 53556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = get(KEY_GPS_PROCESSING_METHOD); 53566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL) { 53576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memcpy(gpsProcessingMethod, ExifAsciiPrefix, EXIF_ASCII_PREFIX_SIZE); 53586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev count = EXIF_ASCII_PREFIX_SIZE; 53596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strncpy(gpsProcessingMethod + EXIF_ASCII_PREFIX_SIZE, str, strlen(str)); 53606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev count += strlen(str); 53616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev gpsProcessingMethod[count++] = '\0'; // increase 1 for the last NULL char 53626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 53636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 53646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 53656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 53666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 53676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 53686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 53696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getExifLatitude 53706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get exif latitude 53726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 53746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @latitude : ptr to rational struct to store latitude info 53756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @ladRef : charater to indicate latitude reference 53766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 53776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 53786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 53796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 53806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 53816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getExifLatitude(rat_t *latitude, 53826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *latRef) 53836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 53846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = get(KEY_GPS_LATITUDE); 53856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL) { 53866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev parseGPSCoordinate(str, latitude); 53876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 53886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //set Latitude Ref 53896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev float latitudeValue = getFloat(KEY_GPS_LATITUDE); 53906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(latitudeValue < 0.0f) { 53916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev latRef[0] = 'S'; 53926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 53936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev latRef[0] = 'N'; 53946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 53956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev latRef[1] = '\0'; 53966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 53976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else{ 53986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 53996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 54006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 54016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 54026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 54036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getExifLongitude 54046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get exif longitude 54066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 54086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @longitude : ptr to rational struct to store longitude info 54096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @lonRef : charater to indicate longitude reference 54106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 54126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 54136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 54146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 54156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getExifLongitude(rat_t *longitude, 54166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *lonRef) 54176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 54186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = get(KEY_GPS_LONGITUDE); 54196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL) { 54206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev parseGPSCoordinate(str, longitude); 54216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 54226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //set Longitude Ref 54236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev float longitudeValue = getFloat(KEY_GPS_LONGITUDE); 54246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(longitudeValue < 0.0f) { 54256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev lonRef[0] = 'W'; 54266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 54276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev lonRef[0] = 'E'; 54286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 54296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev lonRef[1] = '\0'; 54306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 54316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else{ 54326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 54336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 54346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 54356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 54366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 54376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getExifAltitude 54386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get exif altitude 54406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 54426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @altitude : ptr to rational struct to store altitude info 54436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @altRef : charater to indicate altitude reference 54446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 54466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 54476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 54486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 54496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getExifAltitude(rat_t *altitude, 54506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *altRef) 54516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 54526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = get(KEY_GPS_ALTITUDE); 54536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL) { 54546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev double value = atof(str); 54556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *altRef = 0; 54566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(value < 0){ 54576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *altRef = 1; 54586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev value = -value; 54596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 54606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return getRational(altitude, value*1000, 1000); 54616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev }else{ 54626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 54636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 54646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 54656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 54666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 54676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : getExifGpsDateTimeStamp 54686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: get exif GPS date time stamp 54706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 54726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @gpsDateStamp : GPS date time stamp string 54736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @bufLen : length of the string 54746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @gpsTimeStamp : ptr to rational struct to store time stamp info 54756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 54766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 54776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 54786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 54796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 54806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::getExifGpsDateTimeStamp(char *gpsDateStamp, 54816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint32_t bufLen, 54826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rat_t *gpsTimeStamp) 54836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 54846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *str = get(KEY_GPS_TIMESTAMP); 54856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str != NULL) { 54866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev time_t unixTime = (time_t)atol(str); 54876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev struct tm *UTCTimestamp = gmtime(&unixTime); 54886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 54896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev strftime(gpsDateStamp, bufLen, "%Y:%m:%d", UTCTimestamp); 54906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 54916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getRational(&gpsTimeStamp[0], UTCTimestamp->tm_hour, 1); 54926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getRational(&gpsTimeStamp[1], UTCTimestamp->tm_min, 1); 54936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev getRational(&gpsTimeStamp[2], UTCTimestamp->tm_sec, 1); 54946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 54956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 54966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 54976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 54986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 54996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 55006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 55016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 55026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : updateFocusDistances 55036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 55046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: update focus distances 55056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 55066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 55076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @focusDistances : ptr to focus distance info 55086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 55096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 55106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 55116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 55126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 55136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::updateFocusDistances(cam_focus_distances_info_t *focusDistances) 55146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 55156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 str; 55166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char buffer[32] = {0}; 55176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //set all distances to infinity if focus mode is infinity 55186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(mFocusMode == CAM_FOCUS_MODE_INFINITY) { 55196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append("Infinity,Infinity,Infinity"); 55206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 55216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), "%f", focusDistances->focus_distance[0]); 55226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 55236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), ",%f", focusDistances->focus_distance[1]); 55246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 55256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev snprintf(buffer, sizeof(buffer), ",%f", focusDistances->focus_distance[2]); 55266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev str.append(buffer); 55276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 55286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: setting KEY_FOCUS_DISTANCES as %s", __FUNCTION__, str.string()); 55296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(QCameraParameters::KEY_FOCUS_DISTANCES, str.string()); 55306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 55316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 55326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 55336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 5534744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * FUNCTION : updateRecordingHintValue 5535744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * 5536744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * DESCRIPTION: update recording hint locally and to daemon 5537744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * 5538744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * PARAMETERS : 5539744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * @value : video hint value 5540744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * 5541744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * RETURN : int32_t type of status 5542744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * NO_ERROR -- success 5543744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy * none-zero failure code 5544744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy *==========================================================================*/ 5545744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddyint32_t QCameraParameters::updateRecordingHintValue(int32_t value) 5546744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy{ 5547744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy int32_t rc = NO_ERROR; 5548744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if(initBatchUpdate(m_pParamBuf) < 0 ) { 5549744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s:Failed to initialize group update table", __func__); 5550744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return BAD_TYPE; 5551744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 5552744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 5553744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy rc = setRecordingHintValue(value); 5554744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if (rc != NO_ERROR) { 5555744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s:Failed to update table", __func__); 5556744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return rc; 5557744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 5558744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 5559744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy rc = commitSetBatch(); 5560744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if (rc != NO_ERROR) { 5561744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGE("%s:Failed to update recording hint", __func__); 5562744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return rc; 5563744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 5564744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 5565744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return rc; 5566744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy} 5567744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 5568744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy/*=========================================================================== 55696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setHistogram 55706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 55716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set histogram 55726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 55736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 55746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @enabled : if histogram is enabled 55756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 55766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 55776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 55786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 55796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 55806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setHistogram(bool enabled) 55816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 55826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(m_bHistogramEnabled == enabled) { 55836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: histogram flag not changed, no ops here", __func__); 55846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 55856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 55866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 55876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // set parm for histogram 55886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(initBatchUpdate(m_pParamBuf) < 0 ) { 55896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to initialize group update table", __func__); 55906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_TYPE; 55916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 55926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 55936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = enabled; 55946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 55956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = AddSetParmEntryToBatch(m_pParamBuf, 55966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_HISTOGRAM, 55976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 55986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 55996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 56006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to update table", __func__); 56016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 56026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 56036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = commitSetBatch(); 56056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 56066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to set histogram", __func__); 56076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 56086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 56096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bHistogramEnabled = enabled; 56116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD(" Histogram -> %s", m_bHistogramEnabled ? "Enabled" : "Disabled"); 56136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 56156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 56166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 56186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFaceDetection 56196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 56206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: set face detection 56216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 56226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 56236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @enabled : if face detection is enabled 56246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 56256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 56266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 56276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 56286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 56296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFaceDetection(bool enabled) 56306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 56316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int faceProcMask = m_nFaceProcMask; 56326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // set face detection mask 56336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (enabled) { 56346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceProcMask |= CAM_FACE_PROCESS_MASK_DETECTION; 56356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 56366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev faceProcMask &= ~CAM_FACE_PROCESS_MASK_DETECTION; 56376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 56386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(m_nFaceProcMask == faceProcMask) { 56406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: face process mask not changed, no ops here", __func__); 56416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 56426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 56436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // set parm for face detection 56456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int requested_faces = getInt(KEY_QC_MAX_NUM_REQUESTED_FACES); 56466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_fd_set_parm_t fd_set_parm; 56476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(&fd_set_parm, 0, sizeof(cam_fd_set_parm_t)); 56486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fd_set_parm.fd_mode = faceProcMask; 56496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev fd_set_parm.num_fd = requested_faces; 56506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5651744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy ALOGD("[KPI Perf] %s: Face detection value = %d num_fd = %d", 5652744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy __func__, faceProcMask,requested_faces); 56536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(initBatchUpdate(m_pParamBuf) < 0 ) { 56546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to initialize group update table", __func__); 56556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_TYPE; 56566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 56576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 56586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = AddSetParmEntryToBatch(m_pParamBuf, 56606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_FD, 56616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(fd_set_parm), 56626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &fd_set_parm); 56636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 56646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to update table", __func__); 56656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 56666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 56676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = commitSetBatch(); 56696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 56706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to set face detection parm", __func__); 56716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 56726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 56736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_nFaceProcMask = faceProcMask; 56756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGD("%s: FaceProcMask -> %d", __func__, m_nFaceProcMask); 56766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 56786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 56796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 56806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 56816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setLockCAF 56826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 56836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: Lock CAF 56846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 56856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 56866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @bLock : if CAF needs to be locked 56876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 56886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 56896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 56906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 56916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 56926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setLockCAF(bool bLock) 56936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 56946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(initBatchUpdate(m_pParamBuf) < 0 ) { 56956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to initialize group update table", __func__); 56966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_TYPE; 56976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 56986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 56996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = bLock; 57006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 57016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = AddSetParmEntryToBatch(m_pParamBuf, 57026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_LOCK_CAF, 57036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 57046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 57056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 57066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to update table", __func__); 57076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 57086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 57096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 57106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = commitSetBatch(); 57116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 57126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to set lock CAF parm", __func__); 57136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 57146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 57156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_bCAFLocked = bLock; 57166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 57176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 57186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 57196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 57206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 57216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : setFrameSkip 57226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 57236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: send ISP frame skip pattern to camera daemon 57246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 57256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 57266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @pattern : skip pattern for ISP 57276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 57286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 57296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 57306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 57316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 57326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::setFrameSkip(enum msm_vfe_frame_skip_pattern pattern) 57336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 57346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 57356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t value = (int32_t)pattern; 57366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 5737744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy if ( m_pParamBuf == NULL ) { 5738744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy return NO_INIT; 5739744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy } 5740744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 57416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(initBatchUpdate(m_pParamBuf) < 0 ) { 57426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to initialize group update table", __func__); 57436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_TYPE; 57446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 57456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 57466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = AddSetParmEntryToBatch(m_pParamBuf, 57476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CAM_INTF_PARM_FRAMESKIP, 57486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev sizeof(value), 57496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev &value); 57506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 57516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to update table", __func__); 57526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 57536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 57546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 57556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = commitSetBatch(); 57566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc != NO_ERROR) { 57576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Failed to set frameskip info parm", __func__); 57586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 57596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 57606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 57616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 57626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 57636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 57646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 57656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : parseNDimVector 57666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 57676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: helper function to parse a string like "(1, 2, 3, 4, ..., N)" 57686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * into N-dimension vector 57696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 57706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 57716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @str : string to be parsed 57726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @num : output array of size N to store vector element values 57736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @N : number of dimension 57746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @delim : delimeter to seperete string 57756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 57766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 57776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 57786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 57796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 57806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::parseNDimVector(const char *str, int *num, int N, char delim = ',') 57816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 57826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char *start, *end; 57836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (num == NULL) { 57846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid output array (num == NULL)", __func__); 57856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 57866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 57876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 57886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //check if string starts and ends with parantheses 57896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(str[0] != '(' || str[strlen(str)-1] != ')') { 57906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Invalid format of string %s, valid format is (n1, n2, n3, n4 ...)", 57916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, str); 57926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 57936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 57946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev start = (char*) str; 57956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev start++; 57966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for(int i=0; i<N; i++) { 57976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *(num+i) = (int) strtol(start, &end, 10); 57986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(*end != delim && i < N-1) { 57996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: Cannot find delimeter '%c' in string \"%s\". end = %c", 58006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev __func__, delim, str, *end); 58016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return -1; 58026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev start = end+1; 58046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 58066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 58076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 58086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 58096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : parseCameraAreaString 58106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 58116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: helper function to parse a string of camera areas like 58126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * "(1, 2, 3, 4, 5),(1, 2, 3, 4, 5),..." 58136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 58146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 58156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @str : string to be parsed 58166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @max_num_areas : max number of areas 58176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @pAreas : ptr to struct to store areas 58186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @num_areas_found : number of areas found 58196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 58206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 58216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 58226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 58236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 58246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::parseCameraAreaString(const char *str, 58256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int max_num_areas, 58266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_area_t *pAreas, 58276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int& num_areas_found) 58286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 58296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev char area_str[32]; 58306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev const char *start, *end, *p; 58316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev start = str; end = NULL; 58326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int values[5], index=0; 58336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev num_areas_found = 0; 58346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 58356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(values, 0, sizeof(values)); 58366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev while(start != NULL) { 58376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(*start != '(') { 58386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: error: Ill formatted area string: %s", __func__, str); 58396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 58406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev end = strchr(start, ')'); 58426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(end == NULL) { 58436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: error: Ill formatted area string: %s", __func__, str); 58446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 58456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int i; 58476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (i=0,p=start; p<=end; p++, i++) { 58486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev area_str[i] = *p; 58496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev area_str[i] = '\0'; 58516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(parseNDimVector(area_str, values, 5) < 0){ 58526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: error: Failed to parse the area string: %s", __func__, area_str); 58536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 58546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // no more areas than max_num_areas are accepted. 58566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(index >= max_num_areas) { 58576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s: error: too many areas specified %s", __func__, str); 58586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 58596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pAreas[index].rect.left = values[0]; 58616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pAreas[index].rect.top = values[1]; 58626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pAreas[index].rect.width = values[2] - values[0]; 58636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pAreas[index].rect.height = values[3] - values[1]; 58646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev pAreas[index].weight = values[4]; 58656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 58666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev index++; 58676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev start = strchr(end, '('); // serach for next '(' 58686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev num_areas_found = index; 58706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return 0; 58716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 58726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 58736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 58746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : validateCameraAreas 58756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 58766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: helper function to validate camera areas within (-1000, 1000) 58776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 58786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 58796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @areas : ptr to array of areas 58806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @num_areas : number of areas 58816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 58826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : true -- area is in valid range 58836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * false -- not valid 58846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 58856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevbool QCameraParameters::validateCameraAreas(cam_area_t *areas, int num_areas) 58866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 58876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // special case: default area 58886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (num_areas == 1 && 58896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.left == 0 && 58906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.top == 0 && 58916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.width == 0 && 58926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].rect.height == 0 && 58936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev areas[0].weight == 0) { 58946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return true; 58956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 58966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 58976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for(int i = 0; i < num_areas; i++) { 58986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // left should be >= -1000 58996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(areas[i].rect.left < -1000) { 59006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return false; 59016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // top should be >= -1000 59046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(areas[i].rect.top < -1000) { 59056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return false; 59066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // width or height should be > 0 59096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (areas[i].rect.width <= 0 || areas[i].rect.height <= 0) { 59106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return false; 59116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // right should be <= 1000 59146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(areas[i].rect.left + areas[i].rect.width > 1000) { 59156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return false; 59166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // bottom should be <= 1000 59196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if(areas[i].rect.top + areas[i].rect.height > 1000) { 59206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return false; 59216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // weight should be within (1, 1000) 59246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (areas[i].weight < 1 || areas[i].weight > 1000) { 59256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return false; 59266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return true; 59296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 59306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 59326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : initBatchUpdate 59336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 59346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: init camera parameters buf entries 59356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 59366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 59376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @p_table : ptr to parameter buffer 59386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 59396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 59406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 59416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 59426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 59436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::initBatchUpdate(parm_buffer_t *p_table) 59446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 59456c6d887243f26c81543d33c2f8aa169862324b40Shuzhen Wang int32_t hal_version = CAM_HAL_V1; 59466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_tempMap.clear(); 59476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memset(p_table, 0, sizeof(parm_buffer_t)); 59496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev p_table->first_flagged_entry = CAM_INTF_PARM_MAX; 59506c6d887243f26c81543d33c2f8aa169862324b40Shuzhen Wang AddSetParmEntryToBatch(p_table, CAM_INTF_PARM_HAL_VERSION, 59516c6d887243f26c81543d33c2f8aa169862324b40Shuzhen Wang sizeof(hal_version), &hal_version); 59526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 59536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 59546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 59566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : AddSetParmEntryToBatch 59576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 59586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: add set parameter entry into batch 59596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 59606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 59616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @p_table : ptr to parameter buffer 59626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @paramType : parameter type 59636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @paramLength : length of parameter value 59646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @paramValue : ptr to parameter value 59656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 59666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 59676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 59686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 59696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 59706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::AddSetParmEntryToBatch(parm_buffer_t *p_table, 59716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_intf_parm_type_t paramType, 59726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev uint32_t paramLength, 59736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev void *paramValue) 59746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 59756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int position = paramType; 59766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int current, next; 59776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /************************************************************************* 59796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Code to take care of linking next flags * 59806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *************************************************************************/ 59816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev current = GET_FIRST_PARAM_ID(p_table); 59826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (position == current){ 59836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //DO NOTHING 59846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else if (position < current){ 59856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SET_NEXT_PARAM_ID(position, p_table, current); 59866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SET_FIRST_PARAM_ID(p_table, position); 59876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 59886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* Search for the position in the linked list where we need to slot in*/ 59896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev while (position > GET_NEXT_PARAM_ID(current, p_table)) 59906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev current = GET_NEXT_PARAM_ID(current, p_table); 59916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 59926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /*If node already exists no need to alter linking*/ 59936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (position != GET_NEXT_PARAM_ID(current, p_table)) { 59946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev next = GET_NEXT_PARAM_ID(current, p_table); 59956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SET_NEXT_PARAM_ID(current, p_table, position); 59966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SET_NEXT_PARAM_ID(position, p_table, next); 59976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 59996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 60006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /************************************************************************* 60016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Copy contents into entry * 60026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *************************************************************************/ 60036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 60046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (paramLength > sizeof(parm_type_t)) { 60056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev ALOGE("%s:Size of input larger than max entry size",__func__); 60066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return BAD_VALUE; 60076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 60086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev memcpy(POINTER_OF(paramType,p_table), paramValue, paramLength); 60096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 60106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 60116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 60126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 60136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : AddGetParmEntryToBatch 60146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: add get parameter entry into batch 60166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 60186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @p_table : ptr to parameter buffer 60196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @paramType : parameter type 60206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 60226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 60236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 60246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 60256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::AddGetParmEntryToBatch(parm_buffer_t *p_table, 60266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev cam_intf_parm_type_t paramType) 60276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 60286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int position = paramType; 60296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int current, next; 60306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 60316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /************************************************************************* 60326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Code to take care of linking next flags * 60336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *************************************************************************/ 60346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev current = GET_FIRST_PARAM_ID(p_table); 60356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (position == current){ 60366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev //DO NOTHING 60376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else if (position < current){ 60386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SET_NEXT_PARAM_ID(position, p_table, current); 60396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SET_FIRST_PARAM_ID(p_table, position); 60406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 60416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /* Search for the position in the linked list where we need to slot in*/ 60426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev while (position > GET_NEXT_PARAM_ID(current, p_table)) 60436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev current = GET_NEXT_PARAM_ID(current, p_table); 60446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 60456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev /*If node already exists no need to alter linking*/ 60466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (position != GET_NEXT_PARAM_ID(current, p_table)) { 60476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev next=GET_NEXT_PARAM_ID(current, p_table); 60486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SET_NEXT_PARAM_ID(current, p_table, position); 60496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev SET_NEXT_PARAM_ID(position, p_table, next); 60506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 60516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 60526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 60536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 60546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 60556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 60566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 60576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : commitSetBatch 60586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: commit all set parameters in the batch work to backend 60606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 60626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 60646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 60656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 60666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 60676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::commitSetBatch() 60686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 60696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev int32_t rc = NO_ERROR; 60706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pParamBuf->first_flagged_entry < CAM_INTF_PARM_MAX) { 60716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = m_pCamOpsTbl->ops->set_parms(m_pCamOpsTbl->camera_handle, m_pParamBuf); 60726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 60736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (rc == NO_ERROR) { 60746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev // commit change from temp storage into param map 60756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev rc = commitParamChanges(); 60766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 60776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return rc; 60786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 60796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 60806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 60816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : commitGetBatch 60826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: commit all get parameters in the batch work to backend 60846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 60866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 60876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 60886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 60896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 60906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 60916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::commitGetBatch() 60926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 60936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev if (m_pParamBuf->first_flagged_entry < CAM_INTF_PARM_MAX) { 60946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return m_pCamOpsTbl->ops->get_parms(m_pCamOpsTbl->camera_handle, m_pParamBuf); 60956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } else { 60966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 60976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 60986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 60996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 61006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 61016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : updateParamEntry 61026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 61036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: update a parameter entry in the local temp map obj 61046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 61056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : 61066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @key : key of the entry 61076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * @value : value of the entry 61086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 61096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 61106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 61116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 61126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 61136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::updateParamEntry(const char *key, const char *value) 61146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 61156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_tempMap.replaceValueFor(String8(key), String8(value)); 61166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 61176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 61186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 61196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*=========================================================================== 61206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * FUNCTION : commitParamChanges 61216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 61226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * DESCRIPTION: commit all changes in local temp map obj into parameter obj 61236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 61246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * PARAMETERS : none 61256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * 61266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * RETURN : int32_t type of status 61276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * NO_ERROR -- success 61286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * none-zero failure code 61296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev *==========================================================================*/ 61306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevint32_t QCameraParameters::commitParamChanges() 61316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{ 61326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev size_t size = m_tempMap.size(); 61336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev for (size_t i = 0; i < size; i++) { 61346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev String8 k, v; 61356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev k = m_tempMap.keyAt(i); 61366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev v = m_tempMap.valueAt(i); 61376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev set(k, v); 61386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev } 61396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev m_tempMap.clear(); 6140744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 6141744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy // update local changes 6142744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bRecordingHint = m_bRecordingHint_new; 6143744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy m_bZslMode = m_bZslMode_new; 6144744f5403bebb0e27140d16a5df7a341713c24a13Nagesh Subba Reddy 61456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev return NO_ERROR; 61466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} 61476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev 61486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev}; // namespace qcamera 6149