166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. 266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Redistribution and use in source and binary forms, with or without 466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * modification, are permitted provided that the following conditions are 566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * met: 666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Redistributions of source code must retain the above copyright 766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * notice, this list of conditions and the following disclaimer. 866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Redistributions in binary form must reproduce the above 966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * copyright notice, this list of conditions and the following 1066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * disclaimer in the documentation and/or other materials provided 1166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * with the distribution. 1266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Neither the name of The Linux Foundation nor the names of its 1366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * contributors may be used to endorse or promote products derived 1466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * from this software without specific prior written permission. 1566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 2866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin */ 2966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define LOG_TAG "QCameraParameters" 3166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// To remove 3366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <cutils/properties.h> 3466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// System dependencies 3666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <math.h> 3766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <string.h> 3866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <stdlib.h> 3966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <utils/Errors.h> 4066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define SYSINFO_H <SYSTEM_HEADER_PREFIX/sysinfo.h> 4166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include SYSINFO_H 4266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "gralloc_priv.h" 4366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "graphics.h" 4466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 4566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Camera dependencies 4666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraBufferMaps.h" 4766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera2HWI.h" 4866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraParameters.h" 4966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraTrace.h" 5066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinextern "C" { 5266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "mm_camera_dbg.h" 5366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 5466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define PI 3.14159265 5666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define ASPECT_TOLERANCE 0.001 5766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define CAMERA_DEFAULT_LONGSHOT_STAGES 4 5866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define CAMERA_MIN_LONGSHOT_STAGES 2 5966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define FOCUS_PERCISION 0.0000001 6066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinnamespace qcamera { 6366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Parameter keys to communicate between camera application and driver. 6466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_HFR_SIZES[] = "hfr-size-values"; 6566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_MODE[] = "preview-frame-rate-mode"; 6666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_PREVIEW_FRAME_RATE_MODES[] = "preview-frame-rate-modes"; 6766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_AUTO_MODE[] = "frame-rate-auto"; 6866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_FIXED_MODE[] = "frame-rate-fixed"; 6966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_TOUCH_AF_AEC[] = "touch-af-aec"; 7066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_TOUCH_AF_AEC[] = "touch-af-aec-values"; 7166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_TOUCH_INDEX_AEC[] = "touch-index-aec"; 7266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_TOUCH_INDEX_AF[] = "touch-index-af"; 7366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SCENE_DETECT[] = "scene-detect"; 7466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_SCENE_DETECT[] = "scene-detect-values"; 7566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_ISO_MODE[] = "iso"; 7666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CONTINUOUS_ISO[] = "continuous-iso"; 7766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_ISO[] = "min-iso"; 7866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_ISO[] = "max-iso"; 7966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_ISO_MODES[] = "iso-values"; 8066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_EXPOSURE_TIME[] = "exposure-time"; 8166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_EXPOSURE_TIME[] = "min-exposure-time"; 8266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_EXPOSURE_TIME[] = "max-exposure-time"; 8366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CURRENT_EXPOSURE_TIME[] = "cur-exposure-time"; 8466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CURRENT_ISO[] = "cur-iso"; 8566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_LENSSHADE[] = "lensshade"; 8666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_LENSSHADE_MODES[] = "lensshade-values"; 8766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_AUTO_EXPOSURE[] = "auto-exposure"; 8866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_AUTO_EXPOSURE[] = "auto-exposure-values"; 8966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_DENOISE[] = "denoise"; 9066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_DENOISE[] = "denoise-values"; 9166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_FOCUS_ALGO[] = "selectable-zone-af"; 9266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_FOCUS_ALGOS[] = "selectable-zone-af-values"; 9366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MANUAL_FOCUS_POSITION[] = "manual-focus-position"; 9466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MANUAL_FOCUS_POS_TYPE[] = "manual-focus-pos-type"; 9566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_FOCUS_POS_INDEX[] = "min-focus-pos-index"; 9666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_FOCUS_POS_INDEX[] = "max-focus-pos-index"; 9766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_FOCUS_POS_DAC[] = "min-focus-pos-dac"; 9866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_FOCUS_POS_DAC[] = "max-focus-pos-dac"; 9966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_FOCUS_POS_RATIO[] = "min-focus-pos-ratio"; 10066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_FOCUS_POS_RATIO[] = "max-focus-pos-ratio"; 10166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_FOCUS_POSITION_SCALE[] = "cur-focus-scale"; 10266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_FOCUS_POS_DIOPTER[] = "min-focus-pos-diopter"; 10366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_FOCUS_POS_DIOPTER[] = "max-focus-pos-diopter"; 10466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_FOCUS_POSITION_DIOPTER[] = "cur-focus-diopter"; 10566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_FACE_DETECTION[] = "face-detection"; 10666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_FACE_DETECTION[] = "face-detection-values"; 10766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_FACE_RECOGNITION[] = "face-recognition"; 10866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_FACE_RECOGNITION[] = "face-recognition-values"; 10966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MEMORY_COLOR_ENHANCEMENT[] = "mce"; 11066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_MEM_COLOR_ENHANCE_MODES[] = "mce-values"; 11166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_DIS[] = "dis"; 11266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_OIS[] = "ois"; 11366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_DIS_MODES[] = "dis-values"; 11466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_OIS_MODES[] = "ois-values"; 11566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VIDEO_HIGH_FRAME_RATE[] = "video-hfr"; 11666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VIDEO_HIGH_SPEED_RECORDING[] = "video-hsr"; 11766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_HIGH_FRAME_RATE_MODES[] = "video-hfr-values"; 11866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_REDEYE_REDUCTION[] = "redeye-reduction"; 11966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_REDEYE_REDUCTION[] = "redeye-reduction-values"; 12066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_HIGH_DYNAMIC_RANGE_IMAGING[] = "hdr"; 12166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_HDR_IMAGING_MODES[] = "hdr-values"; 12266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_ZSL[] = "zsl"; 12366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_ZSL_MODES[] = "zsl-values"; 12466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_ZSL_BURST_INTERVAL[] = "capture-burst-interval"; 12566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_ZSL_BURST_LOOKBACK[] = "capture-burst-retroactive"; 12666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_ZSL_QUEUE_DEPTH[] = "capture-burst-queue-depth"; 12766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CAMERA_MODE[] = "camera-mode"; 12866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_AE_BRACKET_HDR[] = "ae-bracket-hdr"; 12966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_AE_BRACKET_MODES[] = "ae-bracket-hdr-values"; 13066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_RAW_FORMATS[] = "raw-format-values"; 13166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_RAW_FORMAT[] = "raw-format"; 13266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_ORIENTATION[] = "orientation"; 13366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SELECTABLE_ZONE_AF[] = "selectable-zone-af"; 13466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CAPTURE_BURST_EXPOSURE[] = "capture-burst-exposures"; 13566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_NUM_SNAPSHOT_PER_SHUTTER[] = "num-snaps-per-shutter"; 13666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_NUM_RETRO_BURST_PER_SHUTTER[] = "num-retro-burst-per-shutter"; 13766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SNAPSHOT_BURST_LED_ON_PERIOD[] = "zsl-burst-led-on-period"; 13866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_NO_DISPLAY_MODE[] = "no-display-mode"; 13966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_RAW_PICUTRE_SIZE[] = "raw-size"; 14066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_SKIN_TONE_ENHANCEMENT_MODES[] = "skinToneEnhancement-values"; 14166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_LIVESNAPSHOT_SIZES[] = "supported-live-snapshot-sizes"; 14266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_HDR_NEED_1X[] = "hdr-need-1x-values"; 14366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_HDR_NEED_1X[] = "hdr-need-1x"; 14466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_PREVIEW_FLIP[] = "preview-flip"; 14566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VIDEO_FLIP[] = "video-flip"; 14666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SNAPSHOT_PICTURE_FLIP[] = "snapshot-picture-flip"; 14766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_FLIP_MODES[] = "flip-mode-values"; 14866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VIDEO_HDR[] = "video-hdr"; 14966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SENSOR_HDR[] = "sensor-hdr"; 15066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VT_ENABLE[] = "avtimer"; 15166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_HDR_MODES[] = "video-hdr-values"; 15266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_SENSOR_HDR_MODES[] = "sensor-hdr-values"; 15366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_AUTO_HDR_ENABLE [] = "auto-hdr-enable"; 15466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SNAPSHOT_BURST_NUM[] = "snapshot-burst-num"; 15566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SNAPSHOT_FD_DATA[] = "snapshot-fd-data-enable"; 15666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_TINTLESS_ENABLE[] = "tintless"; 15766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SCENE_SELECTION[] = "scene-selection"; 15866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CDS_MODE[] = "cds-mode"; 15966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VIDEO_CDS_MODE[] = "video-cds-mode"; 16066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_CDS_MODES[] = "cds-mode-values"; 16166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_CDS_MODES[] = "video-cds-mode-values"; 16266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_TNR_MODE[] = "tnr-mode"; 16366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VIDEO_TNR_MODE[] = "video-tnr-mode"; 16466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_TNR_MODES[] = "tnr-mode-values"; 16566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_TNR_MODES[] = "video-tnr-mode-values"; 16666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VIDEO_ROTATION[] = "video-rotation"; 16766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_ROTATION_VALUES[] = "video-rotation-values"; 16866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_AF_BRACKET[] = "af-bracket"; 16966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_AF_BRACKET_MODES[] = "af-bracket-values"; 17066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_RE_FOCUS[] = "re-focus"; 17166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_RE_FOCUS_MODES[] = "re-focus-values"; 17266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CHROMA_FLASH[] = "chroma-flash"; 17366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_CHROMA_FLASH_MODES[] = "chroma-flash-values"; 17466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_OPTI_ZOOM[] = "opti-zoom"; 17566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SEE_MORE[] = "see-more"; 17666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_STILL_MORE[] = "still-more"; 17766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_OPTI_ZOOM_MODES[] = "opti-zoom-values"; 17866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_HDR_MODE[] = "hdr-mode"; 17966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_KEY_QC_HDR_MODES[] = "hdr-mode-values"; 18066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_TRUE_PORTRAIT[] = "true-portrait"; 18166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_TRUE_PORTRAIT_MODES[] = "true-portrait-values"; 18266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_SEE_MORE_MODES[] = "see-more-values"; 18366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_STILL_MORE_MODES[] = "still-more-values"; 18466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_INTERNAL_PERVIEW_RESTART[] = "internal-restart"; 18566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_RDI_MODE[] = "rdi-mode"; 18666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_RDI_MODES[] = "rdi-mode-values"; 18766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SECURE_MODE[] = "secure-mode"; 18866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_SECURE_MODES[] = "secure-mode-values"; 18966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_HJR[] = "ISO_HJR"; 19066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_AUTO_HDR_SUPPORTED[] = "auto-hdr-supported"; 19166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_LONGSHOT_SUPPORTED[] = "longshot-supported"; 19266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_ZSL_HDR_SUPPORTED[] = "zsl-hdr-supported"; 19366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_WB_MANUAL_CCT[] = "wb-manual-cct"; 19466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_WB_CCT[] = "min-wb-cct"; 19566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_WB_CCT[] = "max-wb-cct"; 19666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MANUAL_WB_GAINS[] = "manual-wb-gains"; 19866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_WB_GAIN[] = "min-wb-gain"; 19966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_WB_GAIN[] = "max-wb-gain"; 20066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MANUAL_WB_TYPE[] = "manual-wb-type"; 20266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MANUAL_WB_VALUE[] = "manual-wb-value"; 20366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::WHITE_BALANCE_MANUAL[] = "manual"; 20566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FOCUS_MODE_MANUAL_POSITION[] = "manual"; 20666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CACHE_VIDEO_BUFFERS[] = "cache-video-buffers"; 20766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_LONG_SHOT[] = "long-shot"; 20966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_INITIAL_EXPOSURE_INDEX[] = "initial-exp-index"; 210d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_AEC[] = "instant-aec"; 211d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_CAPTURE[] = "instant-capture"; 212d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_AEC_SUPPORTED_MODES[] = "instant-aec-values"; 213d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_CAPTURE_SUPPORTED_MODES[] = "instant-capture-values"; 21466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 21566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for effect settings. 21666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::EFFECT_EMBOSS[] = "emboss"; 21766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::EFFECT_SKETCH[] = "sketch"; 21866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::EFFECT_NEON[] = "neon"; 21966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::EFFECT_BEAUTY[] = "beauty"; 22066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for auto exposure settings. 22366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::TOUCH_AF_AEC_OFF[] = "touch-off"; 22466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::TOUCH_AF_AEC_ON[] = "touch-on"; 22566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for scene mode settings. 22766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::SCENE_MODE_ASD[] = "asd"; // corresponds to CAMERA_BESTSHOT_AUTO in HAL 22866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::SCENE_MODE_BACKLIGHT[] = "backlight"; 22966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::SCENE_MODE_FLOWERS[] = "flowers"; 23066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::SCENE_MODE_AR[] = "AR"; 23166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::SCENE_MODE_HDR[] = "hdr"; 23266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Formats for setPreviewFormat and setPictureFormat. 23466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::PIXEL_FORMAT_YUV420SP_ADRENO[] = "yuv420sp-adreno"; 23566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::PIXEL_FORMAT_YV12[] = "yuv420p"; 23666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::PIXEL_FORMAT_NV12[] = "nv12"; 23766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_NV12_VENUS[] = "nv12-venus"; 23866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for raw image formats 24066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_YUYV[] = "yuv-raw8-yuyv"; 24166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_YVYU[] = "yuv-raw8-yvyu"; 24266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_UYVY[] = "yuv-raw8-uyvy"; 24366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_VYUY[] = "yuv-raw8-vyuy"; 24466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GBRG[] = "bayer-qcom-8gbrg"; 24566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GRBG[] = "bayer-qcom-8grbg"; 24666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8RGGB[] = "bayer-qcom-8rggb"; 24766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8BGGR[] = "bayer-qcom-8bggr"; 24866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GBRG[] = "bayer-qcom-10gbrg"; 24966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GRBG[] = "bayer-qcom-10grbg"; 25066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10RGGB[] = "bayer-qcom-10rggb"; 25166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10BGGR[] = "bayer-qcom-10bggr"; 25266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GBRG[] = "bayer-qcom-12gbrg"; 25366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GRBG[] = "bayer-qcom-12grbg"; 25466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12RGGB[] = "bayer-qcom-12rggb"; 25566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12BGGR[] = "bayer-qcom-12bggr"; 2561687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_14GBRG[] = "bayer-qcom-14gbrg"; 2571687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_14GRBG[] = "bayer-qcom-14grbg"; 2581687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_14RGGB[] = "bayer-qcom-14rggb"; 2591687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_14BGGR[] = "bayer-qcom-14bggr"; 26066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GBRG[] = "bayer-mipi-8gbrg"; 26166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GRBG[] = "bayer-mipi-8grbg"; 26266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8RGGB[] = "bayer-mipi-8rggb"; 26366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8BGGR[] = "bayer-mipi-8bggr"; 26466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GBRG[] = "bayer-mipi-10gbrg"; 26566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GRBG[] = "bayer-mipi-10grbg"; 26666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10RGGB[] = "bayer-mipi-10rggb"; 26766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10BGGR[] = "bayer-mipi-10bggr"; 26866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GBRG[] = "bayer-mipi-12gbrg"; 26966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GRBG[] = "bayer-mipi-12grbg"; 27066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12RGGB[] = "bayer-mipi-12rggb"; 27166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12BGGR[] = "bayer-mipi-12bggr"; 2721687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_14GBRG[] = "bayer-mipi-14gbrg"; 2731687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_14GRBG[] = "bayer-mipi-14grbg"; 2741687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_14RGGB[] = "bayer-mipi-14rggb"; 2751687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_14BGGR[] = "bayer-mipi-14bggr"; 27666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GBRG[] = "bayer-ideal-qcom-8gbrg"; 27766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GRBG[] = "bayer-ideal-qcom-8grbg"; 27866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8RGGB[] = "bayer-ideal-qcom-8rggb"; 27966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8BGGR[] = "bayer-ideal-qcom-8bggr"; 28066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GBRG[] = "bayer-ideal-qcom-10gbrg"; 28166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GRBG[] = "bayer-ideal-qcom-10grbg"; 28266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10RGGB[] = "bayer-ideal-qcom-10rggb"; 28366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10BGGR[] = "bayer-ideal-qcom-10bggr"; 28466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GBRG[] = "bayer-ideal-qcom-12gbrg"; 28566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GRBG[] = "bayer-ideal-qcom-12grbg"; 28666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12RGGB[] = "bayer-ideal-qcom-12rggb"; 28766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12BGGR[] = "bayer-ideal-qcom-12bggr"; 2881687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_14GBRG[] = "bayer-ideal-qcom-14gbrg"; 2891687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_14GRBG[] = "bayer-ideal-qcom-14grbg"; 2901687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_14RGGB[] = "bayer-ideal-qcom-14rggb"; 2911687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_14BGGR[] = "bayer-ideal-qcom-14bggr"; 29266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GBRG[] = "bayer-ideal-mipi-8gbrg"; 29366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GRBG[] = "bayer-ideal-mipi-8grbg"; 29466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8RGGB[] = "bayer-ideal-mipi-8rggb"; 29566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8BGGR[] = "bayer-ideal-mipi-8bggr"; 29666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GBRG[] = "bayer-ideal-mipi-10gbrg"; 29766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GRBG[] = "bayer-ideal-mipi-10grbg"; 29866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10RGGB[] = "bayer-ideal-mipi-10rggb"; 29966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10BGGR[] = "bayer-ideal-mipi-10bggr"; 30066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GBRG[] = "bayer-ideal-mipi-12gbrg"; 30166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GRBG[] = "bayer-ideal-mipi-12grbg"; 30266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12RGGB[] = "bayer-ideal-mipi-12rggb"; 30366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12BGGR[] = "bayer-ideal-mipi-12bggr"; 3041687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_14GBRG[] = "bayer-ideal-mipi-14gbrg"; 3051687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_14GRBG[] = "bayer-ideal-mipi-14grbg"; 3061687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_14RGGB[] = "bayer-ideal-mipi-14rggb"; 3071687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_14BGGR[] = "bayer-ideal-mipi-14bggr"; 30866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GBRG[] = "bayer-ideal-plain8-8gbrg"; 30966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GRBG[] = "bayer-ideal-plain8-8grbg"; 31066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8RGGB[] = "bayer-ideal-plain8-8rggb"; 31166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8BGGR[] = "bayer-ideal-plain8-8bggr"; 31266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GBRG[] = "bayer-ideal-plain16-8gbrg"; 31366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GRBG[] = "bayer-ideal-plain16-8grbg"; 31466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8RGGB[] = "bayer-ideal-plain16-8rggb"; 31566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8BGGR[] = "bayer-ideal-plain16-8bggr"; 31666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GBRG[] = "bayer-ideal-plain16-10gbrg"; 31766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GRBG[] = "bayer-ideal-plain16-10grbg"; 31866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10RGGB[] = "bayer-ideal-plain16-10rggb"; 31966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10BGGR[] = "bayer-ideal-plain16-10bggr"; 32066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GBRG[] = "bayer-ideal-plain16-12gbrg"; 32166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GRBG[] = "bayer-ideal-plain16-12grbg"; 32266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12RGGB[] = "bayer-ideal-plain16-12rggb"; 32366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12BGGR[] = "bayer-ideal-plain16-12bggr"; 3241687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_14GBRG[] = "bayer-ideal-plain16-14gbrg"; 3251687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_14GRBG[] = "bayer-ideal-plain16-14grbg"; 3261687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_14RGGB[] = "bayer-ideal-plain16-14rggb"; 3271687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanconst char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_14BGGR[] = "bayer-ideal-plain16-14bggr"; 32866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for ISO Settings 33066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_AUTO[] = "auto"; 33166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_100[] = "ISO100"; 33266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_200[] = "ISO200"; 33366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_400[] = "ISO400"; 33466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_800[] = "ISO800"; 33566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_1600[] = "ISO1600"; 33666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_3200[] = "ISO3200"; 33766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::ISO_MANUAL[] = "manual"; 33866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 33966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for auto exposure settings. 34166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AUTO_EXPOSURE_FRAME_AVG[] = "frame-average"; 34266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AUTO_EXPOSURE_CENTER_WEIGHTED[] = "center-weighted"; 34366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AUTO_EXPOSURE_SPOT_METERING[] = "spot-metering"; 34466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AUTO_EXPOSURE_SMART_METERING[] = "smart-metering"; 34566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AUTO_EXPOSURE_USER_METERING[] = "user-metering"; 34666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AUTO_EXPOSURE_SPOT_METERING_ADV[] = "spot-metering-adv"; 34766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AUTO_EXPOSURE_CENTER_WEIGHTED_ADV[] = "center-weighted-adv"; 34866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 349d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch// Values for instant AEC modes 350d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_AEC_DISABLE[] = "0"; 351d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_AEC_AGGRESSIVE_AEC[] = "1"; 352d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_AEC_FAST_AEC[] = "2"; 353d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 354d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch// Values for instant capture modes 355d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_CAPTURE_DISABLE[] = "0"; 356d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_CAPTURE_AGGRESSIVE_AEC[] = "1"; 357d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst char QCameraParameters::KEY_QC_INSTANT_CAPTURE_FAST_AEC[] = "2"; 358d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 35966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_GPS_LATITUDE_REF[] = "gps-latitude-ref"; 36066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_GPS_LONGITUDE_REF[] = "gps-longitude-ref"; 36166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_GPS_ALTITUDE_REF[] = "gps-altitude-ref"; 36266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_GPS_STATUS[] = "gps-status"; 36366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_HISTOGRAM[] = "histogram"; 36566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_HISTOGRAM_MODES[] = "histogram-values"; 36666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VALUE_ENABLE[] = "enable"; 36866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VALUE_DISABLE[] = "disable"; 36966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VALUE_OFF[] = "off"; 37066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VALUE_ON[] = "on"; 37166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VALUE_TRUE[] = "true"; 37266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VALUE_FALSE[] = "false"; 37366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 37466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VALUE_FAST[] = "fast"; 37566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VALUE_HIGH_QUALITY[] = "high-quality"; 37666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 37766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SHARPNESS[] = "sharpness"; 37866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_SHARPNESS[] = "min-sharpness"; 37966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_SHARPNESS[] = "max-sharpness"; 38066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SHARPNESS_STEP[] = "sharpness-step"; 38166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CONTRAST[] = "contrast"; 38266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_CONTRAST[] = "min-contrast"; 38366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_CONTRAST[] = "max-contrast"; 38466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_CONTRAST_STEP[] = "contrast-step"; 38566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SATURATION[] = "saturation"; 38666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_SATURATION[] = "min-saturation"; 38766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_SATURATION[] = "max-saturation"; 38866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SATURATION_STEP[] = "saturation-step"; 38966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_BRIGHTNESS[] = "luma-adaptation"; 39066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_BRIGHTNESS[] = "min-brightness"; 39166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_BRIGHTNESS[] = "max-brightness"; 39266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_BRIGHTNESS_STEP[] = "brightness-step"; 39366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SCE_FACTOR[] = "skinToneEnhancement"; 39466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MIN_SCE_FACTOR[] = "min-sce-factor"; 39566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_SCE_FACTOR[] = "max-sce-factor"; 39666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SCE_FACTOR_STEP[] = "sce-factor-step"; 39766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 39866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_CAMERA_FEATURES[] = "qc-camera-features"; 39966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_MAX_NUM_REQUESTED_FACES[] = "qc-max-num-requested-faces"; 40066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 40166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin//Values for DENOISE 40266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::DENOISE_OFF[] = "denoise-off"; 40366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::DENOISE_ON[] = "denoise-on"; 40466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 40566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for selectable zone af Settings 40666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FOCUS_ALGO_AUTO[] = "auto"; 40766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FOCUS_ALGO_SPOT_METERING[] = "spot-metering"; 40866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FOCUS_ALGO_CENTER_WEIGHTED[] = "center-weighted"; 40966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FOCUS_ALGO_FRAME_AVERAGE[] = "frame-average"; 41066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 41166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for HFR settings. 41266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_OFF[] = "off"; 41366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_2X[] = "60"; 41466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_3X[] = "90"; 41566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_4X[] = "120"; 41666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_5X[] = "150"; 41766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_6X[] = "180"; 41866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_7X[] = "210"; 41966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_8X[] = "240"; 42066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_HFR_9X[] = "480"; 42166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 42266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for HDR Bracketing settings. 42366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AE_BRACKET_OFF[] = "Off"; 42466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AE_BRACKET[] = "AE-Bracket"; 42566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 42666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for AF Bracketing setting. 42766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AF_BRACKET_OFF[] = "af-bracket-off"; 42866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::AF_BRACKET_ON[] = "af-bracket-on"; 42966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for Refocus setting. 43166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::RE_FOCUS_OFF[] = "re-focus-off"; 43266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::RE_FOCUS_ON[] = "re-focus-on"; 43366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for Chroma Flash setting. 43566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::CHROMA_FLASH_OFF[] = "chroma-flash-off"; 43666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::CHROMA_FLASH_ON[] = "chroma-flash-on"; 43766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for Opti Zoom setting. 43966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::OPTI_ZOOM_OFF[] = "opti-zoom-off"; 44066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::OPTI_ZOOM_ON[] = "opti-zoom-on"; 44166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 44266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for Still More setting. 44366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::STILL_MORE_OFF[] = "still-more-off"; 44466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::STILL_MORE_ON[] = "still-more-on"; 44566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 44666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for HDR mode setting. 44766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::HDR_MODE_SENSOR[] = "hdr-mode-sensor"; 44866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::HDR_MODE_MULTI_FRAME[] = "hdr-mode-multiframe"; 44966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 45066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for True Portrait setting. 45166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::TRUE_PORTRAIT_OFF[] = "true-portrait-off"; 45266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::TRUE_PORTRAIT_ON[] = "true-portrait-on"; 45366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 45466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for FLIP settings. 45566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FLIP_MODE_OFF[] = "off"; 45666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FLIP_MODE_V[] = "flip-v"; 45766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FLIP_MODE_H[] = "flip-h"; 45866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::FLIP_MODE_VH[] = "flip-vh"; 45966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 46066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::CDS_MODE_OFF[] = "off"; 46166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::CDS_MODE_ON[] = "on"; 46266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::CDS_MODE_AUTO[] = "auto"; 46366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 46466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Values for video rotation settings. 46566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_ROTATION_0[] = "0"; 46666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_ROTATION_90[] = "90"; 46766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_ROTATION_180[] = "180"; 46866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::VIDEO_ROTATION_270[] = "270"; 46966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 47066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_MANUAL_FOCUS_MODES[] = "manual-focus-modes"; 47166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_MANUAL_EXPOSURE_MODES[] = "manual-exposure-modes"; 47266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_SUPPORTED_MANUAL_WB_MODES[] = "manual-wb-modes"; 47366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_FOCUS_SCALE_MODE[] = "scale-mode"; 47466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_FOCUS_DIOPTER_MODE[] = "diopter-mode"; 47566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_ISO_PRIORITY[] = "iso-priority"; 47666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_EXP_TIME_PRIORITY[] = "exp-time-priority"; 47766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_USER_SETTING[] = "user-setting"; 47866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_WB_CCT_MODE[] = "color-temperature"; 47966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_WB_GAIN_MODE[] = "rbgb-gains"; 48066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_NOISE_REDUCTION_MODE[] = "noise-reduction-mode"; 48166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_NOISE_REDUCTION_MODE_VALUES[] = "noise-reduction-mode-values"; 48266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 48366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifdef TARGET_TS_MAKEUP 48466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_TS_MAKEUP[] = "tsmakeup"; 48566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_TS_MAKEUP_WHITEN[] = "tsmakeup_whiten"; 48666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_TS_MAKEUP_CLEAN[] = "tsmakeup_clean"; 48766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 48866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 48966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin//KEY to share HFR batch size with video encoder. 49066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char QCameraParameters::KEY_QC_VIDEO_BATCH_SIZE[] = "video-batch-size"; 49166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 49266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinstatic const char* portrait = "portrait"; 49366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinstatic const char* landscape = "landscape"; 49466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 49566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst cam_dimension_t QCameraParameters::THUMBNAIL_SIZES_MAP[] = { 49666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 512, 288 }, //1.777778 49766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 480, 288 }, //1.666667 49866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 256, 154 }, //1.66233 49966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 432, 288 }, //1.5 50066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 320, 320 }, //1.0 50166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 320, 240 }, //1.33333 50266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 176, 144 }, //1.222222 50366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Thumbnail sizes to match portrait picture size aspect ratio*/ 50466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 240, 320 }, //to match 480X640 & 240X320 picture size 50566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 144, 176 }, //to match 144X176 picture size 50666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 0, 0 } // required by Android SDK 50766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 50866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 50966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_auto_exposure_mode_type> 51066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::AUTO_EXPOSURE_MAP[] = { 51166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AUTO_EXPOSURE_FRAME_AVG, CAM_AEC_MODE_FRAME_AVERAGE }, 51266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AUTO_EXPOSURE_CENTER_WEIGHTED, CAM_AEC_MODE_CENTER_WEIGHTED }, 51366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AUTO_EXPOSURE_SPOT_METERING, CAM_AEC_MODE_SPOT_METERING }, 51466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AUTO_EXPOSURE_SMART_METERING, CAM_AEC_MODE_SMART_METERING }, 51566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AUTO_EXPOSURE_USER_METERING, CAM_AEC_MODE_USER_METERING }, 51666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AUTO_EXPOSURE_SPOT_METERING_ADV, CAM_AEC_MODE_SPOT_METERING_ADV }, 51766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AUTO_EXPOSURE_CENTER_WEIGHTED_ADV, CAM_AEC_MODE_CENTER_WEIGHTED_ADV }, 51866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 51966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 520d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst QCameraParameters::QCameraMap<cam_aec_convergence_type> 521d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch QCameraParameters::INSTANT_AEC_MODES_MAP[] = { 522d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch { KEY_QC_INSTANT_AEC_DISABLE, CAM_AEC_NORMAL_CONVERGENCE }, 523d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch { KEY_QC_INSTANT_AEC_AGGRESSIVE_AEC, CAM_AEC_AGGRESSIVE_CONVERGENCE }, 524d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch { KEY_QC_INSTANT_AEC_FAST_AEC, CAM_AEC_FAST_CONVERGENCE }, 525d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch}; 526d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 527d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschconst QCameraParameters::QCameraMap<cam_aec_convergence_type> 528d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch QCameraParameters::INSTANT_CAPTURE_MODES_MAP[] = { 529d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch { KEY_QC_INSTANT_CAPTURE_DISABLE, CAM_AEC_NORMAL_CONVERGENCE }, 530d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch { KEY_QC_INSTANT_CAPTURE_AGGRESSIVE_AEC, CAM_AEC_AGGRESSIVE_CONVERGENCE }, 531d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch { KEY_QC_INSTANT_CAPTURE_FAST_AEC, CAM_AEC_FAST_CONVERGENCE }, 532d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch}; 533d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 53466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_format_t> 53566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::PREVIEW_FORMATS_MAP[] = { 53666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {PIXEL_FORMAT_YUV420SP, CAM_FORMAT_YUV_420_NV21}, 53766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {PIXEL_FORMAT_YUV420P, CAM_FORMAT_YUV_420_YV12}, 53866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {PIXEL_FORMAT_YUV420SP_ADRENO, CAM_FORMAT_YUV_420_NV21_ADRENO}, 53966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {PIXEL_FORMAT_YV12, CAM_FORMAT_YUV_420_YV12}, 54066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {PIXEL_FORMAT_NV12, CAM_FORMAT_YUV_420_NV12}, 54166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_NV12_VENUS, CAM_FORMAT_YUV_420_NV12_VENUS} 54266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 54366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 54466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_format_t> 54566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::PICTURE_TYPES_MAP[] = { 54666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {PIXEL_FORMAT_JPEG, CAM_FORMAT_JPEG}, 54766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {PIXEL_FORMAT_YUV420SP, CAM_FORMAT_YUV_420_NV21}, 54866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {PIXEL_FORMAT_YUV422SP, CAM_FORMAT_YUV_422_NV16}, 54966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_YUV_RAW_8BIT_YUYV, CAM_FORMAT_YUV_RAW_8BIT_YUYV}, 55066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_YUV_RAW_8BIT_YVYU, CAM_FORMAT_YUV_RAW_8BIT_YVYU}, 55166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_YUV_RAW_8BIT_UYVY, CAM_FORMAT_YUV_RAW_8BIT_UYVY}, 55266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_YUV_RAW_8BIT_VYUY, CAM_FORMAT_YUV_RAW_8BIT_VYUY}, 55366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GBRG, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GBRG}, 55466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GRBG, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GRBG}, 55566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8RGGB, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_RGGB}, 55666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8BGGR, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_BGGR}, 55766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GBRG, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GBRG}, 55866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GRBG, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GRBG}, 55966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10RGGB, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_RGGB}, 56066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10BGGR, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_BGGR}, 56166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GBRG, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GBRG}, 56266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GRBG, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GRBG}, 56366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12RGGB, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_RGGB}, 56466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12BGGR, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_BGGR}, 5651687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_14GBRG, CAM_FORMAT_BAYER_QCOM_RAW_14BPP_GBRG}, 5661687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_14GRBG, CAM_FORMAT_BAYER_QCOM_RAW_14BPP_GRBG}, 5671687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_14RGGB, CAM_FORMAT_BAYER_QCOM_RAW_14BPP_RGGB}, 5681687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_14BGGR, CAM_FORMAT_BAYER_QCOM_RAW_14BPP_BGGR}, 56966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GBRG, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GBRG}, 57066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GRBG, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GRBG}, 57166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8RGGB, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_RGGB}, 57266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8BGGR, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_BGGR}, 57366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GBRG, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG}, 57466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GRBG, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GRBG}, 57566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10RGGB, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_RGGB}, 57666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10BGGR, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_BGGR}, 57766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GBRG, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GBRG}, 57866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GRBG, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GRBG}, 57966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12RGGB, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_RGGB}, 58066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12BGGR, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_BGGR}, 5811687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_14GBRG, CAM_FORMAT_BAYER_MIPI_RAW_14BPP_GBRG}, 5821687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_14GRBG, CAM_FORMAT_BAYER_MIPI_RAW_14BPP_GRBG}, 5831687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_14RGGB, CAM_FORMAT_BAYER_MIPI_RAW_14BPP_RGGB}, 5841687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_14BGGR, CAM_FORMAT_BAYER_MIPI_RAW_14BPP_BGGR}, 58566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GBRG}, 58666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GRBG}, 58766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_RGGB}, 58866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_BGGR}, 58966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GBRG}, 59066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GRBG}, 59166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_RGGB}, 59266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_BGGR}, 59366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GBRG}, 59466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GRBG}, 59566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_RGGB}, 59666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_BGGR}, 5971687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_14GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_GBRG}, 5981687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_14GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_GRBG}, 5991687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_14RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_RGGB}, 6001687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_14BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_BGGR}, 60166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GBRG}, 60266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GRBG}, 60366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_RGGB}, 60466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_BGGR}, 60566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GBRG}, 60666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GRBG}, 60766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_RGGB}, 60866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_BGGR}, 60966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GBRG}, 61066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GRBG}, 61166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_RGGB}, 61266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_BGGR}, 6131687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_14GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_GBRG}, 6141687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_14GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_GRBG}, 6151687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_14RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_RGGB}, 6161687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_14BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_BGGR}, 61766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GBRG}, 61866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GRBG}, 61966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_RGGB}, 62066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_BGGR}, 62166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GBRG}, 62266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GRBG}, 62366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_RGGB}, 62466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_BGGR}, 62566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GBRG}, 62666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GRBG}, 62766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_RGGB}, 62866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_BGGR}, 62966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GBRG}, 63066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GRBG}, 63166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_RGGB}, 6321687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_BGGR}, 6331687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_14GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_14BPP_GBRG}, 6341687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_14GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_14BPP_GRBG}, 6351687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_14RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_14BPP_RGGB}, 6361687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_14BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_14BPP_BGGR} 63766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 63866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 63966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_focus_mode_type> 64066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::FOCUS_MODES_MAP[] = { 64166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_MODE_AUTO, CAM_FOCUS_MODE_AUTO }, 64266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_MODE_INFINITY, CAM_FOCUS_MODE_INFINITY }, 64366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_MODE_MACRO, CAM_FOCUS_MODE_MACRO }, 64466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_MODE_FIXED, CAM_FOCUS_MODE_FIXED }, 64566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_MODE_EDOF, CAM_FOCUS_MODE_EDOF }, 64666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_MODE_CONTINUOUS_PICTURE, CAM_FOCUS_MODE_CONTINOUS_PICTURE }, 64766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_MODE_CONTINUOUS_VIDEO, CAM_FOCUS_MODE_CONTINOUS_VIDEO }, 64866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_MODE_MANUAL_POSITION, CAM_FOCUS_MODE_MANUAL}, 64966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 65066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 65166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_effect_mode_type> 65266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::EFFECT_MODES_MAP[] = { 65366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_NONE, CAM_EFFECT_MODE_OFF }, 65466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_MONO, CAM_EFFECT_MODE_MONO }, 65566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_NEGATIVE, CAM_EFFECT_MODE_NEGATIVE }, 65666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_SOLARIZE, CAM_EFFECT_MODE_SOLARIZE }, 65766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_SEPIA, CAM_EFFECT_MODE_SEPIA }, 65866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_POSTERIZE, CAM_EFFECT_MODE_POSTERIZE }, 65966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_WHITEBOARD, CAM_EFFECT_MODE_WHITEBOARD }, 66066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_BLACKBOARD, CAM_EFFECT_MODE_BLACKBOARD }, 66166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_AQUA, CAM_EFFECT_MODE_AQUA }, 66266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_EMBOSS, CAM_EFFECT_MODE_EMBOSS }, 66366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_SKETCH, CAM_EFFECT_MODE_SKETCH }, 66466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_NEON, CAM_EFFECT_MODE_NEON }, 66566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { EFFECT_BEAUTY, CAM_EFFECT_MODE_BEAUTY } 66666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 66766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 66866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_scene_mode_type> 66966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::SCENE_MODES_MAP[] = { 67066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_AUTO, CAM_SCENE_MODE_OFF }, 67166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_ACTION, CAM_SCENE_MODE_ACTION }, 67266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_PORTRAIT, CAM_SCENE_MODE_PORTRAIT }, 67366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_LANDSCAPE, CAM_SCENE_MODE_LANDSCAPE }, 67466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_NIGHT, CAM_SCENE_MODE_NIGHT }, 67566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_NIGHT_PORTRAIT, CAM_SCENE_MODE_NIGHT_PORTRAIT }, 67666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_THEATRE, CAM_SCENE_MODE_THEATRE }, 67766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_BEACH, CAM_SCENE_MODE_BEACH }, 67866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_SNOW, CAM_SCENE_MODE_SNOW }, 67966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_SUNSET, CAM_SCENE_MODE_SUNSET }, 68066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_STEADYPHOTO, CAM_SCENE_MODE_ANTISHAKE }, 68166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_FIREWORKS , CAM_SCENE_MODE_FIREWORKS }, 68266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_SPORTS , CAM_SCENE_MODE_SPORTS }, 68366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_PARTY, CAM_SCENE_MODE_PARTY }, 68466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_CANDLELIGHT, CAM_SCENE_MODE_CANDLELIGHT }, 68566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_ASD, CAM_SCENE_MODE_AUTO }, 68666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_BACKLIGHT, CAM_SCENE_MODE_BACKLIGHT }, 68766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_FLOWERS, CAM_SCENE_MODE_FLOWERS }, 68866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_AR, CAM_SCENE_MODE_AR }, 68966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { SCENE_MODE_HDR, CAM_SCENE_MODE_HDR }, 69066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 69166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 69266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_flash_mode_t> 69366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::FLASH_MODES_MAP[] = { 69466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FLASH_MODE_OFF, CAM_FLASH_MODE_OFF }, 69566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FLASH_MODE_AUTO, CAM_FLASH_MODE_AUTO }, 69666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FLASH_MODE_ON, CAM_FLASH_MODE_ON }, 69766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FLASH_MODE_TORCH, CAM_FLASH_MODE_TORCH } 69866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 69966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 70066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_focus_algorithm_type> 70166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::FOCUS_ALGO_MAP[] = { 70266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_ALGO_AUTO, CAM_FOCUS_ALGO_AUTO }, 70366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_ALGO_SPOT_METERING, CAM_FOCUS_ALGO_SPOT }, 70466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_ALGO_CENTER_WEIGHTED, CAM_FOCUS_ALGO_CENTER_WEIGHTED }, 70566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { FOCUS_ALGO_FRAME_AVERAGE, CAM_FOCUS_ALGO_AVERAGE } 70666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 70766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 70866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_wb_mode_type> 70966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::WHITE_BALANCE_MODES_MAP[] = { 71066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_AUTO, CAM_WB_MODE_AUTO }, 71166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_INCANDESCENT, CAM_WB_MODE_INCANDESCENT }, 71266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_FLUORESCENT, CAM_WB_MODE_FLUORESCENT }, 71366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_WARM_FLUORESCENT,CAM_WB_MODE_WARM_FLUORESCENT}, 71466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_DAYLIGHT, CAM_WB_MODE_DAYLIGHT }, 71566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_CLOUDY_DAYLIGHT, CAM_WB_MODE_CLOUDY_DAYLIGHT }, 71666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_TWILIGHT, CAM_WB_MODE_TWILIGHT }, 71766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_SHADE, CAM_WB_MODE_SHADE }, 71866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { WHITE_BALANCE_MANUAL, CAM_WB_MODE_MANUAL}, 71966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 72066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 72166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_antibanding_mode_type> 72266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::ANTIBANDING_MODES_MAP[] = { 72366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ANTIBANDING_OFF, CAM_ANTIBANDING_MODE_OFF }, 72466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ANTIBANDING_50HZ, CAM_ANTIBANDING_MODE_50HZ }, 72566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ANTIBANDING_60HZ, CAM_ANTIBANDING_MODE_60HZ }, 72666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ANTIBANDING_AUTO, CAM_ANTIBANDING_MODE_AUTO } 72766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 72866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 72966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_iso_mode_type> 73066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::ISO_MODES_MAP[] = { 73166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ISO_AUTO, CAM_ISO_MODE_AUTO }, 73266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ISO_HJR, CAM_ISO_MODE_DEBLUR }, 73366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ISO_100, CAM_ISO_MODE_100 }, 73466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ISO_200, CAM_ISO_MODE_200 }, 73566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ISO_400, CAM_ISO_MODE_400 }, 73666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ISO_800, CAM_ISO_MODE_800 }, 73766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ISO_1600, CAM_ISO_MODE_1600 }, 73866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { ISO_3200, CAM_ISO_MODE_3200 } 73966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 74066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 74166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_hfr_mode_t> 74266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::HFR_MODES_MAP[] = { 74366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_OFF, CAM_HFR_MODE_OFF }, 74466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_2X, CAM_HFR_MODE_60FPS }, 74566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_3X, CAM_HFR_MODE_90FPS }, 74666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_4X, CAM_HFR_MODE_120FPS }, 74766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_5X, CAM_HFR_MODE_150FPS }, 74866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_6X, CAM_HFR_MODE_180FPS }, 74966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_7X, CAM_HFR_MODE_210FPS }, 75066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_8X, CAM_HFR_MODE_240FPS }, 75166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_HFR_9X, CAM_HFR_MODE_480FPS } 75266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 75366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 75466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_bracket_mode> 75566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::BRACKETING_MODES_MAP[] = { 75666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AE_BRACKET_OFF, CAM_EXP_BRACKETING_OFF }, 75766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AE_BRACKET, CAM_EXP_BRACKETING_ON } 75866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 75966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 76066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 76166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::ON_OFF_MODES_MAP[] = { 76266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_OFF, 0 }, 76366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_ON, 1 } 76466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 76566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 76666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 76766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::TOUCH_AF_AEC_MODES_MAP[] = { 76866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { QCameraParameters::TOUCH_AF_AEC_OFF, 0 }, 76966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { QCameraParameters::TOUCH_AF_AEC_ON, 1 } 77066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 77166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 77266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 77366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::ENABLE_DISABLE_MODES_MAP[] = { 77466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_ENABLE, 1 }, 77566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_DISABLE, 0 } 77666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 77766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 77866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 77966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::DENOISE_ON_OFF_MODES_MAP[] = { 78066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { DENOISE_OFF, 0 }, 78166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { DENOISE_ON, 1 } 78266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 78366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 78466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 78566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::TRUE_FALSE_MODES_MAP[] = { 78666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_FALSE, 0}, 78766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_TRUE, 1} 78866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 78966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 79066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_flip_t> 79166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::FLIP_MODES_MAP[] = { 79266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {FLIP_MODE_OFF, FLIP_NONE}, 79366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {FLIP_MODE_V, FLIP_V}, 79466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {FLIP_MODE_H, FLIP_H}, 79566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin {FLIP_MODE_VH, FLIP_V_H} 79666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 79766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 79866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 79966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::AF_BRACKETING_MODES_MAP[] = { 80066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AF_BRACKET_OFF, 0 }, 80166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { AF_BRACKET_ON, 1 } 80266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 80366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 80466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 80566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::RE_FOCUS_MODES_MAP[] = { 80666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { RE_FOCUS_OFF, 0 }, 80766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { RE_FOCUS_ON, 1 } 80866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 80966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 81066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 81166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::CHROMA_FLASH_MODES_MAP[] = { 81266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { CHROMA_FLASH_OFF, 0 }, 81366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { CHROMA_FLASH_ON, 1 } 81466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 81566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 81666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 81766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::OPTI_ZOOM_MODES_MAP[] = { 81866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { OPTI_ZOOM_OFF, 0 }, 81966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { OPTI_ZOOM_ON, 1 } 82066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 82166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 82266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 82366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::TRUE_PORTRAIT_MODES_MAP[] = { 82466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { TRUE_PORTRAIT_OFF, 0 }, 82566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { TRUE_PORTRAIT_ON, 1 } 82666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 82766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 82866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 82966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::STILL_MORE_MODES_MAP[] = { 83066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { STILL_MORE_OFF, 0 }, 83166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { STILL_MORE_ON, 1 } 83266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 83366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 83466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<cam_cds_mode_type_t> 83566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::CDS_MODES_MAP[] = { 83666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { CDS_MODE_OFF, CAM_CDS_MODE_OFF }, 83766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { CDS_MODE_ON, CAM_CDS_MODE_ON }, 83866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { CDS_MODE_AUTO, CAM_CDS_MODE_AUTO} 83966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 84066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 84166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 84266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::HDR_MODES_MAP[] = { 84366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { HDR_MODE_SENSOR, 0 }, 84466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { HDR_MODE_MULTI_FRAME, 1 } 84566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 84666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 84766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 84866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::VIDEO_ROTATION_MODES_MAP[] = { 84966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_ROTATION_0, 0 }, 85066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_ROTATION_90, 90 }, 85166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_ROTATION_180, 180 }, 85266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VIDEO_ROTATION_270, 270 } 85366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 85466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 85566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst QCameraParameters::QCameraMap<int> 85666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::NOISE_REDUCTION_MODES_MAP[] = { 85766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_OFF, 0 }, 85866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_FAST, 1 }, 85966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { VALUE_HIGH_QUALITY, 2 } 86066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 86166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 86266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define DEFAULT_CAMERA_AREA "(0, 0, 0, 0, 0)" 86366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define DATA_PTR(MEM_OBJ,INDEX) MEM_OBJ->getPtr( INDEX ) 86466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define TOTAL_RAM_SIZE_512MB 536870912 86566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define PARAM_MAP_SIZE(MAP) (sizeof(MAP)/sizeof(MAP[0])) 86666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 86766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 86866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isOEMFeat1PropEnabled 86966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 87066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: inline function to check from property if custom feature 87166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * is enabled 87266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 87366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 87466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 87566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : boolean true/false 87666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 87766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinstatic inline bool isOEMFeat1PropEnabled() 87866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 87966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 88066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.imglib.oemfeat1", value, "0"); 88166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return atoi(value) > 0 ? true : false; 88266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 88366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 88466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 88566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : QCameraParameters 88666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 88766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: default constructor of QCameraParameters 88866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 88966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 89066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 89166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : None 89266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 89366f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinQCameraParameters::QCameraParameters() 89466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin : CameraParameters(), 89566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_reprocScaleParam(), 89666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability(NULL), 89766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl(NULL), 89866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap(NULL), 89966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamBuf(NULL), 90066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncHeap(NULL), 90166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf(NULL), 90266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mIsType(IS_TYPE_NONE), 90366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode(false), 90466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode_new(false), 90566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bForceZslMode(false), 90666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRecordingHint(false), 90766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRecordingHint_new(false), 90866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHistogramEnabled(false), 90966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bLongshotEnabled(false), 91066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nFaceProcMask(0), 91166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bFaceDetectionOn(0), 91266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDebugFps(false), 91366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFocusMode(CAM_FOCUS_MODE_MAX), 91466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPreviewFormat(CAM_FORMAT_YUV_420_NV21), 91566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mAppPreviewFormat(CAM_FORMAT_YUV_420_NV21), 91666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPictureFormat(CAM_FORMAT_JPEG), 91766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart(false), 91866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNoDisplayMode(false), 91966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bWNROn(false), 92066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn(false), 92166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRVideoOn(false), 92266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRSnapshotOn(false), 92366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bInited(false), 92466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nRetroBurstNum(0), 92566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nBurstLEDOnPeriod(100), 92666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bUpdateEffects(false), 92766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSceneTransitionAuto(false), 92866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bPreviewFlipChanged(false), 92966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bVideoFlipChanged(false), 93066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSnapshotFlipChanged(false), 93166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bFixedFrameRateSet(false), 93266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDREnabled(false), 93366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAVTimerEnabled(false), 93466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDISEnabled(false), 93566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_MobiMask(0), 93666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_AdjustFPS(NULL), 93766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xFrameEnabled(false), 93866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_HDRSceneEnabled(false), 93966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDRThumbnailProcessNeeded(false), 94066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xExtraBufferNeeded(true), 94166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDROutputCropEnabled(false), 94266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_tempMap(), 94366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAFBracketingOn(false), 94466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bReFocusOn(false), 94566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bChromaFlashOn(false), 94666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bOptiZoomOn(false), 94766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSceneSelection(false), 94866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_SelectedScene(CAM_SCENE_MODE_MAX), 94966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSeeMoreOn(false), 95066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bStillMoreOn(false), 95166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHighQualityNoiseReductionMode(false), 95266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHfrMode(false), 95366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSensorHDREnabled(false), 95466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRdiMode(false), 95566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSecureMode(false), 95666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAeBracketingEnabled(false), 95766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFlashValue(CAM_FLASH_MODE_OFF), 95866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFlashDaemonValue(CAM_FLASH_MODE_OFF), 95966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mHfrMode(CAM_HFR_MODE_OFF), 96066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDRModeSensor(true), 96166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mOfflineRAW(false), 96266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTruePortraitOn(false), 96366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bIsLowMemoryDevice(false), 96466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCds_mode(CAM_CDS_MODE_OFF), 96566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LLCaptureEnabled(FALSE), 96666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LowLightLevel(CAM_LOW_LIGHT_OFF), 96766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bLtmForSeeMoreEnabled(false), 96866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_expTime(0), 96966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_isoValue(0), 97066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_ManualCaptureMode(CAM_MANUAL_CAPTURE_TYPE_OFF), 971d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_dualLedCalibration(0), 972d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_bInstantAEC(false), 973d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_bInstantCapture(false), 974d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch mAecFrameBound(0), 975d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch mAecSkipDisplayFrameBound(0) 97666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 97766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 97866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // TODO: may move to parameter instead of sysprop 97966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.debug.sf.showfps", value, "0"); 98066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDebugFps = atoi(value) > 0 ? true : false; 98166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 98266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // For thermal mode, it should be set as system property 98366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // because system property applies to all applications, while 98466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // parameters only apply to specific app. 98566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.thermal.mode", value, "fps"); 98666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(value, "frameskip")) { 98766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_ThermalMode = QCAMERA_THERMAL_ADJUST_FRAMESKIP; 98866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 98966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(value, "fps")) 99066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("Invalid camera thermal mode %s", value); 99166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_ThermalMode = QCAMERA_THERMAL_ADJUST_FPS; 99266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 99366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 99466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0, sizeof(value)); 99566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // As per Power/Quality evaluation, LTM is enabled by default in SeeMore/StillMore usecase 99666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // to improve the quality as there is no much impact to power 99766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.ltmforseemore", value, "1"); 99866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bLtmForSeeMoreEnabled = atoi(value); 99966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 100066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_LiveSnapshotSize, 0, sizeof(m_LiveSnapshotSize)); 100166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_default_fps_range, 0, sizeof(m_default_fps_range)); 100266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_hfrFpsRange, 0, sizeof(m_hfrFpsRange)); 100366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_stillmore_config, 0, sizeof(cam_still_more_t)); 100466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_captureFrameConfig, 0, sizeof(cam_capture_frame_config_t)); 100566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_relCamSyncInfo, 0, sizeof(cam_sync_related_sensors_event_info_t)); 100666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalPPCount = 1; 100766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mZoomLevel = 0; 100866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mParmZoomLevel = 0; 100966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCurPPCount = 0; 101066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mBufBatchCnt = 0; 101166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mRotation = 0; 101266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mJpegRotation = 0; 101366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mVideoBatchSize = 0; 101466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bOEMFeatEnabled = isOEMFeat1PropEnabled(); 101566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 101666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 101766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 101866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : QCameraParameters 101966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 102066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: constructor of QCameraParameters 102166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 102266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 102366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : parameters in string 102466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 102566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : None 102666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 102766f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinQCameraParameters::QCameraParameters(const String8 ¶ms) 102866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin : CameraParameters(params), 102966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_reprocScaleParam(), 103066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability(NULL), 103166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl(NULL), 103266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap(NULL), 103366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamBuf(NULL), 103466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncHeap(NULL), 103566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf(NULL), 103666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode(false), 103766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode_new(false), 103866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bForceZslMode(false), 103966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRecordingHint(false), 104066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRecordingHint_new(false), 104166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHistogramEnabled(false), 104266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bLongshotEnabled(false), 104366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nFaceProcMask(0), 104466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDebugFps(false), 104566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFocusMode(CAM_FOCUS_MODE_MAX), 104666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPreviewFormat(CAM_FORMAT_YUV_420_NV21), 104766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mAppPreviewFormat(CAM_FORMAT_YUV_420_NV21), 104866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPictureFormat(CAM_FORMAT_JPEG), 104966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart(false), 105066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNoDisplayMode(false), 105166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bWNROn(false), 105266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn(false), 105366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRVideoOn(false), 105466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRSnapshotOn(false), 105566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bInited(false), 105666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nRetroBurstNum(0), 105766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nBurstLEDOnPeriod(100), 105866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bPreviewFlipChanged(false), 105966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bVideoFlipChanged(false), 106066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSnapshotFlipChanged(false), 106166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bFixedFrameRateSet(false), 106266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDREnabled(false), 106366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAVTimerEnabled(false), 106466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_AdjustFPS(NULL), 106566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xFrameEnabled(false), 106666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_HDRSceneEnabled(false), 106766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDRThumbnailProcessNeeded(false), 106866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xExtraBufferNeeded(true), 106966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDROutputCropEnabled(false), 107066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_tempMap(), 107166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAFBracketingOn(false), 107266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bReFocusOn(false), 107366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bChromaFlashOn(false), 107466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bOptiZoomOn(false), 107566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSceneSelection(false), 107666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_SelectedScene(CAM_SCENE_MODE_MAX), 107766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSeeMoreOn(false), 107866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bStillMoreOn(false), 107966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHighQualityNoiseReductionMode(false), 108066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHfrMode(false), 108166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSensorHDREnabled(false), 108266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRdiMode(false), 108366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSecureMode(false), 108466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAeBracketingEnabled(false), 108566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFlashValue(CAM_FLASH_MODE_OFF), 108666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFlashDaemonValue(CAM_FLASH_MODE_OFF), 108766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mHfrMode(CAM_HFR_MODE_OFF), 108866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDRModeSensor(true), 108966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mOfflineRAW(false), 109066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTruePortraitOn(false), 109166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bIsLowMemoryDevice(false), 109266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCds_mode(CAM_CDS_MODE_OFF), 109366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mParmEffect(CAM_EFFECT_MODE_OFF), 109466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LLCaptureEnabled(FALSE), 109566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LowLightLevel(CAM_LOW_LIGHT_OFF), 109666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bLtmForSeeMoreEnabled(false), 109766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_expTime(0), 109866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_isoValue(0), 109966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_ManualCaptureMode(CAM_MANUAL_CAPTURE_TYPE_OFF), 1100d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_dualLedCalibration(0), 1101d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_bInstantAEC(false), 1102d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_bInstantCapture(false), 1103d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch mAecFrameBound(0), 1104d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch mAecSkipDisplayFrameBound(0) 110566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 110666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_LiveSnapshotSize, 0, sizeof(m_LiveSnapshotSize)); 110766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_default_fps_range, 0, sizeof(m_default_fps_range)); 110866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_hfrFpsRange, 0, sizeof(m_hfrFpsRange)); 110966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_stillmore_config, 0, sizeof(cam_still_more_t)); 111066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_relCamSyncInfo, 0, sizeof(cam_sync_related_sensors_event_info_t)); 111166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalPPCount = 0; 111266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mZoomLevel = 0; 111366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mParmZoomLevel = 0; 111466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCurPPCount = 0; 111566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mRotation = 0; 111666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mJpegRotation = 0; 111766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mBufBatchCnt = 0; 111866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mVideoBatchSize = 0; 111966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bOEMFeatEnabled = isOEMFeat1PropEnabled(); 112066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 112166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 112266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 112366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : ~QCameraParameters 112466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 112566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: deconstructor of QCameraParameters 112666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 112766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 112866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 112966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : None 113066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 113166f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinQCameraParameters::~QCameraParameters() 113266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 113366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin deinit(); 113466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 113566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 113666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 113766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : createSizesString 113866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 113966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: create string obj contains array of dimensions 114066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 114166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 114266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sizes : array of dimensions 114366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @len : size of dimension array 114466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 114566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string obj 114666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 114766f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinString8 QCameraParameters::createSizesString(const cam_dimension_t *sizes, size_t len) 114866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 114966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 115066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char buffer[32]; 115166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 115266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (len > 0) { 115366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), "%dx%d", sizes[0].width, sizes[0].height); 115466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 115566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 115666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 1; i < len; i++) { 115766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), ",%dx%d", 115866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sizes[i].width, sizes[i].height); 115966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 116066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 116166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return str; 116266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 116366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 116466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 116566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : createValuesString 116666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 116766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: create string obj contains array of values from map when matched 116866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * from input values array 116966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 117066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 117166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @values : array of values 117266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @len : size of values array 117366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @map : map contains the mapping between values and enums 117466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @map_len : size of the map 117566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 117666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string obj 117766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 117866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintemplate <typename valuesType, class mapType> String8 createValuesString( 117966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const valuesType *values, size_t len, const mapType *map, size_t map_len) 118066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 118166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 118266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int count = 0; 118366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 118466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < len; i++ ) { 118566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t j = 0; j < map_len; j ++) 118666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (map[j].val == values[i]) { 118766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != map[j].desc) { 118866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (count > 0) { 118966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(","); 119066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 119166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(map[j].desc); 119266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin count++; 119366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; //loop j 119466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 119566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 119666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 119766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return str; 119866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 119966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 120066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 120166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : createValuesStringFromMap 120266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 120366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: create string obj contains array of values directly from map 120466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 120566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 120666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @map : map contains the mapping between values and enums 120766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @map_len : size of the map 120866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 120966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string obj 121066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 121166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintemplate <class mapType> String8 createValuesStringFromMap( 121266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const mapType *map, size_t map_len) 121366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 121466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 121566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 121666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < map_len; i++) { 121766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != map[i].desc) { 121866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (i > 0) { 121966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(","); 122066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 122166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(map[i].desc); 122266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 122366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 122466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return str; 122566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 122666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 122766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 122866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : createZoomRatioValuesString 122966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 123066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: create string obj contains array of zoom ratio values 123166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 123266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 123366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @zoomRaios : array of zoom ratios 123466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @length : size of the array 123566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 123666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string obj 123766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 123866f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinString8 QCameraParameters::createZoomRatioValuesString(uint32_t *zoomRatios, 123966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t length) 124066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 124166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 124266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char buffer[32] = {0}; 124366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 124466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(length > 0){ 124566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), "%d", zoomRatios[0]); 124666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 124766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 124866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 124966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 1; i < length; i++) { 125066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(buffer, 0, sizeof(buffer)); 125166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), ",%d", zoomRatios[i]); 125266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 125366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 125466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return str; 125566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 125666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 125766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 125866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : createHfrValuesString 125966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 126066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: create string obj contains array of hfr values from map when 126166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * matched from input hfr values 126266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 126366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 126466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @values : array of hfr info 126566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @len : size of the array 126666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @map : map of hfr string value and enum 126766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * map_len : size of map 126866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 126966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string obj 127066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 127166f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinString8 QCameraParameters::createHfrValuesString(const cam_hfr_info_t *values, 127266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t len, const QCameraMap<cam_hfr_mode_t> *map, size_t map_len) 127366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 127466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 127566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int count = 0; 127666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 127766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 127866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t batch_count = 0; 127966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 128066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.batchcount", value, "0"); 128166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin batch_count = atoi(value); 128266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 128366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < len; i++ ) { 128466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t j = 0; j < map_len; j ++) { 128566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((batch_count < CAMERA_MIN_BATCH_COUNT) 128666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && (map[j].val > CAM_HFR_MODE_120FPS)) { 128766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*TODO: Work around. Need to revert when we have 128866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin complete 240fps support*/ 128966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 129066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 129166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (map[j].val == (int)values[i].mode) { 129266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != map[j].desc) { 129366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (count > 0) { 129466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(","); 129566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 129666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(map[j].desc); 129766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin count++; 129866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; //loop j 129966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 130066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 130166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 130266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 130366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (count > 0) { 130466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(","); 130566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 130666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(VIDEO_HFR_OFF); 130766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return str; 130866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 130966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 131066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 131166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : createHfrSizesString 131266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 131366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: create string obj contains array of hfr sizes 131466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 131566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 131666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @values : array of hfr info 131766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @len : size of the array 131866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 131966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string obj 132066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 132166f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinString8 QCameraParameters::createHfrSizesString(const cam_hfr_info_t *values, size_t len) 132266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 132366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 132466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char buffer[32]; 132566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 132666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (len > 0) { 132766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), "%dx%d", 132866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin values[0].dim.width, values[0].dim.height); 132966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 133066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 133166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 1; i < len; i++) { 133266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), ",%dx%d", 133366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin values[i].dim.width, values[i].dim.height); 133466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 133566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 133666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return str; 133766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 133866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 133966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 134066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : createFpsString 134166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 134266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: create string obj contains array of FPS rates 134366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 134466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 134566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @fps : default fps range 134666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 134766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string obj 134866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 134966f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinString8 QCameraParameters::createFpsString(cam_fps_range_t &fps) 135066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 135166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char buffer[32]; 135266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 fpsValues; 135366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 135466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int min_fps = int(fps.min_fps); 135566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int max_fps = int(fps.max_fps); 135666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 135766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (min_fps < fps.min_fps){ 135866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps++; 135966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 136066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (max_fps > fps.max_fps) { 136166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps--; 136266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 136366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (min_fps <= max_fps) { 136466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), "%d", min_fps); 136566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fpsValues.append(buffer); 136666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 136766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 136866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (int i = min_fps+1; i <= max_fps; i++) { 136966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), ",%d", i); 137066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fpsValues.append(buffer); 137166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 137266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 137366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return fpsValues; 137466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 137566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 137666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 137766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : createFpsRangeString 137866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 137966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: create string obj contains array of FPS ranges 138066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 138166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 138266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @fps : array of fps ranges 138366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @len : size of the array 138466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @default_fps_index : reference to index of default fps range 138566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 138666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string obj 138766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 138866f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinString8 QCameraParameters::createFpsRangeString(const cam_fps_range_t* fps, 138966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t len, int &default_fps_index) 139066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 139166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 139266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char buffer[32]; 139366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int max_range = 0; 139466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int min_fps, max_fps; 139566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 139666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (len > 0) { 139766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = int(fps[0].min_fps * 1000); 139866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = int(fps[0].max_fps * 1000); 139966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_range = max_fps - min_fps; 140066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default_fps_index = 0; 140166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), "(%d,%d)", min_fps, max_fps); 140266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 140366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 140466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 1; i < len; i++) { 140566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = int(fps[i].min_fps * 1000); 140666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = int(fps[i].max_fps * 1000); 140766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (max_range < (max_fps - min_fps)) { 140866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_range = max_fps - min_fps; 140966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default_fps_index = (int)i; 141066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 141166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), ",(%d,%d)", min_fps, max_fps); 141266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 141366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 141466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return str; 141566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 141666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 141766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 141866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : lookupAttr 141966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 142066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: lookup a value by its name 142166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 142266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 142366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @attr : map contains <name, value> 142466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @len : size of the map 142566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @name : name to be looked up 142666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 142766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : valid value if found 142866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NAME_NOT_FOUND if not found 142966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 143066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintemplate <class mapType> int lookupAttr(const mapType *arr, 143166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t len, const char *name) 143266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 143366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (name) { 143466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < len; i++) { 143566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(arr[i].desc, name)) 143666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return arr[i].val; 143766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 143866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 143966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NAME_NOT_FOUND; 144066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 144166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 144266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 144366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : lookupNameByValue 144466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 144566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: lookup a name by its value 144666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 144766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 144866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @attr : map contains <name, value> 144966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @len : size of the map 145066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @value : value to be looked up 145166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 145266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : name str or NULL if not found 145366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 145466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintemplate <class mapType> const char *lookupNameByValue(const mapType *arr, 145566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t len, int value) 145666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 145766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < len; i++) { 145866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (arr[i].val == value) { 145966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return arr[i].desc; 146066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 146166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 146266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NULL; 146366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 146466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 146566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 146666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setPreviewSize 146766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 146866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set preview size from user setting 146966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 147066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 147166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 147266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 147366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 147466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 147566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 147666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 147766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setPreviewSize(const QCameraParameters& params) 147866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 147966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int width = 0, height = 0; 148066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int old_width = 0, old_height = 0; 148166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getPreviewSize(&width, &height); 148266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::getPreviewSize(&old_width, &old_height); 148366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 148466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Validate the preview size 148566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->preview_sizes_tbl_cnt; ++i) { 148666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width == m_pCapability->preview_sizes_tbl[i].width 148766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && height == m_pCapability->preview_sizes_tbl[i].height) { 148866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if need to restart preview in case of preview size change 148966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width != old_width || height != old_height) { 149066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGI("Requested preview size %d x %d", width, height); 149166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 149266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 149366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set the new value 149466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPreviewSize(width, height); 149566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 149666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 149766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 149866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.mode == CAM_MODE_SECONDARY) { 149966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 150066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set prop to configure aux preview size 150166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.aux.preview.size", prop, "0"); 150266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin parse_pair(prop, &width, &height, 'x', NULL); 150366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool foundMatch = false; 150466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->preview_sizes_tbl_cnt; ++i) { 150566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width == m_pCapability->preview_sizes_tbl[i].width && 150666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height == m_pCapability->preview_sizes_tbl[i].height) { 150766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin foundMatch = true; 150866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 150966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 151066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!foundMatch) { 151166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin width = m_pCapability->preview_sizes_tbl[0].width; 151266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height = m_pCapability->preview_sizes_tbl[0].height; 151366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 151466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if need to restart preview in case of preview size change 151566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width != old_width || height != old_height) { 151666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 151766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 151866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPreviewSize(width, height); 151966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Secondary Camera: preview size %d x %d", width, height); 152066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 152166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 152266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 152366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid preview size requested: %dx%d", width, height); 152466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 152566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 152666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 152766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 152866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setPictureSize 152966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 153066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set picture size from user setting 153166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 153266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 153366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 153466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 153566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 153666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 153766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 153866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 153966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setPictureSize(const QCameraParameters& params) 154066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 154166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int width, height; 154266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getPictureSize(&width, &height); 154366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int old_width, old_height; 154466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::getPictureSize(&old_width, &old_height); 154566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 154666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Validate the picture size 154766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!m_reprocScaleParam.isScaleEnabled()){ 154866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->picture_sizes_tbl_cnt; ++i) { 154966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width == m_pCapability->picture_sizes_tbl[i].width 155066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && height == m_pCapability->picture_sizes_tbl[i].height) { 155166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if need to restart preview in case of picture size change 155266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_bZslMode || m_bRecordingHint) && 155366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (width != old_width || height != old_height)) { 155466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGI("Requested picture size %d x %d", width, height); 155566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 155666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 155766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set the new value 155866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPictureSize(width, height); 155966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Update View angles based on Picture Aspect ratio 156066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateViewAngles(); 156166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 156266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 156366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 156466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{ 156566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //should use scaled picture size table to validate 156666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_reprocScaleParam.setValidatePicSize(width, height) == NO_ERROR){ 156766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if need to restart preview in case of picture size change 156866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_bZslMode || m_bRecordingHint) && 156966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (width != old_width || height != old_height)) { 157066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 157166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 157266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set the new value 157366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[32]; 157466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%dx%d", width, height); 157566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_PICTURE_SIZE, val); 157666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("%s", val); 157766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Update View angles based on Picture Aspect ratio 157866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateViewAngles(); 157966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 158066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 158166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 158266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.mode == CAM_MODE_SECONDARY) { 158366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 158466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set prop to configure aux preview size 158566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.aux.picture.size", prop, "0"); 158666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin parse_pair(prop, &width, &height, 'x', NULL); 158766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool foundMatch = false; 158866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->picture_sizes_tbl_cnt; ++i) { 158966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width == m_pCapability->picture_sizes_tbl[i].width && 159066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height == m_pCapability->picture_sizes_tbl[i].height) { 159166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin foundMatch = true; 159266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 159366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 159466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!foundMatch) { 159566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin width = m_pCapability->picture_sizes_tbl[0].width; 159666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height = m_pCapability->picture_sizes_tbl[0].height; 159766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 159866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if need to restart preview in case of preview size change 159966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width != old_width || height != old_height) { 160066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 160166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 160266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[32]; 160366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%dx%d", width, height); 160466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_PICTURE_SIZE, val); 160566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Secondary Camera: picture size %s", val); 160666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 160766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 160866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid picture size requested: %dx%d", width, height); 160966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 161066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 161166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 161266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 161366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateViewAngles 161466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 161566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Update the Horizontal & Vertical based on the Aspect ratio of Preview and 161666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Picture aspect ratio 161766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 161866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 161966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 162066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 162166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 162266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::updateViewAngles() 162366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 162466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double stillAspectRatio, maxPictureAspectRatio; 162566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int stillWidth, stillHeight, maxWidth, maxHeight; 162666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // The crop factors from the full sensor array to the still picture crop region 162766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double horizCropFactor = 1.f,vertCropFactor = 1.f; 162866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float horizViewAngle, vertViewAngle, maxHfov, maxVfov; 162966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 163066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Get current Picture & max Snapshot sizes 163166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPictureSize(&stillWidth, &stillHeight); 163266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin maxWidth = m_pCapability->picture_sizes_tbl[0].width; 163366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin maxHeight = m_pCapability->picture_sizes_tbl[0].height; 163466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 163566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Get default maximum FOV from corresponding sensor driver 163666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin maxHfov = m_pCapability->hor_view_angle; 163766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin maxVfov = m_pCapability->ver_view_angle; 163866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 163966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stillAspectRatio = (double)stillWidth/stillHeight; 164066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin maxPictureAspectRatio = (double)maxWidth/maxHeight; 164166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Stillwidth: %d, height: %d", stillWidth, stillHeight); 164266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Max width: %d, height: %d", maxWidth, maxHeight); 164366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("still aspect: %f, Max Pic Aspect: %f", 164466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stillAspectRatio, maxPictureAspectRatio); 164566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 164666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // crop as per the Maximum Snapshot aspect ratio 164766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (stillAspectRatio < maxPictureAspectRatio) 164866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin horizCropFactor = stillAspectRatio/maxPictureAspectRatio; 164966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else 165066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vertCropFactor = maxPictureAspectRatio/stillAspectRatio; 165166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 165266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("horizCropFactor %f, vertCropFactor %f", 165366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin horizCropFactor, vertCropFactor); 165466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 165566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Now derive the final FOV's based on field of view formula is i.e, 165666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // angle of view = 2 * arctangent ( d / 2f ) 165766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // where d is the physical sensor dimension of interest, and f is 165866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // the focal length. This only applies to rectilinear sensors, for focusing 165966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // at distances >> f, etc. 166066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Here d/2f is nothing but the Maximum Horizontal or Veritical FOV 166166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin horizViewAngle = (180/PI)*2*atan(horizCropFactor*tan((maxHfov/2)*(PI/180))); 166266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vertViewAngle = (180/PI)*2*atan(horizCropFactor*tan((maxVfov/2)*(PI/180))); 166366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 166466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(QCameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizViewAngle); 166566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(QCameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertViewAngle); 166666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Final horizViewAngle %f, vertViewAngle %f", 166766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin horizViewAngle, vertViewAngle); 166866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 166966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 167066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 167166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setVideoSize 167266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 167366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set video size from user setting 167466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 167566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 167666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 167766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 167866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 167966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 168066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 168166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 168266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setVideoSize(const QCameraParameters& params) 168366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 168466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str= NULL; 168566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int width, height; 168666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = params.get(KEY_VIDEO_SIZE); 168766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int old_width, old_height; 168866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::getVideoSize(&old_width, &old_height); 168966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!str) { 169066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //If application didn't set this parameter string, use the values from 169166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //getPreviewSize() as video dimensions. 169266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getPreviewSize(&width, &height); 169366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("No Record Size requested, use the preview dimensions"); 169466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 169566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getVideoSize(&width, &height); 169666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 169766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 169866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Validate the video size 169966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->video_sizes_tbl_cnt; ++i) { 170066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width == m_pCapability->video_sizes_tbl[i].width 170166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && height == m_pCapability->video_sizes_tbl[i].height) { 170266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if need to restart preview in case of video size change 170366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bRecordingHint && 170466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (width != old_width || height != old_height)) { 170566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 170666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 170766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 170866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set the new value 170966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Requested video size %d x %d", width, height); 171066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setVideoSize(width, height); 171166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 171266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 171366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 171466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.mode == CAM_MODE_SECONDARY) { 171566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set the default preview size for secondary camera 171666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin width = m_pCapability->video_sizes_tbl[0].width; 171766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height = m_pCapability->video_sizes_tbl[0].height; 171866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if need to restart preview in case of preview size change 171966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width != old_width || height != old_height) { 172066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 172166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 172266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 172366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setVideoSize(width, height); 172466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Secondary Camera: video size %d x %d", 172566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin width, height); 172666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 172766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 172866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 172966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Error !! Invalid video size requested: %dx%d", width, height); 173066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 173166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 173266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 173366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 173466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getLiveSnapshotSize 173566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 173666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get live snapshot size 173766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 173866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : dim - Update dim with the liveshot size 173966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 174066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 174166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::getLiveSnapshotSize(cam_dimension_t &dim) 174266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 174366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(is4k2kVideoResolution()) { 174466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // We support maximum 8M liveshot @4K2K video resolution 174566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t resolution = {0, 0}; 174666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::getVideoSize(&resolution.width, &resolution.height); 174766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if((m_LiveSnapshotSize.width > resolution.width) || 174866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_LiveSnapshotSize.height > resolution.height)) { 174966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.width = resolution.width; 175066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.height = resolution.height; 175166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 175266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 175366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim = m_LiveSnapshotSize; 175466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("w x h: %d x %d", dim.width, dim.height); 175566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 175666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 175766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 175866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setLiveSnapshotSize 175966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 176066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set live snapshot size 176166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 176266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 176366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 176466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 176566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 176666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 176766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 176866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 176966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setLiveSnapshotSize(const QCameraParameters& params) 177066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 177166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 177266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.opt.livepic", value, "1"); 177366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool useOptimal = atoi(value) > 0 ? true : false; 177466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool vHdrOn; 177566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t liveSnapWidth = 0, liveSnapHeight = 0; 177666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // use picture size from user setting 177766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getPictureSize(&m_LiveSnapshotSize.width, &m_LiveSnapshotSize.height); 177866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 177966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t livesnapshot_sizes_tbl_cnt = 178066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->livesnapshot_sizes_tbl_cnt; 178166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t *livesnapshot_sizes_tbl = 178266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin &m_pCapability->livesnapshot_sizes_tbl[0]; 178366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 178466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(is4k2kVideoResolution()) { 178566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // We support maximum 8M liveshot @4K2K video resolution 178666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t resolution = {0, 0}; 178766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::getVideoSize(&resolution.width, &resolution.height); 178866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if((m_LiveSnapshotSize.width > resolution.width) || 178966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_LiveSnapshotSize.height > resolution.height)) { 179066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.width = resolution.width; 179166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.height = resolution.height; 179266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 179366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 179466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 179566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if HFR is enabled 179666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *hfrStr = params.get(KEY_QC_VIDEO_HIGH_FRAME_RATE); 179766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_hfr_mode_t hfrMode = CAM_HFR_MODE_OFF; 179866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *hsrStr = params.get(KEY_QC_VIDEO_HIGH_SPEED_RECORDING); 179966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 180066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *vhdrStr = params.get(KEY_QC_VIDEO_HDR); 180166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vHdrOn = (vhdrStr != NULL && (0 == strcmp(vhdrStr,"on"))) ? true : false; 180266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (vHdrOn) { 180366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin livesnapshot_sizes_tbl_cnt = m_pCapability->vhdr_livesnapshot_sizes_tbl_cnt; 180466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin livesnapshot_sizes_tbl = &m_pCapability->vhdr_livesnapshot_sizes_tbl[0]; 180566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 180666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((hsrStr != NULL) && strcmp(hsrStr, "off")) { 180766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t hsr = lookupAttr(HFR_MODES_MAP, PARAM_MAP_SIZE(HFR_MODES_MAP), hsrStr); 180866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((hsr != NAME_NOT_FOUND) && (hsr > CAM_HFR_MODE_OFF)) { 180966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // if HSR is enabled, change live snapshot size 181066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->hfr_tbl_cnt; i++) { 181166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->hfr_tbl[i].mode == hsr) { 181266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin livesnapshot_sizes_tbl_cnt = 181366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->hfr_tbl[i].livesnapshot_sizes_tbl_cnt; 181466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin livesnapshot_sizes_tbl = 181566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin &m_pCapability->hfr_tbl[i].livesnapshot_sizes_tbl[0]; 181666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hfrMode = m_pCapability->hfr_tbl[i].mode; 181766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 181866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 181966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 182066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 182166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if ((hfrStr != NULL) && strcmp(hfrStr, "off")) { 182266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t hfr = lookupAttr(HFR_MODES_MAP, PARAM_MAP_SIZE(HFR_MODES_MAP), hfrStr); 182366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((hfr != NAME_NOT_FOUND) && (hfr > CAM_HFR_MODE_OFF)) { 182466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // if HFR is enabled, change live snapshot size 182566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->hfr_tbl_cnt; i++) { 182666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->hfr_tbl[i].mode == hfr) { 182766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin livesnapshot_sizes_tbl_cnt = 182866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->hfr_tbl[i].livesnapshot_sizes_tbl_cnt; 182966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin livesnapshot_sizes_tbl = 183066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin &m_pCapability->hfr_tbl[i].livesnapshot_sizes_tbl[0]; 183166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hfrMode = m_pCapability->hfr_tbl[i].mode; 183266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 183366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 183466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 183566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 183666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 183766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 183866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (useOptimal || hfrMode != CAM_HFR_MODE_OFF || vHdrOn) { 183966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool found = false; 184066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 184166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // first check if picture size is within the list of supported sizes 184266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < livesnapshot_sizes_tbl_cnt; ++i) { 184366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_LiveSnapshotSize.width == livesnapshot_sizes_tbl[i].width && 184466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.height == livesnapshot_sizes_tbl[i].height) { 184566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin found = true; 184666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 184766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 184866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 184966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 185066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!found) { 185166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // use optimal live snapshot size from supported list, 185266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // that has same preview aspect ratio 185366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int width = 0, height = 0; 185466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getPreviewSize(&width, &height); 185566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 185666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double previewAspectRatio = (double)width / height; 185766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < livesnapshot_sizes_tbl_cnt; ++i) { 185866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double ratio = (double)livesnapshot_sizes_tbl[i].width / 185966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin livesnapshot_sizes_tbl[i].height; 186066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (fabs(previewAspectRatio - ratio) <= ASPECT_TOLERANCE) { 186166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize = livesnapshot_sizes_tbl[i]; 186266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin found = true; 186366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 186466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 186566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 186666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 186766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!found && ((hfrMode != CAM_HFR_MODE_OFF) || vHdrOn)) { 186866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Cannot find matching aspect ration from supported live snapshot list 186966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // choose the max dim from preview and video size 187066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Cannot find matching aspect ratio, choose max of preview or video size"); 187166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getVideoSize(&m_LiveSnapshotSize.width, &m_LiveSnapshotSize.height); 187266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_LiveSnapshotSize.width < width && m_LiveSnapshotSize.height < height) { 187366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.width = width; 187466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.height = height; 187566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 187666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 187766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 187866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 187966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //To read liveshot resolution from setprop instead of matching aspect ratio. 188066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //The setprop resolution format should be WxH. 188166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //e.g: adb shell setprop persist.camera.liveshot.size 1280x720 188266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0, PROPERTY_VALUE_MAX); 188366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.liveshot.size", value, ""); 188466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(value) > 0) { 188566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *saveptr = NULL; 188666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *token = strtok_r(value, "x", &saveptr); 188766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (token != NULL) { 188866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin liveSnapWidth = atoi(token); 188966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 189066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin token = strtok_r(NULL, "x", &saveptr); 189166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (token != NULL) { 189266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin liveSnapHeight = atoi(token); 189366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 189466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((liveSnapWidth!=0) && (liveSnapHeight!=0)) { 189566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->picture_sizes_tbl_cnt; ++i) { 189666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (liveSnapWidth == m_pCapability->picture_sizes_tbl[i].width 189766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && liveSnapHeight == m_pCapability->picture_sizes_tbl[i].height) { 189866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.width = liveSnapWidth; 189966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.height = liveSnapHeight; 190066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 190166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 190266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 190366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 190466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 190566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("live snapshot size %d x %d", 190666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize.width, m_LiveSnapshotSize.height); 190766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 190866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 190966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 191066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 191166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 191266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 191366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRawSize 191466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 191566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set live snapshot size 191666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 191766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 191866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 191966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 192066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 192166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 192266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 192366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 192466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRawSize(cam_dimension_t &dim) 192566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 192666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_rawSize = dim; 192766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 192866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 192966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 193066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setPreviewFormat 193166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 193266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set preview format from user setting 193366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 193466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 193566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 193666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 193766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 193866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 193966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 194066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 194166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setPreviewFormat(const QCameraParameters& params) 194266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 194366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.getPreviewFormat(); 194466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t previewFormat = lookupAttr(PREVIEW_FORMATS_MAP, 194566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(PREVIEW_FORMATS_MAP), str); 194666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (previewFormat != NAME_NOT_FOUND) { 194766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUBWCEnabled()) { 194866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 194966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int pFormat; 195066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 195166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.preview.ubwc", prop, "1"); 195266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 195366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pFormat = atoi(prop); 195466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (pFormat == 1) { 195566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPreviewFormat = CAM_FORMAT_YUV_420_NV12_UBWC; 195666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mAppPreviewFormat = (cam_format_t)previewFormat; 195766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 195866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPreviewFormat = (cam_format_t)previewFormat; 195966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mAppPreviewFormat = (cam_format_t)previewFormat; 196066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 196166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 196266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPreviewFormat = (cam_format_t)previewFormat; 196366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mAppPreviewFormat = (cam_format_t)previewFormat; 196466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 196566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPreviewFormat(str); 196666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("format %d\n", mPreviewFormat); 196766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 196866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 196966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid preview format value: %s", (str == NULL) ? "NULL" : str); 197066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 197166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 197266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 197366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 197466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setPictureFormat 197566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 197666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set picture format from user setting 197766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 197866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 197966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 198066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 198166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 198266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 198366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 198466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 198566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setPictureFormat(const QCameraParameters& params) 198666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 198766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.getPictureFormat(); 198866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t pictureFormat = lookupAttr(PICTURE_TYPES_MAP, PARAM_MAP_SIZE(PICTURE_TYPES_MAP), str); 198966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (pictureFormat != NAME_NOT_FOUND) { 199066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPictureFormat = pictureFormat; 199166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 199266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPictureFormat(str); 199366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("format %d\n", mPictureFormat); 199466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 199566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 199666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid picture format value: %s", (str == NULL) ? "NULL" : str); 199766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 199866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 199966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 200066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 200166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setJpegThumbnailSize 200266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 200366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set jpeg thumbnail size from user setting 200466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 200566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 200666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 200766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 200866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 200966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 201066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 201166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 201266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setJpegThumbnailSize(const QCameraParameters& params) 201366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 201466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int width = params.getInt(KEY_JPEG_THUMBNAIL_WIDTH); 201566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int height = params.getInt(KEY_JPEG_THUMBNAIL_HEIGHT); 201666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 201766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("requested jpeg thumbnail size %d x %d", width, height); 201866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int sizes_cnt = sizeof(THUMBNAIL_SIZES_MAP) / sizeof(cam_dimension_t); 201966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Validate thumbnail size 202066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (int i = 0; i < sizes_cnt; i++) { 202166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (width == THUMBNAIL_SIZES_MAP[i].width && 202266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height == THUMBNAIL_SIZES_MAP[i].height) { 202366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_JPEG_THUMBNAIL_WIDTH, width); 202466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_JPEG_THUMBNAIL_HEIGHT, height); 202566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 202666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 202766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 202866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("error: setting jpeg thumbnail size (%d, %d)", width, height); 202966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 203066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 203166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 203266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 203366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 203466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setBurstLEDOnPeriod 203566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 203666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set burst LED on period 203766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 203866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 203966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 204066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 204166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 204266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 204366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 204466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 204566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setBurstLEDOnPeriod(const QCameraParameters& params) 204666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 204766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int nBurstLEDOnPeriod = params.getInt(KEY_QC_SNAPSHOT_BURST_LED_ON_PERIOD); 204866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Check if the LED ON period is within limits 204966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((nBurstLEDOnPeriod <= 0) || (nBurstLEDOnPeriod > 800)) { 205066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // if burst led on period is not set in parameters, 205166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // read from sys prop 205266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 205366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 205466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.led.on.period", prop, "0"); 205566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nBurstLEDOnPeriod = atoi(prop); 205666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (nBurstLEDOnPeriod <= 0) { 205766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nBurstLEDOnPeriod = 300; 205866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 205966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 206066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 206166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SNAPSHOT_BURST_LED_ON_PERIOD, nBurstLEDOnPeriod); 206266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nBurstLEDOnPeriod = nBurstLEDOnPeriod; 206366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Burst LED on period %u", m_nBurstLEDOnPeriod); 206466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_BURST_LED_ON_PERIOD, 206566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (uint32_t)nBurstLEDOnPeriod)) { 206666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 206766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 206866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 206966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 207066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 207166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 207266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 207366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 207466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 207566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRetroActiveBurstNum 207666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 207766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set retro active burst num 207866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 207966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 208066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 208166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 208266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 208366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 208466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 208566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 208666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRetroActiveBurstNum( 208766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const QCameraParameters& params) 208866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 208966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t nBurstNum = params.getInt(KEY_QC_NUM_RETRO_BURST_PER_SHUTTER); 209066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("m_nRetroBurstNum = %d", m_nRetroBurstNum); 209166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (nBurstNum <= 0) { 209266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // if burst number is not set in parameters, 209366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // read from sys prop 209466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 209566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 209666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.retro.number", prop, "0"); 209766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nBurstNum = atoi(prop); 209866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (nBurstNum < 0) { 209966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nBurstNum = 0; 210066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 210166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 210266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 210366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_NUM_RETRO_BURST_PER_SHUTTER, nBurstNum); 210466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 210566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nRetroBurstNum = nBurstNum; 210666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("m_nRetroBurstNum = %d", m_nRetroBurstNum); 210766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 210866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 210966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 211066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 211166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setJpegQuality 211266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 211366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set jpeg encpding quality from user setting 211466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 211566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 211666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 211766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 211866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 211966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 212066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 212166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 212266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setJpegQuality(const QCameraParameters& params) 212366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 212466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 212566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int quality = params.getInt(KEY_JPEG_QUALITY); 212666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (quality >= 0 && quality <= 100) { 212766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_JPEG_QUALITY, quality); 212866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 212966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid jpeg quality=%d", quality); 213066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 213166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 213266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 213366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin quality = params.getInt(KEY_JPEG_THUMBNAIL_QUALITY); 213466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (quality >= 0 && quality <= 100) { 213566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_JPEG_THUMBNAIL_QUALITY, quality); 213666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 213766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid jpeg thumbnail quality=%d", quality); 213866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 213966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 214066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 214166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 214266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 214366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 214466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setOrientaion 214566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 214666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set orientaion from user setting 214766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 214866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 214966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 215066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 215166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 215266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 215366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 215466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 215566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setOrientation(const QCameraParameters& params) 215666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 215766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_ORIENTATION); 215866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 215966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 216066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(str, portrait) == 0 || strcmp(str, landscape) == 0) { 216166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Camera service needs this to decide if the preview frames and raw 216266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // pictures should be rotated. 216366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ORIENTATION, str); 216466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 216566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid orientation value: %s", str); 216666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 216766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 216866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 216966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 217066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 217166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 217266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 217366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAutoExposure 217466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 217566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set auto exposure value from user setting 217666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 217766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 217866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 217966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 218066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 218166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 218266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 218366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 218466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAutoExposure(const QCameraParameters& params) 218566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 218666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_AUTO_EXPOSURE); 218766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_AUTO_EXPOSURE); 218866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 218966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 219066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 219166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setAutoExposure(str); 219266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 219366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 219466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 219566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 219666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 219766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 219866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setPreviewFpsRange 219966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 220066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set preview FPS range from user setting 220166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 220266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 220366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 220466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 220566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 220666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 220766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 220866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 220966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setPreviewFpsRange(const QCameraParameters& params) 221066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 221166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int minFps,maxFps; 221266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prevMinFps, prevMaxFps, vidMinFps, vidMaxFps; 221366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int rc = NO_ERROR; 221466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool found = false, updateNeeded = false; 221566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 221666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::getPreviewFpsRange(&prevMinFps, &prevMaxFps); 221766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getPreviewFpsRange(&minFps, &maxFps); 221866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 221966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("FpsRange Values:(%d, %d)", prevMinFps, prevMaxFps); 222066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Requested FpsRange Values:(%d, %d)", minFps, maxFps); 222166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 222266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //first check if we need to change fps because of HFR mode change 222366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateNeeded = UpdateHFRFrameRate(params); 222466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (updateNeeded) { 222566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 222666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setHighFrameRate(mHfrMode); 222766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) goto end; 222866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 222966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("UpdateHFRFrameRate %d", updateNeeded); 223066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 223166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vidMinFps = (int)m_hfrFpsRange.video_min_fps; 223266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vidMaxFps = (int)m_hfrFpsRange.video_max_fps; 223366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 223466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(minFps == prevMinFps && maxFps == prevMaxFps) { 223566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( m_bFixedFrameRateSet ) { 223666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin minFps = params.getPreviewFrameRate() * 1000; 223766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin maxFps = params.getPreviewFrameRate() * 1000; 223866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bFixedFrameRateSet = false; 223966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (!updateNeeded) { 224066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("No change in FpsRange"); 224166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = NO_ERROR; 224266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin goto end; 224366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 224466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 224566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(size_t i = 0; i < m_pCapability->fps_ranges_tbl_cnt; i++) { 224666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // if the value is in the supported list 224766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (minFps >= m_pCapability->fps_ranges_tbl[i].min_fps * 1000 && 224866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin maxFps <= m_pCapability->fps_ranges_tbl[i].max_fps * 1000) { 224966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin found = true; 225066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("FPS i=%d : minFps = %d, maxFps = %d" 225166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin " vidMinFps = %d, vidMaxFps = %d", 225266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin i, minFps, maxFps, 225366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int)m_hfrFpsRange.video_min_fps, 225466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int)m_hfrFpsRange.video_max_fps); 225566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((0.0f >= m_hfrFpsRange.video_min_fps) || 225666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (0.0f >= m_hfrFpsRange.video_max_fps)) { 225766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vidMinFps = minFps; 225866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vidMaxFps = maxFps; 225966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 226066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else { 226166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vidMinFps = (int)m_hfrFpsRange.video_min_fps; 226266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin vidMaxFps = (int)m_hfrFpsRange.video_max_fps; 226366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 226466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 226566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setPreviewFpsRange(minFps, maxFps, vidMinFps, vidMaxFps); 226666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 226766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 226866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 226966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(found == false){ 227066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("error: FPS range value not supported"); 227166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 227266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 227366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinend: 227466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 227566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 227666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 227766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 227866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : UpdateHFRFrameRate 227966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 228066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set preview FPS range based on HFR setting 228166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 228266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 228366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 228466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 228566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : bool true/false 228666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * true -if HAL needs to overwrite FPS range set by app, false otherwise. 228766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 228866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 228966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::UpdateHFRFrameRate(const QCameraParameters& params) 229066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 229166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool updateNeeded = false; 229266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int min_fps, max_fps; 229366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t hfrMode = CAM_HFR_MODE_OFF; 229466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t newHfrMode = CAM_HFR_MODE_OFF; 229566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 229666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int parm_minfps,parm_maxfps; 229766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prevMinFps, prevMaxFps; 229866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::getPreviewFpsRange(&prevMinFps, &prevMaxFps); 229966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getPreviewFpsRange(&parm_minfps, &parm_maxfps); 230066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("CameraParameters - : minFps = %d, maxFps = %d ", 230166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prevMinFps, prevMaxFps); 230266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Requested params - : minFps = %d, maxFps = %d ", 230366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin parm_minfps, parm_maxfps); 230466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 230566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *hfrStr = params.get(KEY_QC_VIDEO_HIGH_FRAME_RATE); 230666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *hsrStr = params.get(KEY_QC_VIDEO_HIGH_SPEED_RECORDING); 230766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 230866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_hfrStr = CameraParameters::get(KEY_QC_VIDEO_HIGH_FRAME_RATE); 230966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_hsrStr = CameraParameters::get(KEY_QC_VIDEO_HIGH_SPEED_RECORDING); 231066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 231166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((hfrStr != NULL) && (prev_hfrStr != NULL) && strcmp(hfrStr, prev_hfrStr)) { 231266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_HIGH_FRAME_RATE, hfrStr); 231366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 231466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 231566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((hsrStr != NULL) && (prev_hsrStr != NULL) && strcmp(hsrStr, prev_hsrStr)) { 231666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_HIGH_SPEED_RECORDING, hsrStr); 231766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 231866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 231966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 232066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if HFR is enabled 232166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((hfrStr != NULL) && strcmp(hfrStr, "off")) { 232266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hfrMode = lookupAttr(HFR_MODES_MAP, PARAM_MAP_SIZE(HFR_MODES_MAP), hfrStr); 232366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NAME_NOT_FOUND != hfrMode) newHfrMode = hfrMode; 232466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 232566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check if HSR is enabled 232666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else if ((hsrStr != NULL) && strcmp(hsrStr, "off")) { 232766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hfrMode = lookupAttr(HFR_MODES_MAP, PARAM_MAP_SIZE(HFR_MODES_MAP), hsrStr); 232866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NAME_NOT_FOUND != hfrMode) newHfrMode = hfrMode; 232966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 233066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("prevHfrMode - %d, currentHfrMode = %d ", 233166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mHfrMode, newHfrMode); 233266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 233366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (mHfrMode != newHfrMode) { 233466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateNeeded = true; 233566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mHfrMode = newHfrMode; 233666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (mHfrMode) { 233766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_60FPS: 233866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 60000; 233966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 60000; 234066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 234166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_90FPS: 234266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 90000; 234366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 90000; 234466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 234566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_120FPS: 234666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 120000; 234766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 120000; 234866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 234966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_150FPS: 235066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 150000; 235166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 150000; 235266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 235366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_180FPS: 235466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 180000; 235566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 180000; 235666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 235766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_210FPS: 235866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 210000; 235966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 210000; 236066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 236166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_240FPS: 236266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 240000; 236366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 240000; 236466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 236566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_480FPS: 236666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 480000; 236766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 480000; 236866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 236966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_HFR_MODE_OFF: 237066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 237166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Video Fps to zero 237266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = 0; 237366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_fps = 0; 237466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 237566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 237666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_hfrFpsRange.video_min_fps = (float)min_fps; 237766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_hfrFpsRange.video_max_fps = (float)max_fps; 237866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 237966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("HFR mode (%d) Set video FPS : minFps = %d, maxFps = %d ", 238066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mHfrMode, min_fps, max_fps); 238166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 238266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 238366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Remember if HFR mode is ON 238466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((mHfrMode > CAM_HFR_MODE_OFF) && (mHfrMode < CAM_HFR_MODE_MAX)) { 238566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("HFR mode is ON"); 238666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHfrMode = true; 238766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 238866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_hfrFpsRange.video_min_fps = 0; 238966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_hfrFpsRange.video_max_fps = 0; 239066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHfrMode = false; 239166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("HFR mode is OFF"); 239266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 239366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_hfrFpsRange.min_fps = (float)parm_minfps; 239466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_hfrFpsRange.max_fps = (float)parm_maxfps; 239566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 239666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bHfrMode && (mHfrMode > CAM_HFR_MODE_120FPS) 239766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && (parm_maxfps != 0)) { 239866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Configure buffer batch count to use batch mode for higher fps 239966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setBufBatchCount((int8_t)(m_hfrFpsRange.video_max_fps / parm_maxfps)); 240066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 240166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Reset batch count and update KEY for encoder 240266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setBufBatchCount(0); 240366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 240466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return updateNeeded; 240566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 240666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 240766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 240866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setPreviewFrameRate 240966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 241066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set preview frame rate from user setting 241166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 241266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 241366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 241466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 241566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 241666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 241766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 241866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 241966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setPreviewFrameRate(const QCameraParameters& params) 242066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 242166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_PREVIEW_FRAME_RATE); 242266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_PREVIEW_FRAME_RATE); 242366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 242466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( str ) { 242566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( prev_str && 242666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str)) { 242766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Requested Fixed Frame Rate %s", str); 242866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_PREVIEW_FRAME_RATE, str); 242966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bFixedFrameRateSet = true; 243066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 243166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 243266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 243366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 243466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 243566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 243666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setEffect 243766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 243866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set effect value from user setting 243966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 244066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 244166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 244266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 244366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 244466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 244566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 244666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 244766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setEffect(const QCameraParameters& params) 244866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 244966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_EFFECT); 245066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_EFFECT); 245166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 245266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 245366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 245466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.effect", prop, "none"); 245566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 245666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(prop, "none")) { 245766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((prev_str == NULL) || 245866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (strcmp(prop, prev_str) != 0) || 245966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_bUpdateEffects == true)) { 246066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bUpdateEffects = false; 246166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setEffect(prop); 246266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 246366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (str != NULL) { 246466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((prev_str == NULL) || 246566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (strcmp(str, prev_str) != 0) || 246666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_bUpdateEffects == true)) { 246766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bUpdateEffects = false; 246866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setEffect(str); 246966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 247066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 247166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 247266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 247366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 247466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 247566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFocusMode 247666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 247766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set focus mode from user setting 247866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 247966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 248066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 248166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 248266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 248366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 248466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 248566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 248666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFocusMode(const QCameraParameters& params) 248766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 248866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_FOCUS_MODE); 248966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_FOCUS_MODE); 249066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 249166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 249266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 249366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setFocusMode(str); 249466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 249566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 249666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 249766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 249866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 249966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 250066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFocusPosition 250166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 250266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set focus position from user setting 250366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 250466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 250566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 250666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 250766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 250866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 250966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 251066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 251166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFocusPosition(const QCameraParameters& params) 251266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 251366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *focus_str = params.get(KEY_FOCUS_MODE); 251466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_focus_str = get(KEY_FOCUS_MODE); 251566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 251666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == focus_str) { 251766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 251866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 251966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 252066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("current focus mode: %s", focus_str); 252166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(focus_str, FOCUS_MODE_MANUAL_POSITION)) { 252266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", dont set focus pos to back-end!"); 252366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 252466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 252566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 252666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *pos = params.get(KEY_QC_MANUAL_FOCUS_POSITION); 252766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_pos = get(KEY_QC_MANUAL_FOCUS_POSITION); 252866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *type = params.get(KEY_QC_MANUAL_FOCUS_POS_TYPE); 252966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_type = get(KEY_QC_MANUAL_FOCUS_POS_TYPE); 253066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 253166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((pos != NULL) && (type != NULL) && (focus_str != NULL)) { 253266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_pos == NULL || (strcmp(pos, prev_pos) != 0) || 253366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prev_type == NULL || (strcmp(type, prev_type) != 0) || 253466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prev_focus_str == NULL || (strcmp(focus_str, prev_focus_str) != 0)) { 253566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setFocusPosition(type, pos); 253666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 253766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 253866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 253966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 254066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 254166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 254266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 254366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setBrightness 254466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 254566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set brightness control value from user setting 254666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 254766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 254866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 254966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 255066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 255166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 255266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 255366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 255466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setBrightness(const QCameraParameters& params) 255566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 255666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int currentBrightness = getInt(KEY_QC_BRIGHTNESS); 255766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int brightness = params.getInt(KEY_QC_BRIGHTNESS); 255866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 255966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(params.get(KEY_QC_BRIGHTNESS) == NULL) { 256066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Brigtness not set by App "); 256166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 256266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 256366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (currentBrightness != brightness) { 256466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (brightness >= m_pCapability->brightness_ctrl.min_value && 256566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin brightness <= m_pCapability->brightness_ctrl.max_value) { 256666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("new brightness value : %d ", brightness); 256766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setBrightness(brightness); 256866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 256966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid value %d out of (%d, %d)", 257066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin brightness, 257166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->brightness_ctrl.min_value, 257266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->brightness_ctrl.max_value); 257366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 257466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 257566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 257666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("No brightness value changed."); 257766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 257866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 257966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 258066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 258166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 258266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getBrightness 258366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 258466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get brightness control value from user setting 258566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 258666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 258766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 258866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 258966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 259066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 259166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 259266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 259366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint QCameraParameters::getBrightness() 259466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 259566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return getInt(KEY_QC_BRIGHTNESS); 259666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 259766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 259866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 259966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSharpness 260066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 260166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set sharpness control value from user setting 260266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 260366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 260466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 260566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 260666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 260766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 260866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 260966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 261066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSharpness(const QCameraParameters& params) 261166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 261266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int shaprness = params.getInt(KEY_QC_SHARPNESS); 261366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prev_sharp = getInt(KEY_QC_SHARPNESS); 261466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 261566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(params.get(KEY_QC_SHARPNESS) == NULL) { 261666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Sharpness not set by App "); 261766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 261866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 261966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_sharp != shaprness) { 262066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if((shaprness >= m_pCapability->sharpness_ctrl.min_value) && 262166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (shaprness <= m_pCapability->sharpness_ctrl.max_value)) { 262266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("new sharpness value : %d ", shaprness); 262366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setSharpness(shaprness); 262466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 262566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid value %d out of (%d, %d)", 262666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin shaprness, 262766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->sharpness_ctrl.min_value, 262866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->sharpness_ctrl.max_value); 262966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 263066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 263166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 263266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("No value change in shaprness"); 263366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 263466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 263566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 263666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 263766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 263866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSkintoneEnahancement 263966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 264066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set skin tone enhancement factor from user setting 264166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 264266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 264366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 264466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 264566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 264666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 264766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 264866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 264966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSkinToneEnhancement(const QCameraParameters& params) 265066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 265166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int sceFactor = params.getInt(KEY_QC_SCE_FACTOR); 265266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prev_sceFactor = getInt(KEY_QC_SCE_FACTOR); 265366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 265466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(params.get(KEY_QC_SCE_FACTOR) == NULL) { 265566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Skintone enhancement not set by App "); 265666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 265766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 265866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_sceFactor != sceFactor) { 265966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if((sceFactor >= m_pCapability->sce_ctrl.min_value) && 266066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (sceFactor <= m_pCapability->sce_ctrl.max_value)) { 266166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("new Skintone Enhancement value : %d ", sceFactor); 266266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setSkinToneEnhancement(sceFactor); 266366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 266466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid value %d out of (%d, %d)", 266566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sceFactor, 266666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->sce_ctrl.min_value, 266766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->sce_ctrl.max_value); 266866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 266966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 267066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 267166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("No value change in skintone enhancement factor"); 267266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 267366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 267466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 267566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 267666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 267766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSaturation 267866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 267966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set saturation control value from user setting 268066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 268166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 268266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 268366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 268466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 268566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 268666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 268766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 268866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSaturation(const QCameraParameters& params) 268966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 269066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int saturation = params.getInt(KEY_QC_SATURATION); 269166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prev_sat = getInt(KEY_QC_SATURATION); 269266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 269366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(params.get(KEY_QC_SATURATION) == NULL) { 269466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Saturation not set by App "); 269566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 269666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 269766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_sat != saturation) { 269866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if((saturation >= m_pCapability->saturation_ctrl.min_value) && 269966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (saturation <= m_pCapability->saturation_ctrl.max_value)) { 270066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("new saturation value : %d ", saturation); 270166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setSaturation(saturation); 270266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 270366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid value %d out of (%d, %d)", 270466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin saturation, 270566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->saturation_ctrl.min_value, 270666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->saturation_ctrl.max_value); 270766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 270866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 270966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 271066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("No value change in saturation factor"); 271166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 271266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 271366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 271466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 271566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 271666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setContrast 271766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 271866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set contrast control value from user setting 271966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 272066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 272166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 272266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 272366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 272466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 272566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 272666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 272766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setContrast(const QCameraParameters& params) 272866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 272966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int contrast = params.getInt(KEY_QC_CONTRAST); 273066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prev_contrast = getInt(KEY_QC_CONTRAST); 273166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 273266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(params.get(KEY_QC_CONTRAST) == NULL) { 273366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Contrast not set by App "); 273466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 273566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 273666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_contrast != contrast) { 273766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if((contrast >= m_pCapability->contrast_ctrl.min_value) && 273866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (contrast <= m_pCapability->contrast_ctrl.max_value)) { 273966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("new contrast value : %d ", contrast); 274066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = setContrast(contrast); 274166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 274266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 274366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid value %d out of (%d, %d)", 274466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin contrast, 274566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->contrast_ctrl.min_value, 274666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->contrast_ctrl.max_value); 274766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 274866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 274966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 275066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("No value change in contrast"); 275166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 275266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 275366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 275466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 275566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 275666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setExposureCompensation 275766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 275866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set exposure compensation value from user setting 275966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 276066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 276166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 276266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 276366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 276466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 276566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 276666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 276766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setExposureCompensation(const QCameraParameters & params) 276866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 276966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int expComp = params.getInt(KEY_EXPOSURE_COMPENSATION); 277066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prev_expComp = getInt(KEY_EXPOSURE_COMPENSATION); 277166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 277266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(params.get(KEY_EXPOSURE_COMPENSATION) == NULL) { 277366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Exposure compensation not set by App "); 277466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 277566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 277666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_expComp != expComp) { 277766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if((expComp >= m_pCapability->exposure_compensation_min) && 277866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (expComp <= m_pCapability->exposure_compensation_max)) { 277966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("new Exposure Compensation value : %d ", expComp); 278066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setExposureCompensation(expComp); 278166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 278266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid value %d out of (%d, %d)", 278366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin expComp, 278466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->exposure_compensation_min, 278566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->exposure_compensation_max); 278666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 278766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 278866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 278966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("No value change in Exposure Compensation"); 279066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 279166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 279266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 279366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 279466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 279566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setWhiteBalance 279666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 279766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set white balance value from user setting 279866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 279966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 280066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 280166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 280266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 280366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 280466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 280566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 280666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setWhiteBalance(const QCameraParameters& params) 280766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 280866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_WHITE_BALANCE); 280966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_WHITE_BALANCE); 281066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 281166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 281266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 281366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setWhiteBalance(str); 281466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 281566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 281666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 281766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 281866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 281966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 282066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setManualWhiteBalance 282166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 282266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set manual white balance from user setting 282366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 282466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 282566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 282666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 282766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 282866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 282966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 283066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 283166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setManualWhiteBalance(const QCameraParameters& params) 283266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 283366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 283466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *wb_str = params.get(KEY_WHITE_BALANCE); 283566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_wb_str = get(KEY_WHITE_BALANCE); 283666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("current wb mode: %s", wb_str); 283766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 283866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (wb_str != NULL) { 283966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(wb_str, WHITE_BALANCE_MANUAL)) { 284066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("dont set cct to back-end."); 284166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 284266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 284366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 284466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 284566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *value = params.get(KEY_QC_MANUAL_WB_VALUE); 284666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_value = get(KEY_QC_MANUAL_WB_VALUE); 284766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *type = params.get(KEY_QC_MANUAL_WB_TYPE); 284866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_type = get(KEY_QC_MANUAL_WB_TYPE); 284966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 285066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((value != NULL) && (type != NULL) && (wb_str != NULL)) { 285166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_value == NULL || (strcmp(value, prev_value) != 0) || 285266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prev_type == NULL || (strcmp(type, prev_type) != 0) || 285366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prev_wb_str == NULL || (strcmp(wb_str, prev_wb_str) != 0)) { 285466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_MANUAL_WB_TYPE, type); 285566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_MANUAL_WB_VALUE, value); 285666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t wb_type = atoi(type); 285766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (wb_type == CAM_MANUAL_WB_MODE_CCT) { 285866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setWBManualCCT(value); 285966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (wb_type == CAM_MANUAL_WB_MODE_GAIN) { 286066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setManualWBGains(value); 286166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 286266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 286366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 286466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 286566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 286666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 286766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 286866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 286966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 287066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAntibanding 287166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 287266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set antibanding value from user setting 287366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 287466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 287566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 287666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 287766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 287866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 287966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 288066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 288166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAntibanding(const QCameraParameters& params) 288266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 288366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_ANTIBANDING); 288466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_ANTIBANDING); 288566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 288666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 288766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 288866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setAntibanding(str); 288966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 289066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 289166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 289266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 289366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 289466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 289566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setStatsDebugMask 289666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 289766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get the value from persist file in Stats module that will 289866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * control funtionality in the module 289966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 290066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 290166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 290266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 290366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 290466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 290566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 290666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setStatsDebugMask() 290766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 290866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mask = 0; 290966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 291066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 291166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.stats.debug.mask", value, "0"); 291266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mask = (uint32_t)atoi(value); 291366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 291466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("ctrl mask :%d", mask); 291566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 291666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_STATS_DEBUG_MASK, mask)) { 291766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 291866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 291966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 292066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 292166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 292266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 292366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 292466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setPAAF 292566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 292666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get the value from persist file in Stats module that will 292766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * control the preview assisted AF in the module 292866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 292966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 293066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 293166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 293266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 293366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 293466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 293566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setPAAF() 293666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 293766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t paaf = 0; 293866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 293966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 294066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.stats.af.paaf", value, "1"); 294166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin paaf = (uint32_t)atoi(value); 294266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 294366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("PAAF is: %s", paaf ? "ON": "OFF"); 294466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 294566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_STATS_AF_PAAF, paaf)) { 294666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 294766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 294866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 294966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 295066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 295166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 295266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 295366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSceneDetect 295466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 295566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set scenen detect value from user setting 295666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 295766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 295866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 295966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 296066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 296166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 296266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 296366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 296466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSceneDetect(const QCameraParameters& params) 296566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 296666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_SCENE_DETECT); 296766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_SCENE_DETECT); 296866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 296966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 297066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 297166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setSceneDetect(str); 297266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 297366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 297466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 297566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 297666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 297766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 297866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setVideoHDR 297966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 298066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set video HDR value from user setting 298166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 298266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 298366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 298466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 298566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 298666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 298766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 298866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 298966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setVideoHDR(const QCameraParameters& params) 299066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 299166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_VIDEO_HDR); 299266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_VIDEO_HDR); 299366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 299466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 299566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 299666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setVideoHDR(str); 299766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 299866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 299966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 300066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 300166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 300266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 300366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setVtEnable 300466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 300566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set vt Time Stamp enable from user setting 300666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 300766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 300866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 300966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 301066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 301166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 301266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 301366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 301466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setVtEnable(const QCameraParameters& params) 301566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 301666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_VT_ENABLE); 301766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_VT_ENABLE); 301866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 301966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 302066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 302166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setVtEnable(str); 302266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 302366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 302466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 302566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 302666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 302766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 302866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFaceRecognition 302966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 303066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set face recognition mode from user setting 303166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 303266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 303366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 303466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 303566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 303666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 303766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 303866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 303966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFaceRecognition(const QCameraParameters& params) 304066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 304166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_FACE_RECOGNITION); 304266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_FACE_RECOGNITION); 304366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 304466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 304566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 304666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t maxFaces = (uint32_t)params.getInt(KEY_QC_MAX_NUM_REQUESTED_FACES); 304766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setFaceRecognition(str, maxFaces); 304866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 304966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 305066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 305166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 305266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 305366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 305466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setZoom 305566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 305666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set zoom value from user setting 305766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 305866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 305966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 306066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 306166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 306266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 306366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 306466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 306566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setZoom(const QCameraParameters& params) 306666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 306766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->zoom_supported == 0 || 306866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->zoom_ratio_tbl_cnt == 0)) { 306966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("no zoom support"); 307066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 307166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 307266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 307366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int zoomLevel = params.getInt(KEY_ZOOM); 307466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mParmZoomLevel = zoomLevel; 307566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((zoomLevel < 0) || (zoomLevel >= (int)m_pCapability->zoom_ratio_tbl_cnt)) { 307666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid value %d out of (%d, %d)", 307766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin zoomLevel, 307866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 0, m_pCapability->zoom_ratio_tbl_cnt-1); 307966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 308066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 308166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 308266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prevZoomLevel = getInt(KEY_ZOOM); 308366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prevZoomLevel == zoomLevel) { 308466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("No value change in zoom %d %d", prevZoomLevel, zoomLevel); 308566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 308666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 308766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 308866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setZoom(zoomLevel); 308966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 309066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 309166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 309266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setISOValue 309366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 309466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set ISO value from user setting 309566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 309666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 309766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 309866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 309966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 310066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 310166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 310266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 310366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setISOValue(const QCameraParameters& params) 310466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 310566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_ISO_MODE); 310666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_ISO_MODE); 310766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 310866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(getManualCaptureMode()) { 310966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char iso_val[PROPERTY_VALUE_MAX]; 311066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 311166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.iso", iso_val, ""); 311266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(iso_val) > 0) { 311366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 311466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(iso_val, prev_str) != 0) { 311566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setISOValue(iso_val); 311666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 311766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 311866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (str != NULL) { 311966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 312066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 312166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setISOValue(str); 312266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 312366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 312466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 312566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 312666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 312766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 312866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setContinuousISO 312966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 313066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set ISO value from user setting 313166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 313266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 313366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 313466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 313566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 313666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 313766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 313866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 313966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setContinuousISO(const char *isoValue) 314066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 314166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char iso[PROPERTY_VALUE_MAX]; 314266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t continous_iso = 0; 314366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 314466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Check if continuous ISO is set through setproperty 314566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.continuous.iso", iso, ""); 314666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(iso) > 0) { 314766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin continous_iso = atoi(iso); 314866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 314966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin continous_iso = atoi(isoValue); 315066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 315166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 315266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((continous_iso >= 0) && 315366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (continous_iso <= m_pCapability->sensitivity_range.max_sensitivity)) { 315466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting continuous ISO value %d", continous_iso); 315566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_CONTINUOUS_ISO, isoValue); 315666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 315766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_intf_parm_manual_3a_t iso_settings; 315866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&iso_settings, 0, sizeof(cam_intf_parm_manual_3a_t)); 315966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin iso_settings.previewOnly = FALSE; 316066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin iso_settings.value = continous_iso; 316166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ISO, iso_settings)) { 316266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 316366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 316466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 316566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 316666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid iso value: %d", continous_iso); 316766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 316866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 316966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 317066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 317166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setExposureTime 317266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 317366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set exposure time from user setting 317466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 317566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 317666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 317766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 317866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 317966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 318066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 318166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 318266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setExposureTime(const QCameraParameters& params) 318366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 318466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_EXPOSURE_TIME); 318566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_EXPOSURE_TIME); 318666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 318766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 318866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 318966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setExposureTime(str); 319066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 319166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if(getManualCaptureMode()) { 319266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char expTime[PROPERTY_VALUE_MAX]; 319366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 319466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.exposure.time", expTime, ""); 319566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(expTime) > 0) { 319666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 319766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(expTime, prev_str) != 0) { 319866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setExposureTime(expTime); 319966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 320066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 320166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 320266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 320366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 320466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 320566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 320666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 320766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setVideoRotation 320866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 320966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set rotation value from user setting 321066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 321166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 321266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 321366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 321466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 321566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 321666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 321766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 321866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setVideoRotation(const QCameraParameters& params) 321966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 322066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_VIDEO_ROTATION); 322166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL) { 322266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(VIDEO_ROTATION_MODES_MAP, 322366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(VIDEO_ROTATION_MODES_MAP), str); 322466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 322566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_ROTATION, str); 322666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGL("setVideoRotation: %d: ", str, value); 322766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 322866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid rotation value: %d", value); 322966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 323066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 323166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 323266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 323366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 323466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 323566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 323666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 323766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRotation 323866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 323966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set rotation value from user setting 324066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 324166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 324266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 324366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 324466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 324566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 324666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 324766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 324866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRotation(const QCameraParameters& params) 324966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 325066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rotation = params.getInt(KEY_ROTATION); 325166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rotation != -1) { 325266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rotation == 0 || rotation == 90 || 325366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation == 180 || rotation == 270) { 325466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_ROTATION, rotation); 325566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 325666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_META_JPEG_ORIENTATION, 325766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation); 325866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mRotation = rotation; 325966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 326066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid rotation value: %d", rotation); 326166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 326266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 326366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 326466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 326566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 326666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 326766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 326866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFlash 326966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 327066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set flash mode from user setting 327166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 327266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 327366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 327466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 327566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 327666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 327766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 327866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 327966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFlash(const QCameraParameters& params) 328066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 328166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_FLASH_MODE); 328266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_FLASH_MODE); 328366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 328466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 328566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 328666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setFlash(str); 328766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 328866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 328966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 329066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 329166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 329266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 329366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAecLock 329466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 329566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set AEC lock value from user setting 329666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 329766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 329866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 329966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 330066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 330166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 330266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 330366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 330466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAecLock(const QCameraParameters& params) 330566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 330666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_AUTO_EXPOSURE_LOCK); 330766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_AUTO_EXPOSURE_LOCK); 330866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 330966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 331066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 331166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setAecLock(str); 331266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 331366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 331466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 331566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 331666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 331766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 331866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAwbLock 331966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 332066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set AWB lock from user setting 332166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 332266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 332366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 332466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 332566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 332666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 332766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 332866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 332966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAwbLock(const QCameraParameters& params) 333066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 333166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_AUTO_WHITEBALANCE_LOCK); 333266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_AUTO_WHITEBALANCE_LOCK); 333366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 333466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 333566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 333666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setAwbLock(str); 333766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 333866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 333966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 334066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 334166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 334266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 334366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAutoHDR 334466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 334566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Enable/disable auto HDR 334666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 334766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 334866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 334966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 335066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 335166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 335266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 335366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 335466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAutoHDR(const QCameraParameters& params) 335566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 335666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_AUTO_HDR_ENABLE); 335766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_AUTO_HDR_ENABLE); 335866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 335966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 336066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 336166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.auto.hdr.enable", prop, VALUE_DISABLE); 336266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 336366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 336466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 336566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Auto HDR set to: %s", str); 336666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return updateParamEntry(KEY_QC_AUTO_HDR_ENABLE, str); 336766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 336866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 336966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 337066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(prev_str, prop) != 0 ) { 337166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Auto HDR set to: %s", prop); 337266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_AUTO_HDR_ENABLE, prop); 337366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 337466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 337566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 337666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 337766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 337866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 337966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 338066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* FUNCTION : isAutoHDREnabled 338166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 338266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* DESCRIPTION: Query auto HDR status 338366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 338466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* PARAMETERS : None 338566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 338666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* RETURN : bool true/false 338766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*==========================================================================*/ 338866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isAutoHDREnabled() 338966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 339066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_QC_AUTO_HDR_ENABLE); 339166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 339266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 339366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), str); 339466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value == NAME_NOT_FOUND) { 339566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Auto HDR value %s", str); 339666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 339766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 339866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 339966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Auto HDR status is: %d", value); 340066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return value ? true : false; 340166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 340266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 340366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Auto HDR status not set!"); 340466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 340566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 340666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 340766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 340866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setMCEValue 340966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 341066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set memory color enhancement value from user setting 341166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 341266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 341366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 341466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 341566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 341666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 341766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 341866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 341966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setMCEValue(const QCameraParameters& params) 342066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 342166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_MEMORY_COLOR_ENHANCEMENT); 342266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_MEMORY_COLOR_ENHANCEMENT); 342366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 342466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 342566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 342666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setMCEValue(str); 342766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 342866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 342966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 343066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 343166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 343266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 343366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setDISValue 343466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 343566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: enable/disable DIS from user setting 343666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 343766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 343866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 343966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 344066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 344166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 344266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 344366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 344466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setDISValue(const QCameraParameters& params) 344566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 344666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_DIS); 344766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_DIS); 344866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 344966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 345066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 345166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setDISValue(str); 345266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 345366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 345466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 345566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 345666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 345766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 345866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setLensShadeValue 345966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 346066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set lens shade value from user setting 346166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 346266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 346366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 346466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 346566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 346666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 346766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 346866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 346966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setLensShadeValue(const QCameraParameters& params) 347066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 347166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_LENSSHADE); 347266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_LENSSHADE); 347366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 347466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 347566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 347666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setLensShadeValue(str); 347766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 347866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 347966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 348066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 348166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 348266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 348366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFocusAreas 348466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 348566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set focus areas from user setting 348666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 348766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 348866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 348966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 349066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 349166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 349266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 349366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 349466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFocusAreas(const QCameraParameters& params) 349566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 349666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_FOCUS_AREAS); 349766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 349866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getRelatedCamSyncInfo()->mode == CAM_MODE_SECONDARY) { 349966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Ignore focus areas for secondary camera 350066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Ignore focus areas for secondary camera!! "); 350166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 350266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 350366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 350466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int max_num_af_areas = getInt(KEY_MAX_NUM_FOCUS_AREAS); 350566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(max_num_af_areas == 0) { 350666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("max num of AF area is 0, cannot set focus areas"); 350766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 350866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 350966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 351066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_FOCUS_AREAS); 351166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 351266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 351366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setFocusAreas(str); 351466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 351566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 351666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 351766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 351866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 351966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 352066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setMeteringAreas 352166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 352266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set metering areas from user setting 352366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 352466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 352566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 352666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 352766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 352866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 352966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 353066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 353166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setMeteringAreas(const QCameraParameters& params) 353266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 353366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_METERING_AREAS); 353466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 353566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int max_num_mtr_areas = getInt(KEY_MAX_NUM_METERING_AREAS); 353666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(max_num_mtr_areas == 0) { 353766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("max num of metering areas is 0, cannot set focus areas"); 353866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 353966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 354066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 354166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_METERING_AREAS); 354266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 354366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0 || 354466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_bNeedRestart == true)) { 354566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setMeteringAreas(str); 354666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 354766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 354866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 354966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 355066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 355166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 355266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSceneMode 355366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 355466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set scenen mode from user setting 355566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 355666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 355766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 355866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 355966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 356066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 356166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 356266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 356366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSceneMode(const QCameraParameters& params) 356466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 356566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_SCENE_MODE); 356666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_SCENE_MODE); 356766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str - %s, prev_str - %s", str, prev_str); 356866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 356966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 357066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 357166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 357266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 357366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(strcmp(str, SCENE_MODE_AUTO) == 0) { 357466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSceneTransitionAuto = true; 357566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 357666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(str, SCENE_MODE_HDR) == 0) { 357766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 357866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // If HDR is set from client and the feature is not enabled in the backend, ignore it. 357966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bHDRModeSensor && isSupportedSensorHdrSize(params)) { 358066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSensorHDREnabled = true; 358166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Sensor HDR mode Enabled"); 358266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 358366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDREnabled = true; 358466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("S/W HDR Enabled"); 358566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 358666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 358766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDREnabled = false; 358866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bSensorHDREnabled) { 358966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSensorHDREnabled = false; 359066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 359166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSensorSnapshotHDR("off"); 359266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 359366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 359466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 359566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bSensorHDREnabled) { 359666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSensorSnapshotHDR("on"); 359766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 359866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if ((m_bHDREnabled) || 359966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((prev_str != NULL) && (strcmp(prev_str, SCENE_MODE_HDR) == 0))) { 360066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("scene mode changed between HDR and non-HDR, need restart"); 360166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 360266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 360366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 360466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setSceneMode(str); 360566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 360666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 360766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 360866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 360966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 361066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 361166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSelectableZoneAf 361266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 361366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set selectable zone auto focus value from user setting 361466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 361566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 361666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 361766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 361866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 361966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 362066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 362166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 362266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSelectableZoneAf(const QCameraParameters& params) 362366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 362466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_SELECTABLE_ZONE_AF); 362566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_SELECTABLE_ZONE_AF); 362666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 362766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 362866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 362966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setSelectableZoneAf(str); 363066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 363166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 363266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 363366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 363466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 363566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 363666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAEBracket 363766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 363866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set AE bracket from user setting 363966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 364066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 364166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 364266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 364366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 364466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 364566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 364666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 364766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAEBracket(const QCameraParameters& params) 364866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 364966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDREnabled()) { 365066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("scene mode is HDR, overwrite AE bracket setting to off"); 365166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setAEBracket(AE_BRACKET_OFF); 365266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 365366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 365466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *expStr = params.get(KEY_QC_CAPTURE_BURST_EXPOSURE); 365566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != expStr && strlen(expStr) > 0) { 365666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CAPTURE_BURST_EXPOSURE, expStr); 365766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 365866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 365966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 366066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.capture.burst.exposures", prop, ""); 366166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(prop) > 0) { 366266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CAPTURE_BURST_EXPOSURE, prop); 366366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 366466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_QC_CAPTURE_BURST_EXPOSURE); 366566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 366666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 366766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 366866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_AE_BRACKET_HDR); 366966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_AE_BRACKET_HDR); 367066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 367166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 367266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 367366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setAEBracket(str); 367466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 367566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 367666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 367766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 367866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 367966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 368066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAFBracket 368166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 368266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set AF bracket from user setting 368366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 368466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 368566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 368666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 368766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 368866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 368966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 369066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 369166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAFBracket(const QCameraParameters& params) 369266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 369366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & 369466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (CAM_QCOM_FEATURE_REFOCUS | CAM_QCOM_FEATURE_UBIFOCUS)) == 0) { 369566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("AF Bracketing is not supported"); 369666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 369766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 369866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_AF_BRACKET); 369966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_AF_BRACKET); 370066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 370166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 370266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 370366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 370466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 370566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setAFBracket(str); 370666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 370766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 370866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 370966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 371066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 371166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 371266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setReFocus 371366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 371466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set refocus from user setting 371566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 371666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 371766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 371866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 371966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 372066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 372166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 372266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 372366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setReFocus(const QCameraParameters& params) 372466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 372566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & 372666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (CAM_QCOM_FEATURE_REFOCUS | CAM_QCOM_FEATURE_UBIFOCUS)) == 0) { 372766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("AF Bracketing is not supported"); 372866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 372966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 373066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_RE_FOCUS); 373166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_RE_FOCUS); 373266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 373366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 373466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 373566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 373666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 373766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setReFocus(str); 373866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 373966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 374066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 374166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 374266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 374366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 374466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setChromaFlash 374566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 374666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set chroma flash from user setting 374766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 374866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 374966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 375066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 375166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 375266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 375366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 375466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 375566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setChromaFlash(const QCameraParameters& params) 375666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 375766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & 375866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_CHROMA_FLASH) == 0) { 375966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Chroma Flash is not supported"); 376066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 376166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 376266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_CHROMA_FLASH); 376366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_CHROMA_FLASH); 376466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 376566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 376666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 376766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 376866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 376966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setChromaFlash(str); 377066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 377166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 377266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 377366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 377466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 377566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 377666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setOptiZoom 377766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 377866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set opti zoom from user setting 377966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 378066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 378166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 378266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 378366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 378466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 378566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 378666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 378766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setOptiZoom(const QCameraParameters& params) 378866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 378966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & 379066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_OPTIZOOM) == 0){ 379166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Opti Zoom is not supported"); 379266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 379366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 379466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_OPTI_ZOOM); 379566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_OPTI_ZOOM); 379666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 379766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 379866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 379966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 380066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 380166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setOptiZoom(str); 380266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 380366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 380466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 380566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 380666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 380766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 380866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setTruePortrait 380966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 381066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set true portrait from user setting 381166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 381266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 381366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 381466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 381566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 381666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 381766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 381866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 381966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setTruePortrait(const QCameraParameters& params) 382066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 382166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & 382266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_TRUEPORTRAIT) == 0) { 382366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("True Portrait is not supported"); 382466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 382566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 382666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_TRUE_PORTRAIT); 382766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_TRUE_PORTRAIT); 382866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 382966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 383066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 383166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 383266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setTruePortrait(str); 383366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 383466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 383566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 383666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 383766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 383866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 383966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setHDRMode 384066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 384166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set HDR mode from user setting 384266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 384366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 384466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 384566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 384666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 384766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 384866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 384966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 385066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setHDRMode(const QCameraParameters& params) 385166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 385266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_HDR_MODE); 385366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_HDR_MODE); 385466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t supported_hdr_modes = m_pCapability->qcom_supported_feature_mask & 385566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (CAM_QCOM_FEATURE_SENSOR_HDR | CAM_QCOM_FEATURE_HDR); 385666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 385766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 385866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 385966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((CAM_QCOM_FEATURE_SENSOR_HDR == supported_hdr_modes) && 386066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (strncmp(str, HDR_MODE_SENSOR, strlen(HDR_MODE_SENSOR)))) { 386166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Only sensor HDR is supported"); 386266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 386366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if ((CAM_QCOM_FEATURE_HDR == supported_hdr_modes) && 386466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (strncmp(str, HDR_MODE_SENSOR, strlen(HDR_MODE_MULTI_FRAME)))) { 386566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Only multi frame HDR is supported"); 386666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 386766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (!supported_hdr_modes) { 386866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("HDR is not supported"); 386966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 387066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 387166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 387266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 387366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setHDRMode(str); 387466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 387566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 387666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 387766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 387866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 387966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 388066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 388166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setHDRNeed1x 388266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 388366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set HDR need 1x from user setting 388466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 388566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 388666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 388766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 388866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 388966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 389066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 389166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 389266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setHDRNeed1x(const QCameraParameters& params) 389366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 389466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_HDR_NEED_1X); 389566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_HDR_NEED_1X); 389666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 389766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 389866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 389966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bHDRModeSensor) { 390066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Only multi frame HDR supports 1x frame"); 390166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 390266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 390366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((prev_str == NULL) || (strcmp(str, prev_str) != 0)) { 390466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setHDRNeed1x(str); 390566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 390666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 390766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 390866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 390966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 391066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 391166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSeeMore 391266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 391366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set see more (llvd) from user setting 391466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 391566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 391666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 391766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 391866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 391966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 392066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 392166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 392266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSeeMore(const QCameraParameters& params) 392366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 392466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & 392566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_LLVD) == 0) { 392666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("See more is not supported"); 392766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 392866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 392966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_SEE_MORE); 393066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_SEE_MORE); 393166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 393266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 393366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || strcmp(str, prev_str) != 0) { 393466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 393566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setSeeMore(str); 393666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 393766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 393866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 393966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 394066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 394166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 394266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setNoiseReductionMode 394366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 394466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set noise reduction mode from user setting 394566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 394666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 394766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 394866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 394966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 395066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 395166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 395266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 395366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setNoiseReductionMode(const QCameraParameters& params) 395466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 395566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QTI_FEATURE_SW_TNR) == 0) { 395666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("SW TNR is not supported"); 395766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 395866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 395966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_NOISE_REDUCTION_MODE); 396066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_NOISE_REDUCTION_MODE); 396166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 396266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 396366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || strcmp(str, prev_str) != 0) { 396466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 396566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setNoiseReductionMode(str); 396666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 396766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 396866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 396966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 397066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 397166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 397266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setStillMore 397366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 397466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set stillmore from user setting 397566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 397666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 397766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 397866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 397966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 398066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 398166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 398266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 398366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setStillMore(const QCameraParameters& params) 398466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 398566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & 398666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_STILLMORE) == 0) { 398766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Stillmore is not supported"); 398866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 398966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 399066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_STILL_MORE); 399166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_STILL_MORE); 399266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("str =%s & prev_str =%s", str, prev_str); 399366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 399466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || strcmp(str, prev_str) != 0) { 399566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 399666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setStillMore(str); 399766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 399866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 399966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 400066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 400166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 400266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 400366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRedeyeReduction 400466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 400566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set red eye reduction setting from user setting 400666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 400766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 400866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 400966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 401066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 401166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 401266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 401366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 401466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRedeyeReduction(const QCameraParameters& params) 401566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 401666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_REDEYE_REDUCTION); 401766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_REDEYE_REDUCTION); 401866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 401966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 402066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 402166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setRedeyeReduction(str); 402266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 402366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 402466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 402566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 402666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 402766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 402866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setGpsLocation 402966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 403066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set GPS location information from user setting 403166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 403266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 403366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 403466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 403566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 403666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 403766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 403866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 403966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setGpsLocation(const QCameraParameters& params) 404066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 404166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *method = params.get(KEY_GPS_PROCESSING_METHOD); 404266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (method) { 404366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_GPS_PROCESSING_METHOD, method); 404466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else { 404566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_GPS_PROCESSING_METHOD); 404666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 404766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 404866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *latitude = params.get(KEY_GPS_LATITUDE); 404966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (latitude) { 405066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_GPS_LATITUDE, latitude); 405166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else { 405266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_GPS_LATITUDE); 405366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 405466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 405566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *latitudeRef = params.get(KEY_QC_GPS_LATITUDE_REF); 405666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (latitudeRef) { 405766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_GPS_LATITUDE_REF, latitudeRef); 405866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else { 405966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_QC_GPS_LATITUDE_REF); 406066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 406166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 406266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *longitude = params.get(KEY_GPS_LONGITUDE); 406366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (longitude) { 406466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_GPS_LONGITUDE, longitude); 406566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else { 406666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_GPS_LONGITUDE); 406766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 406866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 406966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *longitudeRef = params.get(KEY_QC_GPS_LONGITUDE_REF); 407066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (longitudeRef) { 407166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_GPS_LONGITUDE_REF, longitudeRef); 407266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else { 407366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_QC_GPS_LONGITUDE_REF); 407466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 407566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 407666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *altitudeRef = params.get(KEY_QC_GPS_ALTITUDE_REF); 407766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (altitudeRef) { 407866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_GPS_ALTITUDE_REF, altitudeRef); 407966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else { 408066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_QC_GPS_ALTITUDE_REF); 408166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 408266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 408366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *altitude = params.get(KEY_GPS_ALTITUDE); 408466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (altitude) { 408566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_GPS_ALTITUDE, altitude); 408666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else { 408766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_GPS_ALTITUDE); 408866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 408966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 409066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *status = params.get(KEY_QC_GPS_STATUS); 409166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (status) { 409266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_GPS_STATUS, status); 409366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 409466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_QC_GPS_STATUS); 409566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 409666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 409766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *timestamp = params.get(KEY_GPS_TIMESTAMP); 409866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (timestamp) { 409966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_GPS_TIMESTAMP, timestamp); 410066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else { 410166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_GPS_TIMESTAMP); 410266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 410366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 410466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 410566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 410666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 410766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setNumOfSnapshot 410866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 410966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set number of snapshot per shutter from user setting 411066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 411166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 411266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 411366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 411466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 411566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 411666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 411766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setNumOfSnapshot() 411866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 4119d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int nBurstNum = 1; 412066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int nExpnum = 0; 412166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 412266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *bracket_str = get(KEY_QC_AE_BRACKET_HDR); 412366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (bracket_str != NULL && strlen(bracket_str) > 0) { 412466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(BRACKETING_MODES_MAP, PARAM_MAP_SIZE(BRACKETING_MODES_MAP), 412566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bracket_str); 412666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (value) { 412766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_EXP_BRACKETING_ON: 412866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 412966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nExpnum = 0; 413066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str_val = get(KEY_QC_CAPTURE_BURST_EXPOSURE); 413166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((str_val != NULL) && (strlen(str_val) > 0)) { 413266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 413366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 413466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strlcpy(prop, str_val, PROPERTY_VALUE_MAX); 413566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *saveptr = NULL; 413666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *token = strtok_r(prop, ",", &saveptr); 413766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin while (token != NULL) { 413866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin token = strtok_r(NULL, ",", &saveptr); 413966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nExpnum++; 414066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 414166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 414266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (nExpnum == 0) { 414366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nExpnum = 1; 414466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 414566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 414666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 414766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 414866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nExpnum = 1 + getNumOfExtraHDROutBufsIfNeeded(); 414966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 415066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 415166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 415266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 415366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiRefocus()) { 415466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nBurstNum = m_pCapability->refocus_af_bracketing_need.output_count + 1; 415566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 415666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 415766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("nBurstNum = %d, nExpnum = %d", nBurstNum, nExpnum); 415866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_NUM_SNAPSHOT_PER_SHUTTER, nBurstNum * nExpnum); 415966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 416066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 416166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 416266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 416366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRecordingHint 416466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 416566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set recording hint value from user setting 416666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 416766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 416866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 416966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 417066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 417166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 417266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 417366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 417466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRecordingHint(const QCameraParameters& params) 417566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 417666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char * str = params.get(KEY_RECORDING_HINT); 417766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_RECORDING_HINT); 417866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 417966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || strcmp(str, prev_str) != 0) { 418066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(TRUE_FALSE_MODES_MAP, PARAM_MAP_SIZE(TRUE_FALSE_MODES_MAP), 418166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str); 418266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value != NAME_NOT_FOUND){ 418366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_RECORDING_HINT, str); 418466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setRecordingHintValue(value); 418566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getFaceDetectionOption() == true) { 4186d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (!fdModeInVideo()) { 418766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFaceDetection(value > 0 ? false : true, false); 418866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 418966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFaceDetection(true, false); 419066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 419166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 419266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bDISEnabled) { 419366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting DIS value again"); 419466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setDISValue(VALUE_ENABLE); 419566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 419666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 419766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 419866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid recording hint value: %s", str); 419966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 420066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 420166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 420266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 420366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 420466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 420566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 420666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 420766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setNoDisplayMode 420866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 420966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set no display mode from user setting 421066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 421166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 421266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 421366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 421466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 421566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 421666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 421766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 421866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setNoDisplayMode(const QCameraParameters& params) 421966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 422066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str_val = params.get(KEY_QC_NO_DISPLAY_MODE); 422166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_NO_DISPLAY_MODE); 422266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 422366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("str_val: %s, prev_str: %s", str_val, prev_str); 422466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 422566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Aux Camera Mode, set no display mode 422666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.mode == CAM_MODE_SECONDARY) { 422766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_bNoDisplayMode) { 422866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_NO_DISPLAY_MODE, 1); 422966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNoDisplayMode = true; 423066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 423166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 423266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 423366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 423466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 423566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str_val && strlen(str_val) > 0) { 423666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || strcmp(str_val, prev_str) != 0) { 423766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNoDisplayMode = atoi(str_val); 423866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_NO_DISPLAY_MODE, str_val); 423966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 424066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 424166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 424266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 424366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.no-display", prop, "0"); 424466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNoDisplayMode = atoi(prop); 424566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 424666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Param m_bNoDisplayMode = %d", m_bNoDisplayMode); 424766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 424866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 424966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 425066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 425166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setZslMode 425266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 425366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set ZSL mode from user setting 425466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 425566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 425666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 425766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 425866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 425966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 426066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 426166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 426266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setZslMode(const QCameraParameters& params) 426366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 426466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str_val = params.get(KEY_QC_ZSL); 426566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_val = get(KEY_QC_ZSL); 426666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 426766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 426866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_bForceZslMode) { 426966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_bZslMode) { 427066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Force ZSL mode to ON 427166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL, VALUE_ON); 427266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setZslMode(TRUE); 427366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("ZSL Mode forced to be enabled"); 427466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 427566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (str_val != NULL) { 427666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_val == NULL || strcmp(str_val, prev_val) != 0) { 427766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ON_OFF_MODES_MAP, PARAM_MAP_SIZE(ON_OFF_MODES_MAP), 427866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str_val); 427966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 428066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL, str_val); 428166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setZslMode(value); 428266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // ZSL mode changed, need restart preview 428366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 428466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 428566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid ZSL mode value: %s", str_val); 428666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 428766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 428866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 428966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 429066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 429166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 429266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 429366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 429466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setZslMode 429566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 429666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set ZSL mode from user setting 429766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 429866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 429966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @value : ZSL mode value 430066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 430166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 430266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 430366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 430466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 430566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setZslMode(bool value) 430666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 430766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 430866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_bForceZslMode) { 430966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_bZslMode) { 431066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Force ZSL mode to ON 431166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL, VALUE_ON); 431266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode_new = true; 431366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode = true; 431466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 431566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 431666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = m_bForceZslMode; 431766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ZSL_MODE, value)) { 431866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 431966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 432066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 432166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGI("ZSL Mode forced to be enabled"); 432266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 432366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 432466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGI("ZSL Mode -> %s", m_bZslMode_new ? "Enabled" : "Disabled"); 432566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode_new = (value > 0)? true : false; 432666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ZSL_MODE, value)) { 432766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 432866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 432966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 433066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("enabled: %d rc = %d", m_bZslMode_new, rc); 433166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 433266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 433366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 433466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 433566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateZSLModeValue 433666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 433766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update zsl mode value locally and to daemon 433866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 433966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 434066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @value : zsl mode value 434166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 434266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 434366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 434466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 434566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 434666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateZSLModeValue(bool value) 434766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 434866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 434966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 435066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 435166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 435266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 435366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 435466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setZslMode(value); 435566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 435666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to ZSL value"); 435766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 435866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 435966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 436066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 436166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 436266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update recording hint"); 436366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 436466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 436566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 436666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 436766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 436866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 436966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 437066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setWaveletDenoise 437166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 437266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set wavelet denoise value from user setting 437366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 437466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 437566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 437666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 437766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 437866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 437966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 438066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 438166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setWaveletDenoise(const QCameraParameters& params) 438266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 438366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_DENOISE); 438466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_DENOISE); 438566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 438666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 438766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 438866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setWaveletDenoise(str); 438966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 439066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 439166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 439266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 439366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 439466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 439566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setTemporalDenoise 439666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 439766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set temporal denoise value from properties 439866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 439966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 440066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 440166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 440266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 440366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 440466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 440566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setTemporalDenoise(const QCameraParameters& params) 440666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 440766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_CPP_TNR) == 0) { 440866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("TNR is not supported"); 440966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 441066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 441166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 441266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_TNR_MODE); 441366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_TNR_MODE); 441466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *video_str = params.get(KEY_QC_VIDEO_TNR_MODE); 441566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *video_prev_str = get(KEY_QC_VIDEO_TNR_MODE); 441666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char video_value[PROPERTY_VALUE_MAX]; 441766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char preview_value[PROPERTY_VALUE_MAX]; 441866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool prev_video_tnr = m_bTNRVideoOn; 441966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool prev_preview_tnr = m_bTNRPreviewOn; 442066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool prev_snap_tnr = m_bTNRSnapshotOn; 442166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 442266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 442366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0, sizeof(value)); 442466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.tnr_cds", value, "0"); 442566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t tnr_cds = (uint8_t)atoi(value); 442666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 442766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bRecordingHint_new == true) { 442866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (video_str) { 442966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((video_prev_str == NULL) || (strcmp(video_str, video_prev_str) != 0)) { 443066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(video_str, VALUE_ON)) { 443166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRVideoOn = true; 443266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn = true; 443366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 443466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRVideoOn = false; 443566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn = false; 443666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 443766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_TNR_MODE, video_str); 443866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 443966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 444066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 444166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 444266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 444366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str) { 444466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((prev_str == NULL) || (strcmp(str, prev_str) != 0)) { 444566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(str, VALUE_ON)) { 444666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn = true; 444766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 444866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn = false; 444966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 445066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_TNR_MODE, str); 445166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 445266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 445366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 445466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 445566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 445666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 445766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Read setprops only if UI is not present or disabled. 445866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_bRecordingHint_new == true) 445966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && ((video_str == NULL) 446066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin || (strcmp(video_str, VALUE_ON)))) { 446166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(video_value, 0, sizeof(video_value)); 446266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.tnr.video", video_value, VALUE_OFF); 446366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(video_value, VALUE_ON)) { 446466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRVideoOn = true; 446566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 446666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRVideoOn = false; 446766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 446866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_TNR_MODE, video_value); 446966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 447066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(preview_value, 0, sizeof(preview_value)); 447166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.tnr.preview", preview_value, VALUE_OFF); 447266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(preview_value, VALUE_ON)) { 447366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn = true; 447466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 447566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn = false; 447666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 447766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_TNR_MODE, preview_value); 447866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if ((m_bRecordingHint_new != true) 447966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && ((str == NULL) || (strcmp(str, VALUE_ON)))) { 448066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(preview_value, 0, sizeof(preview_value)); 448166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.tnr.preview", preview_value, VALUE_OFF); 448266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(preview_value, VALUE_ON)) { 448366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn = true; 448466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 448566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRPreviewOn = false; 448666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 448766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_TNR_MODE, preview_value); 448866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 448966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 449066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0, sizeof(value)); 449166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.tnr.snapshot", value, VALUE_OFF); 449266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(value, VALUE_ON)) { 449366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRSnapshotOn = true; 449466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("TNR enabled for SNAPSHOT stream"); 449566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 449666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTNRSnapshotOn = false; 449766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 449866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 449966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_denoise_param_t temp; 450066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&temp, 0, sizeof(temp)); 450166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bTNRVideoOn || m_bTNRPreviewOn || m_bTNRSnapshotOn) { 450266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin temp.denoise_enable = 1; 450366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin temp.process_plates = getDenoiseProcessPlate( 450466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_TEMPORAL_DENOISE); 450566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 450666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!tnr_cds) { 450766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cds_mode = lookupAttr(CDS_MODES_MAP, 450866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(CDS_MODES_MAP), CDS_MODE_OFF); 450966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 451066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cds_mode != NAME_NOT_FOUND) { 451166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_CDS_MODE, CDS_MODE_OFF); 451266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bTNRPreviewOn) { 451366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_CDS_MODE, CDS_MODE_OFF); 451466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 451566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 451666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_CDS_MODE, cds_mode)) { 451766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed CDS MODE to update table"); 451866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 451966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 452066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("CDS is set to = %s when TNR is enabled", 452166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CDS_MODE_OFF); 452266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCds_mode = cds_mode; 452366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 452466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid argument for video CDS MODE %d", 452566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cds_mode); 452666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 452766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 452866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Enabled TNR with CDS"); 452966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 453066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 453166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 453266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_bTNRVideoOn != prev_video_tnr) 453366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin || (m_bTNRPreviewOn != prev_preview_tnr) 453466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin || (prev_snap_tnr != m_bTNRSnapshotOn)) { 453566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("TNR enabled = %d, plates = %d", 453666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin temp.denoise_enable, temp.process_plates); 453766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 453866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_TEMPORAL_DENOISE, temp)) { 453966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 454066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 454166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 454266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 454366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 454466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 454566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 454666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 454766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setCameraMode 454866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 454966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set camera mode from user setting 455066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 455166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 455266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 455366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 455466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 455566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 455666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 455766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 455866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setCameraMode(const QCameraParameters& params) 455966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 456066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_CAMERA_MODE); 456166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 456266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CAMERA_MODE, str); 456366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 456466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin remove(KEY_QC_CAMERA_MODE); 456566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 456666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 456766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 456866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 456966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 457066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSceneSelectionMode 457166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 457266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set scene selection mode from user setting 457366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 457466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 457566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 457666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 457766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 457866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 457966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 458066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 458166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSceneSelectionMode(const QCameraParameters& params) 458266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 458366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_SCENE_SELECTION); 458466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_SCENE_SELECTION); 458566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != str) { 458666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((NULL == prev_str) || (strcmp(str, prev_str) != 0)) { 458766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 458866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), str); 458966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 459066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Setting selection value %s", str); 459166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value && m_bZslMode_new) { 459266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SCENE_SELECTION, str); 459366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 459466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSceneSelection = true; 459566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (!value) { 459666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SCENE_SELECTION, str); 459766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 459866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSceneSelection = false; 459966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 460066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Trying to enable scene selection in non ZSL mode!!!"); 460166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 460266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 460366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 460466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Trying to configure invalid scene selection value: %s", 460566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str); 460666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 460766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 460866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 460966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 461066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 461166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 461266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 461366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 461466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 461566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSelectedScene 461666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 461766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: select specific scene 461866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 461966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 462066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @scene : scene mode 462166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 462266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 462366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 462466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 462566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 462666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSelectedScene(cam_scene_mode_type scene) 462766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 462866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex::Autolock l(m_SceneSelectLock); 462966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_SelectedScene = scene; 463066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 463166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 463266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 463366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 463466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getSelectedScene 463566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 463666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get selected scene 463766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 463866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 463966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 464066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : currently selected scene 464166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 464266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjincam_scene_mode_type QCameraParameters::getSelectedScene() 464366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 464466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex::Autolock l(m_SceneSelectLock); 464566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return m_SelectedScene; 464666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 464766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 464866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*========================================================== 464966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRdiMode 465066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 465166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set Rdi mode from user setting 465266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 465366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 465466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 465566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 465666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 465766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 465866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 465966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *===========================================================*/ 466066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRdiMode(const QCameraParameters& params) 466166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 466266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_RDI_MODE); 466366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_RDI_MODE); 466466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 466566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 466666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 466766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.rdi.mode", prop, VALUE_DISABLE); 466866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((str != NULL) && (prev_str == NULL || strcmp(str, prev_str) != 0)) { 466966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("RDI mode set to %s", str); 467066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setRdiMode(str); 467166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (prev_str == NULL || strcmp(prev_str, prop) != 0 ) { 467266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("RDI mode set to prop: %s", prop); 467366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setRdiMode(prop); 467466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 467566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 467666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 467766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 467866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*========================================================== 467966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSecureMode 468066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 468166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set secure mode from user setting 468266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 468366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 468466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 468566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 468666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 468766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 468866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 468966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *===========================================================*/ 469066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 469166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSecureMode(const QCameraParameters& params) 469266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 469366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_SECURE_MODE); 469466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_SECURE_MODE); 469566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 469666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 469766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 469866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.secure.mode", prop, VALUE_DISABLE); 469966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((str != NULL) && (prev_str == NULL || strcmp(str, prev_str) != 0)) { 470066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Secure mode set to KEY: %s", str); 470166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSecureMode(str); 470266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (prev_str == NULL || strcmp(prev_str, prop) != 0 ) { 470366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Secure mode set to prop: %s", prop); 470466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSecureMode(prop); 470566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 470666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 470766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 470866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 470966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 471066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setZslAttributes 471166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 471266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set ZSL related attributes from user setting 471366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 471466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 471566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 471666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 471766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 471866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 471966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 472066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 472166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setZslAttributes(const QCameraParameters& params) 472266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 472366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // TODO: may switch to pure param instead of sysprop 472466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 472566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 472666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_ZSL_BURST_INTERVAL); 472766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 472866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL_BURST_INTERVAL, str); 472966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 473066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 473166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.zsl.interval", prop, "1"); 473266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL_BURST_INTERVAL, prop); 473366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("burst interval: %s", prop); 473466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 473566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 473666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = params.get(KEY_QC_ZSL_BURST_LOOKBACK); 473766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 473866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL_BURST_LOOKBACK, str); 473966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 474066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 474166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.zsl.backlookcnt", prop, "2"); 474266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t look_back_cnt = atoi(prop); 474366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.is_frame_sync_enabled) { 474466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin look_back_cnt += EXTRA_FRAME_SYNC_BUFFERS; 474566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 474666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL_BURST_LOOKBACK, look_back_cnt); 474766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("look back count: %s", prop); 474866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 474966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 475066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = params.get(KEY_QC_ZSL_QUEUE_DEPTH); 475166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 475266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL_QUEUE_DEPTH, str); 475366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 475466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 475566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.zsl.queuedepth", prop, "2"); 475666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t queue_depth = atoi(prop); 475766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.is_frame_sync_enabled) { 475866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin queue_depth += EXTRA_FRAME_SYNC_BUFFERS; 475966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 476066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL_QUEUE_DEPTH, queue_depth); 476166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("queue depth: %s", prop); 476266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 476366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 476466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 476566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 476666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 476766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 476866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFlip 476966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 477066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set preview/ video/ picture flip mode from user setting 477166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 477266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 477366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 477466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 477566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 477666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 477766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 477866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 477966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFlip(const QCameraParameters& params) 478066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 478166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_FLIP) == 0) { 478266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("flip is not supported."); 478366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 478466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 478566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 478666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //check preview flip setting 478766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_PREVIEW_FLIP); 478866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_val = get(KEY_QC_PREVIEW_FLIP); 478966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL){ 479066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_val == NULL || strcmp(str, prev_val) != 0) { 479166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(FLIP_MODES_MAP, PARAM_MAP_SIZE(FLIP_MODES_MAP), str); 479266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value != NAME_NOT_FOUND){ 479366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_PREVIEW_FLIP, str); 479466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bPreviewFlipChanged = true; 479566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 479666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 479766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 479866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 479966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check video filp setting 480066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = params.get(KEY_QC_VIDEO_FLIP); 480166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prev_val = get(KEY_QC_VIDEO_FLIP); 480266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL){ 480366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_val == NULL || strcmp(str, prev_val) != 0) { 480466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(FLIP_MODES_MAP, PARAM_MAP_SIZE(FLIP_MODES_MAP), str); 480566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value != NAME_NOT_FOUND){ 480666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_FLIP, str); 480766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bVideoFlipChanged = true; 480866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 480966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 481066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 481166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 481266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // check picture filp setting 481366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = params.get(KEY_QC_SNAPSHOT_PICTURE_FLIP); 481466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prev_val = get(KEY_QC_SNAPSHOT_PICTURE_FLIP); 481566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL){ 481666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_val == NULL || strcmp(str, prev_val) != 0) { 481766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(FLIP_MODES_MAP, PARAM_MAP_SIZE(FLIP_MODES_MAP), str); 481866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value != NAME_NOT_FOUND){ 481966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SNAPSHOT_PICTURE_FLIP, str); 482066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSnapshotFlipChanged = true; 482166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 482266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 482366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 482466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 482566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 482666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 482766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 482866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 482966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSnapshotFDReq 483066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 483166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set requirement of Face Detection Metadata in Snapshot mode. 483266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 483366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 483466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 483566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 483666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 483766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 483866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 483966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 484066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSnapshotFDReq(const QCameraParameters& params) 484166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 484266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 484366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_SNAPSHOT_FD_DATA); 484466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 484566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL){ 484666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SNAPSHOT_FD_DATA, str); 484766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{ 484866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 484966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.snapshot.fd", prop, "0"); 485066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SNAPSHOT_FD_DATA, prop); 485166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 485266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 485366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 485466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 485566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 485666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setMobicat 485766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 485866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set Mobicat on/off. 485966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 486066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 486166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 486266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 486366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 486466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 486566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 486666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 486766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setMobicat(const QCameraParameters& ) 486866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 486966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value [PROPERTY_VALUE_MAX]; 487066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.mobicat", value, "0"); 487166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ret = NO_ERROR; 487266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t enableMobi = (uint8_t)atoi(value); 487366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 487466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (enableMobi) { 487566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin tune_cmd_t tune_cmd; 487666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin tune_cmd.type = 2; 487766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin tune_cmd.module = 0; 487866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin tune_cmd.value = 1; 487966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_SET_VFE_COMMAND, tune_cmd)) { 488066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 488166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 488266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_SET_PP_COMMAND, tune_cmd)) { 488366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ret = BAD_VALUE; 488466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 488566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 488666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_MobiMask = enableMobi; 488766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 488866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return ret; 488966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 489066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 489166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 489266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setLongshotParam 489366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 489466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set Longshot on/off. 489566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 489666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 489766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 489866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 489966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 490066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 490166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 490266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 490366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setLongshotParam(const QCameraParameters& params) 490466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 490566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_LONG_SHOT); 490666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_LONG_SHOT); 490766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 490866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 490966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || strcmp(str, prev_str) != 0) { 491066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_LONG_SHOT, str); 491166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(str, "off")) { 491266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bLongshotEnabled == true) { 491366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // We restart here, to reset the FPS and no 491466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // of buffers as per the requirement of single snapshot usecase. 491566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 491666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 491766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bLongshotEnabled = false; 491866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 491966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 492066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 492166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 492266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 492366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 492466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 492566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 492666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : checkFeatureConcurrency 492766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 492866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: check if there is a feature concurrency issue with advanced 492966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * camera features 493066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 493166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : None 493266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 493366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 493466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 493566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 493666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 493766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::checkFeatureConcurrency() 493866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 493966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 494066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t advancedFeatEnableBit = 0; 494166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 494266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isStillMoreEnabled()) { 494366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit |= CAM_QCOM_FEATURE_STILLMORE; 494466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 494566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDREnabled()) { 494666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit |= CAM_QCOM_FEATURE_HDR; 494766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 494866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isChromaFlashEnabled()) { 494966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit |= CAM_QCOM_FEATURE_CHROMA_FLASH; 495066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 495166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiFocusEnabled()) { 495266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit |= CAM_QCOM_FEATURE_UBIFOCUS; 495366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 495466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isTruePortraitEnabled()) { 495566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit |= CAM_QCOM_FEATURE_TRUEPORTRAIT; 495666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 495766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isOptiZoomEnabled()) { 495866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit |= CAM_QCOM_FEATURE_OPTIZOOM; 495966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 496066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiRefocus()) { 496166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit |= CAM_QCOM_FEATURE_REFOCUS; 496266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 496366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 496466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bLongshotEnabled && advancedFeatEnableBit) { 496566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed Longshot mode bit 0x%x", 496666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit); 496766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_TYPE; 496866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 496966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 497066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 497166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_bRecordingHint_new) { 497266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit &= ~CAM_QCOM_FEATURE_STILLMORE; 497366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 497466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (advancedFeatEnableBit) { 497566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed recording mode bit 0x%x", 497666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit); 497766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_TYPE; 497866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 497966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (m_bZslMode_new) { 498066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* ZSL mode check if 2 bits are set */ 498166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (advancedFeatEnableBit & (advancedFeatEnableBit - 1)) { 498266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed ZSL mode bit 0x%x", advancedFeatEnableBit); 498366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_TYPE; 498466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 498566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { /* non-ZSL mode */ 498666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin advancedFeatEnableBit &= ~CAM_QCOM_FEATURE_HDR; 498766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 498866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* non-ZSL mode check if 1 bit is set */ 498966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (advancedFeatEnableBit) { 499066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed non-ZSL mode bit 0x%x", advancedFeatEnableBit); 499166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_TYPE; 499266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 499366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 499466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGI("Advance feature enabled 0x%x", advancedFeatEnableBit); 499566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 499666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 499766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 499866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 499966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateParameters 500066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 500166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update parameters from user setting 500266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 500366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 500466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 500566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @needRestart : [output] if preview need restart upon setting changes 500666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 500766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 500866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 500966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 501066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 501166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateParameters(const String8& p, 501266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool &needRestart) 501366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 501466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t final_rc = NO_ERROR; 501566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc; 501666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = false; 501766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters params(p); 501866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 501966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 502066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 502166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_TYPE; 502266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin goto UPDATE_PARAM_DONE; 502366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 502466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 502566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setPreviewSize(params))) final_rc = rc; 502666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setVideoSize(params))) final_rc = rc; 502766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setPictureSize(params))) final_rc = rc; 502866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setPreviewFormat(params))) final_rc = rc; 502966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setPictureFormat(params))) final_rc = rc; 503066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setJpegQuality(params))) final_rc = rc; 503166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setOrientation(params))) final_rc = rc; 503266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setRotation(params))) final_rc = rc; 503366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setVideoRotation(params))) final_rc = rc; 503466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setNoDisplayMode(params))) final_rc = rc; 503566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setZslMode(params))) final_rc = rc; 503666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setZslAttributes(params))) final_rc = rc; 503766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setCameraMode(params))) final_rc = rc; 503866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSceneSelectionMode(params))) final_rc = rc; 503966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setRecordingHint(params))) final_rc = rc; 504066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setRdiMode(params))) final_rc = rc; 504166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSecureMode(params))) final_rc = rc; 504266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setPreviewFrameRate(params))) final_rc = rc; 504366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setPreviewFpsRange(params))) final_rc = rc; 504466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setAutoExposure(params))) final_rc = rc; 504566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setEffect(params))) final_rc = rc; 504666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setBrightness(params))) final_rc = rc; 504766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setZoom(params))) final_rc = rc; 504866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSharpness(params))) final_rc = rc; 504966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSaturation(params))) final_rc = rc; 505066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setContrast(params))) final_rc = rc; 505166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setFocusMode(params))) final_rc = rc; 505266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setISOValue(params))) final_rc = rc; 505366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setContinuousISO(params))) final_rc = rc; 505466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setExposureTime(params))) final_rc = rc; 505566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSkinToneEnhancement(params))) final_rc = rc; 505666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setFlash(params))) final_rc = rc; 505766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setAecLock(params))) final_rc = rc; 505866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setAwbLock(params))) final_rc = rc; 505966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setLensShadeValue(params))) final_rc = rc; 506066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setMCEValue(params))) final_rc = rc; 506166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setDISValue(params))) final_rc = rc; 506266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setAntibanding(params))) final_rc = rc; 506366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setExposureCompensation(params))) final_rc = rc; 506466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setWhiteBalance(params))) final_rc = rc; 506566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setHDRMode(params))) final_rc = rc; 506666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setHDRNeed1x(params))) final_rc = rc; 506766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setManualWhiteBalance(params))) final_rc = rc; 506866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSceneMode(params))) final_rc = rc; 506966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setFocusAreas(params))) final_rc = rc; 507066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setFocusPosition(params))) final_rc = rc; 507166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setMeteringAreas(params))) final_rc = rc; 507266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSelectableZoneAf(params))) final_rc = rc; 507366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setRedeyeReduction(params))) final_rc = rc; 507466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setAEBracket(params))) final_rc = rc; 507566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setAutoHDR(params))) final_rc = rc; 507666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setGpsLocation(params))) final_rc = rc; 507766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setWaveletDenoise(params))) final_rc = rc; 507866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setFaceRecognition(params))) final_rc = rc; 507966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setFlip(params))) final_rc = rc; 508066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setVideoHDR(params))) final_rc = rc; 508166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setVtEnable(params))) final_rc = rc; 508266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setAFBracket(params))) final_rc = rc; 508366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setReFocus(params))) final_rc = rc; 508466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setChromaFlash(params))) final_rc = rc; 508566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setTruePortrait(params))) final_rc = rc; 508666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setOptiZoom(params))) final_rc = rc; 508766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setBurstLEDOnPeriod(params))) final_rc = rc; 508866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setRetroActiveBurstNum(params))) final_rc = rc; 508966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSnapshotFDReq(params))) final_rc = rc; 509066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setTintlessValue(params))) final_rc = rc; 509166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setCDSMode(params))) final_rc = rc; 509266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setTemporalDenoise(params))) final_rc = rc; 509366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setCacheVideoBuffers(params))) final_rc = rc; 509466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setInitialExposureIndex(params))) final_rc = rc; 5095d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if ((rc = setInstantCapture(params))) final_rc = rc; 5096d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if ((rc = setInstantAEC(params))) final_rc = rc; 509766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 509866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // update live snapshot size after all other parameters are set 509966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setLiveSnapshotSize(params))) final_rc = rc; 510066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setJpegThumbnailSize(params))) final_rc = rc; 510166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setStatsDebugMask())) final_rc = rc; 510266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setPAAF())) final_rc = rc; 510366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setMobicat(params))) final_rc = rc; 510466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setSeeMore(params))) final_rc = rc; 510566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setStillMore(params))) final_rc = rc; 510666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setCustomParams(params))) final_rc = rc; 510766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setNoiseReductionMode(params))) final_rc = rc; 510866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 510966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setLongshotParam(params))) final_rc = rc; 511066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = setDualLedCalibration(params))) final_rc = rc; 511166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 511266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setVideoBatchSize(); 511366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setLowLightCapture(); 511466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 511566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((rc = updateFlash(false))) final_rc = rc; 511666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 511766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifdef TARGET_TS_MAKEUP 511866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (params.get(KEY_TS_MAKEUP) != NULL) { 511966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_TS_MAKEUP,params.get(KEY_TS_MAKEUP)); 512066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin final_rc = rc; 512166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 512266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (params.get(KEY_TS_MAKEUP_WHITEN) != NULL) { 512366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_TS_MAKEUP_WHITEN,params.get(KEY_TS_MAKEUP_WHITEN)); 512466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin final_rc = rc; 512566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 512666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (params.get(KEY_TS_MAKEUP_CLEAN) != NULL) { 512766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_TS_MAKEUP_CLEAN,params.get(KEY_TS_MAKEUP_CLEAN)); 512866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin final_rc = rc; 512966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 513066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 5131d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 5132d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if ((rc = setAdvancedCaptureMode())) final_rc = rc; 513366f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinUPDATE_PARAM_DONE: 513466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin needRestart = m_bNeedRestart; 513566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return final_rc; 513666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 513766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 513866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 513966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : commitParameters 514066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 514166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: commit parameter changes to backend 514266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 514366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 514466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 514566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 514666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 514766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 514866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 514966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::commitParameters() 515066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 515166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return commitSetBatch(); 515266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 515366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 515466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 515566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : initDefaultParameters 515666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 515766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: initialize default parameters for the first time 515866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 515966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 516066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 516166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 516266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 516366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 516466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 516566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::initDefaultParameters() 516666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 516766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 516866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 516966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 517066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 517166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t hal_version = CAM_HAL_V1; 517266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_HAL_VERSION, hal_version); 517366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 517466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*************************Initialize Values******************************/ 517566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set read only parameters from camera capability 517666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SMOOTH_ZOOM_SUPPORTED, 517766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->smooth_zoom_supported? VALUE_TRUE : VALUE_FALSE); 517866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_ZOOM_SUPPORTED, 517966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->zoom_supported? VALUE_TRUE : VALUE_FALSE); 518066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_VIDEO_SNAPSHOT_SUPPORTED, 518166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->video_snapshot_supported? VALUE_TRUE : VALUE_FALSE); 518266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_VIDEO_STABILIZATION_SUPPORTED, 518366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->video_stablization_supported? VALUE_TRUE : VALUE_FALSE); 518466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, 518566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->auto_exposure_lock_supported? VALUE_TRUE : VALUE_FALSE); 518666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, 518766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->auto_wb_lock_supported? VALUE_TRUE : VALUE_FALSE); 518866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_CAMERA_FEATURES, 518966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int)m_pCapability->qcom_supported_feature_mask); 519066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_MAX_NUM_DETECTED_FACES_HW, m_pCapability->max_num_roi); 519166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_MAX_NUM_DETECTED_FACES_SW, m_pCapability->max_num_roi); 519266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_NUM_REQUESTED_FACES, m_pCapability->max_num_roi); 519366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set focal length, horizontal view angle, and vertical view angle 519466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_FOCAL_LENGTH, m_pCapability->focal_length); 519566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_HORIZONTAL_VIEW_ANGLE, m_pCapability->hor_view_angle); 519666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_VERTICAL_VIEW_ANGLE, m_pCapability->ver_view_angle); 519766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(QCameraParameters::KEY_FOCUS_DISTANCES, "Infinity,Infinity,Infinity"); 519866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_AUTO_HDR_SUPPORTED, 519966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_pCapability->auto_hdr_supported)? VALUE_TRUE : VALUE_FALSE); 520066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set supported preview sizes 520166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->preview_sizes_tbl_cnt > 0 && 520266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->preview_sizes_tbl_cnt <= MAX_SIZES_CNT) { 520366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 previewSizeValues = createSizesString( 520466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->preview_sizes_tbl, m_pCapability->preview_sizes_tbl_cnt); 520566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_PREVIEW_SIZES, previewSizeValues.string()); 520666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("supported preview sizes: %s", previewSizeValues.string()); 520766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default preview size 520866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPreviewSize(m_pCapability->preview_sizes_tbl[0].width, 520966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->preview_sizes_tbl[0].height); 521066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 521166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("supported preview sizes cnt is 0 or exceeds max!!!"); 521266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 521366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 521466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set supported video sizes 521566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->video_sizes_tbl_cnt > 0 && 521666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->video_sizes_tbl_cnt <= MAX_SIZES_CNT) { 521766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 videoSizeValues = createSizesString( 521866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->video_sizes_tbl, m_pCapability->video_sizes_tbl_cnt); 521966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_VIDEO_SIZES, videoSizeValues.string()); 522066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("supported video sizes: %s", videoSizeValues.string()); 522166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default video size 522266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setVideoSize(m_pCapability->video_sizes_tbl[0].width, 522366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->video_sizes_tbl[0].height); 522466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 522566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set preferred Preview size for video 522666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 vSize = createSizesString(&m_pCapability->preview_sizes_tbl[0], 1); 522766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, vSize.string()); 522866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 522966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("supported video sizes cnt is 0 or exceeds max!!!"); 523066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 523166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 523266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set supported picture sizes 523366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->picture_sizes_tbl_cnt > 0 && 523466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->picture_sizes_tbl_cnt <= MAX_SIZES_CNT) { 523566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 pictureSizeValues = createSizesString( 523666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->picture_sizes_tbl, m_pCapability->picture_sizes_tbl_cnt); 523766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_PICTURE_SIZES, pictureSizeValues.string()); 523866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("supported pic sizes: %s", pictureSizeValues.string()); 523966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default picture size to the smallest resolution 524066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPictureSize( 524166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->picture_sizes_tbl[m_pCapability->picture_sizes_tbl_cnt-1].width, 524266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->picture_sizes_tbl[m_pCapability->picture_sizes_tbl_cnt-1].height); 524366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 524466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("supported picture sizes cnt is 0 or exceeds max!!!"); 524566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 524666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 524766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Need check if scale should be enabled 524866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->scale_picture_sizes_cnt > 0 && 524966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->scale_picture_sizes_cnt <= MAX_SCALE_SIZES_CNT){ 525066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //get scale size, enable scaling. And re-set picture size table with scale sizes 525166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_reprocScaleParam.setScaleEnable(true); 525266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int rc_s = m_reprocScaleParam.setScaleSizeTbl( 525366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->scale_picture_sizes_cnt, m_pCapability->scale_picture_sizes, 525466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->picture_sizes_tbl_cnt, m_pCapability->picture_sizes_tbl); 525566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(rc_s == NO_ERROR){ 525666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t *totalSizeTbl = m_reprocScaleParam.getTotalSizeTbl(); 525766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t totalSizeCnt = m_reprocScaleParam.getTotalSizeTblCnt(); 525866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 pictureSizeValues = createSizesString(totalSizeTbl, totalSizeCnt); 525966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_PICTURE_SIZES, pictureSizeValues.string()); 526066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("scaled supported pic sizes: %s", pictureSizeValues.string()); 526166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{ 526266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_reprocScaleParam.setScaleEnable(false); 526366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("reset scaled picture size table failed."); 526466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 526566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{ 526666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_reprocScaleParam.setScaleEnable(false); 526766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 526866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 526966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set supported thumbnail sizes 527066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 thumbnailSizeValues = createSizesString( 527166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin THUMBNAIL_SIZES_MAP, 527266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(THUMBNAIL_SIZES_MAP)); 527366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, thumbnailSizeValues.string()); 527466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default thumnail size 527566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_JPEG_THUMBNAIL_WIDTH, THUMBNAIL_SIZES_MAP[0].width); 527666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_JPEG_THUMBNAIL_HEIGHT, THUMBNAIL_SIZES_MAP[0].height); 527766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 527866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set supported livesnapshot sizes 527966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->livesnapshot_sizes_tbl_cnt > 0 && 528066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->livesnapshot_sizes_tbl_cnt <= MAX_SIZES_CNT) { 528166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 liveSnpashotSizeValues = createSizesString( 528266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->livesnapshot_sizes_tbl, 528366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->livesnapshot_sizes_tbl_cnt); 528466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_LIVESNAPSHOT_SIZES, liveSnpashotSizeValues.string()); 528566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("supported live snapshot sizes: %s", liveSnpashotSizeValues.string()); 528666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LiveSnapshotSize = 528766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->livesnapshot_sizes_tbl[m_pCapability->livesnapshot_sizes_tbl_cnt-1]; 528866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 528966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 529066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set supported preview formats 529166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 previewFormatValues = createValuesString( 529266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_preview_fmts, 529366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_preview_fmt_cnt, 529466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PREVIEW_FORMATS_MAP, 529566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(PREVIEW_FORMATS_MAP)); 529666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_PREVIEW_FORMATS, previewFormatValues.string()); 529766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default preview format 529866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPreviewFormat(PIXEL_FORMAT_YUV420SP); 529966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 530066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default Video Format as OPAQUE 530166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Internally both Video and Camera subsystems use NV21_VENUS 530266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_VIDEO_FRAME_FORMAT, PIXEL_FORMAT_ANDROID_OPAQUE); 530366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 530466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set supported picture formats 530566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 pictureTypeValues(PIXEL_FORMAT_JPEG); 530666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str = createValuesString( 530766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_raw_fmts, 530866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_raw_fmt_cnt, 530966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PICTURE_TYPES_MAP, 531066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(PICTURE_TYPES_MAP)); 531166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str.string() != NULL) { 531266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pictureTypeValues.append(","); 531366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pictureTypeValues.append(str); 531466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 531566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 531666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_PICTURE_FORMATS, pictureTypeValues.string()); 531766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default picture Format 531866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPictureFormat(PIXEL_FORMAT_JPEG); 531966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set raw image size 532066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char raw_size_str[32]; 532166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(raw_size_str, sizeof(raw_size_str), "%dx%d", 532266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->raw_dim[0].width, m_pCapability->raw_dim[0].height); 532366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_RAW_PICUTRE_SIZE, raw_size_str); 532466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("KEY_QC_RAW_PICUTRE_SIZE: w: %d, h: %d ", 532566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->raw_dim[0].width, m_pCapability->raw_dim[0].height); 532666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 532766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set default jpeg quality and thumbnail quality 532866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_JPEG_QUALITY, 85); 532966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_JPEG_THUMBNAIL_QUALITY, 85); 533066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 533166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set FPS ranges 533266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->fps_ranges_tbl_cnt > 0 && 533366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->fps_ranges_tbl_cnt <= MAX_SIZES_CNT) { 533466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int default_fps_index = 0; 533566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 fpsRangeValues = createFpsRangeString(m_pCapability->fps_ranges_tbl, 533666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->fps_ranges_tbl_cnt, 533766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default_fps_index); 533866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_PREVIEW_FPS_RANGE, fpsRangeValues.string()); 533966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 534066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int min_fps = 534166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int(m_pCapability->fps_ranges_tbl[default_fps_index].min_fps * 1000); 534266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int max_fps = 534366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int(m_pCapability->fps_ranges_tbl[default_fps_index].max_fps * 1000); 534466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_default_fps_range = m_pCapability->fps_ranges_tbl[default_fps_index]; 534566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set video fps same as preview fps 534666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setPreviewFpsRange(min_fps, max_fps, min_fps, max_fps); 534766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 534866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set legacy preview fps 534966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 fpsValues = createFpsString(m_pCapability->fps_ranges_tbl[default_fps_index]); 535066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_PREVIEW_FRAME_RATES, fpsValues.string()); 535166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("supported fps rates: %s", fpsValues.string()); 535266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraParameters::setPreviewFrameRate(int(m_pCapability->fps_ranges_tbl[default_fps_index].max_fps)); 535366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 535466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("supported fps ranges cnt is 0 or exceeds max!!!"); 535566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 535666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 535766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set supported focus modes 535866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->supported_focus_modes_cnt > 0) { 535966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 focusModeValues = createValuesString( 536066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_focus_modes, 536166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_focus_modes_cnt, 536266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin FOCUS_MODES_MAP, 536366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(FOCUS_MODES_MAP)); 536466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_FOCUS_MODES, focusModeValues); 536566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 536666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default focus mode and update corresponding parameter buf 536766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *focusMode = lookupNameByValue(FOCUS_MODES_MAP, 536866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(FOCUS_MODES_MAP), 536966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_focus_modes[0]); 537066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (focusMode != NULL) { 537166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFocusMode(focusMode); 537266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 537366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFocusMode(FOCUS_MODE_FIXED); 537466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 537566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 537666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("supported focus modes cnt is 0!!!"); 537766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 537866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 537966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set focus areas 538066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->max_num_focus_areas > MAX_ROI) { 538166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_num_focus_areas = MAX_ROI; 538266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 538366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_MAX_NUM_FOCUS_AREAS, m_pCapability->max_num_focus_areas); 538466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->max_num_focus_areas > 0) { 538566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFocusAreas(DEFAULT_CAMERA_AREA); 538666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 538766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 538866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set metering areas 538966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->max_num_metering_areas > MAX_ROI) { 539066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_num_metering_areas = MAX_ROI; 539166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 539266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_MAX_NUM_METERING_AREAS, m_pCapability->max_num_metering_areas); 539366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->max_num_metering_areas > 0) { 539466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setMeteringAreas(DEFAULT_CAMERA_AREA); 539566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 539666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 539766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set focus position, we should get them from m_pCapability 539866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_focus_pos[CAM_MANUAL_FOCUS_MODE_INDEX] = 0; 539966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_INDEX] = 1023; 540066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_FOCUS_POS_INDEX, 540166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int) m_pCapability->min_focus_pos[CAM_MANUAL_FOCUS_MODE_INDEX]); 540266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_FOCUS_POS_INDEX, 540366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int) m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_INDEX]); 540466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 540566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_focus_pos[CAM_MANUAL_FOCUS_MODE_DAC_CODE] = 0; 540666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_DAC_CODE] = 1023; 540766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_FOCUS_POS_DAC, 540866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int) m_pCapability->min_focus_pos[CAM_MANUAL_FOCUS_MODE_DAC_CODE]); 540966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_FOCUS_POS_DAC, 541066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int) m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_DAC_CODE]); 541166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 541266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_focus_pos[CAM_MANUAL_FOCUS_MODE_RATIO] = 0; 541366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_RATIO] = 100; 541466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_FOCUS_POS_RATIO, 541566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int) m_pCapability->min_focus_pos[CAM_MANUAL_FOCUS_MODE_RATIO]); 541666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_FOCUS_POS_RATIO, 541766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int) m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_RATIO]); 541866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 541966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_focus_pos[CAM_MANUAL_FOCUS_MODE_DIOPTER] = 0; 542066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->min_focus_distance > 0) { 542166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_DIOPTER] = 542266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 100.0f / m_pCapability->min_focus_distance; 542366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 542466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_DIOPTER] = 0; 542566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 542666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_QC_MIN_FOCUS_POS_DIOPTER, 542766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_focus_pos[CAM_MANUAL_FOCUS_MODE_DIOPTER]); 542866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_QC_MAX_FOCUS_POS_DIOPTER, 542966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_focus_pos[CAM_MANUAL_FOCUS_MODE_DIOPTER]); 543066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 543166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set supported manual focus modes 543266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 manualFocusModes(VALUE_OFF); 543366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->supported_focus_modes_cnt > 1 && 543466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_focus_distance > 0) { 543566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualFocusModes.append(","); 543666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualFocusModes.append(KEY_QC_FOCUS_SCALE_MODE); 543766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualFocusModes.append(","); 543866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualFocusModes.append(KEY_QC_FOCUS_DIOPTER_MODE); 543966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 544066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_MANUAL_FOCUS_MODES, manualFocusModes.string()); 544166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 544266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Saturation 544366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_SATURATION, m_pCapability->saturation_ctrl.min_value); 544466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_SATURATION, m_pCapability->saturation_ctrl.max_value); 544566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SATURATION_STEP, m_pCapability->saturation_ctrl.step); 544666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSaturation(m_pCapability->saturation_ctrl.def_value); 544766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 544866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Sharpness 544966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_SHARPNESS, m_pCapability->sharpness_ctrl.min_value); 545066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_SHARPNESS, m_pCapability->sharpness_ctrl.max_value); 545166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SHARPNESS_STEP, m_pCapability->sharpness_ctrl.step); 545266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSharpness(m_pCapability->sharpness_ctrl.def_value); 545366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 545466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Contrast 545566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_CONTRAST, m_pCapability->contrast_ctrl.min_value); 545666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_CONTRAST, m_pCapability->contrast_ctrl.max_value); 545766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CONTRAST_STEP, m_pCapability->contrast_ctrl.step); 545866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setContrast(m_pCapability->contrast_ctrl.def_value); 545966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 546066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set SCE factor 546166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_SCE_FACTOR, m_pCapability->sce_ctrl.min_value); // -100 546266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_SCE_FACTOR, m_pCapability->sce_ctrl.max_value); // 100 546366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SCE_FACTOR_STEP, m_pCapability->sce_ctrl.step); // 10 546466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSkinToneEnhancement(m_pCapability->sce_ctrl.def_value); // 0 546566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 546666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Brightness 546766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_BRIGHTNESS, m_pCapability->brightness_ctrl.min_value); // 0 546866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_BRIGHTNESS, m_pCapability->brightness_ctrl.max_value); // 6 546966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_BRIGHTNESS_STEP, m_pCapability->brightness_ctrl.step); // 1 547066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setBrightness(m_pCapability->brightness_ctrl.def_value); 547166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 547266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Auto exposure 547366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 autoExposureValues = createValuesString( 547466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_aec_modes, 547566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_aec_modes_cnt, 547666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin AUTO_EXPOSURE_MAP, 547766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(AUTO_EXPOSURE_MAP)); 547866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_AUTO_EXPOSURE, autoExposureValues.string()); 547966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setAutoExposure(AUTO_EXPOSURE_FRAME_AVG); 548066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 548166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Exposure Compensation 548266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_MAX_EXPOSURE_COMPENSATION, m_pCapability->exposure_compensation_max); // 12 548366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_MIN_EXPOSURE_COMPENSATION, m_pCapability->exposure_compensation_min); // -12 548466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_EXPOSURE_COMPENSATION_STEP, m_pCapability->exposure_compensation_step); // 1/6 548566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setExposureCompensation(m_pCapability->exposure_compensation_default); // 0 548666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5487d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Set Instant AEC modes 5488d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch String8 instantAECModes = createValuesString( 5489d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_pCapability->supported_instant_aec_modes, 5490d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_pCapability->supported_instant_aec_modes_cnt, 5491d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch INSTANT_AEC_MODES_MAP, 5492d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch PARAM_MAP_SIZE(INSTANT_AEC_MODES_MAP)); 5493d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch set(KEY_QC_INSTANT_AEC_SUPPORTED_MODES, instantAECModes.string()); 5494d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 5495d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Set Instant Capture modes 5496d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch String8 instantCaptureModes = createValuesString( 5497d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_pCapability->supported_instant_aec_modes, 5498d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_pCapability->supported_instant_aec_modes_cnt, 5499d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch INSTANT_CAPTURE_MODES_MAP, 5500d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch PARAM_MAP_SIZE(INSTANT_CAPTURE_MODES_MAP)); 5501d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch set(KEY_QC_INSTANT_CAPTURE_SUPPORTED_MODES, instantCaptureModes.string()); 5502d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 5503d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 550466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Antibanding 550566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 antibandingValues = createValuesString( 550666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_antibandings, 550766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_antibandings_cnt, 550866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ANTIBANDING_MODES_MAP, 550966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ANTIBANDING_MODES_MAP)); 551066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_ANTIBANDING, antibandingValues); 551166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setAntibanding(ANTIBANDING_OFF); 551266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 551366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Effect 551466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 effectValues = createValuesString( 551566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_effects, 551666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_effects_cnt, 551766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin EFFECT_MODES_MAP, 551866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(EFFECT_MODES_MAP)); 551966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 552066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->supported_effects_cnt > 0) { 552166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_EFFECTS, effectValues); 552266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 552366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("Color effects are not available"); 552466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_EFFECTS, EFFECT_NONE); 552566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 552666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setEffect(EFFECT_NONE); 552766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 552866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set WhiteBalance 552966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 whitebalanceValues = createValuesString( 553066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_white_balances, 553166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_white_balances_cnt, 553266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin WHITE_BALANCE_MODES_MAP, 553366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(WHITE_BALANCE_MODES_MAP)); 553466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_WHITE_BALANCE, whitebalanceValues); 553566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setWhiteBalance(WHITE_BALANCE_AUTO); 553666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 553766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set supported wb cct, we should get them from m_pCapability 553866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_wb_cct = 2000; 553966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_wb_cct = 8000; 554066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_WB_CCT, m_pCapability->min_wb_cct); 554166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_WB_CCT, m_pCapability->max_wb_cct); 554266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 554366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set supported wb rgb gains, ideally we should get them from m_pCapability 554466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //but for now hardcode. 554566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_wb_gain = 1.0; 554666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_wb_gain = 4.0; 554766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_QC_MIN_WB_GAIN, m_pCapability->min_wb_gain); 554866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_QC_MAX_WB_GAIN, m_pCapability->max_wb_gain); 554966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 555066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set supported manual wb modes 555166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 manualWBModes(VALUE_OFF); 555266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_pCapability->sensor_type.sens_type != CAM_SENSOR_YUV) { 555366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualWBModes.append(","); 555466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualWBModes.append(KEY_QC_WB_CCT_MODE); 555566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualWBModes.append(","); 555666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualWBModes.append(KEY_QC_WB_GAIN_MODE); 555766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 555866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_MANUAL_WB_MODES, manualWBModes.string()); 555966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 556066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Flash mode 556166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_pCapability->supported_flash_modes_cnt > 0) { 556266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 flashValues = createValuesString( 556366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_flash_modes, 556466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_flash_modes_cnt, 556566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin FLASH_MODES_MAP, 556666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(FLASH_MODES_MAP)); 556766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_FLASH_MODES, flashValues); 556866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFlash(FLASH_MODE_OFF); 556966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 557066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("supported flash modes cnt is 0!!!"); 557166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 557266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 557366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Scene Mode 557466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 sceneModeValues = createValuesString( 557566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_scene_modes, 557666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_scene_modes_cnt, 557766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin SCENE_MODES_MAP, 557866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(SCENE_MODES_MAP)); 557966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_SUPPORTED_SCENE_MODES, sceneModeValues); 558066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSceneMode(SCENE_MODE_AUTO); 558166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 558266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set CDS Mode 558366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 cdsModeValues = createValuesStringFromMap( 558466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CDS_MODES_MAP, 558566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(CDS_MODES_MAP)); 558666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_CDS_MODES, cdsModeValues); 558766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 558866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set video CDS Mode 558966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 videoCdsModeValues = createValuesStringFromMap( 559066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CDS_MODES_MAP, 559166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(CDS_MODES_MAP)); 559266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_VIDEO_CDS_MODES, videoCdsModeValues); 559366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 559466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set TNR Mode 559566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 tnrModeValues = createValuesStringFromMap( 559666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ON_OFF_MODES_MAP, 559766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ON_OFF_MODES_MAP)); 559866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_TNR_MODES, tnrModeValues); 559966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 560066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set video TNR Mode 560166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 videoTnrModeValues = createValuesStringFromMap( 560266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ON_OFF_MODES_MAP, 560366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ON_OFF_MODES_MAP)); 560466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_VIDEO_TNR_MODES, videoTnrModeValues); 560566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 560666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set ISO Mode 560766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 isoValues = createValuesString( 560866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_iso_modes, 560966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_iso_modes_cnt, 561066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ISO_MODES_MAP, 561166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ISO_MODES_MAP)); 561266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_ISO_MODES, isoValues); 561366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setISOValue(ISO_AUTO); 561466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 561566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set exposure time 561666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 manualExpModes(VALUE_OFF); 561766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool expTimeSupported = false; 561866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool manualISOSupported = false; 561966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //capability values are in nano sec, convert to milli sec for upper layers 562066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char expTimeStr[20]; 562166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double min_exp_time = (double) m_pCapability->exposure_time_range[0] / 1000000.0; 562266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double max_exp_time = (double) m_pCapability->exposure_time_range[1] / 1000000.0; 562366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(expTimeStr, sizeof(expTimeStr), "%f", min_exp_time); 562466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_EXPOSURE_TIME, expTimeStr); 562566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(expTimeStr, sizeof(expTimeStr), "%f", max_exp_time); 562666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_EXPOSURE_TIME, expTimeStr); 562766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((min_exp_time > 0) && (max_exp_time > min_exp_time)) { 562866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualExpModes.append(","); 562966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualExpModes.append(KEY_QC_EXP_TIME_PRIORITY); 563066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin expTimeSupported = true; 563166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 563266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", Exposure time min %f ms, max %f ms", 563366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_exp_time, max_exp_time); 563466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 563566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set iso 563666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MIN_ISO, m_pCapability->sensitivity_range.min_sensitivity); 563766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MAX_ISO, m_pCapability->sensitivity_range.max_sensitivity); 563866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", ISO min %d, max %d", 563966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->sensitivity_range.min_sensitivity, 564066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->sensitivity_range.max_sensitivity); 564166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->sensitivity_range.min_sensitivity > 0) && 564266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_pCapability->sensitivity_range.max_sensitivity > 564366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->sensitivity_range.min_sensitivity)) { 564466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualExpModes.append(","); 564566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualExpModes.append(KEY_QC_ISO_PRIORITY); 564666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualISOSupported = true; 564766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 564866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (expTimeSupported && manualISOSupported) { 564966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualExpModes.append(","); 565066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manualExpModes.append(KEY_QC_USER_SETTING); 565166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 565266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //finally set supported manual exposure modes 565366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_MANUAL_EXPOSURE_MODES, manualExpModes.string()); 565466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 565566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set HFR 565666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 hfrValues = createHfrValuesString( 565766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->hfr_tbl, 565866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->hfr_tbl_cnt, 565966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin HFR_MODES_MAP, 566066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(HFR_MODES_MAP)); 566166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_VIDEO_HIGH_FRAME_RATE_MODES, hfrValues.string()); 566266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_HIGH_SPEED_RECORDING, "off"); 566366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_HIGH_FRAME_RATE, "off"); 566466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 hfrSizeValues = createHfrSizesString( 566566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->hfr_tbl, 566666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->hfr_tbl_cnt); 566766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_HFR_SIZES, hfrSizeValues.string()); 566866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("HFR values %s HFR Sizes = %d", hfrValues.string(), hfrSizeValues.string()); 566966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setHighFrameRate(CAM_HFR_MODE_OFF); 567066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 567166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Focus algorithms 567266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 focusAlgoValues = createValuesString( 567366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_focus_algos, 567466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->supported_focus_algos_cnt, 567566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin FOCUS_ALGO_MAP, 567666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(FOCUS_ALGO_MAP)); 567766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_FOCUS_ALGOS, focusAlgoValues); 567866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSelectableZoneAf(FOCUS_ALGO_AUTO); 567966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 568066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Zoom Ratios 568166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->zoom_supported > 0) { 568266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 zoomRatioValues = createZoomRatioValuesString( 568366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->zoom_ratio_tbl, 568466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->zoom_ratio_tbl_cnt); 568566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_ZOOM_RATIOS, zoomRatioValues); 568666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_MAX_ZOOM, (int)(m_pCapability->zoom_ratio_tbl_cnt - 1)); 568766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setZoom(0); 568866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 568966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 569066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Bracketing/HDR 569166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 569266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 569366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.capture.burst.exposures", prop, ""); 569466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(prop) > 0) { 569566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CAPTURE_BURST_EXPOSURE, prop); 569666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 569766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 bracketingValues = createValuesStringFromMap( 569866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin BRACKETING_MODES_MAP, 569966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(BRACKETING_MODES_MAP)); 570066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_AE_BRACKET_MODES, bracketingValues); 570166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setAEBracket(AE_BRACKET_OFF); 570266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 570366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set AF Bracketing. 570466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->supported_focus_modes_cnt; i++) { 570566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((CAM_FOCUS_MODE_AUTO == m_pCapability->supported_focus_modes[i]) && 570666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((m_pCapability->qcom_supported_feature_mask & 570766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_UBIFOCUS) > 0)) { 570866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 afBracketingValues = createValuesStringFromMap( 570966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin AF_BRACKETING_MODES_MAP, 571066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(AF_BRACKETING_MODES_MAP)); 571166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_AF_BRACKET_MODES, afBracketingValues); 571266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setAFBracket(AF_BRACKET_OFF); 571366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 571466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 571566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 571666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 571766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Refocus. 571866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Re-use ubifocus flag for now. 571966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < m_pCapability->supported_focus_modes_cnt; i++) { 572066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((CAM_FOCUS_MODE_AUTO == m_pCapability->supported_focus_modes[i]) && 572166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_pCapability->qcom_supported_feature_mask & 572266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_REFOCUS) > 0) { 572366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 reFocusValues = createValuesStringFromMap( 572466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin RE_FOCUS_MODES_MAP, 572566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(RE_FOCUS_MODES_MAP)); 572666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_RE_FOCUS_MODES, reFocusValues); 572766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setReFocus(RE_FOCUS_OFF); 572866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 572966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 573066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 573166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Chroma Flash. 573266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->supported_flash_modes_cnt > 0) && 573366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_pCapability->qcom_supported_feature_mask & 573466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_CHROMA_FLASH) > 0) { 573566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 chromaFlashValues = createValuesStringFromMap( 573666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CHROMA_FLASH_MODES_MAP, 573766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(CHROMA_FLASH_MODES_MAP)); 573866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_CHROMA_FLASH_MODES, chromaFlashValues); 573966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setChromaFlash(CHROMA_FLASH_OFF); 574066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 574166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 574266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Opti Zoom. 574366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->zoom_supported && 574466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_pCapability->qcom_supported_feature_mask & 574566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_OPTIZOOM) > 0){ 574666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 optiZoomValues = createValuesStringFromMap( 574766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin OPTI_ZOOM_MODES_MAP, 574866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(OPTI_ZOOM_MODES_MAP)); 574966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_OPTI_ZOOM_MODES, optiZoomValues); 575066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setOptiZoom(OPTI_ZOOM_OFF); 575166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 575266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 575366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set HDR Type 575466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t supported_hdr_modes = m_pCapability->qcom_supported_feature_mask & 575566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (CAM_QCOM_FEATURE_SENSOR_HDR | CAM_QCOM_FEATURE_HDR); 575666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (supported_hdr_modes) { 575766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (CAM_QCOM_FEATURE_SENSOR_HDR == supported_hdr_modes) { 575866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 hdrModeValues; 575966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hdrModeValues.append(HDR_MODE_SENSOR); 576066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_KEY_QC_HDR_MODES, hdrModeValues); 576166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setHDRMode(HDR_MODE_SENSOR); 576266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (CAM_QCOM_FEATURE_HDR == supported_hdr_modes) { 576366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 hdrModeValues; 576466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hdrModeValues.append(HDR_MODE_MULTI_FRAME); 576566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_KEY_QC_HDR_MODES, hdrModeValues); 576666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setHDRMode(HDR_MODE_MULTI_FRAME); 576766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 576866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 hdrModeValues = createValuesStringFromMap( 576966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin HDR_MODES_MAP, 577066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(HDR_MODES_MAP)); 577166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_KEY_QC_HDR_MODES, hdrModeValues); 577266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setHDRMode(HDR_MODE_MULTI_FRAME); 577366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 577466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 577566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 577666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set HDR need 1x 577766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 hdrNeed1xValues; 577866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_bHDRModeSensor) { 577966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hdrNeed1xValues = createValuesStringFromMap(TRUE_FALSE_MODES_MAP, 578066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(TRUE_FALSE_MODES_MAP)); 578166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 578266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hdrNeed1xValues.append(VALUE_FALSE); 578366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 578466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setHDRNeed1x(VALUE_FALSE); 578566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_HDR_NEED_1X, hdrNeed1xValues); 578666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 578766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set True Portrait 578866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_TRUEPORTRAIT) > 0) { 578966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 truePortraitValues = createValuesStringFromMap( 579066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin TRUE_PORTRAIT_MODES_MAP, 579166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(TRUE_PORTRAIT_MODES_MAP)); 579266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_TRUE_PORTRAIT_MODES, truePortraitValues); 579366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 579466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 579566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Denoise 579666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_DENOISE2D) > 0){ 579766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 denoiseValues = createValuesStringFromMap( 579866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DENOISE_ON_OFF_MODES_MAP, PARAM_MAP_SIZE(DENOISE_ON_OFF_MODES_MAP)); 579966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_DENOISE, denoiseValues.string()); 580066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifdef DEFAULT_DENOISE_MODE_ON 580166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setWaveletDenoise(DENOISE_ON); 580266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#else 580366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setWaveletDenoise(DENOISE_OFF); 580466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 580566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 580666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 580766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set feature enable/disable 580866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 enableDisableValues = createValuesStringFromMap( 580966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ENABLE_DISABLE_MODES_MAP, PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP)); 581066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 581166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Lens Shading 581266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_LENSSHADE_MODES, enableDisableValues); 581366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setLensShadeValue(VALUE_ENABLE); 581466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set MCE 581566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_MEM_COLOR_ENHANCE_MODES, enableDisableValues); 581666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setMCEValue(VALUE_ENABLE); 581766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 581866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set DIS 581966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_DIS_MODES, enableDisableValues); 582066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setDISValue(VALUE_DISABLE); 582166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 582266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set Histogram 582366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_HISTOGRAM_MODES, 582466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->histogram_supported ? enableDisableValues : ""); 582566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_HISTOGRAM, VALUE_DISABLE); 582666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 582766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Red Eye Reduction 582866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_REDEYE_REDUCTION, enableDisableValues); 582966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setRedeyeReduction(VALUE_DISABLE); 583066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 583166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set SkinTone Enhancement 583266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_SKIN_TONE_ENHANCEMENT_MODES, enableDisableValues); 583366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 583466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Enable LTM by default and disable it in HDR & SeeMore usecases 583566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setToneMapMode(true, false); 583666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 583766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set feature on/off 583866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 onOffValues = createValuesStringFromMap( 583966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ON_OFF_MODES_MAP, PARAM_MAP_SIZE(ON_OFF_MODES_MAP)); 584066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 584166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set See more (LLVD) 584266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->qcom_supported_feature_mask & 584366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_LLVD) { 584466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_SEE_MORE_MODES, onOffValues); 584566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSeeMore(VALUE_OFF); 584666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 584766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 584866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Still more 584966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->qcom_supported_feature_mask & 585066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QCOM_FEATURE_STILLMORE) { 585166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 stillMoreValues = createValuesStringFromMap( 585266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin STILL_MORE_MODES_MAP, 585366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(STILL_MORE_MODES_MAP)); 585466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_STILL_MORE_MODES, stillMoreValues); 585566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setStillMore(STILL_MORE_OFF); 585666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 585766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 585866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Noise Reduction mode 585966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->qcom_supported_feature_mask & 586066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_QTI_FEATURE_SW_TNR) { 586166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 noiseReductionModesValues = createValuesStringFromMap( 586266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin NOISE_REDUCTION_MODES_MAP, PARAM_MAP_SIZE(NOISE_REDUCTION_MODES_MAP)); 586366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_NOISE_REDUCTION_MODE_VALUES, noiseReductionModesValues); 586466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setNoiseReductionMode(VALUE_OFF); 586566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 586666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 586766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Scene Detection 586866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_SCENE_DETECT, onOffValues); 586966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSceneDetect(VALUE_OFF); 587066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDREnabled = false; 587166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xFrameEnabled = false; 587266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 587366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDRThumbnailProcessNeeded = false; 587466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xExtraBufferNeeded = true; 587566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (uint32_t i=0; i<m_pCapability->hdr_bracketing_setting.num_frames; i++) { 587666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (0 == m_pCapability->hdr_bracketing_setting.exp_val.values[i]) { 587766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xExtraBufferNeeded = false; 587866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 587966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 588066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 588166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 588266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set HDR output scaling 588366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 588466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 588566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.hdr.outcrop", value, VALUE_DISABLE); 588666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strncmp(VALUE_ENABLE, value, sizeof(VALUE_ENABLE))) { 588766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDROutputCropEnabled = false; 588866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 588966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDROutputCropEnabled = true; 589066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 589166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 589266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Face Detection 589366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_FACE_DETECTION, onOffValues); 589466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_FACE_DETECTION, VALUE_OFF); 589566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 589666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Face Recognition 589766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set(KEY_QC_SUPPORTED_FACE_RECOGNITION, onOffValues); 589866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set(KEY_QC_FACE_RECOGNITION, VALUE_OFF); 589966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 590066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set ZSL 590166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_ZSL_MODES, onOffValues); 590266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifdef DEFAULT_ZSL_MODE_ON 590366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL, VALUE_ON); 590466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode = true; 590566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#else 590666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL, VALUE_OFF); 590766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode = false; 590866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 590966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 591066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Check if zsl mode property is enabled. 591166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // If yes, force the camera to be in zsl mode 591266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // and force zsl mode to be enabled in dual camera mode. 591366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0x0, PROPERTY_VALUE_MAX); 591466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.zsl.mode", value, "0"); 591566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t zsl_mode = atoi(value); 591666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if((zsl_mode == 1) || 591766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_bZslMode == true) || 591866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_relCamSyncInfo.sync_control == CAM_SYNC_RELATED_SENSORS_ON)) { 591966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("%d: Forcing Camera to ZSL mode enabled"); 592066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL, VALUE_ON); 592166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bForceZslMode = true; 592266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode = true; 592366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = m_bForceZslMode; 592466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ZSL_MODE, value); 592566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 592666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode_new = m_bZslMode; 592766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 592866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SCENE_SELECTION, VALUE_DISABLE); 592966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 593066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Rdi mode 593166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_RDI_MODES, enableDisableValues); 593266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setRdiMode(VALUE_DISABLE); 593366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 593466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Secure mode 593566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_SECURE_MODES, enableDisableValues); 593666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSecureMode(VALUE_DISABLE); 593766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 593866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set video HDR 593966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_VIDEO_HDR) > 0) { 594066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_VIDEO_HDR_MODES, onOffValues); 594166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_HDR, VALUE_OFF); 594266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 594366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 594466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set HW Sensor Snapshot HDR 594566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_SENSOR_HDR)> 0) { 594666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_SENSOR_HDR_MODES, onOffValues); 594766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SENSOR_HDR, VALUE_OFF); 594866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSensorHDREnabled = false; 594966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 595066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 595166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set VT TimeStamp 595266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VT_ENABLE, VALUE_DISABLE); 595366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Touch AF/AEC 595466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 touchValues = createValuesStringFromMap( 595566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin TOUCH_AF_AEC_MODES_MAP, PARAM_MAP_SIZE(TOUCH_AF_AEC_MODES_MAP)); 595666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 595766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_TOUCH_AF_AEC, touchValues); 595866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_TOUCH_AF_AEC, TOUCH_AF_AEC_OFF); 595966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 596066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set flip mode 596166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_FLIP) > 0) { 596266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 flipModes = createValuesStringFromMap( 596366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin FLIP_MODES_MAP, PARAM_MAP_SIZE(FLIP_MODES_MAP)); 596466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_FLIP_MODES, flipModes); 596566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_PREVIEW_FLIP, FLIP_MODE_OFF); 596666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_FLIP, FLIP_MODE_OFF); 596766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SNAPSHOT_PICTURE_FLIP, FLIP_MODE_OFF); 596866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 596966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 597066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default Auto Exposure lock value 597166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setAecLock(VALUE_FALSE); 597266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 597366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default AWB_LOCK lock value 597466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setAwbLock(VALUE_FALSE); 597566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 597666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default Camera mode 597766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CAMERA_MODE, 0); 597866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 597966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Add support for internal preview restart 598066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_INTERNAL_PERVIEW_RESTART, VALUE_TRUE); 598166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default burst number 598266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SNAPSHOT_BURST_NUM, 0); 598366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_NUM_RETRO_BURST_PER_SHUTTER, 0); 598466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 598566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Get RAM size and disable features which are memory rich 598666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct sysinfo info; 598766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sysinfo(&info); 598866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 598966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("totalram = %ld, freeram = %ld ", info.totalram, 599066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin info.freeram); 599166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (info.totalram > TOTAL_RAM_SIZE_512MB) { 599266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL_HDR_SUPPORTED, VALUE_TRUE); 599366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 599466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bIsLowMemoryDevice = true; 599566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_ZSL_HDR_SUPPORTED, VALUE_FALSE); 599666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 599766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 599866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setOfflineRAW(); 599966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(mStreamPpMask, 0, sizeof(uint32_t)*CAM_STREAM_TYPE_MAX); 600066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set video buffers as uncached by default 600166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CACHE_VIDEO_BUFFERS, VALUE_DISABLE); 600266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 600366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set default longshot mode 600466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_LONG_SHOT, "off"); 600566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Enable longshot by default 600666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_LONGSHOT_SUPPORTED, VALUE_TRUE); 600766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 600866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = commitParameters(); 600966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc == NO_ERROR) { 601066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setNumOfSnapshot(); 601166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 601266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 601366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set Video Rotation 601466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 videoRotationValues = createValuesStringFromMap(VIDEO_ROTATION_MODES_MAP, 601566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(VIDEO_ROTATION_MODES_MAP)); 601666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 601766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_SUPPORTED_VIDEO_ROTATION_VALUES, videoRotationValues.string()); 601866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_ROTATION, VIDEO_ROTATION_0); 601966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 602066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Check for EZTune 602166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setEztune(); 602266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Default set for video batch size 602366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_BATCH_SIZE, 0); 602466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 602566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Setup dual-camera 602666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setDcrf(); 602766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 602866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // For Aux Camera of dual camera Mode, 602966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // by default set no display mode 603066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.mode == CAM_MODE_SECONDARY) { 603166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_NO_DISPLAY_MODE, 1); 603266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNoDisplayMode = true; 603366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 603466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 603566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t pic_dim; 603666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pic_dim.width = 0; 603766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pic_dim.height = 0; 603866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 603966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(uint32_t i = 0; 604066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin i < (m_pCapability->picture_sizes_tbl_cnt - 1); 604166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin i++) { 604266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((pic_dim.width * pic_dim.height) < 604366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int32_t)(m_pCapability->picture_sizes_tbl[i].width * 604466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->picture_sizes_tbl[i].height)) { 604566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pic_dim.width = 604666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->picture_sizes_tbl[i].width; 604766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pic_dim.height = 604866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->picture_sizes_tbl[i].height; 604966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 605066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 605166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("max pic size = %d %d", pic_dim.width, 605266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pic_dim.height); 605366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setMaxPicSize(pic_dim); 605466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 605566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setManualCaptureMode(CAM_MANUAL_CAPTURE_TYPE_OFF); 605666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 605766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 605866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 605966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 606066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 606166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : allocate 606266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 606366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Allocate buffer memory for parameter obj (if necessary) 606466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 606566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 606666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 606766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 606866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 606966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 607066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 607166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::allocate() 607266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 607366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 607466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 607566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pParamHeap != NULL) { 607666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 607766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 607866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 607966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Allocate Set Param Buffer 608066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap = new QCameraHeapMemory(QCAMERA_ION_USE_CACHE); 608166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pParamHeap == NULL) { 608266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_MEMORY; 608366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 608466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 608566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = m_pParamHeap->allocate(1, sizeof(parm_buffer_t), NON_SECURE); 608666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(rc != OK) { 608766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = NO_MEMORY; 608866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Error!! Param buffers have not been allocated"); 608966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin delete m_pParamHeap; 609066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap = NULL; 609166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 609266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 609366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 609466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 609566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 609666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 609766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : init 609866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 609966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: initialize parameter obj 610066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 610166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 610266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @capabilities : ptr to camera capabilities 610366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @mmops : ptr to memory ops table for mapping/unmapping 610466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @adjustFPS : object reference for additional (possibly thermal) 610566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * framerate adjustment 610666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 610766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 610866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 610966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 611066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 611166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::init(cam_capability_t *capabilities, 611266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_vtbl_t *mmOps, QCameraAdjustFPS *adjustFPS) 611366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 611466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 611566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 611666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability = capabilities; 611766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl = mmOps; 611866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_AdjustFPS = adjustFPS; 611966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 612066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pParamHeap == NULL) { 612166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Parameter buffers have not been allocated"); 612266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = UNKNOWN_ERROR; 612366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin goto TRANS_INIT_ERROR1; 612466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 612566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 612666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Map memory for parameters buffer 612766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_buf_map_type_list bufMapList; 612866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = QCameraBufferMaps::makeSingletonBufMapList( 612966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_MAPPING_BUF_TYPE_PARM_BUF, 0 /*stream id*/, 613066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 0 /*buffer index*/, -1 /*plane index*/, 0 /*cookie*/, 613166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap->getFd(0), sizeof(parm_buffer_t), bufMapList); 613266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 613366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc == NO_ERROR) { 613466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = m_pCamOpsTbl->ops->map_bufs(m_pCamOpsTbl->camera_handle, 613566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin &bufMapList); 613666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 613766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 613866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(rc < 0) { 613966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("failed to map SETPARM buffer"); 614066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = FAILED_TRANSACTION; 614166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin goto TRANS_INIT_ERROR2; 614266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 614366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamBuf = (parm_buffer_t*) DATA_PTR(m_pParamHeap,0); 614466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 614566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Check if it is dual camera mode 614666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_relCamSyncInfo.sync_control == CAM_SYNC_RELATED_SENSORS_ON) { 614766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Allocate related cam sync buffer 614866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //this is needed for the payload that goes along with bundling cmd for related 614966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //camera use cases 615066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncHeap = new QCameraHeapMemory(QCAMERA_ION_USE_CACHE); 615166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = m_pRelCamSyncHeap->allocate(1, 615266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sizeof(cam_sync_related_sensors_event_info_t), NON_SECURE); 615366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(rc != OK) { 615466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = NO_MEMORY; 615566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to allocate Related cam sync Heap memory"); 615666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin goto TRANS_INIT_ERROR3; 615766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 615866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 615966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Map memory for related cam sync buffer 616066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = m_pCamOpsTbl->ops->map_buf(m_pCamOpsTbl->camera_handle, 616166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_MAPPING_BUF_TYPE_SYNC_RELATED_SENSORS_BUF, 616266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncHeap->getFd(0), 616366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sizeof(cam_sync_related_sensors_event_info_t)); 616466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(rc < 0) { 616566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("failed to map Related cam sync buffer"); 616666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = FAILED_TRANSACTION; 616766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin goto TRANS_INIT_ERROR4; 616866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 616966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf = 617066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (cam_sync_related_sensors_event_info_t*) DATA_PTR(m_pRelCamSyncHeap,0); 617166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 617266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 617366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin initDefaultParameters(); 617466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 617566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bInited = true; 617666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 617766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin goto TRANS_INIT_DONE; 617866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 617966f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinTRANS_INIT_ERROR4: 618066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncHeap->deallocate(); 618166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 618266f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinTRANS_INIT_ERROR3: 618366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin delete m_pRelCamSyncHeap; 618466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncHeap = NULL; 618566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 618666f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinTRANS_INIT_ERROR2: 618766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap->deallocate(); 618866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin delete m_pParamHeap; 618966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap = NULL; 619066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 619166f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinTRANS_INIT_ERROR1: 619266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability = NULL; 619366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl = NULL; 619466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_AdjustFPS = NULL; 619566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 619666f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinTRANS_INIT_DONE: 619766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 619866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 619966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 620066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 620166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : deinit 620266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 620366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: deinitialize 620466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 620566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 620666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 620766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 620866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 620966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::deinit() 621066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 621166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_bInited) { 621266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 621366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 621466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 621566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //clear all entries in the map 621666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 emptyStr; 621766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::unflatten(emptyStr); 621866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 621966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((NULL != m_pCamOpsTbl) && (m_pCamOpsTbl->ops != NULL)) { 622066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl->ops->unmap_buf( 622166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl->camera_handle, 622266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_MAPPING_BUF_TYPE_PARM_BUF); 622366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 622466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.sync_control == CAM_SYNC_RELATED_SENSORS_ON) { 622566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl->ops->unmap_buf( 622666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl->camera_handle, 622766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_MAPPING_BUF_TYPE_SYNC_RELATED_SENSORS_BUF); 622866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 622966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 623066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 623166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability = NULL; 623266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != m_pParamHeap) { 623366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap->deallocate(); 623466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin delete m_pParamHeap; 623566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamHeap = NULL; 623666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pParamBuf = NULL; 623766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 623866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != m_pRelCamSyncHeap) { 623966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncHeap->deallocate(); 624066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin delete m_pRelCamSyncHeap; 624166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncHeap = NULL; 624266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf = NULL; 624366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 624466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 624566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_AdjustFPS = NULL; 624666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_tempMap.clear(); 624766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl = NULL; 624866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_AdjustFPS = NULL; 624966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 625066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bInited = false; 625166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 625266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 625366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 625466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : parse_pair 625566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 625666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: helper function to parse string like "640x480" or "10000,20000" 625766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 625866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 625966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @str : input string to be parse 626066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @first : [output] first value of the pair 626166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @second : [output] second value of the pair 626266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @delim : [input] delimeter to seperate the pair 626366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @endptr : [output] ptr to the end of the pair string 626466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 626566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 626666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 626766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 626866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 626966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::parse_pair(const char *str, 627066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int *first, 627166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int *second, 627266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char delim, 627366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char **endptr = NULL) 627466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 627566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Find the first integer. 627666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *end; 627766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int w = (int)strtol(str, &end, 10); 627866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // If a delimeter does not immediately follow, give up. 627966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (*end != delim) { 628066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Cannot find delimeter (%c) in str=%s", delim, str); 628166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 628266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 628366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 628466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Find the second integer, immediately after the delimeter. 628566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int h = (int)strtol(end+1, &end, 10); 628666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 628766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *first = w; 628866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *second = h; 628966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 629066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (endptr) { 629166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *endptr = end; 629266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 629366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 629466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 629566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 629666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 629766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 629866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : parseSizesList 629966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 630066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: helper function to parse string containing sizes 630166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 630266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 630366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sizesStr: [input] input string to be parse 630466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sizes : [output] reference to store parsed sizes 630566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 630666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 630766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 630866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::parseSizesList(const char *sizesStr, Vector<Size> &sizes) 630966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 631066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (sizesStr == 0) { 631166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 631266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 631366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 631466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *sizeStartPtr = (char *)sizesStr; 631566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 631666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin while (true) { 631766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int width, height; 631866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int success = parse_pair(sizeStartPtr, &width, &height, 'x', 631966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin &sizeStartPtr); 632066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (success == -1 || (*sizeStartPtr != ',' && *sizeStartPtr != '\0')) { 632166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Picture sizes string \"%s\" contains invalid character.", sizesStr); 632266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 632366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 632466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sizes.push(Size(width, height)); 632566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 632666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (*sizeStartPtr == '\0') { 632766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 632866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 632966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sizeStartPtr++; 633066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 633166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 633266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 633366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 633466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : adjustPreviewFpsRange 633566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 633666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: adjust preview FPS ranges 633766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * according to external events 633866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 633966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 634066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @minFPS : min FPS value 634166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @maxFPS : max FPS value 634266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 634366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 634466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 634566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 634666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 634766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::adjustPreviewFpsRange(cam_fps_range_t *fpsRange) 634866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 634966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( fpsRange == NULL ) { 635066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 635166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 635266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 635366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( m_pParamBuf == NULL ) { 635466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 635566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 635666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 635766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = initBatchUpdate(m_pParamBuf); 635866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( rc != NO_ERROR ) { 635966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 636066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 636166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 636266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 636366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_FPS_RANGE, *fpsRange)) { 636466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Parameters batch failed"); 636566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 636666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 636766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 636866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 636966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( rc != NO_ERROR ) { 637066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to commit batch parameters"); 637166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 637266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 637366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 637466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 637566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 637666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 637766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 637866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setPreviewFpsRanges 637966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 638066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set preview FPS ranges 638166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 638266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 638366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @minFPS : min FPS value 638466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @maxFPS : max FPS value 638566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 638666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 638766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 638866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 638966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 639066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setPreviewFpsRange(int min_fps, 639166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int max_fps, int vid_min_fps,int vid_max_fps) 639266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 639366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char str[32]; 639466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 639566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int fixedFpsValue; 639666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*This property get value should be the fps that user needs*/ 639766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.debug.set.fixedfps", value, "0"); 639866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fixedFpsValue = atoi(value); 639966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 640066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("E minFps = %d, maxFps = %d , vid minFps = %d, vid maxFps = %d", 640166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps, max_fps, vid_min_fps, vid_max_fps); 640266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 640366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(fixedFpsValue != 0) { 640466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps = max_fps = vid_min_fps = vid_max_fps = (int)fixedFpsValue*1000; 640566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 640666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(str, sizeof(str), "%d,%d", min_fps, max_fps); 640766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting preview fps range %s", str); 640866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_PREVIEW_FPS_RANGE, str); 640966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_fps_range_t fps_range; 641066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&fps_range, 0x00, sizeof(cam_fps_range_t)); 641166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fps_range.min_fps = (float)min_fps / 1000.0f; 641266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fps_range.max_fps = (float)max_fps / 1000.0f; 641366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fps_range.video_min_fps = (float)vid_min_fps / 1000.0f; 641466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fps_range.video_max_fps = (float)vid_max_fps / 1000.0f; 641566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 641666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Updated: minFps = %d, maxFps = %d ," 641766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin " vid minFps = %d, vid maxFps = %d", 641866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin min_fps, max_fps, vid_min_fps, vid_max_fps); 641966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 642066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( NULL != m_AdjustFPS ) { 642166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_ThermalMode == QCAMERA_THERMAL_ADJUST_FPS && 642266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin !m_bRecordingHint) { 642366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float minVideoFps = min_fps, maxVideoFps = max_fps; 642466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHfrMode()) { 642566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin minVideoFps = m_hfrFpsRange.video_min_fps; 642666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin maxVideoFps = m_hfrFpsRange.video_max_fps; 642766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 642866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_AdjustFPS->recalcFPSRange(min_fps, max_fps, minVideoFps, maxVideoFps, fps_range); 642966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Thermal adjusted Preview fps range %3.2f,%3.2f, %3.2f, %3.2f", 643066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fps_range.min_fps, fps_range.max_fps, 643166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fps_range.video_min_fps, fps_range.video_max_fps); 643266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 643366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 643466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 643566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_FPS_RANGE, fps_range)) { 643666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 643766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 643866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 643966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 644066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 644166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 644266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 644366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 644466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 644566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAutoExposure 644666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 644766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set auto exposure 644866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 644966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 645066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @autoExp : auto exposure value string 645166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 645266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 645366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 645466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 645566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 645666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAutoExposure(const char *autoExp) 645766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 645866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (autoExp != NULL) { 645966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(AUTO_EXPOSURE_MAP, PARAM_MAP_SIZE(AUTO_EXPOSURE_MAP), autoExp); 646066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 646166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting auto exposure %s", autoExp); 646266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_AUTO_EXPOSURE, autoExp); 646366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_AEC_ALGO_TYPE, value)) { 646466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 646566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 646666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 646766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 646866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 646966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid auto exposure value: %s", (autoExp == NULL) ? "NULL" : autoExp); 647066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 647166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 647266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 647366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 647466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setEffect 647566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 647666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set effect 647766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 647866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 647966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @effect : effect value string 648066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 648166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 648266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 648366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 648466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 648566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setEffect(const char *effect) 648666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 648766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (effect != NULL) { 648866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(EFFECT_MODES_MAP, PARAM_MAP_SIZE(EFFECT_MODES_MAP), effect); 648966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 649066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting effect %s", effect); 649166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_EFFECT, effect); 649266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t prmEffect = static_cast<uint8_t>(value); 649366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mParmEffect = prmEffect; 649466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_EFFECT, prmEffect)) { 649566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 649666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 649766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 649866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 649966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 650066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid effect value: %s", (effect == NULL) ? "NULL" : effect); 650166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 650266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 650366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 650466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 650566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setBrightness 650666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 650766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set brightness control value 650866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 650966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 651066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @brightness : brightness control value 651166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 651266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 651366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 651466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 651566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 651666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setBrightness(int brightness) 651766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 651866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[16]; 651966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%d", brightness); 652066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_BRIGHTNESS, val); 652166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 652266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting brightness %s", val); 652366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_BRIGHTNESS, brightness)) { 652466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 652566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 652666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 652766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 652866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 652966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 653066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 653166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFocusMode 653266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 653366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set focus mode 653466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 653566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 653666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @focusMode : focus mode value string 653766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 653866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 653966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 654066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 654166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 654266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFocusMode(const char *focusMode) 654366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 654466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (focusMode != NULL) { 654566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(FOCUS_MODES_MAP, PARAM_MAP_SIZE(FOCUS_MODES_MAP), focusMode); 654666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 654766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 654866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting focus mode %s", focusMode); 654966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFocusMode = (cam_focus_mode_type)value; 655066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 655166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_FOCUS_MODE, focusMode); 655266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 655366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_FOCUS_MODE, (uint8_t)value)) { 655466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 655566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 655666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(focusMode,"infinity")==0){ 655766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(QCameraParameters::KEY_FOCUS_DISTANCES, "Infinity,Infinity,Infinity"); 655866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 655966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 656066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 656166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 656266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid focus mode value: %s", (focusMode == NULL) ? "NULL" : focusMode); 656366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 656466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 656566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 656666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 656766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFocusPosition 656866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 656966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set focus position 657066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 657166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 657266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @typeStr : focus position type, index or dac_code 657366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @posStr : focus positon. 657466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 657566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 657666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 657766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 657866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 657966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFocusPosition(const char *typeStr, const char *posStr) 658066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 658166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", type:%s, pos: %s", typeStr, posStr); 658266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t type = atoi(typeStr); 658366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float pos = (float) atof(posStr); 658466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 658566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((type >= CAM_MANUAL_FOCUS_MODE_INDEX) && 658666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (type < CAM_MANUAL_FOCUS_MODE_MAX)) { 658766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // get max and min focus position from m_pCapability 658866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float minFocusPos = m_pCapability->min_focus_pos[type]; 658966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float maxFocusPos = m_pCapability->max_focus_pos[type]; 659066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", focusPos min: %f, max: %f", minFocusPos, maxFocusPos); 659166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 659266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (pos >= minFocusPos && pos <= maxFocusPos) { 659366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_MANUAL_FOCUS_POS_TYPE, typeStr); 659466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_MANUAL_FOCUS_POSITION, posStr); 659566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 659666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_manual_focus_parm_t manual_focus; 659766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_focus.flag = (cam_manual_focus_mode_type)type; 659866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (manual_focus.flag == CAM_MANUAL_FOCUS_MODE_DIOPTER) { 659966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_focus.af_manual_diopter = pos; 660066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (manual_focus.flag == CAM_MANUAL_FOCUS_MODE_RATIO) { 660166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_focus.af_manual_lens_position_ratio = (int32_t) pos; 660266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (manual_focus.flag == CAM_MANUAL_FOCUS_MODE_INDEX) { 660366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_focus.af_manual_lens_position_index = (int32_t) pos; 660466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 660566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_focus.af_manual_lens_position_dac = (int32_t) pos; 660666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 660766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 660866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_MANUAL_FOCUS_POS, 660966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_focus)) { 661066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 661166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 661266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 661366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 661466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 661566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 661666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid params, type:%d, pos: %f", type, pos); 661766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 661866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 661966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 662066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 662166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateAEInfo 662266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 662366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update exposure information from metadata callback 662466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 662566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 662666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @ae_params : auto exposure params 662766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 662866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : void 662966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 663066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::updateAEInfo(cam_3a_params_t &ae_params) 663166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 663266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prevExpTime = get(KEY_QC_CURRENT_EXPOSURE_TIME); 663366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char newExpTime[15]; 663466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(newExpTime, sizeof(newExpTime), "%f", ae_params.exp_time*1000.0); 663566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 663666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prevExpTime == NULL || strcmp(prevExpTime, newExpTime)) { 663766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("update exposure time: old: %s, new: %s", prevExpTime, newExpTime); 663866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CURRENT_EXPOSURE_TIME, newExpTime); 663966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 664066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 664166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t prevISO = getInt(KEY_QC_CURRENT_ISO); 664266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t newISO = ae_params.iso_value; 664366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prevISO != newISO) { 664466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("update iso: old:%d, new:%d", prevISO, newISO); 664566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_CURRENT_ISO, newISO); 664666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 664766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 664866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 664966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 665066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateCurrentFocusPosition 665166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 665266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update current focus position from metadata callback 665366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 665466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 665566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @pos : current focus position 665666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 665766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : void 665866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 665966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::updateCurrentFocusPosition(cam_focus_pos_info_t &cur_pos_info) 666066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 666166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prevScalePos = getInt(KEY_QC_FOCUS_POSITION_SCALE); 666266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int newScalePos = (int) cur_pos_info.scale; 666366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prevScalePos != newScalePos) { 666466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("update focus scale: old:%d, new:%d", prevScalePos, newScalePos); 666566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_FOCUS_POSITION_SCALE, newScalePos); 666666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 666766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 666866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float prevDiopterPos = getFloat(KEY_QC_FOCUS_POSITION_DIOPTER); 666966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float newDiopterPos = cur_pos_info.diopter; 667066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prevDiopterPos != newDiopterPos) { 667166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("update focus diopter: old:%f, new:%f", prevDiopterPos, newDiopterPos); 667266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setFloat(KEY_QC_FOCUS_POSITION_DIOPTER, newDiopterPos); 667366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 667466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 667566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 667666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 667766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSharpness 667866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 667966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set sharpness control value 668066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 668166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 668266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sharpness : sharpness control value 668366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 668466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 668566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 668666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 668766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 668866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSharpness(int sharpness) 668966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 669066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[16]; 669166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%d", sharpness); 669266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SHARPNESS, val); 669366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting sharpness %s", val); 669466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nSharpness = sharpness; 669566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_SHARPNESS, m_nSharpness)) { 669666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 669766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 669866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 669966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 670066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 670166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 670266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 670366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSkinToneEnhancement 670466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 670566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set skin tone enhancement value 670666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 670766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 670866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sceFactore : skin tone enhancement factor value 670966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 671066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 671166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 671266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 671366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 671466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSkinToneEnhancement(int sceFactor) 671566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 671666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[16]; 671766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%d", sceFactor); 671866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SCE_FACTOR, val); 671966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting skintone enhancement %s", val); 672066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 672166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_SCE_FACTOR, sceFactor)) { 672266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 672366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 672466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 672566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 672666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 672766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 672866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 672966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSaturation 673066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 673166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set saturation control value 673266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 673366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 673466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @saturation : saturation control value 673566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 673666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 673766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 673866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 673966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 674066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSaturation(int saturation) 674166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 674266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[16]; 674366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%d", saturation); 674466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SATURATION, val); 674566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting saturation %s", val); 674666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 674766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_SATURATION, saturation)) { 674866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 674966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 675066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 675166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 675266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 675366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 675466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 675566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setContrast 675666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 675766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set contrast control value 675866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 675966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 676066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @contrast : contrast control value 676166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 676266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 676366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 676466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 676566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 676666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setContrast(int contrast) 676766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 676866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[16]; 676966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%d", contrast); 677066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_CONTRAST, val); 677166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting contrast %s", val); 677266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 677366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CONTRAST, contrast)) { 677466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 677566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 677666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 677766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 677866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 677966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 678066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 678166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSceneDetect 678266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 678366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set scenen detect value 678466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 678566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 678666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sceneDetect : scene detect value string 678766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 678866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 678966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 679066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 679166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 679266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSceneDetect(const char *sceneDetect) 679366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 679466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (sceneDetect != NULL) { 679566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ON_OFF_MODES_MAP, PARAM_MAP_SIZE(ON_OFF_MODES_MAP), 679666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sceneDetect); 679766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 679866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting Scene Detect %s", sceneDetect); 679966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SCENE_DETECT, sceneDetect); 680066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ASD_ENABLE, value)) { 680166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 680266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 680366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 680466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 680566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 680666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Scene Detect value: %s", 680766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (sceneDetect == NULL) ? "NULL" : sceneDetect); 680866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 680966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 681066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 681166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 681266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSensorSnapshotHDR 681366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 681466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set snapshot HDR value 681566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 681666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 681766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @snapshotHDR : snapshot HDR value string 681866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 681966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 682066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 682166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 682266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 682366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSensorSnapshotHDR(const char *snapshotHDR) 682466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 682566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (snapshotHDR != NULL) { 682666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = (cam_sensor_hdr_type_t) lookupAttr(ON_OFF_MODES_MAP, 682766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ON_OFF_MODES_MAP), snapshotHDR); 682866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 682966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting Sensor Snapshot HDR %s", snapshotHDR); 683066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SENSOR_HDR, snapshotHDR); 683166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 683266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char zz_prop[PROPERTY_VALUE_MAX]; 683366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(zz_prop, 0, sizeof(zz_prop)); 683466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.zzhdr.enable", zz_prop, "0"); 683566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t zzhdr_enable = (uint8_t)atoi(zz_prop); 683666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 683766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (zzhdr_enable && (value != CAM_SENSOR_HDR_OFF)) { 683866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = CAM_SENSOR_HDR_ZIGZAG; 683966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("%s: Overriding to ZZ HDR Mode", __func__); 684066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 684166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 684266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_SENSOR_HDR, (cam_sensor_hdr_type_t)value)) { 684366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 684466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 684566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 684666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 684766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 684866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Snapshot HDR value: %s", 684966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (snapshotHDR == NULL) ? "NULL" : snapshotHDR); 685066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 685166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 685266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 685366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 685466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 685566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 685666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setVideoHDR 685766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 685866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set video HDR value 685966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 686066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 686166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @videoHDR : svideo HDR value string 686266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 686366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 686466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 686566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 686666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 686766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setVideoHDR(const char *videoHDR) 686866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 686966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (videoHDR != NULL) { 687066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ON_OFF_MODES_MAP, PARAM_MAP_SIZE(ON_OFF_MODES_MAP), videoHDR); 687166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 687266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 687366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char zz_prop[PROPERTY_VALUE_MAX]; 687466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(zz_prop, 0, sizeof(zz_prop)); 687566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.zzhdr.video", zz_prop, "0"); 687666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t use_zzhdr_video = (uint8_t)atoi(zz_prop); 687766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 687866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (use_zzhdr_video) { 687966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("%s: Using ZZ HDR for video mode", __func__); 688066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value) 688166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = CAM_SENSOR_HDR_ZIGZAG; 688266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else 688366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = CAM_SENSOR_HDR_OFF; 688466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("%s: Overriding to sensor HDR Mode to:%d", __func__, value); 688566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_SENSOR_HDR, (cam_sensor_hdr_type_t) value)) { 6886d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGE("%s: Override to sensor HDR mode for video HDR failed", __func__); 688766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 688866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 688966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_HDR, videoHDR); 689066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 689166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("%s: Setting Video HDR %s", __func__, videoHDR); 689266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_HDR, videoHDR); 689366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_VIDEO_HDR, value)) { 689466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 689566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 689666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 689766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 689866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 689966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 690066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 690166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Video HDR value: %s", 690266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (videoHDR == NULL) ? "NULL" : videoHDR); 690366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 690466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 690566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 690666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 690766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 690866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 690966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setVtEnable 691066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 691166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set vt Enable value 691266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 691366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 691466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @videoHDR : svtEnable value string 691566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 691666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 691766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 691866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 691966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 692066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setVtEnable(const char *vtEnable) 692166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 692266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (vtEnable != NULL) { 692366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 692466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), vtEnable); 692566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 692666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting Vt Enable %s", vtEnable); 692766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAVTimerEnabled = true; 692866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VT_ENABLE, vtEnable); 692966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_VT, value)) { 693066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 693166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 693266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 693366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 693466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 693566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Vt Enable value: %s", 693666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (vtEnable == NULL) ? "NULL" : vtEnable); 693766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAVTimerEnabled = false; 693866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 693966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 694066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 694166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 694266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFaceRecognition 694366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 694466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set face recognition value 694566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 694666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 694766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @faceRecog : face recognition value string 694866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @maxFaces : number of max faces to be detected/recognized 694966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 695066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 695166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 695266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 695366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 695466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFaceRecognition(const char *faceRecog, 695566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t maxFaces) 695666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 695766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (faceRecog != NULL) { 695866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ON_OFF_MODES_MAP, PARAM_MAP_SIZE(ON_OFF_MODES_MAP), faceRecog); 695966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 696066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting face recognition %s", faceRecog); 696166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_FACE_RECOGNITION, faceRecog); 696266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 696366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t faceProcMask = m_nFaceProcMask; 696466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value > 0) { 696566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask |= CAM_FACE_PROCESS_MASK_RECOGNITION; 696666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 696766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask &= (uint32_t)(~CAM_FACE_PROCESS_MASK_RECOGNITION); 696866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 696966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 697066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_nFaceProcMask == faceProcMask) { 697166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("face process mask not changed, no ops here"); 697266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 697366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 697466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nFaceProcMask = faceProcMask; 697566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("FaceProcMask -> %d", m_nFaceProcMask); 697666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 697766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set parm for face process 697866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_fd_set_parm_t fd_set_parm; 697966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&fd_set_parm, 0, sizeof(cam_fd_set_parm_t)); 698066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fd_set_parm.fd_mode = m_nFaceProcMask; 698166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fd_set_parm.num_fd = maxFaces; 698266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 698366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_FD, fd_set_parm)) { 698466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 698566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 698666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 698766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 698866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 698966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid face recognition value: %s", (faceRecog == NULL) ? "NULL" : faceRecog); 699066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 699166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 699266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 699366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 699466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setZoom 699566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 699666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set zoom level 699766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 699866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 699966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @zoom_level : zoom level 700066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 700166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 700266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 700366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 700466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 700566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setZoom(int zoom_level) 700666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 700766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[16]; 700866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%d", zoom_level); 700966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_ZOOM, val); 701066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("zoom level: %d", zoom_level); 701166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mZoomLevel = zoom_level; 701266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ZOOM, zoom_level)) { 701366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 701466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 701566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 701666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 701766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 701866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 701966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 702066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setISOValue 702166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 702266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set ISO value 702366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 702466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 702566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @isoValue : ISO value string 702666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 702766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 702866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 702966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 703066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 703166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setISOValue(const char *isoValue) 703266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 703366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isoValue != NULL) { 703466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(isoValue, ISO_MANUAL)) { 703566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("iso manual mode - use continuous iso"); 703666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_ISO_MODE, isoValue); 703766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 703866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 703966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ISO_MODES_MAP, PARAM_MAP_SIZE(ISO_MODES_MAP), isoValue); 704066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 704166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting ISO value %s", isoValue); 704266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_ISO_MODE, isoValue); 704366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 704466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_intf_parm_manual_3a_t iso_settings; 704566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&iso_settings, 0, sizeof(cam_intf_parm_manual_3a_t)); 704666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin iso_settings.previewOnly = FALSE; 704766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin iso_settings.value = value; 704866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getManualCaptureMode() != CAM_MANUAL_CAPTURE_TYPE_OFF) { 704966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin iso_settings.previewOnly = TRUE; 705066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 705166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 705266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ISO, iso_settings)) { 705366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 705466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 705566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_isoValue = value; 705666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 705766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 705866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 705966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid ISO value: %s", 706066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (isoValue == NULL) ? "NULL" : isoValue); 706166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 706266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 706366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 706466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 706566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 706666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setContinuousISO 706766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 706866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set continuous ISO value 706966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 707066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 707166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : ISO value parameter 707266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 707366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 707466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 707566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 707666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 707766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setContinuousISO(const QCameraParameters& params) 707866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 707966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *iso = params.get(KEY_QC_ISO_MODE); 708066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("current iso mode: %s", iso); 708166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 708266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (iso != NULL) { 708366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(iso, ISO_MANUAL)) { 708466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("dont set iso to back-end."); 708566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 708666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 708766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 708866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 708966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_CONTINUOUS_ISO); 709066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_CONTINUOUS_ISO); 709166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 709266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 709366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 709466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setContinuousISO(str); 709566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 709666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 709766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 709866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 709966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 710066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 710166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setExposureTime 710266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 710366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set exposure time 710466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 710566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 710666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @expTimeStr : string of exposure time in ms 710766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 710866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 710966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 711066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 711166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 711266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setExposureTime(const char *expTimeStr) 711366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 711466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (expTimeStr != NULL) { 711566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double expTimeMs = atof(expTimeStr); 711666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //input is in milli seconds. Convert to nano sec for backend 711766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int64_t expTimeNs = (int64_t)(expTimeMs*1000000L); 711866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 711966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // expTime == 0 means not to use manual exposure time. 712066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((0 <= expTimeNs) && 712166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((expTimeNs == 0) || 712266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((expTimeNs >= m_pCapability->exposure_time_range[0]) && 712366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (expTimeNs <= m_pCapability->exposure_time_range[1])))) { 712466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", exposure time: %f ms", expTimeMs); 712566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_EXPOSURE_TIME, expTimeStr); 712666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 712766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_intf_parm_manual_3a_t exp_settings; 712866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&exp_settings, 0, sizeof(cam_intf_parm_manual_3a_t)); 712966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getManualCaptureMode() != CAM_MANUAL_CAPTURE_TYPE_OFF) { 713066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin exp_settings.previewOnly = TRUE; 713166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (expTimeMs < QCAMERA_MAX_EXP_TIME_LEVEL1) { 713266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin exp_settings.value = expTimeNs; 713366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 713466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin exp_settings.value = 713566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int64_t)(QCAMERA_MAX_EXP_TIME_LEVEL1*1000000L); 713666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 713766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 713866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin exp_settings.previewOnly = FALSE; 713966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin exp_settings.value = expTimeNs; 714066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 714166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 714266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Based on exposure values we can decide the capture type here 714366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getManualCaptureMode() != CAM_MANUAL_CAPTURE_TYPE_OFF) { 714466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (expTimeMs < QCAMERA_MAX_EXP_TIME_LEVEL1) { 714566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setManualCaptureMode(CAM_MANUAL_CAPTURE_TYPE_1); 714666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (expTimeMs < QCAMERA_MAX_EXP_TIME_LEVEL2) { 714766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setManualCaptureMode(CAM_MANUAL_CAPTURE_TYPE_2); 714866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (expTimeMs < QCAMERA_MAX_EXP_TIME_LEVEL4) { 714966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setManualCaptureMode(CAM_MANUAL_CAPTURE_TYPE_3); 715066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 715166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setManualCaptureMode(CAM_MANUAL_CAPTURE_TYPE_OFF); 715266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 715366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 715466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 715566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_EXPOSURE_TIME, 715666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin exp_settings)) { 715766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 715866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 715966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_expTime = expTimeNs; 716066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 716166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 716266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 716366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 716466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 716566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid exposure time, value: %s", 716666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (expTimeStr == NULL) ? "NULL" : expTimeStr); 716766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 716866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 716966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 717066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 717166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setLongshotEnable 717266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 717366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set a flag indicating longshot mode 717466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 717566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 717666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @enable : true - Longshot enabled 717766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * false - Longshot disabled 717866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 717966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 718066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 718166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 718266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 718366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setLongshotEnable(bool enable) 718466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 718566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 718666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t value = enable ? 1 : 0; 718766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 718866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 718966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 719066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 719166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 719266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 719366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_LONGSHOT_ENABLE, value)) { 719466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 719566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 719666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 719766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 719866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 719966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 720066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to parameter changes"); 720166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 720266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 720366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 720466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (enable == true) m_bLongshotEnabled = enable; 720566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 720666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 720766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 720866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 720966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 721066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFlash 721166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 721266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set flash mode 721366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 721466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 721566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @flashStr : LED flash mode value string 721666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 721766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 721866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 721966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 722066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 722166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFlash(const char *flashStr) 722266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 722366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (flashStr != NULL) { 722466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(FLASH_MODES_MAP, PARAM_MAP_SIZE(FLASH_MODES_MAP), flashStr); 722566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 722666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting Flash value %s", flashStr); 722766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_FLASH_MODE, flashStr); 722866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFlashValue = value; 722966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 723066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 723166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 723266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid flash value: %s", (flashStr == NULL) ? "NULL" : flashStr); 723366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 723466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 723566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 723666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 723766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateFlashMode 723866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 723966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update flash mode 724066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 724166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 724266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @flashStr : LED flash mode value 724366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 724466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 724566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 724666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 724766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 724866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateFlashMode(cam_flash_mode_t flash_mode) 724966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 725066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 725166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (flash_mode >= CAM_FLASH_MODE_MAX) { 725266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Error!! Invalid flash mode (%d)", flash_mode); 725366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 725466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 725566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting Flash mode from EZTune %d", flash_mode); 725666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 725766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *flash_mode_str = lookupNameByValue(FLASH_MODES_MAP, 725866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(FLASH_MODES_MAP), flash_mode); 725966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 726066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 726166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 726266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 726366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setFlash(flash_mode_str); 726466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 726566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update Flash mode"); 726666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 726766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 726866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 726966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting Flash mode %d", mFlashValue); 727066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_LED_MODE, mFlashValue)) { 727166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set led mode"); 727266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 727366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 727466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 727566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 727666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 727766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to commit parameters"); 727866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 727966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 728066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 728166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 728266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 728366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 728466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 728566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 728666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : configureFlash 728766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 728866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: configure Flash Bracketing. 728966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 729066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 729166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @frame_config : output configuration structure to fill in. 729266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 729366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 729466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 729566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 729666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 729766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::configureFlash(cam_capture_frame_config_t &frame_config) 729866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 729966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("E"); 730066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 730166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t i = 0; 730266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 730366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isChromaFlashEnabled()) { 730466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 730566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setToneMapMode(false, false); 730666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 730766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to configure tone map"); 730866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 730966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 731066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 731166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setCDSMode(CAM_CDS_MODE_OFF, false); 731266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 731366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to configure csd mode"); 731466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 731566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 731666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 731766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Enable Chroma Flash capture"); 731866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_flash_mode_t flash_mode = CAM_FLASH_MODE_OFF; 731966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.num_batch = 732066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->chroma_flash_settings_need.burst_count; 732166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (frame_config.num_batch > CAM_MAX_FLASH_BRACKETING) { 732266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.num_batch = CAM_MAX_FLASH_BRACKETING; 732366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 732466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (i = 0; i < frame_config.num_batch; i++) { 732566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin flash_mode = (m_pCapability->chroma_flash_settings_need.flash_bracketing[i]) ? 732666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_FLASH_MODE_ON:CAM_FLASH_MODE_OFF; 732766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].num_frames = 1; 732866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].type = CAM_CAPTURE_FLASH; 732966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].flash_mode = flash_mode; 733066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 733166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (mFlashValue != CAM_FLASH_MODE_OFF) { 733266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.num_batch = 1; 733366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (i = 0; i < frame_config.num_batch; i++) { 733466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].num_frames = getNumOfSnapshots(); 733566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].type = CAM_CAPTURE_FLASH; 733666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].flash_mode =(cam_flash_mode_t)mFlashValue; 733766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 733866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 733966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 734066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Flash frame batch cnt = %d",frame_config.num_batch); 734166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 734266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 734366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 734466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 734566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : configureHDRBracketing 734666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 734766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: configure HDR Bracketing. 734866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 734966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 735066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @frame_config : output configuration structure to fill in. 735166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 735266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 735366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 735466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 735566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 735666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::configureHDRBracketing(cam_capture_frame_config_t &frame_config) 735766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 735866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("E"); 735966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 736066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t i = 0; 736166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 736266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t hdrFrameCount = m_pCapability->hdr_bracketing_setting.num_frames; 736366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("HDR values %d, %d frame count: %u", 736466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int8_t) m_pCapability->hdr_bracketing_setting.exp_val.values[0], 736566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int8_t) m_pCapability->hdr_bracketing_setting.exp_val.values[1], 736666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hdrFrameCount); 736766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 736866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.num_batch = hdrFrameCount; 736966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 737066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_bracket_mode mode = 737166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->hdr_bracketing_setting.exp_val.mode; 737266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (mode == CAM_EXP_BRACKETING_ON) { 737366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setToneMapMode(false, true); 737466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 737566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("Failed to disable tone map during HDR"); 737666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 737766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 737866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (i = 0; i < frame_config.num_batch; i++) { 737966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].num_frames = 1; 738066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].type = CAM_CAPTURE_BRACKETING; 738166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].hdr_mode.mode = mode; 738266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].hdr_mode.values = 738366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->hdr_bracketing_setting.exp_val.values[i]; 738466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("exp values %d", 738566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int)frame_config.configs[i].hdr_mode.values); 738666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 738766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 738866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 738966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 739066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 739166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : configureAEBracketing 739266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 739366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: configure AE Bracketing. 739466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 739566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 739666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @frame_config : output configuration structure to fill in. 739766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 739866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 739966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 740066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 740166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 740266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::configureAEBracketing(cam_capture_frame_config_t &frame_config) 740366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 740466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("E"); 740566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 740666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t i = 0; 740766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char exp_value[MAX_EXP_BRACKETING_LENGTH]; 740866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 740966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setToneMapMode(false, true); 741066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 741166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Failed to disable tone map during AEBracketing"); 741266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 741366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 741466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t burstCount = 0; 741566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str_val = m_AEBracketingClient.values; 741666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((str_val != NULL) && (strlen(str_val) > 0)) { 741766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 741866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 741966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strlcpy(prop, str_val, PROPERTY_VALUE_MAX); 742066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *saveptr = NULL; 742166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *token = strtok_r(prop, ",", &saveptr); 742266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (token != NULL) { 742366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin exp_value[burstCount++] = (char)atoi(token); 742466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin while (token != NULL) { 742566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin token = strtok_r(NULL, ",", &saveptr); 742666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (token != NULL) { 742766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin exp_value[burstCount++] = (char)atoi(token); 742866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 742966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 743066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 743166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 743266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 743366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.num_batch = burstCount; 743466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_bracket_mode mode = m_AEBracketingClient.mode; 743566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 743666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (i = 0; i < frame_config.num_batch; i++) { 743766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].num_frames = 1; 743866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].type = CAM_CAPTURE_BRACKETING; 743966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].hdr_mode.mode = mode; 744066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].hdr_mode.values = 744166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_AEBracketingClient.values[i]; 744266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("exp values %d", (int)m_AEBracketingClient.values[i]); 744366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 744466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 744566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("num_frame = %d X", burstCount); 744666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 744766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 744866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 744966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 745066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : configureLowLight 745166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 745266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: configure low light frame capture use case. 745366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 745466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 745566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @frame_config : output configuration structure to fill in. 745666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 745766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 745866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 745966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 746066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 746166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::configureLowLight(cam_capture_frame_config_t &frame_config) 746266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 746366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 746466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 746566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.num_batch = 1; 746666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[0].num_frames = getNumOfSnapshots(); 746766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[0].type = CAM_CAPTURE_LOW_LIGHT; 746866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[0].low_light_mode = CAM_LOW_LIGHT_ON; 746966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Snapshot Count: %d", frame_config.configs[0].num_frames); 747066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 747166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 747266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 747366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 747466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : configureManualCapture 747566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 747666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: configure manual capture. 747766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 747866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 747966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @frame_config : output configaration structure to fill in. 748066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 748166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 748266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 748366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 748466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 748566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::configureManualCapture(cam_capture_frame_config_t &frame_config) 748666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 748766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 748866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t i = 0; 748966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 749066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("E"); 749166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getManualCaptureMode()) { 749266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.num_batch = 1; 749366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (i = 0; i < frame_config.num_batch; i++) { 749466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].num_frames = getNumOfSnapshots(); 749566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].type = CAM_CAPTURE_MANUAL_3A; 749666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_expTime != 0) { 749766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].manual_3A_mode.exp_mode = CAM_SETTINGS_TYPE_ON; 749866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].manual_3A_mode.exp_time = m_expTime; 749966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 750066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].manual_3A_mode.exp_mode = CAM_SETTINGS_TYPE_AUTO; 750166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].manual_3A_mode.exp_time = 0; 750266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 750366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 750466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_isoValue != 0) { 750566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].manual_3A_mode.iso_mode = CAM_SETTINGS_TYPE_ON; 750666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].manual_3A_mode.iso_value = m_isoValue; 750766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 750866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].manual_3A_mode.iso_mode = CAM_SETTINGS_TYPE_AUTO; 750966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin frame_config.configs[i].manual_3A_mode.iso_value = 0; 751066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 751166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 751266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 751366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("X: batch cnt = %d", frame_config.num_batch); 751466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 751566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 751666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 751766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 751866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : configFrameCapture 751966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 752066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: configuration for ZSL special captures (FLASH/HDR etc) 752166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 752266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 752366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @commitSettings : flag to enable or disable commit this this settings 752466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 752566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 752666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 752766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 752866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 752966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::configFrameCapture(bool commitSettings) 753066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 753166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 753266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value; 753366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 753466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_captureFrameConfig, 0, sizeof(cam_capture_frame_config_t)); 753566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 753666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (commitSettings) { 753766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 753866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 753966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 754066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 754166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 754266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 754366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDREnabled() || m_bAeBracketingEnabled || m_bAFBracketingOn || 754466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bOptiZoomOn || m_bReFocusOn || m_LowLightLevel 754566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin || getManualCaptureMode()) { 754666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = CAM_FLASH_MODE_OFF; 754766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isChromaFlashEnabled()) { 754866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = CAM_FLASH_MODE_ON; 754966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 755066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = mFlashValue; 755166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 755266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 755366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != CAM_FLASH_MODE_OFF) { 755466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin configureFlash(m_captureFrameConfig); 755566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if(isHDREnabled()) { 755666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin configureHDRBracketing (m_captureFrameConfig); 755766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if(isAEBracketEnabled()) { 755866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin configureAEBracketing (m_captureFrameConfig); 755966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (m_LowLightLevel) { 756066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin configureLowLight (m_captureFrameConfig); 756166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 756266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Added reset capture type as a last batch for back-end to restore settings. 756366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t batch_count = m_captureFrameConfig.num_batch; 756466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_captureFrameConfig.configs[batch_count].type = CAM_CAPTURE_RESET; 756566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_captureFrameConfig.configs[batch_count].num_frames = 0; 756666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_captureFrameConfig.num_batch++; 756766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (getManualCaptureMode() >= CAM_MANUAL_CAPTURE_TYPE_2){ 756866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = configureManualCapture (m_captureFrameConfig); 756966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Added reset capture type as a last batch for back-end to restore settings. 757066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t batch_count = m_captureFrameConfig.num_batch; 757166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_captureFrameConfig.configs[batch_count].type = CAM_CAPTURE_RESET; 757266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_captureFrameConfig.configs[batch_count].num_frames = 0; 757366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_captureFrameConfig.num_batch++; 757466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 757566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 757666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CAPTURE_FRAME_CONFIG, 757766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (cam_capture_frame_config_t)m_captureFrameConfig); 757866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 757966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 758066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set capture settings"); 758166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 758266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 758366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 758466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (commitSettings) { 758566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 758666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 758766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to commit parameters"); 758866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 758966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 759066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 759166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 759266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 759366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 759466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 759566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : resetFrameCapture 759666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 759766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: reset special captures settings(FLASH/HDR etc) 759866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 759966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 760066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @commitSettings : flag to enable or disable commit this this settings 760166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 760266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 760366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 760466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 760566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 760666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::resetFrameCapture(bool commitSettings) 760766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 76081687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan int32_t rc = NO_ERROR; 760966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&m_captureFrameConfig, 0, sizeof(cam_capture_frame_config_t)); 761066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 761166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (commitSettings) { 761266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 761366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 761466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 761566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 761666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 761766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 761866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDREnabled() || isAEBracketEnabled()) { 761966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setToneMapMode(true, true); 762066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 762166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Failed to enable tone map during HDR/AEBracketing"); 762266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 762366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = stopAEBracket(); 762466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if ((isChromaFlashEnabled()) || (mFlashValue != CAM_FLASH_MODE_OFF) 762566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin || (getLowLightLevel() != CAM_LOW_LIGHT_OFF)) { 762666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setToneMapMode(true, false); 762766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 762866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Failed to enable tone map during chroma flash"); 762966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 763066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 763166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setCDSMode(mCds_mode, false); 763266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 763366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to configure csd mode"); 763466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 763566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 763666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 763766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 763866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CAPTURE_FRAME_CONFIG, 763966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (cam_capture_frame_config_t)m_captureFrameConfig); 764066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 764166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 764266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set capture settings"); 764366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 764466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 764566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 764666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (commitSettings) { 764766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 764866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 764966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to commit parameters"); 765066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 765166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 765266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 765366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 765466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 765566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 765666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 765766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAecLock 765866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 765966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set AEC lock value 766066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 766166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 766266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @aecLockStr : AEC lock value string 766366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 766466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 766566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 766666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 766766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 766866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAecLock(const char *aecLockStr) 766966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 767066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (aecLockStr != NULL) { 767166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(TRUE_FALSE_MODES_MAP, PARAM_MAP_SIZE(TRUE_FALSE_MODES_MAP), 767266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin aecLockStr); 767366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 767466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting AECLock value %s", aecLockStr); 767566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_AUTO_EXPOSURE_LOCK, aecLockStr); 767666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 767766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_AEC_LOCK, (uint32_t)value)) { 767866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 767966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 768066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 768166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 768266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 768366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid AECLock value: %s", 768466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (aecLockStr == NULL) ? "NULL" : aecLockStr); 768566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 768666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 768766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 768866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 768966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAwbLock 769066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 769166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set AWB lock value 769266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 769366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 769466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @awbLockStr : AWB lock value string 769566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 769666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 769766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 769866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 769966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 770066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAwbLock(const char *awbLockStr) 770166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 770266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (awbLockStr != NULL) { 770366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(TRUE_FALSE_MODES_MAP, PARAM_MAP_SIZE(TRUE_FALSE_MODES_MAP), 770466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin awbLockStr); 770566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 770666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting AWBLock value %s", awbLockStr); 770766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_AUTO_WHITEBALANCE_LOCK, awbLockStr); 770866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 770966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_AWB_LOCK, (uint32_t)value)) { 771066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 771166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 771266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 771366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 771466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 771566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid AWBLock value: %s", (awbLockStr == NULL) ? "NULL" : awbLockStr); 771666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 771766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 771866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 771966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 772066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setMCEValue 772166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 772266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set memory color enhancement value 772366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 772466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 772566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @mceStr : MCE value string 772666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 772766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 772866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 772966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 773066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 773166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setMCEValue(const char *mceStr) 773266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 773366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (mceStr != NULL) { 773466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 773566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), mceStr); 773666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 773766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting AWBLock value %s", mceStr); 773866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_MEMORY_COLOR_ENHANCEMENT, mceStr); 773966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_MCE, value)) { 774066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 774166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 774266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 774366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 774466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 774566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid MCE value: %s", (mceStr == NULL) ? "NULL" : mceStr); 774666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 774766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 774866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 774966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 775066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setTintlessValue 775166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 775266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: enable/disable tintless from user setting 775366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 775466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 775566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 775666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 775766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 775866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 775966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 776066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 776166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setTintlessValue(const QCameraParameters& params) 776266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 776366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_TINTLESS_ENABLE); 776466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_TINTLESS_ENABLE); 776566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 776666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 776766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 776866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.tintless", prop, VALUE_ENABLE); 776966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 777066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 777166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 777266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setTintlessValue(str); 777366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 777466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 777566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 777666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(prev_str, prop) != 0 ) { 777766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setTintlessValue(prop); 777866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 777966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 778066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 778166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 778266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 778366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 778466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 778566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setTintless 778666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 778766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set tintless mode 778866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 778966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 779066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @enable : 1 = enable, 0 = disable 779166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 779266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 779366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 779466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 779566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 779666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setTintless(bool enable) 779766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 779866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (enable) { 779966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setTintlessValue(VALUE_ENABLE); 780066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 780166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setTintlessValue(VALUE_DISABLE); 780266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 780366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 780466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 780566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 780666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setTintlessValue 780766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 780866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set tintless value 780966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 781066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 781166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @tintStr : Tintless value string 781266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 781366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 781466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 781566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 781666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 781766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setTintlessValue(const char *tintStr) 781866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 781966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (tintStr != NULL) { 782066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 782166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), tintStr); 782266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 782366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting Tintless value %s", tintStr); 782466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_TINTLESS_ENABLE, tintStr); 782566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_TINTLESS, value)) { 782666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 782766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 782866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 782966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 783066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 783166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Tintless value: %s", (tintStr == NULL) ? "NULL" : tintStr); 783266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 783366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 783466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 783566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 783666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setCDSMode 783766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 783866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Set CDS mode 783966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 784066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 784166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 784266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 784366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 784466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 784566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 784666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 784766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setCDSMode(const QCameraParameters& params) 784866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 784966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_CDS_MODE); 785066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_CDS_MODE); 785166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *video_str = params.get(KEY_QC_VIDEO_CDS_MODE); 785266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *video_prev_str = get(KEY_QC_VIDEO_CDS_MODE); 785366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 785466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 785566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bRecordingHint_new == true) { 785666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (video_str) { 785766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((video_prev_str == NULL) || (strcmp(video_str, video_prev_str) != 0)) { 785866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cds_mode = lookupAttr(CDS_MODES_MAP, PARAM_MAP_SIZE(CDS_MODES_MAP), 785966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin video_str); 786066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cds_mode != NAME_NOT_FOUND) { 786166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_CDS_MODE, video_str); 786266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CDS_MODE, cds_mode)) { 786366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed CDS MODE to update table"); 786466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 786566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 786666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Set CDS in video mode = %d", cds_mode); 786766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCds_mode = cds_mode; 786866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 786966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 787066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 787166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid argument for video CDS MODE %d", cds_mode); 787266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 787366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 787466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 787566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 787666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char video_prop[PROPERTY_VALUE_MAX]; 787766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(video_prop, 0, sizeof(video_prop)); 787866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.video.CDS", video_prop, CDS_MODE_ON); 787966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cds_mode = lookupAttr(CDS_MODES_MAP, PARAM_MAP_SIZE(CDS_MODES_MAP), 788066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin video_prop); 788166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cds_mode != NAME_NOT_FOUND) { 788266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_VIDEO_CDS_MODE, video_prop); 788366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CDS_MODE, cds_mode)) { 788466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed CDS MODE to update table"); 788566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 788666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 788766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Set CDS in video mode from setprop = %d", cds_mode); 788866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCds_mode = cds_mode; 788966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 789066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 789166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid prop for video CDS MODE %d", cds_mode); 789266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 789366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 789466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 789566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 789666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str) { 789766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((prev_str == NULL) || (strcmp(str, prev_str) != 0)) { 789866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cds_mode = lookupAttr(CDS_MODES_MAP, PARAM_MAP_SIZE(CDS_MODES_MAP), 789966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str); 790066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cds_mode != NAME_NOT_FOUND) { 790166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_CDS_MODE, str); 790266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CDS_MODE, cds_mode)) { 790366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed CDS MODE to update table"); 790466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 790566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 790666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Set CDS in capture mode = %d", cds_mode); 790766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCds_mode = cds_mode; 790866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 790966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 791066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 791166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid argument for snapshot CDS MODE %d", cds_mode); 791266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 791366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 791466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 791566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 791666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 791766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 791866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.CDS", prop, CDS_MODE_ON); 791966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cds_mode = lookupAttr(CDS_MODES_MAP, PARAM_MAP_SIZE(CDS_MODES_MAP), 792066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prop); 792166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cds_mode != NAME_NOT_FOUND) { 792266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_CDS_MODE, prop); 792366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CDS_MODE, cds_mode)) { 792466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed CDS MODE to update table"); 792566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 792666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 792766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Set CDS in snapshot mode from setprop = %d", cds_mode); 792866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCds_mode = cds_mode; 792966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 793066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 793166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid prop for snapshot CDS MODE %d", cds_mode); 793266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 793366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 793466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 793566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 793666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 793766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 793866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 793966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 794066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 794166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setInitialExposureIndex 794266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 794366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Set initial exposure index value 794466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 794566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 794666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 794766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 794866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 794966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 795066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 795166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 795266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setInitialExposureIndex(const QCameraParameters& params) 795366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 795466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 795566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = -1; 795666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_INITIAL_EXPOSURE_INDEX); 795766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_INITIAL_EXPOSURE_INDEX); 795866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str) { 795966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((prev_str == NULL) || (strcmp(str, prev_str) != 0)) { 796066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = atoi(str); 796166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Set initial exposure index value from param = %d", value); 796266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value >= 0) { 796366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_INITIAL_EXPOSURE_INDEX, str); 796466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 796566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 796666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 796766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 796866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 796966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.initial.exp.val", prop, ""); 797066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((strlen(prop) > 0) && 797166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ( (prev_str == NULL) || (strcmp(prop, prev_str) != 0))) { 797266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = atoi(prop); 797366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Set initial exposure index value from setprop = %d", value); 797466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value >= 0) { 797566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_INITIAL_EXPOSURE_INDEX, prop); 797666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 797766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 797866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 797966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 798066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value >= 0) { 798166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 798266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_INITIAL_EXPOSURE_INDEX, (uint32_t)value)) { 798366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update initial exposure index value"); 798466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 798566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 798666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 798766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Invalid value for initial exposure index value %d", value); 798866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 798966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 799066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 799166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 799266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 799366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 7994d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * FUNCTION : setInstantCapture 7995d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 7996d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * DESCRIPTION: Set Instant Capture related params 7997d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 7998d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * PARAMETERS : 7999d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * @params : user setting parameters 8000d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 8001d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * RETURN : int32_t type of status 8002d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * NO_ERROR -- success 8003d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * none-zero failure code 8004d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch *==========================================================================*/ 8005d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschint32_t QCameraParameters::setInstantCapture(const QCameraParameters& params) 8006d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch{ 8007d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int32_t rc = NO_ERROR; 8008d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int value = -1; 8009d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Check for instant capture, this will enable instant AEC as well. 8010d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // This param will trigger the instant AEC param to backend 8011d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // And also will be useful for instant capture. 8012d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch const char *str = params.get(KEY_QC_INSTANT_CAPTURE); 8013d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch const char *prev_str = get(KEY_QC_INSTANT_CAPTURE); 8014d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (str) { 8015d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if ((prev_str == NULL) || (strcmp(str, prev_str) != 0)) { 8016d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch value = lookupAttr(INSTANT_CAPTURE_MODES_MAP, 8017d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch PARAM_MAP_SIZE(INSTANT_CAPTURE_MODES_MAP), str); 8018d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGD("Set instant Capture from param = %d", value); 8019d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if(value != NAME_NOT_FOUND) { 8020d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch updateParamEntry(KEY_QC_INSTANT_CAPTURE, str); 8021d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8022d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8023d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } else { 8024d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch char prop[PROPERTY_VALUE_MAX]; 8025d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch memset(prop, 0, sizeof(prop)); 8026d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch property_get("persist.camera.instant.capture", prop, KEY_QC_INSTANT_CAPTURE_DISABLE); 8027d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if ((prev_str == NULL) || (strcmp(prop, prev_str) != 0)) { 8028d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch value = lookupAttr(INSTANT_CAPTURE_MODES_MAP, 8029d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch PARAM_MAP_SIZE(INSTANT_CAPTURE_MODES_MAP), prop); 8030d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGD("Set instant capture from setprop = %d", value); 8031d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (value != NAME_NOT_FOUND) { 8032d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch updateParamEntry(KEY_QC_INSTANT_CAPTURE, prop); 8033d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8034d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8035d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8036d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8037d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Set instant AEC param to the backend for either instant capture or instant AEC 8038d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // 0 - disbale (normal AEC) 8039d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // 1 - Aggressive AEC (algo used in backend) 8040d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // 2 - Fast AEC (algo used in backend) 8041d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (value != NAME_NOT_FOUND && value != -1) { 8042d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_bInstantCapture = (value > 0)? true : false; 8043d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch setInstantAEC((uint8_t)value, false); 8044d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8045d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8046d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8047d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // get frame aec bound value from setprop. 8048d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // This value indicates the number of frames, camera interface 8049d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // will wait for getting the instant capture frame. 8050d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Default value set to 7. 8051d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // This value also indicates the number of frames, that HAL 8052d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // will not display and will not send preview frames to app 8053d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // This will be applicable only if instant capture is set. 8054d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (m_bInstantCapture) { 8055d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch char prop[PROPERTY_VALUE_MAX]; 8056d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch memset(prop, 0, sizeof(prop)); 8057d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch property_get("persist.camera.ae.capture.bound", prop, "7"); 8058d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int32_t frame_bound = atoi(prop); 8059d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (frame_bound >= 0) { 8060d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch mAecFrameBound = (uint8_t)frame_bound; 8061d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } else { 8062d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGE("Invalid prop for aec frame bound %d", frame_bound); 8063d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch rc = BAD_VALUE; 8064d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8065d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8066d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return rc; 8067d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch} 8068d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8069d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch/*=========================================================================== 8070d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * FUNCTION : setInstantAEC 8071d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 8072d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * DESCRIPTION: Set Instant AEC related params 8073d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 8074d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * PARAMETERS : 8075d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * @params : user setting parameters 8076d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 8077d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * RETURN : int32_t type of status 8078d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * NO_ERROR -- success 8079d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * none-zero failure code 8080d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch *==========================================================================*/ 8081d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschint32_t QCameraParameters::setInstantAEC(const QCameraParameters& params) 8082d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch{ 8083d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int32_t rc = NO_ERROR; 8084d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int value = -1; 8085d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8086d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Check for instant AEC only when instant capture is not enabled. 8087d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Instant capture already takes care of the instant AEC as well. 8088d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (!m_bInstantCapture) { 8089d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Check for instant AEC. Instant AEC will only enable fast AEC. 8090d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // It will not enable instant capture. 8091d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // This param will trigger the instant AEC param to backend 8092d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch const char *str = params.get(KEY_QC_INSTANT_AEC); 8093d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch const char *prev_str = get(KEY_QC_INSTANT_AEC); 8094d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (str) { 8095d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if ((prev_str == NULL) || (strcmp(str, prev_str) != 0)) { 8096d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch value = lookupAttr(INSTANT_AEC_MODES_MAP, 8097d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch PARAM_MAP_SIZE(INSTANT_AEC_MODES_MAP), str); 8098d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGD("Set instant AEC from param = %d", value); 8099d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8100d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } else { 8101d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch char prop[PROPERTY_VALUE_MAX]; 8102d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch memset(prop, 0, sizeof(prop)); 8103d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch property_get("persist.camera.instant.aec", prop, KEY_QC_INSTANT_AEC_DISABLE); 8104d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if ((prev_str == NULL) || (strcmp(prop, prev_str) != 0)) { 8105d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch value = lookupAttr(INSTANT_AEC_MODES_MAP, 8106d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch PARAM_MAP_SIZE(INSTANT_AEC_MODES_MAP), prop); 8107d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGD("Set instant AEC from setprop = %d", value); 8108d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8109d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8110d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8111d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Set instant AEC param to the backend for either instant capture or instant AEC 8112d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // 0 - disbale (normal AEC) 8113d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // 1 - Aggressive AEC (algo used in backend) 8114d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // 2 - Fast AEC (algo used in backend) 8115d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (value != NAME_NOT_FOUND && value != -1) { 8116d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch setInstantAEC((uint8_t)value, false); 8117d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8118d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8119d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8120d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8121d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // get frame aec preview skip count from setprop. 8122d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // This value indicates the number of frames, that HAL 8123d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // will not display and will not send preview frames to app 8124d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Default value set to 7. 8125d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // This will be applicable only if instant aec is set. 8126d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (m_bInstantAEC) { 8127d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch char prop[PROPERTY_VALUE_MAX]; 8128d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch memset(prop, 0, sizeof(prop)); 8129d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch property_get("persist.camera.ae.instant.bound", prop, "7"); 8130d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int32_t aec_frame_skip_cnt = atoi(prop); 8131d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (aec_frame_skip_cnt >= 0) { 8132d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch mAecSkipDisplayFrameBound = (uint8_t)aec_frame_skip_cnt; 8133d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } else { 8134d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGE("Invalid prop for aec frame bound %d", aec_frame_skip_cnt); 8135d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch rc = BAD_VALUE; 8136d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8137d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 8138d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return rc; 8139d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch} 8140d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 8141d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch/*=========================================================================== 814266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setDISValue 814366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 814466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set DIS value 814566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 814666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 814766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @disStr : DIS value string 814866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 814966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 815066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 815166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 815266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 815366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setDISValue(const char *disStr) 815466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 815566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (disStr != NULL) { 815666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 815766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), disStr); 815866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 815966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //For some IS types (like EIS 2.0), when DIS value is changed, we need to restart 816066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //preview because of topology change in backend. But, for now, restart preview 816166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //for all IS types. 816266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 816366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting DIS value %s", disStr); 816466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_DIS, disStr); 816566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!(strcmp(disStr,"enable"))) { 816666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDISEnabled = true; 816766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 816866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDISEnabled = false; 816966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 817066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_DIS_ENABLE, value)) { 817166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 817266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 817366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 817466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 817566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 817666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid DIS value: %s", (disStr == NULL) ? "NULL" : disStr); 817766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDISEnabled = false; 817866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 817966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 818066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 818166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 818266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateOisValue 818366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 818466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update OIS value 818566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 818666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 818766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @oisValue : OIS value TRUE/FALSE 818866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 818966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 819066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 819166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 819266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 819366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateOisValue(bool oisValue) 819466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 819566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t enable = 0; 819666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 819766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 819866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Check for OIS disable 819966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char ois_prop[PROPERTY_VALUE_MAX]; 820066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(ois_prop, 0, sizeof(ois_prop)); 820166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.ois.disable", ois_prop, "0"); 820266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t ois_disable = (uint8_t)atoi(ois_prop); 820366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 820466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Enable OIS if it is camera mode or Camcoder 4K mode 820566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_bRecordingHint || (is4k2kVideoResolution() && m_bRecordingHint)) { 820666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin enable = 1; 820766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Valid OIS mode!! "); 820866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 820966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Disable OIS if setprop is set 821066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ois_disable || !oisValue) { 821166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Disable OIS 821266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin enable = 0; 821366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Disable OIS mode!! ois_disable(%d) oisValue(%d)", 821466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ois_disable, oisValue); 821566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 821666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 821766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bOISEnabled = enable; 821866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bOISEnabled) { 821966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_OIS, VALUE_ENABLE); 822066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 822166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_OIS, VALUE_DISABLE); 822266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 822366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 822466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initBatchUpdate(m_pParamBuf) < 0 ) { 822566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 822666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 822766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 822866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 822966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Sending OIS mode (%d)", enable); 823066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_META_LENS_OPT_STAB_MODE, enable)) { 823166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 823266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 823366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 823466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 823566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 823666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 823766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to parameter changes"); 823866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 823966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 824066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 824166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 824266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 824366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 824466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 824566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setHighFrameRate 824666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 824766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set high frame rate 824866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 824966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 825066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @hfrMode : HFR mode 825166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 825266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 825366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 825466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 825566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 825666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setHighFrameRate(const int32_t hfrMode) 825766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 825866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_HFR, hfrMode)) { 825966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 826066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 826166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 826266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 826366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 826466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 826566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 826666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setLensShadeValue 826766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 826866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set lens shade value 826966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 827066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 827166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @lensSahdeStr : lens shade value string 827266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 827366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 827466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 827566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 827666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 827766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setLensShadeValue(const char *lensShadeStr) 827866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 827966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (lensShadeStr != NULL) { 828066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 828166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), lensShadeStr); 828266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 828366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting LensShade value %s", lensShadeStr); 828466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_LENSSHADE, lensShadeStr); 828566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ROLLOFF, value)) { 828666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 828766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 828866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 828966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 829066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 829166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid LensShade value: %s", 829266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (lensShadeStr == NULL) ? "NULL" : lensShadeStr); 829366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 829466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 829566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 829666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 829766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setExposureCompensation 829866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 829966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set exposure compensation value 830066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 830166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 830266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @expComp : exposure compensation value 830366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 830466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 830566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 830666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 830766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 830866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setExposureCompensation(int expComp) 830966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 831066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char val[16]; 831166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(val, sizeof(val), "%d", expComp); 831266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_EXPOSURE_COMPENSATION, val); 831366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 831466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Don't need to pass step as part of setParameter because 831566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // camera daemon is already aware of it. 831666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_EXPOSURE_COMPENSATION, expComp)) { 831766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 831866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 831966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 832066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 832166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 832266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 832366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 832466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setWhiteBalance 832566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 832666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set white balance mode 832766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 832866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 832966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @wbStr : white balance mode value string 833066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 833166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 833266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 833366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 833466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 833566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setWhiteBalance(const char *wbStr) 833666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 833766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (wbStr != NULL) { 833866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(WHITE_BALANCE_MODES_MAP, 833966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(WHITE_BALANCE_MODES_MAP), wbStr); 834066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 834166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting WhiteBalance value %s", wbStr); 834266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_WHITE_BALANCE, wbStr); 834366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_WHITE_BALANCE, value)) { 834466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 834566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 834666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 834766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 834866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 834966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid WhiteBalance value: %s", (wbStr == NULL) ? "NULL" : wbStr); 835066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 835166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 835266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 835366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 835466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setWBManualCCT 835566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 835666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set setWBManualCCT time 835766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 835866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 835966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @cctStr : string of wb cct, range (2000, 8000) in K. 836066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 836166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 836266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 836366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 836466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 836566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setWBManualCCT(const char *cctStr) 836666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 836766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cctStr != NULL) { 836866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cctVal = atoi(cctStr); 836966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t minCct = m_pCapability->min_wb_cct; /* 2000K */ 837066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t maxCct = m_pCapability->max_wb_cct; /* 8000K */ 837166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 837266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cctVal >= minCct && cctVal <= maxCct) { 837366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", cct value: %d", cctVal); 837466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_WB_MANUAL_CCT, cctStr); 837566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_manual_wb_parm_t manual_wb; 837666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_wb.type = CAM_MANUAL_WB_MODE_CCT; 837766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_wb.cct = cctVal; 837866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_WB_MANUAL, manual_wb)) { 837966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 838066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 838166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 838266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 838366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 838466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 838566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid cct, value: %s", 838666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (cctStr == NULL) ? "NULL" : cctStr); 838766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 838866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 838966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 839066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 839166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateAWBParams 839266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 839366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update CCT parameters key 839466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 839566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 839666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @awb_params : WB parameters 839766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 839866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 839966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 840066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 840166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 840266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateAWBParams(cam_awb_params_t &awb_params) 840366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 840466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //check and update CCT 840566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t prev_cct = getInt(KEY_QC_WB_MANUAL_CCT); 840666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_cct != awb_params.cct_value) { 840766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("update current cct value. old:%d, now:%d", 840866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prev_cct, awb_params.cct_value); 840966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_WB_MANUAL_CCT, awb_params.cct_value); 841066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 841166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 841266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //check and update WB gains 841366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_gains = get(KEY_QC_MANUAL_WB_GAINS); 841466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char gainStr[30]; 841566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(gainStr, sizeof(gainStr), "%f,%f,%f", awb_params.rgb_gains.r_gain, 841666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin awb_params.rgb_gains.g_gain, awb_params.rgb_gains.b_gain); 841766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 841866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_gains == NULL || strcmp(prev_gains, gainStr)) { 841966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_MANUAL_WB_GAINS, gainStr); 842066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("update currernt RGB gains: old %s new %s", prev_gains, gainStr); 842166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 842266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 842366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 842466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 842566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 842666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : parseGains 842766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 842866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: parse WB gains 842966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 843066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 843166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @gainStr : WB result string 843266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @r_gain : WB red gain 843366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @g_gain : WB green gain 843466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @b_gain : WB blue gain 843566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 843666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 843766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 843866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 843966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 844066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::parseGains(const char *gainStr, double &r_gain, 844166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double &g_gain, double &b_gain) 844266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 844366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 844466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *saveptr = NULL; 84451687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan size_t gains_size = strlen(gainStr) + 1; 84461687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan char* gains = (char*) calloc(1, gains_size); 844766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == gains) { 844866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("No memory for gains"); 844966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_MEMORY; 845066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 84511687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan strlcpy(gains, gainStr, gains_size); 845266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *token = strtok_r(gains, ",", &saveptr); 845366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 845466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != token) { 845566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin r_gain = (float) atof(token); 845666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin token = strtok_r(NULL, ",", &saveptr); 845766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 845866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 845966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != token) { 846066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin g_gain = (float) atof(token); 846166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin token = strtok_r(NULL, ",", &saveptr); 846266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 846366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 846466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != token) { 846566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin b_gain = (float) atof(token); 846666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 846766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Malformed string for gains"); 846866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = BAD_VALUE; 846966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 847066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 847166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin free(gains); 847266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 847366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 847466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 847566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 847666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setManualWBGains 847766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 847866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set manual wb gains for r,g,b 847966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 848066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 848166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @cctStr : string of wb gains, range (1.0, 4.0). 848266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 848366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 848466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 848566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 848666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 848766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setManualWBGains(const char *gainStr) 848866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 848966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 849066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (gainStr != NULL) { 849166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double r_gain,g_gain,b_gain; 849266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = parseGains(gainStr, r_gain, g_gain, b_gain); 849366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 849466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 849566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 849666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 849766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double minGain = m_pCapability->min_wb_gain; 849866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double maxGain = m_pCapability->max_wb_gain; 849966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 850066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (r_gain >= minGain && r_gain <= maxGain && 850166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin g_gain >= minGain && g_gain <= maxGain && 850266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin b_gain >= minGain && b_gain <= maxGain) { 850366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", setting rgb gains: r = %lf g = %lf b = %lf", 850466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin r_gain, g_gain, b_gain); 850566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_MANUAL_WB_GAINS, gainStr); 850666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_manual_wb_parm_t manual_wb; 850766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_wb.type = CAM_MANUAL_WB_MODE_GAIN; 850866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_wb.gains.r_gain = r_gain; 850966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_wb.gains.g_gain = g_gain; 851066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin manual_wb.gains.b_gain = b_gain; 851166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_WB_MANUAL, manual_wb)) { 851266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 851366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 851466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 851566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 851666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 851766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 851866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Invalid manual wb gains: %s", 851966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (gainStr == NULL) ? "NULL" : gainStr); 852066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 852166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 852266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 852366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint QCameraParameters::getAutoFlickerMode() 852466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 852566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Enable Advanced Auto Antibanding where we can set 852666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin any of the following option 852766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ie. CAM_ANTIBANDING_MODE_AUTO 852866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_ANTIBANDING_MODE_AUTO_50HZ 852966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_ANTIBANDING_MODE_AUTO_60HZ 853066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Currently setting it to default */ 853166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 853266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 853366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.set.afd", prop, "3"); 853466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return atoi(prop); 853566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 853666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 853766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 853866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAntibanding 853966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 854066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set antibanding value 854166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 854266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 854366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @antiBandingStr : antibanding value string 854466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 854566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 854666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 854766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 854866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 854966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAntibanding(const char *antiBandingStr) 855066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 855166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (antiBandingStr != NULL) { 855266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ANTIBANDING_MODES_MAP, PARAM_MAP_SIZE(ANTIBANDING_MODES_MAP), 855366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin antiBandingStr); 855466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 855566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting AntiBanding value %s", antiBandingStr); 855666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_ANTIBANDING, antiBandingStr); 855766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value == CAM_ANTIBANDING_MODE_AUTO) { 855866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = getAutoFlickerMode(); 855966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 856066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 856166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_ANTIBANDING, (uint32_t)value)) { 856266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 856366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 856466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 856566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 856666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 856766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid AntiBanding value: %s", 856866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (antiBandingStr == NULL) ? "NULL" : antiBandingStr); 856966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 857066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 857166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 857266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 857366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFocusAreas 857466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 857566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set focus areas 857666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 857766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 857866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @focusAreasStr : focus areas value string 857966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 858066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 858166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 858266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 858366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 858466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFocusAreas(const char *focusAreasStr) 858566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 858666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->max_num_focus_areas == 0 || 858766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin focusAreasStr == NULL) { 858866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Parameter string is null"); 858966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 859066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 859166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 859266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_area_t *areas = (cam_area_t *)malloc(sizeof(cam_area_t) * m_pCapability->max_num_focus_areas); 859366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == areas) { 859466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("No memory for areas"); 859566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_MEMORY; 859666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 859766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(areas, 0, sizeof(cam_area_t) * m_pCapability->max_num_focus_areas); 859866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int num_areas_found = 0; 859966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (parseCameraAreaString(focusAreasStr, 860066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_num_focus_areas, 860166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas, 860266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin num_areas_found) != NO_ERROR) { 860366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to parse the string: %s", focusAreasStr); 860466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin free(areas); 860566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 860666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 860766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 860866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (validateCameraAreas(areas, num_areas_found) == false) { 860966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid areas specified : %s", focusAreasStr); 861066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin free(areas); 861166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 861266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 861366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 861466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_FOCUS_AREAS, focusAreasStr); 861566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 861666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //for special area string (0, 0, 0, 0, 0), set the num_areas_found to 0, 861766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //so no action is takenby the lower layer 861866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (num_areas_found == 1 && 861966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.left == 0 && 862066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.top == 0 && 862166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.width == 0 && 862266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.height == 0 && 862366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].weight == 0) { 862466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin num_areas_found = 0; 862566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 862666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 862766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int previewWidth, previewHeight; 862866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPreviewSize(&previewWidth, &previewHeight); 862966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_roi_info_t af_roi_value; 863066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&af_roi_value, 0, sizeof(cam_roi_info_t)); 863166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin af_roi_value.num_roi = (uint8_t)num_areas_found; 863266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (int i = 0; i < num_areas_found; i++) { 863366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("FocusArea[%d] = (%d, %d, %d, %d)", 863466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin i, (areas[i].rect.top), (areas[i].rect.left), 863566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (areas[i].rect.width), (areas[i].rect.height)); 863666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 863766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Transform the coords from (-1000, 1000) 863866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // to (0, previewWidth or previewHeight). 863966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin af_roi_value.roi[i].left = 864066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int32_t)(((double)areas[i].rect.left + 1000.0) * 864166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((double)previewWidth / 2000.0)); 864266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin af_roi_value.roi[i].top = 864366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int32_t)(((double)areas[i].rect.top + 1000.0) * 864466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((double)previewHeight / 2000.0)); 864566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin af_roi_value.roi[i].width = 864666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int32_t)((double)areas[i].rect.width * 864766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (double)previewWidth / 2000.0); 864866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin af_roi_value.roi[i].height = 864966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int32_t)((double)areas[i].rect.height * 865066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (double)previewHeight / 2000.0); 865166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin af_roi_value.weight[i] = areas[i].weight; 865266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 865366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin free(areas); 865466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_AF_ROI, af_roi_value)) { 865566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 865666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 865766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 865866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 865966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 866066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 866166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 866266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setMeteringAreas 866366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 866466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set metering areas value 866566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 866666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 866766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @meteringAreasStr : metering areas value string 866866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 866966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 867066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 867166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 867266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 867366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setMeteringAreas(const char *meteringAreasStr) 867466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 867566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->max_num_metering_areas == 0 || 867666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin meteringAreasStr == NULL) { 867766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Parameter string is null"); 867866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 867966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 868066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 868166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_area_t *areas = (cam_area_t *)malloc(sizeof(cam_area_t) * m_pCapability->max_num_metering_areas); 868266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == areas) { 868366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("No memory for areas"); 868466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_MEMORY; 868566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 868666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(areas, 0, sizeof(cam_area_t) * m_pCapability->max_num_metering_areas); 868766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int num_areas_found = 0; 868866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (parseCameraAreaString(meteringAreasStr, 868966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->max_num_metering_areas, 869066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas, 869166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin num_areas_found) < 0) { 869266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to parse the string: %s", meteringAreasStr); 869366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin free(areas); 869466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 869566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 869666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 869766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (validateCameraAreas(areas, num_areas_found) == false) { 869866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalid areas specified : %s", meteringAreasStr); 869966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin free(areas); 870066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 870166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 870266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 870366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_METERING_AREAS, meteringAreasStr); 870466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 870566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //for special area string (0, 0, 0, 0, 0), set the num_areas_found to 0, 870666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //so no action is takenby the lower layer 870766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (num_areas_found == 1 && 870866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.left == 0 && 870966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.top == 0 && 871066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.width == 0 && 871166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.height == 0 && 871266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].weight == 0) { 871366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin num_areas_found = 0; 871466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 871566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_set_aec_roi_t aec_roi_value; 871666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int previewWidth, previewHeight; 871766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPreviewSize(&previewWidth, &previewHeight); 871866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 871966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&aec_roi_value, 0, sizeof(cam_set_aec_roi_t)); 872066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (num_areas_found > 0) { 872166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin aec_roi_value.aec_roi_enable = CAM_AEC_ROI_ON; 872266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin aec_roi_value.aec_roi_type = CAM_AEC_ROI_BY_COORDINATE; 872366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 872466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (int i = 0; i < num_areas_found; i++) { 872566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("MeteringArea[%d] = (%d, %d, %d, %d)", 872666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin i, (areas[i].rect.top), (areas[i].rect.left), 872766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (areas[i].rect.width), (areas[i].rect.height)); 872866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 872966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Transform the coords from (-1000, 1000) to 873066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // (0, previewWidth or previewHeight). 873166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin aec_roi_value.cam_aec_roi_position.coordinate[i].x = 873266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (uint32_t)((((double)areas[i].rect.left + 873366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (double)areas[i].rect.width / 2.0) + 1000.0) * 873466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (double)previewWidth / 2000.0); 873566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin aec_roi_value.cam_aec_roi_position.coordinate[i].y = 873666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (uint32_t)((((double)areas[i].rect.top + 873766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (double)areas[i].rect.height / 2.0) + 1000.0) * 873866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (double)previewHeight / 2000.0); 873966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 874066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 874166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin aec_roi_value.aec_roi_enable = CAM_AEC_ROI_OFF; 874266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 874366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin free(areas); 874466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_AEC_ROI, aec_roi_value)) { 874566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 874666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 874766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 874866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 874966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 875066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 875166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 875266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 875366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isSupportedSensorHdrSize 875466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 875566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Checks if the requested snapshot size is compatible with currently 875666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * configured HDR mode, currently primary target for validation is 875766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * zzhdr however this function can be extended in the future to vet 875866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * all sensor based HDR configs 875966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 876066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 876166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : CameraParameters object 876266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 876366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : boolean type 876466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * True -- indicates supported config 876566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * False -- indicated unsupported config should fallback to other 876666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * available HDR modes 876766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 876866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isSupportedSensorHdrSize(const QCameraParameters& params) 876966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 877066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 877166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0, sizeof(value)); 877266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.zzhdr.enable", value, "0"); 877366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t zzhdr_enable = (uint8_t)atoi(value); 877466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 877566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (zzhdr_enable) { 877666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 877766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int req_w, req_h; 877866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin params.getPictureSize(&req_w, &req_h); 877966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 878066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Check if requested w x h is in zzhdr supported list 878166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i< m_pCapability->zzhdr_sizes_tbl_cnt; ++i) { 878266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 878366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (req_w == m_pCapability->zzhdr_sizes_tbl[i].width && 878466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin req_h == m_pCapability->zzhdr_sizes_tbl[i].height) { 878566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("%s: Found match for %d x %d", __func__, req_w, req_h); 878666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 878766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 878866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 878966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("%s: %d x %d is not supported for zzhdr mode", __func__, req_w, req_h); 879066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 879166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 879266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 879366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 879466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 879566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 879666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 879766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSceneMode 879866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 879966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set scene mode 880066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 880166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 880266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sceneModeStr : scene mode value string 880366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 880466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 880566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 880666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 880766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 880866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSceneMode(const char *sceneModeStr) 880966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 881066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (sceneModeStr != NULL) { 881166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(SCENE_MODES_MAP, PARAM_MAP_SIZE(SCENE_MODES_MAP), sceneModeStr); 881266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 881366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Setting SceneMode %s", sceneModeStr); 881466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_SCENE_MODE, sceneModeStr); 881566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bSensorHDREnabled) { 881666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Incase of HW HDR mode, we do not update the same as Best shot mode. 881766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("H/W HDR mode enabled. Do not set Best Shot Mode"); 881866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 881966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 882066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bSceneSelection) { 882166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setSelectedScene((cam_scene_mode_type) value); 882266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 882366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_BESTSHOT_MODE, 882466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (uint32_t)value)) { 882566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 882666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 882766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 882866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 882966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 883066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Secene Mode: %s", 883166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (sceneModeStr == NULL) ? "NULL" : sceneModeStr); 883266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 883366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 883466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 883566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 883666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSelectableZoneAf 883766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 883866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set selectable zone AF algorithm 883966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 884066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 884166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @selZoneAFStr : selectable zone AF algorithm value string 884266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 884366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 884466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 884566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 884666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 884766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSelectableZoneAf(const char *selZoneAFStr) 884866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 884966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (selZoneAFStr != NULL) { 885066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(FOCUS_ALGO_MAP, PARAM_MAP_SIZE(FOCUS_ALGO_MAP), selZoneAFStr); 885166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 885266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Setting Selectable Zone AF value %s", selZoneAFStr); 885366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SELECTABLE_ZONE_AF, selZoneAFStr); 885466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_FOCUS_ALGO_TYPE, value)) { 885566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 885666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 885766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 885866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 885966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 886066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid selectable zone af value: %s", 886166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (selZoneAFStr == NULL) ? "NULL" : selZoneAFStr); 886266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 886366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 886466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 886566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 886666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isAEBracketEnabled 886766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 886866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: checks if AE bracketing is enabled 886966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 887066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 887166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 887266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : TRUE/FALSE 887366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 887466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isAEBracketEnabled() 887566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 887666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_QC_AE_BRACKET_HDR); 887766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 887866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(str, AE_BRACKET_OFF) != 0) { 887966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 888066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 888166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 888266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 888366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 888466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 888566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 888666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAEBracket 888766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 888866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set AE bracket value 888966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 889066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 889166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @aecBracketStr : AE bracket value string 889266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 889366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 889466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 889566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 889666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 889766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAEBracket(const char *aecBracketStr) 889866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 889966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (aecBracketStr == NULL) { 890066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("setAEBracket with NULL value"); 890166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 890266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 890366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 890466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_exp_bracketing_t expBracket; 890566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&expBracket, 0, sizeof(expBracket)); 890666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 890766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(BRACKETING_MODES_MAP, PARAM_MAP_SIZE(BRACKETING_MODES_MAP), 890866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin aecBracketStr); 890966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (value) { 891066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_EXP_BRACKETING_ON: 891166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 891266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("EXP_BRACKETING_ON"); 891366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str_val = get(KEY_QC_CAPTURE_BURST_EXPOSURE); 891466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((str_val != NULL) && (strlen(str_val)>0)) { 891566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin expBracket.mode = CAM_EXP_BRACKETING_ON; 891666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAeBracketingEnabled = true; 891766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strlcpy(expBracket.values, str_val, MAX_EXP_BRACKETING_LENGTH); 891866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("setting Exposure Bracketing value of %s", 891966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin expBracket.values); 892066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 892166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else { 892266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Apps not set capture-burst-exposures, error case fall into bracketing off mode */ 892366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("capture-burst-exposures not set, back to HDR OFF mode"); 892466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAeBracketingEnabled = false; 892566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin expBracket.mode = CAM_EXP_BRACKETING_OFF; 892666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 892766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 892866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 892966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 893066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 893166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAeBracketingEnabled = false; 893266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH(", EXP_BRACKETING_OFF"); 893366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin expBracket.mode = CAM_EXP_BRACKETING_OFF; 893466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 893566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 893666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 893766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 893866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Cache client AE bracketing configuration 893966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memcpy(&m_AEBracketingClient, &expBracket, sizeof(cam_exp_bracketing_t)); 894066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 894166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* save the value*/ 894266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_AE_BRACKET_HDR, aecBracketStr); 894366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 894466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 894566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 894666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 894766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : set3ALock 894866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 894966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: enable/disable 3A lock. 895066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 895166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 895266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @lock3A : lock or unlock 895366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 895466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 895566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 895666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 895766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 895866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::set3ALock(bool lock3A) 895966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 896066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 896166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Setting Lock %d", lock3A); 896266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 896366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 896466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 896566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 896666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t focus_mode = CAM_FOCUS_MODE_AUTO; 896766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (lock3A) { 896866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiFocusEnabled() || isUbiRefocus()) { 896966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //For Ubi focus move focus to infinity. 897066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin focus_mode = CAM_FOCUS_MODE_INFINITY; 897166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isOptiZoomEnabled() || isStillMoreEnabled()) { 897266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //For optizoom and stillmore, set focus as fixed. 897366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin focus_mode = CAM_FOCUS_MODE_FIXED; 897466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 897566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 897666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // retrieve previous focus value. 897766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *focus = get(KEY_FOCUS_MODE); 897866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int val = lookupAttr(FOCUS_MODES_MAP, PARAM_MAP_SIZE(FOCUS_MODES_MAP), focus); 897966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (val != NAME_NOT_FOUND) { 898066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin focus_mode = (uint32_t) val; 898166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("focus mode %s", focus); 898266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 898366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 898466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Lock AWB 898566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_AWB_LOCK, (uint32_t)lock3A)) { 898666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 898766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 898866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Lock AEC 898966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_AEC_LOCK, (uint32_t)lock3A)) { 899066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 899166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 899266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_FOCUS_MODE, focus_mode)) { 899366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 899466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 899566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 899666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 899766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 899866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to commit batch"); 899966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 900066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 900166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 900266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 900366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 900466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAndCommitZoom 900566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 900666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set zoom. 900766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 900866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 900966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @zoom_level : zoom level to set. 901066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 901166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 901266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 901366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 901466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 901566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAndCommitZoom(int zoom_level) 901666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 901766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("E"); 901866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 901966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initBatchUpdate(m_pParamBuf) < 0 ) { 902066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 902166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 902266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 902366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 902466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ZOOM, zoom_level)) { 902566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 902666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 902766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 902866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 902966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 903066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 903166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set Flash value"); 903266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 903366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 903466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mZoomLevel = zoom_level; 903566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("X"); 903666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 903766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 903866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 903966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 904066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 904166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isOptiZoomEnabled 904266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 904366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: checks whether optizoom is enabled 904466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 904566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 904666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 904766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true - enabled, false - disabled 904866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 904966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 905066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isOptiZoomEnabled() 905166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 905266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bOptiZoomOn && (0 <= mParmZoomLevel)) { 905366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t zoom_level = (uint32_t) mParmZoomLevel; 905466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_opti_zoom_t *opti_zoom_settings_need = 905566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin &(m_pCapability->opti_zoom_settings_need); 905666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t zoom_threshold = (uint32_t) opti_zoom_settings_need->zoom_threshold; 905766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("current zoom level =%u & zoom_threshold =%u", 905866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin zoom_level, zoom_threshold); 905966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 906066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (zoom_level >= zoom_threshold) { 906166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 906266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 906366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 906466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 906566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 906666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 906766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 906866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 906966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setNoiseReductionMode 907066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 907166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set noise reduction mode 907266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 907366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 907466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @noiseReductionModeStr : noise reduction mode 907566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 907666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 907766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 907866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 907966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 908066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setNoiseReductionMode(const char *noiseReductionModeStr) 908166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 908266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("noiseReductionModeStr = %s", noiseReductionModeStr); 908366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (noiseReductionModeStr != NULL) { 908466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(NOISE_REDUCTION_MODES_MAP, PARAM_MAP_SIZE(NOISE_REDUCTION_MODES_MAP), 908566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin noiseReductionModeStr); 908666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 908766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHighQualityNoiseReductionMode = 908866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin !strncmp(VALUE_HIGH_QUALITY, noiseReductionModeStr, strlen(VALUE_HIGH_QUALITY)); 908966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_NOISE_REDUCTION_MODE, noiseReductionModeStr); 909066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 909166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 909266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 909366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid noise reduction mode value: %s", 909466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (noiseReductionModeStr == NULL) ? "NULL" : noiseReductionModeStr); 909566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 909666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 909766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 909866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 909966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : commitAFBracket 910066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 910166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: commit AF Bracket. 910266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 910366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 910466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @AFBracket : AF bracketing configuration 910566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 910666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 910766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 910866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 910966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 911066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::commitAFBracket(cam_af_bracketing_t afBracket) 911166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 911266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 911366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 911466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 911566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 911666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 911766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 911866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 911966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_FOCUS_BRACKETING, afBracket)) { 912066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 912166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 912266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 912366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 912466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 912566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 912666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to commit batch"); 912766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 912866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 912966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 913066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 913166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 913266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 913366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 913466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAFBracket 913566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 913666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set AF bracket value 913766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 913866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 913966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @afBracketStr : AF bracket value string 914066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 914166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 914266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 914366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 914466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 914566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAFBracket(const char *afBracketStr) 914666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 914766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("afBracketStr =%s",afBracketStr); 914866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 914966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(afBracketStr != NULL) { 915066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(AF_BRACKETING_MODES_MAP, PARAM_MAP_SIZE(AF_BRACKETING_MODES_MAP), 915166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin afBracketStr); 915266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 915366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bAFBracketingOn = (value != 0); 915466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_AF_BRACKET, afBracketStr); 915566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 915666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 915766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 915866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 915966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 916066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid af bracket value: %s", 916166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (afBracketStr == NULL) ? "NULL" : afBracketStr); 916266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 916366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 916466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 916566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 916666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setReFocus 916766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 916866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set refocus value 916966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 917066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 917166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @afBracketStr : refocus value string 917266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 917366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 917466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 917566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 917666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 917766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setReFocus(const char *reFocusStr) 917866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 917966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("reFocusStr =%s",reFocusStr); 918066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 918166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (reFocusStr != NULL) { 918266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(RE_FOCUS_MODES_MAP, PARAM_MAP_SIZE(RE_FOCUS_MODES_MAP), 918366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin reFocusStr); 918466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 918566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bReFocusOn = (value != 0); 918666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_RE_FOCUS, reFocusStr); 918766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 918866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 918966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 919066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 919166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 919266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 919366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 919466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 919566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setChromaFlash 919666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 919766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set chroma flash value 919866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 919966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 920066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @aecBracketStr : chroma flash value string 920166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 920266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 920366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 920466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 920566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 920666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setChromaFlash(const char *chromaFlashStr) 920766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 920866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("chromaFlashStr =%s",chromaFlashStr); 920966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(chromaFlashStr != NULL) { 921066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(CHROMA_FLASH_MODES_MAP, PARAM_MAP_SIZE(CHROMA_FLASH_MODES_MAP), 921166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin chromaFlashStr); 921266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value != NAME_NOT_FOUND) { 921366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bChromaFlashOn = (value != 0); 921466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_CHROMA_FLASH, chromaFlashStr); 921566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 921666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 921766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 921866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 921966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 922066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid chroma flash value: %s", 922166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (chromaFlashStr == NULL) ? "NULL" : chromaFlashStr); 922266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 922366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 922466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 922566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 922666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setOptiZoom 922766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 922866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set opti zoom value 922966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 923066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 923166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @optiZoomStr : opti zoom value string 923266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 923366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 923466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 923566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 923666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 923766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setOptiZoom(const char *optiZoomStr) 923866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 923966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("optiZoomStr =%s",optiZoomStr); 924066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(optiZoomStr != NULL) { 924166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(OPTI_ZOOM_MODES_MAP, PARAM_MAP_SIZE(OPTI_ZOOM_MODES_MAP), 924266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin optiZoomStr); 924366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value != NAME_NOT_FOUND) { 924466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bOptiZoomOn = (value != 0); 924566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_OPTI_ZOOM, optiZoomStr); 924666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 924766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 924866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 924966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 925066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid opti zoom value: %s", 925166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (optiZoomStr == NULL) ? "NULL" : optiZoomStr); 925266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 925366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 925466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 925566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 925666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setTruePortrait 925766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 925866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set true portrait value 925966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 926066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 926166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @optiZoomStr : true portrait value string 926266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 926366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 926466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 926566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 926666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 926766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setTruePortrait(const char *truePortraitStr) 926866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 926966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("truePortraitStr =%s", truePortraitStr); 927066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (truePortraitStr != NULL) { 927166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(TRUE_PORTRAIT_MODES_MAP, 927266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(TRUE_PORTRAIT_MODES_MAP), 927366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin truePortraitStr); 927466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 927566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bTruePortraitOn = (value != 0); 927666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_TRUE_PORTRAIT, truePortraitStr); 92771687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan setFaceDetection(m_bFaceDetectionOn, false); 927866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 927966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 928066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 928166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Invalid true portrait value: %s", 928266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (truePortraitStr == NULL) ? "NULL" : truePortraitStr); 928366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 928466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 928566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 928666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 928766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setHDRMode 928866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 928966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set hdr mode value 929066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 929166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 929266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @hdrModeStr : hdr mode value string 929366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 929466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 929566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 929666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 929766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 929866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setHDRMode(const char *hdrModeStr) 929966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 930066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("hdrModeStr =%s", hdrModeStr); 930166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (hdrModeStr != NULL) { 930266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(HDR_MODES_MAP, PARAM_MAP_SIZE(HDR_MODES_MAP), hdrModeStr); 930366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 930466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_SCENE_MODE); 930566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 930666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDRModeSensor = !strncmp(hdrModeStr, HDR_MODE_SENSOR, strlen(HDR_MODE_SENSOR)); 930766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 930866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_HDR_MODE, hdrModeStr); 930966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 931066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // If hdr is already selected, need to deselect it in local cache 931166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // So the new hdr mode will be applied 931266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str && !strncmp(str, SCENE_MODE_HDR, strlen(SCENE_MODE_HDR))) { 931366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_SCENE_MODE, SCENE_MODE_AUTO); 931466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 931566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 931666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 931766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 931866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 931966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 932066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Invalid hdr mode value: %s", 932166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (hdrModeStr == NULL) ? "NULL" : hdrModeStr); 932266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 932366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 932466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 932566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 932666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSeeMore 932766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 932866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set see more value 932966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 933066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 933166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @seeMoreStr : see more value string 933266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 933366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 933466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 933566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 933666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 933766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSeeMore(const char *seeMoreStr) 933866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 933966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 934066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 934166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("seeMoreStr =%s", seeMoreStr); 934266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (seeMoreStr != NULL) { 934366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(ON_OFF_MODES_MAP, 934466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ON_OFF_MODES_MAP), 934566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin seeMoreStr); 934666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 934766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSeeMoreOn = (value != 0); 934866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 934966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // If SeeMore is enabled, enable StillMore for live snapshot 935066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // and disable tone map 935166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bSeeMoreOn) { 935266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bStillMoreOn = TRUE; 935366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_bLtmForSeeMoreEnabled) { 935466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setToneMapMode(false, false); 935566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 935666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 935766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Failed to disable tone map during SeeMore"); 935866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 935966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 936066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bStillMoreOn = FALSE; 936166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_bLtmForSeeMoreEnabled) { 936266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setToneMapMode(true, false); 936366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 936466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 936566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Failed to enable tone map during SeeMore"); 936666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 936766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 936866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SEE_MORE, seeMoreStr); 936966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 937066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 937166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 937266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid see more value: %s", 937366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (seeMoreStr == NULL) ? "NULL" : seeMoreStr); 937466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 937566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 937666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 937766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 937866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setStillMore 937966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 938066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set still more value 938166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 938266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 938366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @seeMoreStr : still more value string 938466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 938566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 938666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 938766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 938866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 938966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setStillMore(const char *stillMoreStr) 939066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 939166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("stillMoreStr =%s", stillMoreStr); 939266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (stillMoreStr != NULL) { 939366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(STILL_MORE_MODES_MAP, PARAM_MAP_SIZE(STILL_MORE_MODES_MAP), 939466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stillMoreStr); 939566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 939666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bStillMoreOn = (value != 0); 939766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_STILL_MORE, stillMoreStr); 939866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 939966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 940066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 940166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 940266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid still more value: %s", 940366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (stillMoreStr == NULL) ? "NULL" : stillMoreStr); 940466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 940566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 940666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 940766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 940866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setHDRNeed1x 940966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 941066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set hdr need 1x value 941166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 941266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 941366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @hdrModeStr : hdr need 1x value string 941466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 941566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 941666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 941766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 941866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 941966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setHDRNeed1x(const char *hdrNeed1xStr) 942066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 942166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("hdrNeed1xStr =%s", hdrNeed1xStr); 942266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (hdrNeed1xStr != NULL) { 942366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(TRUE_FALSE_MODES_MAP, PARAM_MAP_SIZE(TRUE_FALSE_MODES_MAP), 942466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin hdrNeed1xStr); 942566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 942666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_HDR_NEED_1X, hdrNeed1xStr); 942766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xFrameEnabled = !strncmp(hdrNeed1xStr, VALUE_TRUE, strlen(VALUE_TRUE)); 942866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 942966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 943066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_HDR_NEED_1X, 943166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHDR1xFrameEnabled)) { 943266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 943366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 943466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 943566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 943666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 943766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 943866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Invalid hdr need 1x value: %s", 943966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (hdrNeed1xStr == NULL) ? "NULL" : hdrNeed1xStr); 944066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 944166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 944266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 944366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 944466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setAEBracketing 944566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 944666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: enables AE bracketing 944766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 944866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 944966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 945066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 945166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 945266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 945366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 945466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setAEBracketing() 945566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 945666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 945766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 945866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 945966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 946066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 946166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 946266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_HDR, m_AEBracketingClient)) { 946366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update AE bracketing"); 946466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 946566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 946666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 946766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 946866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 946966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to configure AE bracketing"); 947066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 947166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 947266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 947366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 947466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 947566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 947666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 947766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setHDRAEBracket 947866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 947966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: enables AE bracketing for HDR 948066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 948166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 948266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @hdrBracket : HDR bracketing configuration 948366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 948466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 948566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 948666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 948766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 948866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setHDRAEBracket(cam_exp_bracketing_t hdrBracket) 948966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 949066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 949166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 949266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 949366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 949466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 949566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 949666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_HDR, hdrBracket)) { 949766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 949866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 949966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 950066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 950166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 950266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 950366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to configure HDR bracketing"); 950466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 950566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 950666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 950766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 950866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 950966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 951066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 951166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setCacheVideoBuffers 951266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 951366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set cache video buffers value 951466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 951566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 951666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @cacheVideoStr : cache video buffer value string 951766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 951866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 951966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 952066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 952166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 952266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setCacheVideoBuffers(const char *cacheVideoBufStr) 952366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 952466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cacheVideoBufStr != NULL) { 952566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t cacheVideoBuf = lookupAttr(ENABLE_DISABLE_MODES_MAP, 952666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), cacheVideoBufStr); 952766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 952866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 952966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.mem.usecache", prop, ""); 953066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(prop) > 0) { 953166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cacheVideoBuf = atoi(prop); 953266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 953366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cacheVideoBuf != NAME_NOT_FOUND) { 953466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *cacheStr = (strlen(prop)>0) ? prop : cacheVideoBufStr; 953566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Setting video buffer %s", 953666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (cacheVideoBuf == 0) ? "UnCached" : "Cached"); 953766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return updateParamEntry(KEY_QC_CACHE_VIDEO_BUFFERS, cacheStr); 953866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 953966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Cache video buffers not set correctly"); 954066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 954166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 954266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 954366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 954466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 954566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 954666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setCacheVideoBuffers 954766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 954866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Set buffers as Cache/Uncache Memory 954966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 955066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 955166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 955266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 955366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 955466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 955566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 955666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 955766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setCacheVideoBuffers(const QCameraParameters& params) 955866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 955966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = params.get(KEY_QC_CACHE_VIDEO_BUFFERS);; 956066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *prev_str = get(KEY_QC_CACHE_VIDEO_BUFFERS); 956166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 956266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 956366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prev_str == NULL || 956466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strcmp(str, prev_str) != 0) { 956566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setCacheVideoBuffers(str); 956666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 956766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 956866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 956966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 957066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 957166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 957266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : restoreAEBracket 957366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 957466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: restores client AE bracketing configuration after HDR is done 957566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 957666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 957766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 957866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 957966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 958066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 958166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 958266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::stopAEBracket() 958366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 958466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_exp_bracketing_t bracketing; 958566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 958666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bracketing.mode = CAM_EXP_BRACKETING_OFF; 958766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 958866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return setHDRAEBracket(bracketing); 958966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 959066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 959166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 959266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateFlash 959366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 959466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: restores client flash configuration or disables flash 959566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 959666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 959766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @commitSettings : flag indicating whether settings need to be commited 959866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 959966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 960066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 960166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 960266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 960366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateFlash(bool commitSettings) 960466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 960566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 960666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value; 960766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 960866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (commitSettings) { 960966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 961066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 961166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 961266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 961366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 961466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 961566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDREnabled() || m_bAeBracketingEnabled || m_bAFBracketingOn || 961666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bOptiZoomOn || m_bReFocusOn || m_LowLightLevel) { 961766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = CAM_FLASH_MODE_OFF; 961866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (m_bChromaFlashOn) { 961966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = CAM_FLASH_MODE_ON; 962066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 962166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = mFlashValue; 962266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 962366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 962466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != mFlashDaemonValue) { 962566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Setting Flash value %d", value); 962666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_LED_MODE, value)) { 962766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set led mode"); 962866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 962966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 963066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mFlashDaemonValue = value; 963166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 963266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = NO_ERROR; 963366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 963466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 963566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (commitSettings) { 963666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 963766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 963866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to configure HDR bracketing"); 963966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 964066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 964166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 964266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 964366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 964466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 964566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 964666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 964766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRedeyeReduction 964866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 964966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set red eye reduction value 965066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 965166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 965266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @redeyeStr : red eye reduction value string 965366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 965466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 965566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 965666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 965766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 965866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRedeyeReduction(const char *redeyeStr) 965966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 966066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (redeyeStr != NULL) { 966166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 966266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), redeyeStr); 966366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 966466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Setting RedEye Reduce value %s", redeyeStr); 966566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_REDEYE_REDUCTION, redeyeStr); 966666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 966766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_REDEYE_REDUCTION, value)) { 966866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 966966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 967066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 967166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 967266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 967366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid RedEye Reduce value: %s", 967466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (redeyeStr == NULL) ? "NULL" : redeyeStr); 967566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 967666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 967766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 967866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 967966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getDenoiseProcessPlate 968066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 968166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: query denoise process plate 968266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 968366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : None 968466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 968566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : NR process plate vlaue 968666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 968766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjincam_denoise_process_type_t 968866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::getDenoiseProcessPlate(cam_intf_parm_type_t type) 968966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 969066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 969166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 969266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_denoise_process_type_t processPlate = CAM_WAVELET_DENOISE_CBCR_ONLY; 969366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (CAM_INTF_PARM_WAVELET_DENOISE == type) { 969466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.denoise.process.plates", prop, ""); 969566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (CAM_INTF_PARM_TEMPORAL_DENOISE == type) { 969666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.tnr.process.plates", prop, ""); 969766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 969866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("Type not supported"); 969966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prop[0] = '\0'; 970066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 970166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(prop) > 0) { 970266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch(atoi(prop)) { 970366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case 0: 970466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin processPlate = CAM_WAVELET_DENOISE_YCBCR_PLANE; 970566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 970666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case 1: 970766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin processPlate = CAM_WAVELET_DENOISE_CBCR_ONLY; 970866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 970966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case 2: 971066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin processPlate = CAM_WAVELET_DENOISE_STREAMLINE_YCBCR; 971166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 971266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case 3: 971366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin processPlate = CAM_WAVELET_DENOISE_STREAMLINED_CBCR; 971466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 971566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 971666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin processPlate = CAM_WAVELET_DENOISE_CBCR_ONLY; 971766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 971866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 971966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 972066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return processPlate; 972166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 972266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 972366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 972466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setWaveletDenoise 972566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 972666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set wavelet denoise value 972766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 972866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 972966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @wnrStr : wavelet denoise value string 973066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 973166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 973266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 973366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 973466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 973566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setWaveletDenoise(const char *wnrStr) 973666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 973766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_DENOISE2D) == 0){ 973866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("WNR is not supported"); 973966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 974066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 974166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 974266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (wnrStr != NULL) { 974366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(DENOISE_ON_OFF_MODES_MAP, 974466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(DENOISE_ON_OFF_MODES_MAP), wnrStr); 974566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 974666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_DENOISE, wnrStr); 974766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 974866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_denoise_param_t temp; 974966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&temp, 0, sizeof(temp)); 975066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin temp.denoise_enable = (uint8_t)value; 975166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bWNROn = (value != 0); 975266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bWNROn) { 975366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin temp.process_plates = getDenoiseProcessPlate(CAM_INTF_PARM_WAVELET_DENOISE); 975466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 975566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Denoise enable=%d, plates=%d", 975666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin temp.denoise_enable, temp.process_plates); 975766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_WAVELET_DENOISE, temp)) { 975866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 975966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 976066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 976166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 976266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 976366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Denoise value: %s", (wnrStr == NULL) ? "NULL" : wnrStr); 976466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 976566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 976666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 976766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 976866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRdiMode 976966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 977066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set rdi mode value 977166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 977266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 977366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @str : rdi mode value string 977466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 977566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 977666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 977766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 977866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 977966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRdiMode(const char *str) 978066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 978166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("RDI_DEBUG rdi mode value: %s", str); 978266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 978366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 978466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 978566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), str); 978666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 978766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_RDI_MODE, str); 978866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRdiMode = (value == 0) ? false : true; 978966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_RDI_MODE, value)) { 979066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 979166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 979266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 979366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 979466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 979566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid rdi mode value: %s", (str == NULL) ? "NULL" : str); 979666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 979766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 979866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 979966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 980066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 980166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSecureMode 980266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 980366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set secure mode value 980466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 980566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 980666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @str : secure mode value string 980766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 980866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 980966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 981066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 981166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 981266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setSecureMode(const char *str) 981366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 981466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Secure mode value: %s", str); 981566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 981666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (str != NULL) { 981766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = lookupAttr(ENABLE_DISABLE_MODES_MAP, 981866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(ENABLE_DISABLE_MODES_MAP), str); 981966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (value != NAME_NOT_FOUND) { 982066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateParamEntry(KEY_QC_SECURE_MODE, str); 982166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSecureMode = (value == 0)? false : true; 982266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 982366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 982466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 982566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid Secure mode value: %s", 982666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (str == NULL) ? "NULL" : str); 982766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 982866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 982966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 983066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 983166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getStreamRotation 983266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 983366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get stream rotation by its type 983466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 983566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 983666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @streamType : stream type 983766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @featureConfig : stream feature config structure 983866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @dim : stream dimension 983966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 984066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 984166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 984266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 984366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 984466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getStreamRotation(cam_stream_type_t streamType, 984566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_pp_feature_config_t &featureConfig, 984666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t &dim) 984766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 984866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ret = NO_ERROR; 984966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_QC_VIDEO_ROTATION); 985066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int rotationParam = lookupAttr(VIDEO_ROTATION_MODES_MAP, 985166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PARAM_MAP_SIZE(VIDEO_ROTATION_MODES_MAP), str); 985266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin featureConfig.rotation = ROTATE_0; 985366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int swapDim = 0; 985466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (streamType) { 985566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_VIDEO: 985666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch(rotationParam) { 985766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case 90: 985866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin featureConfig.feature_mask |= CAM_QCOM_FEATURE_ROTATION; 985966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin featureConfig.rotation = ROTATE_90; 986066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin swapDim = 1; 986166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 986266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case 180: 986366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin featureConfig.feature_mask |= CAM_QCOM_FEATURE_ROTATION; 986466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin featureConfig.rotation = ROTATE_180; 986566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 986666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case 270: 986766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin featureConfig.feature_mask |= CAM_QCOM_FEATURE_ROTATION; 986866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin featureConfig.rotation = ROTATE_270; 986966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin swapDim = 1; 987066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 987166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 987266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin featureConfig.rotation = ROTATE_0; 987366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 987466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 987566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_PREVIEW: 987666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_POSTVIEW: 987766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_SNAPSHOT: 987866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_RAW: 987966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_METADATA: 988066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_OFFLINE_PROC: 988166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_DEFAULT: 988266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 988366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 988466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 988566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 988666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (swapDim > 0) { 988766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int w = 0; 988866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin w = dim.width; 988966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.width = dim.height; 989066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.height = w; 989166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 989266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return ret; 989366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 989466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 989566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 989666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getStreamFormat 989766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 989866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get stream format by its type 989966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 990066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 990166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @streamType : [input] stream type 990266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @format : [output] stream format 990366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 990466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 990566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 990666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 990766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 990866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getStreamFormat(cam_stream_type_t streamType, 990966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t &format) 991066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 991166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ret = NO_ERROR; 991266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_MAX; 991366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (streamType) { 991466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_PREVIEW: 991566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!isUBWCEnabled()) { 991666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#if VENUS_PRESENT 991766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t preview; 991866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t video; 991966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_VIDEO , video); 992066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_PREVIEW, preview); 992166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getRecordingHintValue() == true && 992266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin video.width == preview.width && 992366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin video.height == preview.height && 992466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPreviewFormat == CAM_FORMAT_YUV_420_NV21) { 992566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_YUV_420_NV21_VENUS; 992666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else 992766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 992866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = mPreviewFormat; 992966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 993066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = mPreviewFormat; 993166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 993266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 993366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_POSTVIEW: 993466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_CALLBACK: 993566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = mAppPreviewFormat; 993666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 993766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_ANALYSIS: 993866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->hw_analysis_supported && 993966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->analysis_recommended_format == CAM_FORMAT_Y_ONLY) { 994066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = m_pCapability->analysis_recommended_format; 994166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 994266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_pCapability->hw_analysis_supported) { 994366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("Invalid analysis_recommended_format %d\n", 994466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->analysis_recommended_format); 994566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 994666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = mAppPreviewFormat; 994766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 994866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 994966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_SNAPSHOT: 995066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( mPictureFormat == CAM_FORMAT_YUV_422_NV16 ) { 995166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_YUV_422_NV16; 995266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 995366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 995466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int snapshotFormat; 995566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 995666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.snap.format", prop, "0"); 995766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snapshotFormat = atoi(prop); 995866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(snapshotFormat == 1) { 995966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_YUV_422_NV61; 996066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 996166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_YUV_420_NV21; 996266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 996366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 996466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 996566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_VIDEO: 996666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUBWCEnabled()) { 996766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 996866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int pFormat; 996966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 997066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.video.ubwc", prop, "1"); 997166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pFormat = atoi(prop); 997266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (pFormat == 1) { 997366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_YUV_420_NV12_UBWC; 997466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 997566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_YUV_420_NV21_VENUS; 997666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 997766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 997866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#if VENUS_PRESENT 997966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_YUV_420_NV21_VENUS; 998066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#else 998166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = CAM_FORMAT_YUV_420_NV21; 998266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 998366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 998466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 998566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_RAW: 998666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((isRdiMode()) || (getofflineRAW())) { 998766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = m_pCapability->rdi_mode_stream_fmt; 998866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (mPictureFormat >= CAM_FORMAT_YUV_RAW_8BIT_YUYV) { 998966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = (cam_format_t)mPictureFormat; 999066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 999166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char raw_format[PROPERTY_VALUE_MAX]; 999266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int rawFormat; 999366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(raw_format, 0, sizeof(raw_format)); 999466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Default value is CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GBRG*/ 999566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.raw.format", raw_format, "17"); 999666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rawFormat = atoi(raw_format); 999766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format = (cam_format_t)rawFormat; 999866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Raw stream format %d bundled with snapshot", 999966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin format); 1000066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1000166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1000266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_METADATA: 1000366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_OFFLINE_PROC: 1000466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_DEFAULT: 1000566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 1000666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1000766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1000866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1000966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Stream type = %d Stream Format = %d", streamType, format); 1001066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return ret; 1001166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1001266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1001366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1001466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getFlipMode 1001566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1001666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get flip mode 1001766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1001866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1001966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @cam_intf_parm_type_t : [input] stream type 1002066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1002166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int type of flip mode 1002266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 0 - no filp 1002366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1 - FLIP_H 1002466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 2 - FLIP_V 1002566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 3 - FLIP_H | FLIP_V 1002666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1002766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint QCameraParameters::getFlipMode(cam_stream_type_t type) 1002866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1002966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = NULL; 1003066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int flipMode = 0; // no flip 1003166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1003266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch(type){ 1003366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_PREVIEW: 1003466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!isRdiMode()) { 1003566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = get(KEY_QC_PREVIEW_FLIP); 1003666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1003766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1003866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_VIDEO: 1003966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = get(KEY_QC_VIDEO_FLIP); 1004066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1004166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_SNAPSHOT: 1004266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_POSTVIEW: 1004366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = get(KEY_QC_SNAPSHOT_PICTURE_FLIP); 1004466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1004566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 1004666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("No flip mode for stream type %d", type); 1004766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1004866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1004966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1005066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL){ 1005166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Need give corresponding filp value based on flip mode strings 1005266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(FLIP_MODES_MAP, PARAM_MAP_SIZE(FLIP_MODES_MAP), str); 1005366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value != NAME_NOT_FOUND) 1005466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin flipMode = value; 1005566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1005666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1005766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("the filp mode of stream type %d is %d .", type, flipMode); 1005866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return flipMode; 1005966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1006066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1006166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1006266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isSnapshotFDNeeded 1006366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1006466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: check whether Face Detection Metadata is needed 1006566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1006666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1006766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1006866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : bool type of status 1006966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 0 - need 1007066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1 - not need 1007166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1007266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isSnapshotFDNeeded() 1007366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1007466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return getInt(KEY_QC_SNAPSHOT_FD_DATA); 1007566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1007666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1007766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1007866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getStreamDimension 1007966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1008066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get stream dimension by its type 1008166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1008266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1008366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @streamType : [input] stream type 1008466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @dim : [output] stream dimension 1008566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1008666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1008766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1008866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1008966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1009066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getStreamDimension(cam_stream_type_t streamType, 1009166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t &dim) 1009266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1009366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ret = NO_ERROR; 1009466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&dim, 0, sizeof(cam_dimension_t)); 1009566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1009666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (streamType) { 1009766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_PREVIEW: 1009866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_CALLBACK: 1009966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPreviewSize(&dim.width, &dim.height); 1010066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1010166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_POSTVIEW: 1010266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPreviewSize(&dim.width, &dim.height); 1010366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1010466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_SNAPSHOT: 1010566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isPostProcScaling()) { 1010666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getMaxPicSize(dim); 1010766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (getRecordingHintValue()) { 1010866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // live snapshot 1010966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getLiveSnapshotSize(dim); 1011066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1011166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPictureSize(&dim.width, &dim.height); 1011266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1011366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1011466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_VIDEO: 1011566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getVideoSize(&dim.width, &dim.height); 1011666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1011766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_RAW: 1011866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //dim = m_pCapability->raw_dim; 1011966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getRawSize(dim); 1012066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1012166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_METADATA: 1012266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.width = (int32_t)sizeof(metadata_buffer_t); 1012366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.height = 1; 1012466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1012566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_OFFLINE_PROC: 1012666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isPostProcScaling()) { 1012766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getRecordingHintValue()) { 1012866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // live snapshot 1012966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getLiveSnapshotSize(dim); 1013066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1013166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPictureSize(&dim.width, &dim.height); 1013266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1013366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1013466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1013566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_ANALYSIS: 1013666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t prv_dim, max_dim; 1013766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1013866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Analysis stream need aspect ratio as preview stream */ 1013966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPreviewSize(&prv_dim.width, &prv_dim.height); 1014066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1014166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_dim.width = m_pCapability->analysis_max_res.width; 1014266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_dim.height = m_pCapability->analysis_max_res.height; 1014366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10144d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if ((getRecordingHintValue() == true) 10145d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch && fdModeInVideo() 10146d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch && m_pCapability->hw_analysis_supported) { 10147d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch max_dim.width /= 2; 10148d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch max_dim.height /= 2; 10149d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 10150d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 1015166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prv_dim.width > max_dim.width || prv_dim.height > max_dim.height) { 1015266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double max_ratio, requested_ratio; 1015366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1015466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_ratio = (double)max_dim.width / (double)max_dim.height; 1015566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin requested_ratio = (double)prv_dim.width / (double)prv_dim.height; 1015666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1015766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (max_ratio < requested_ratio) { 1015866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.width = max_dim.width; 1015966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.height = (int32_t)((double)dim.width / requested_ratio); 1016066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1016166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.height = max_dim.height; 1016266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.width = (int32_t)((double)max_dim.height * requested_ratio); 1016366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1016466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.width &= ~0x1; 1016566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.height &= ~0x1; 1016666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1016766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.width = prv_dim.width; 1016866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dim.height = prv_dim.height; 1016966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1017066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1017166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_STREAM_TYPE_DEFAULT: 1017266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 1017366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("no dimension for unsupported stream type %d", 1017466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin streamType); 1017566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ret = BAD_VALUE; 1017666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1017766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1017866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1017966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Stream type = %d Stream Dimension = %d X %d", 1018066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin streamType, dim.width, dim.height); 1018166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return ret; 1018266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1018366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1018466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1018566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getParameters 1018666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1018766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Return a C string containing the parameters 1018866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1018966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1019066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1019166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : a string containing parameter pairs 1019266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1019366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinchar* QCameraParameters::getParameters() 1019466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1019566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char* strParams = NULL; 1019666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 1019766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1019866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int cur_width, cur_height; 1019966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Need take care Scale picture size 1020066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_reprocScaleParam.isScaleEnabled() && 1020166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_reprocScaleParam.isUnderScaling()){ 1020266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int scale_width, scale_height; 1020366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1020466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_reprocScaleParam.getPicSizeFromAPK(scale_width,scale_height); 1020566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getPictureSize(&cur_width, &cur_height); 1020666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1020766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 pic_size; 1020866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char buffer[32]; 1020966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), "%dx%d", scale_width, scale_height); 1021066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pic_size.append(buffer); 1021166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(CameraParameters::KEY_PICTURE_SIZE, pic_size); 1021266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1021366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1021466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str = flatten(); 1021566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strParams = (char *)malloc(sizeof(char)*(str.length()+1)); 1021666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(strParams != NULL){ 1021766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(strParams, 0, sizeof(char)*(str.length()+1)); 1021866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strlcpy(strParams, str.string(), str.length()+1); 1021966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strParams[str.length()] = 0; 1022066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1022166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1022266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_reprocScaleParam.isScaleEnabled() && 1022366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_reprocScaleParam.isUnderScaling()){ 1022466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //need set back picture size 1022566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 pic_size; 1022666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char buffer[32]; 1022766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), "%dx%d", cur_width, cur_height); 1022866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pic_size.append(buffer); 1022966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(CameraParameters::KEY_PICTURE_SIZE, pic_size); 1023066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1023166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return strParams; 1023266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1023366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1023466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifdef TARGET_TS_MAKEUP 1023566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1023666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getTsMakeupInfo 1023766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1023866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get TsMakeup info 1023966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1024066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1024166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @whiteLevel : [output] white level 1024266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @cleanLevel : [output] clean level 1024366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1024466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : Whether makeup is enabled or not 1024566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1024666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::getTsMakeupInfo(int &whiteLevel, int &cleanLevel) const 1024766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1024866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char* pch_makeup_enable = get(QCameraParameters::KEY_TS_MAKEUP); 1024966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (pch_makeup_enable == NULL) { 1025066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("pch_makeup_enable = null"); 1025166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1025266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1025366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool enableMakeup = 1025466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (strcmp(pch_makeup_enable,"On") == 0); 1025566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (enableMakeup) { 1025666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin whiteLevel = getInt(QCameraParameters::KEY_TS_MAKEUP_WHITEN); 1025766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cleanLevel = getInt(QCameraParameters::KEY_TS_MAKEUP_CLEAN); 1025866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1025966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return enableMakeup; 1026066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1026166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 1026266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1026366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1026466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getPreviewHalPixelFormat 1026566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1026666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get preview HAL pixel format 1026766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1026866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1026966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1027066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : HAL pixel format 1027166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1027266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint QCameraParameters::getPreviewHalPixelFormat() 1027366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1027466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t halPixelFormat; 1027566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t fmt; 1027666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_PREVIEW,fmt); 1027766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1027866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (fmt) { 1027966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_420_NV12: 1028066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halPixelFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP; 1028166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1028266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_420_NV21: 1028366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 1028466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1028566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_420_NV21_ADRENO: 1028666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO; 1028766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1028866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_420_YV12: 1028966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halPixelFormat = HAL_PIXEL_FORMAT_YV12; 1029066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1029166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_420_NV12_VENUS: 1029266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halPixelFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS; 1029366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1029466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_420_NV21_VENUS: 1029566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS; 1029666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1029766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_420_NV12_UBWC: 1029866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halPixelFormat = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC; 1029966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1030066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_422_NV16: 1030166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_FORMAT_YUV_422_NV61: 1030266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 1030366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halPixelFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 1030466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1030566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1030666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("format %d\n", halPixelFormat); 1030766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return halPixelFormat; 1030866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1030966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1031066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1031166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getthumbnailSize 1031266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1031366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get thumbnail size 1031466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1031566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1031666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @width, height : [output] thumbnail width and height 1031766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1031866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 1031966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1032066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::getThumbnailSize(int *width, int *height) const 1032166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1032266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *width = getInt(KEY_JPEG_THUMBNAIL_WIDTH); 1032366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *height = getInt(KEY_JPEG_THUMBNAIL_HEIGHT); 1032466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1032566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1032666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1032766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getZSLBurstInterval 1032866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1032966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get ZSL burst interval setting 1033066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1033166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1033266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1033366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : ZSL burst interval value 1033466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1033566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getZSLBurstInterval() 1033666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1033766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int interval = getInt(KEY_QC_ZSL_BURST_INTERVAL); 1033866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (interval < 0) { 1033966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin interval = 1; 1034066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1034166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint8_t)interval; 1034266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1034366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1034466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1034566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getZSLQueueDepth 1034666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1034766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get ZSL queue depth 1034866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1034966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1035066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1035166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : ZSL queue depth value 1035266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1035366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getZSLQueueDepth() 1035466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1035566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int qdepth = getInt(KEY_QC_ZSL_QUEUE_DEPTH); 1035666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (qdepth < 0) { 1035766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin qdepth = 2; 1035866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1035966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isLowMemoryDevice()) { 1036066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin qdepth = 1; 1036166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1036266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint8_t)qdepth; 1036366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1036466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1036566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1036666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getZSLBackLookCount 1036766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1036866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get ZSL backlook count setting 1036966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1037066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1037166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1037266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : ZSL backlook count value 1037366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1037466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getZSLBackLookCount() 1037566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1037666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int look_back = getInt(KEY_QC_ZSL_BURST_LOOKBACK); 1037766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (look_back < 0) { 1037866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin look_back = 2; 1037966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1038066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isLowMemoryDevice()) { 1038166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin look_back = 1; 1038266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1038366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint8_t)look_back; 1038466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1038566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1038666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isVideoBuffersCached 1038766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1038866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Query buffers are cached /un cached 1038966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1039066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : None 1039166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1039266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : buffers are cached /un cached 1039366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1039466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isVideoBuffersCached() 1039566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1039666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *cached_mem = get(KEY_QC_CACHE_VIDEO_BUFFERS); 1039766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (cached_mem != NULL) { 1039866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strcmp(cached_mem, VALUE_DISABLE) != 0) { 1039966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 1040066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1040166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1040266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1040366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1040466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1040566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getZSLMaxUnmatchedFrames 1040666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1040766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get allowed ZSL max unmatched frames number 1040866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1040966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1041066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1041166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : ZSL backlook count value 1041266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1041366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getMaxUnmatchedFramesInQueue() 1041466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 10415d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return (uint8_t)(m_pCapability->min_num_pp_bufs); 1041666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1041766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1041866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1041966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRecordingHintValue 1042066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1042166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set recording hint 1042266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1042366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1042466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @value : video hint value 1042566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1042666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1042766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1042866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1042966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1043066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint QCameraParameters::setRecordingHintValue(int32_t value) 1043166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1043266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("VideoHint = %d", value); 1043366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool newValue = (value > 0)? true : false; 1043466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1043566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( m_bRecordingHint != newValue ) { 1043666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bNeedRestart = true; 1043766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRecordingHint_new = newValue; 1043866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1043966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRecordingHint_new = m_bRecordingHint; 1044066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1044166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_RECORDING_HINT, value)) { 1044266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1044366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1044466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1044566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1044666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1044766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1044866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1044966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumOfSnapshots 1045066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1045166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of snapshot per shutter 1045266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1045366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1045466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1045566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of snapshot per shutter 1045666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1045766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getNumOfSnapshots() 1045866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1045966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t numOfSnapshot = 1; 1046066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int val = getInt(KEY_QC_NUM_SNAPSHOT_PER_SHUTTER); 1046166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (0 < val) { 1046266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfSnapshot = (uint8_t)val; 1046366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1046466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1046566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint8_t)numOfSnapshot; 1046666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1046766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1046866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1046966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getBurstCountForAdvancedCapture 1047066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1047166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get burst count for advanced capture. 1047266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1047366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1047466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1047566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of snapshot required for advanced capture. 1047666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1047766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getBurstCountForAdvancedCapture() 1047866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1047966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t burstCount = 0; 1048066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiFocusEnabled()) { 1048166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //number of snapshots required for Ubi Focus. 1048266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = m_pCapability->ubifocus_af_bracketing_need.burst_count; 1048366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isUbiRefocus()) { 1048466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //number of snapshots required for Opti Zoom. 1048566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = m_pCapability->refocus_af_bracketing_need.burst_count; 1048666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isOptiZoomEnabled()) { 1048766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //number of snapshots required for Opti Zoom. 1048866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = m_pCapability->opti_zoom_settings_need.burst_count; 1048966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isChromaFlashEnabled()) { 1049066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //number of snapshots required for Chroma Flash. 1049166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = m_pCapability->chroma_flash_settings_need.burst_count; 1049266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isStillMoreEnabled()) { 1049366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //number of snapshots required for Still More. 1049466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isSeeMoreEnabled()) { 1049566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = 1; 1049666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if ((m_stillmore_config.burst_count >= 1049766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->stillmore_settings_need.min_burst_count) && 1049866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_stillmore_config.burst_count <= 1049966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->stillmore_settings_need.max_burst_count)) { 1050066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = m_stillmore_config.burst_count; 1050166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1050266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = m_pCapability->stillmore_settings_need.burst_count; 1050366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1050466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isHDREnabled()) { 1050566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //number of snapshots required for HDR. 1050666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = m_pCapability->hdr_bracketing_setting.num_frames; 1050766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isAEBracketEnabled()) { 1050866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = 0; 1050966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str_val = m_AEBracketingClient.values; 1051066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((str_val != NULL) && (strlen(str_val) > 0)) { 1051166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 1051266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 1051366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strlcpy(prop, str_val, PROPERTY_VALUE_MAX); 1051466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *saveptr = NULL; 1051566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *token = strtok_r(prop, ",", &saveptr); 1051666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin while (token != NULL) { 1051766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin token = strtok_r(NULL, ",", &saveptr); 1051866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount++; 1051966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1052066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1052166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1052266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1052366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (burstCount <= 0) { 1052466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin burstCount = getNumOfSnapshots(); 1052566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1052666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1052766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Snapshot burst count = %d", burstCount); 1052866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint8_t)burstCount; 1052966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1053066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1053166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1053266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumOfRetroSnapshots 1053366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1053466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of retro active snapshots per shutter 1053566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1053666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1053766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1053866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of retro active snapshots per shutter 1053966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1054066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getNumOfRetroSnapshots() 1054166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1054266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int numOfRetroSnapshots = getInt(KEY_QC_NUM_RETRO_BURST_PER_SHUTTER); 1054366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (numOfRetroSnapshots < 0) { 1054466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfRetroSnapshots = 0; 1054566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1054666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("numOfRetroSnaps - %d", numOfRetroSnapshots); 1054766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint8_t)numOfRetroSnapshots; 1054866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1054966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1055066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1055166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumOfExtraHDRInBufsIfNeeded 1055266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1055366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of extra input buffers needed by HDR 1055466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1055566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1055666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1055766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of extra buffers needed by HDR; 0 if not HDR enabled 1055866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1055966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getNumOfExtraHDRInBufsIfNeeded() 1056066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1056166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin unsigned int numOfBufs = 0; 1056266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1056366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDREnabled()) { 1056466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs += m_pCapability->hdr_bracketing_setting.num_frames; 1056566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDR1xFrameEnabled() && isHDR1xExtraBufferNeeded()) { 1056666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs++; 1056766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1056866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs--; // Only additional buffers need to be returned 1056966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1057066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10571d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return (uint8_t)(numOfBufs); 1057266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1057366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1057466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1057566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumOfExtraHDROutBufsIfNeeded 1057666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1057766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of extra output buffers needed by HDR 1057866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1057966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1058066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1058166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of extra buffers needed by HDR; 0 if not HDR enabled 1058266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1058366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getNumOfExtraHDROutBufsIfNeeded() 1058466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1058566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int numOfBufs = 0; 1058666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1058766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDREnabled() && isHDR1xFrameEnabled()) { 1058866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs++; 1058966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1059066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10591d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return (uint8_t)(numOfBufs); 1059266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1059366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1059466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1059566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getJpegQuality 1059666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1059766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get jpeg encoding quality 1059866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1059966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1060066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1060166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : jpeg encoding quality 1060266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1060366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t QCameraParameters::getJpegQuality() 1060466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1060566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int quality = getInt(KEY_JPEG_QUALITY); 1060666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (quality < 0) { 1060766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin quality = 85; // set to default quality value 1060866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1060966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint32_t)quality; 1061066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1061166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1061266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1061366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getRotation 1061466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1061566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get application configured rotation 1061666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1061766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1061866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1061966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : rotation value 1062066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1062166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t QCameraParameters::getRotation() { 1062266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int rotation = 0; 1062366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1062466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //If exif rotation is set, do not rotate captured image 1062566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!useJpegExifRotation()) { 1062666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation = mRotation; 1062766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rotation < 0) { 1062866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation = 0; 1062966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1063066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1063166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint32_t)rotation; 1063266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1063366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1063466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1063566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setJpegRotation 1063666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1063766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set jpeg rotation value configured internally 1063866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1063966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1064066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1064166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : jpeg rotation value 1064266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1064366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setJpegRotation(int rotation) { 1064466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rotation == 0 || rotation == 90 || 1064566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation == 180 || rotation == 270) { 1064666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mJpegRotation = (uint32_t)rotation; 1064766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1064866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1064966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1065066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1065166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getDeviceRotation 1065266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1065366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get device rotation value 1065466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1065566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1065666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1065766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : device rotation value 1065866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1065966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t QCameraParameters::getDeviceRotation() { 1066066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int rotation = 0; 1066166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1066266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation = mRotation; 1066366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rotation < 0) { 1066466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation = 0; 1066566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1066666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1066766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint32_t)rotation; 1066866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1066966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1067066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1067166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getJpegExifRotation 1067266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1067366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get exif rotation value 1067466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1067566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1067666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1067766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : rotation value 1067866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1067966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t QCameraParameters::getJpegExifRotation() { 1068066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int rotation = 0; 1068166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1068266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (useJpegExifRotation()) { 1068366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation = mRotation; 1068466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rotation < 0) { 1068566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation = 0; 1068666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1068766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1068866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint32_t)rotation; 1068966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1069066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1069166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1069266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : useJpegExifRotation 1069366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1069466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Check if jpeg exif rotation need to be used 1069566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1069666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1069766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1069866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true if jpeg exif rotation need to be used 1069966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1070066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::useJpegExifRotation() { 1070166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char exifRotation[PROPERTY_VALUE_MAX]; 1070266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1070366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.exif.rotation", exifRotation, "off"); 10704d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 1070566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(exifRotation, "on")) { 1070666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 1070766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 10708d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 10709d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (!(m_pCapability->qcom_supported_feature_mask & CAM_QCOM_FEATURE_ROTATION)) { 10710d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return true; 10711d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 10712d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 1071366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1071466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1071566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1071666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1071766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getEffectValue 1071866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1071966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get effect value 1072066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1072166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1072266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1072366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : effect value 1072466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1072566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getEffectValue() 1072666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1072766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t cnt = 0; 1072866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *effect = get(KEY_EFFECT); 1072966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (effect) { 1073066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin while (NULL != EFFECT_MODES_MAP[cnt].desc) { 1073166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!strcmp(EFFECT_MODES_MAP[cnt].desc, effect)) { 1073266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return EFFECT_MODES_MAP[cnt].val; 1073366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1073466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cnt++; 1073566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1073666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1073766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("Missing effect value"); 1073866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1073966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return CAM_EFFECT_MODE_OFF; 1074066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1074166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1074266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1074366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : parseGPSCoordinate 1074466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1074566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: parse GPS coordinate string 1074666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1074766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1074866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @coord_str : [input] coordinate string 1074966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @coord : [output] ptr to struct to store coordinate 1075066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1075166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1075266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1075366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1075466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1075566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint QCameraParameters::parseGPSCoordinate(const char *coord_str, rat_t* coord) 1075666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1075766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(coord == NULL) { 1075866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("error, invalid argument coord == NULL"); 1075966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1076066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1076166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double degF = atof(coord_str); 1076266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (degF < 0) { 1076366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin degF = -degF; 1076466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1076566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double minF = (degF - (double)(int) degF) * 60.0; 1076666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double secF = (minF - (double)(int) minF) * 60.0; 1076766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1076866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getRational(&coord[0], (int)degF, 1); 1076966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getRational(&coord[1], (int)minF, 1); 1077066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getRational(&coord[2], (int)(secF * 10000.0), 10000); 1077166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1077266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1077366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1077466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1077566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifDateTime 1077666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1077766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: query exif date time 1077866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1077966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1078066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @dateTime : String to store exif date time. 1078166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Should be leaved unchanged in case of error. 1078266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @subsecTime : String to store exif time nanoseconds. 1078366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Should be leaved unchanged in case of error. 1078466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1078566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1078666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1078766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1078866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1078966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getExifDateTime(String8 &dateTime, String8 &subsecTime) 1079066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1079166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ret = NO_ERROR; 1079266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1079366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //get time and date from system 1079466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct timeval tv; 1079566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct tm timeinfo_data; 1079666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1079766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int res = gettimeofday(&tv, NULL); 1079866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (0 == res) { 1079966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct tm *timeinfo = localtime_r(&tv.tv_sec, &timeinfo_data); 1080066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL != timeinfo) { 1080166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Write datetime according to EXIF Spec 1080266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //"YYYY:MM:DD HH:MM:SS" (20 chars including \0) 1080366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin dateTime = String8::format("%04d:%02d:%02d %02d:%02d:%02d", 1080466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, 1080566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin timeinfo->tm_mday, timeinfo->tm_hour, 1080666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin timeinfo->tm_min, timeinfo->tm_sec); 1080766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Write subsec according to EXIF Sepc 1080866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin subsecTime = String8::format("%06ld", tv.tv_usec); 1080966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1081066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("localtime_r() error"); 1081166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ret = UNKNOWN_ERROR; 1081266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1081366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (-1 == res) { 1081466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("gettimeofday() error: %s", strerror(errno)); 1081566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ret = UNKNOWN_ERROR; 1081666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1081766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("gettimeofday() unexpected return code: %d", res); 1081866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ret = UNKNOWN_ERROR; 1081966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1082066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1082166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return ret; 1082266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1082366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1082466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1082566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getRational 1082666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1082766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: compose rational struct 1082866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1082966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1083066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @rat : ptr to struct to store rational info 1083166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @num :num of the rational 1083266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @denom : denom of the rational 1083366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1083466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1083566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1083666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1083766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1083866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getRational(rat_t *rat, int num, int denom) 1083966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1084066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((0 > num) || (0 > denom)) { 1084166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Negative values"); 1084266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1084366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1084466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == rat) { 1084566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("NULL rat input"); 1084666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1084766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1084866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rat->num = (uint32_t)num; 1084966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rat->denom = (uint32_t)denom; 1085066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1085166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1085266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1085366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1085466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifFocalLength 1085566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1085666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get exif focal lenght 1085766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1085866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1085966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @focalLength : ptr to rational strcut to store focal lenght 1086066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1086166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1086266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1086366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1086466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1086566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getExifFocalLength(rat_t *focalLength) 1086666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1086766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int focalLengthValue = 1086866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (int)(getFloat(QCameraParameters::KEY_FOCAL_LENGTH) * FOCAL_LENGTH_DECIMAL_PRECISION); 1086966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return getRational(focalLength, focalLengthValue, FOCAL_LENGTH_DECIMAL_PRECISION); 1087066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1087166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1087266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1087366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifIsoSpeed 1087466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1087566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get exif ISO speed 1087666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1087766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1087866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1087966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : ISO speed value 1088066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1088166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint16_t QCameraParameters::getExifIsoSpeed() 1088266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1088366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint16_t isoSpeed = 0; 1088466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *iso_str = get(QCameraParameters::KEY_QC_ISO_MODE); 1088566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int iso_index = lookupAttr(ISO_MODES_MAP, PARAM_MAP_SIZE(ISO_MODES_MAP), iso_str); 1088666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (iso_index) { 1088766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_ISO_MODE_AUTO: 1088866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isoSpeed = 0; 1088966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1089066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_ISO_MODE_DEBLUR: 1089166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isoSpeed = 1; 1089266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1089366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_ISO_MODE_100: 1089466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isoSpeed = 100; 1089566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1089666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_ISO_MODE_200: 1089766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isoSpeed = 200; 1089866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1089966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_ISO_MODE_400: 1090066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isoSpeed = 400; 1090166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1090266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_ISO_MODE_800: 1090366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isoSpeed = 800; 1090466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1090566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_ISO_MODE_1600: 1090666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isoSpeed = 1600; 1090766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1090866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case CAM_ISO_MODE_3200: 1090966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isoSpeed = 3200; 1091066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1091166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1091266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return isoSpeed; 1091366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1091466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1091566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1091666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifGpsProcessingMethod 1091766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1091866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get GPS processing method 1091966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1092066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1092166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @gpsProcessingMethod : string to store GPS process method 1092266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @count : lenght of the string 1092366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1092466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1092566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1092666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1092766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1092866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getExifGpsProcessingMethod(char *gpsProcessingMethod, 1092966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t &count) 1093066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1093166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_GPS_PROCESSING_METHOD); 1093266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL) { 1093366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memcpy(gpsProcessingMethod, ExifAsciiPrefix, EXIF_ASCII_PREFIX_SIZE); 1093466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin count = EXIF_ASCII_PREFIX_SIZE; 109351687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan strlcpy(gpsProcessingMethod + EXIF_ASCII_PREFIX_SIZE, str, GPS_PROCESSING_METHOD_SIZE); 1093666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin count += (uint32_t)strlen(str); 1093766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin gpsProcessingMethod[count++] = '\0'; // increase 1 for the last NULL char 1093866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1093966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1094066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1094166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1094266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1094366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1094466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1094566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifLatitude 1094666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1094766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get exif latitude 1094866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1094966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1095066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @latitude : ptr to rational struct to store latitude info 1095166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @ladRef : charater to indicate latitude reference 1095266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1095366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1095466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1095566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1095666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1095766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getExifLatitude(rat_t *latitude, 1095866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *latRef) 1095966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1096066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_GPS_LATITUDE); 1096166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL) { 1096266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin parseGPSCoordinate(str, latitude); 1096366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1096466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set Latitude Ref 1096566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float latitudeValue = getFloat(KEY_GPS_LATITUDE); 1096666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(latitudeValue < 0.0f) { 1096766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin latRef[0] = 'S'; 1096866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1096966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin latRef[0] = 'N'; 1097066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1097166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin latRef[1] = '\0'; 1097266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1097366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{ 1097466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1097566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1097666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1097766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1097866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1097966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifLongitude 1098066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1098166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get exif longitude 1098266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1098366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1098466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @longitude : ptr to rational struct to store longitude info 1098566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @lonRef : charater to indicate longitude reference 1098666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1098766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1098866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1098966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1099066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1099166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getExifLongitude(rat_t *longitude, 1099266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *lonRef) 1099366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1099466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_GPS_LONGITUDE); 1099566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL) { 1099666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin parseGPSCoordinate(str, longitude); 1099766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1099866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set Longitude Ref 1099966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float longitudeValue = getFloat(KEY_GPS_LONGITUDE); 1100066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(longitudeValue < 0.0f) { 1100166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin lonRef[0] = 'W'; 1100266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1100366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin lonRef[0] = 'E'; 1100466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1100566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin lonRef[1] = '\0'; 1100666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1100766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{ 1100866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1100966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1101066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1101166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1101266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1101366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifAltitude 1101466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1101566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get exif altitude 1101666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1101766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1101866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @altitude : ptr to rational struct to store altitude info 1101966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @altRef : charater to indicate altitude reference 1102066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1102166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1102266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1102366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1102466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1102566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getExifAltitude(rat_t *altitude, 1102666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *altRef) 1102766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1102866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_GPS_ALTITUDE); 1102966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL) { 1103066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double value = atof(str); 1103166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *altRef = 0; 1103266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(value < 0){ 1103366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *altRef = 1; 1103466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin value = -value; 1103566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1103666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return getRational(altitude, (int)(value*1000), 1000); 1103766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{ 1103866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1103966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1104066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1104166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1104266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1104366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifGpsDateTimeStamp 1104466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1104566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get exif GPS date time stamp 1104666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1104766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1104866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @gpsDateStamp : GPS date time stamp string 1104966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @bufLen : length of the string 1105066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @gpsTimeStamp : ptr to rational struct to store time stamp info 1105166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1105266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1105366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1105466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1105566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1105666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getExifGpsDateTimeStamp(char *gpsDateStamp, 1105766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t bufLen, 1105866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rat_t *gpsTimeStamp) 1105966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1106066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *str = get(KEY_GPS_TIMESTAMP); 1106166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str != NULL) { 1106266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin time_t unixTime = (time_t)atol(str); 1106366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct tm *UTCTimestamp = gmtime(&unixTime); 1106466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1106566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!UTCTimestamp) { 1106666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("UTCTimestamp is null\n"); 1106766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1106866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1106966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1107066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strftime(gpsDateStamp, bufLen, "%Y:%m:%d", UTCTimestamp); 1107166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1107266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getRational(&gpsTimeStamp[0], UTCTimestamp->tm_hour, 1); 1107366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getRational(&gpsTimeStamp[1], UTCTimestamp->tm_min, 1); 1107466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getRational(&gpsTimeStamp[2], UTCTimestamp->tm_sec, 1); 1107566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1107666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1107766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1107866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1107966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1108066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1108166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1108266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1108366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateFocusDistances 1108466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1108566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update focus distances 1108666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1108766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1108866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @focusDistances : ptr to focus distance info 1108966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1109066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1109166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1109266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1109366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1109466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateFocusDistances(cam_focus_distances_info_t *focusDistances) 1109566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1109666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str; 1109766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char buffer[32] = {0}; 1109866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //set all distances to infinity if focus mode is infinity 1109966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(mFocusMode == CAM_FOCUS_MODE_INFINITY) { 1110066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append("Infinity,Infinity,Infinity"); 1110166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1110266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (focusDistances->focus_distance[0] < FOCUS_PERCISION) { 1110366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append("Infinity"); 1110466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1110566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), "%f", 1.0/focusDistances->focus_distance[0]); 1110666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 1110766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1110866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (focusDistances->focus_distance[1] < FOCUS_PERCISION) { 1110966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(",Infinity"); 1111066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1111166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), ",%f", 1.0/focusDistances->focus_distance[1]); 1111266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 1111366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1111466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (focusDistances->focus_distance[2] < FOCUS_PERCISION) { 1111566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(",Infinity"); 1111666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1111766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(buffer, sizeof(buffer), ",%f", 1.0/focusDistances->focus_distance[2]); 1111866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str.append(buffer); 1111966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1112066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1112166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("setting KEY_FOCUS_DISTANCES as %s", __FUNCTION__, str.string()); 1112266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(QCameraParameters::KEY_FOCUS_DISTANCES, str.string()); 1112366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1112466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1112566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1112666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1112766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateRecordingHintValue 1112866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1112966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update recording hint locally and to daemon 1113066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1113166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1113266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @value : video hint value 1113366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1113466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1113566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1113666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1113766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1113866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateRecordingHintValue(int32_t value) 1113966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1114066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1114166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1114266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1114366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1114466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1114566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1114666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = setRecordingHintValue(value); 1114766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1114866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 1114966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1115066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1115166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1115266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_bDISEnabled && (value==1)) { 1115366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("%d: Setting DIS value again!!"); 1115466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setDISValue(VALUE_ENABLE); 1115566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1115666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1115766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1115866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1115966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update recording hint"); 1116066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1116166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1116266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1116366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1116466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1116566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1116666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1116766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setHistogram 1116866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1116966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set histogram 1117066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1117166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1117266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @enabled : if histogram is enabled 1117366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1117466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1117566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1117666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1117766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1117866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setHistogram(bool enabled) 1117966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1118066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_bHistogramEnabled == enabled) { 1118166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("histogram flag not changed, no ops here"); 1118266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1118366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1118466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1118566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set parm for histogram 1118666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1118766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1118866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1118966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1119066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1119166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t value = enabled ? 1 : 0; 1119266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1119366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_HISTOGRAM, value)) { 1119466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 1119566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1119666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1119766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1119866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1119966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1120066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set histogram"); 1120166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1120266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1120366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1120466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bHistogramEnabled = enabled; 1120566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1120666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Histogram -> %s", m_bHistogramEnabled ? "Enabled" : "Disabled"); 1120766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1120866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1120966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1121066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1121166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1121266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setIntEvent 1121366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1121466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set setIntEvent 1121566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1121666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1121766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : image size and dimensions 1121866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1121966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1122066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1122166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1122266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1122366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setIntEvent(cam_int_evt_params_t params) 1122466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1122566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1122666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1122766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( m_pParamBuf == NULL ) { 1122866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1122966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1123066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1123166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1123266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1123366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1123466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1123566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1123666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Sending snapshot taken notification back to Eztune" 1123766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_INT_EVT, params)) { 1123866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 1123966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1124066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1124166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1124266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1124366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1124466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set frameskip info parm"); 1124566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1124666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1124766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1124866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1124966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1125066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1125166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1125266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFaceDetectionOption 1125366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1125466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set if face detection is enabled by SendCommand 1125566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1125666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1125766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @enabled : bool flag if face detection should be enabled 1125866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1125966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1126066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1126166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1126266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1126366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t QCameraParameters::setFaceDetectionOption(bool enabled) 1126466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1126566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bFaceDetectionOn = enabled; 1126666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1126766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1126866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1126966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1127066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFaceDetection 1127166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1127266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set face detection 1127366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1127466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1127566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @enabled : if face detection is enabled 1127666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @initCommit : if configuration list need to be initialized and commited 1127766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1127866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1127966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1128066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1128166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1128266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFaceDetection(bool enabled, bool initCommit) 1128366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1128466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t faceProcMask = m_nFaceProcMask; 1128566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set face detection mask 1128666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (enabled) { 1128766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask |= CAM_FACE_PROCESS_MASK_DETECTION; 1128866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getRecordingHintValue() > 0) { 1128966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask = 0; 1129066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask |= CAM_FACE_PROCESS_MASK_FOCUS; 11291d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (fdModeInVideo() == CAM_FACE_PROCESS_MASK_DETECTION) { 11292d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch faceProcMask |= CAM_FACE_PROCESS_MASK_DETECTION; 11293d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 1129466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1129566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask |= CAM_FACE_PROCESS_MASK_FOCUS; 1129666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask |= CAM_FACE_PROCESS_MASK_DETECTION; 1129766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 112981687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan if (isTruePortraitEnabled()) { 112991687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan LOGL("QCameraParameters::setFaceDetection trueportrait enabled"); 113001687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan faceProcMask |= CAM_FACE_PROCESS_MASK_GAZE; 113011687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan } else { 113021687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan LOGL("QCameraParameters::setFaceDetection trueportrait disabled"); 113031687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan faceProcMask &= ~CAM_FACE_PROCESS_MASK_GAZE; 113041687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan } 1130566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1130666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask &= ~(CAM_FACE_PROCESS_MASK_DETECTION 113071687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan | CAM_FACE_PROCESS_MASK_FOCUS 113081687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan | CAM_FACE_PROCESS_MASK_GAZE); 1130966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1131066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1131166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_nFaceProcMask == faceProcMask) { 1131266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("face process mask not changed, no ops here"); 1131366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1131466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1131566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1131666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_nFaceProcMask = faceProcMask; 1131766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1131866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // set parm for face detection 1131966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t requested_faces = (uint32_t)getInt(KEY_QC_MAX_NUM_REQUESTED_FACES); 1132066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_fd_set_parm_t fd_set_parm; 1132166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&fd_set_parm, 0, sizeof(cam_fd_set_parm_t)); 1132266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fd_set_parm.fd_mode = faceProcMask; 1132366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fd_set_parm.num_fd = requested_faces; 1132466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1132566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("[KPI Perf]: PROFILE_FACE_DETECTION_VALUE = %d num_fd = %d", 1132666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin faceProcMask,requested_faces); 1132766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1132866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initCommit) { 1132966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1133066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1133166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1133266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1133366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1133466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1133566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1133666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1133766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_FD, fd_set_parm)) { 1133866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 1133966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1134066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1134166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1134266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initCommit) { 1134366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1134466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1134566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set face detection parm"); 1134666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1134766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1134866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1134966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1135066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("FaceProcMask -> %d", m_nFaceProcMask); 1135166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1135266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1135366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1135466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1135566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1135666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setFrameSkip 1135766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1135866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: send ISP frame skip pattern to camera daemon 1135966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1136066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1136166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @pattern : skip pattern for ISP 1136266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1136366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1136466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1136566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1136666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1136766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setFrameSkip(enum msm_vfe_frame_skip_pattern pattern) 1136866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1136966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1137066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1137166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( m_pParamBuf == NULL ) { 1137266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1137366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1137466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1137566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1137666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1137766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1137866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1137966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1138066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_FRAMESKIP, (int32_t)pattern)) { 1138166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 1138266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1138366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1138466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1138566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1138666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1138766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set frameskip info parm"); 1138866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1138966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1139066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1139166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1139266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1139366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1139466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1139566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateRAW 1139666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1139766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Query sensor output size based on maximum stream dimension 1139866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1139966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1140066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @max_dim : maximum stream dimension 1140166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1140266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1140366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1140466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1140566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1140666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateRAW(cam_dimension_t max_dim) 1140766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1140866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1140966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t raw_dim, pic_dim; 1141066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1141166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // If offline raw is enabled, check the dimensions from Picture size since snapshot 1141266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // stream is not added but final JPEG is required of snapshot size 1141366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getofflineRAW()) { 1141466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, pic_dim); 1141566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (pic_dim.width > max_dim.width) { 1141666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_dim.width = pic_dim.width; 1141766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1141866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (pic_dim.height > max_dim.height) { 1141966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_dim.height = pic_dim.height; 1142066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1142166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1142266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1142366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (max_dim.width == 0 || max_dim.height == 0) { 1142466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_dim = m_pCapability->raw_dim[0]; 1142566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1142666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1142766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1142866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1142966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1143066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1143166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1143266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_MAX_DIMENSION, max_dim)) { 1143366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table for CAM_INTF_PARM_MAX_DIMENSION "); 1143466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1143566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1143666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1143766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1143866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1143966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set lock CAM_INTF_PARM_MAX_DIMENSION parm"); 1144066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1144166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1144266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1144366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1144466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1144566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1144666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1144766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1144866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ADD_GET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_RAW_DIMENSION); 1144966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1145066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitGetBatch(); 1145166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1145266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to get commit CAM_INTF_PARM_RAW_DIMENSION"); 1145366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1145466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1145566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1145666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin READ_PARAM_ENTRY(m_pParamBuf, CAM_INTF_PARM_RAW_DIMENSION, raw_dim); 1145766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1145866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("RAW Dimension = %d X %d",raw_dim.width,raw_dim.height); 1145966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (raw_dim.width == 0 || raw_dim.height == 0) { 1146066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGW("Error getting RAW size. Setting to Capability value"); 1146166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin raw_dim = m_pCapability->raw_dim[0]; 1146266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1146366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setRawSize(raw_dim); 1146466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1146566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1146666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1146766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1146866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setHDRSceneEnable 1146966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1147066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: sets hdr scene deteced flag 1147166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1147266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1147366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @bflag : hdr scene deteced 1147466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1147566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : nothing 1147666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1147766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setHDRSceneEnable(bool bflag) 1147866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1147966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool bupdate = false; 1148066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_HDRSceneEnabled != bflag) { 1148166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bupdate = true; 1148266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1148366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_HDRSceneEnabled = bflag; 1148466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1148566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (bupdate) { 1148666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateFlash(true); 1148766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1148866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1148966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1149066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1149166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getASDStateString 1149266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1149366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get ASD result in string format 1149466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1149566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1149666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @scene : selected scene mode 1149766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1149866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1149966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1150066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1150166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1150266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *QCameraParameters::getASDStateString(cam_auto_scene_t scene) 1150366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1150466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin switch (scene) { 1150566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case S_NORMAL : 1150666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return "Normal"; 1150766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case S_SCENERY: 1150866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return "Scenery"; 1150966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case S_PORTRAIT: 1151066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return "Portrait"; 1151166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case S_PORTRAIT_BACKLIGHT: 1151266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return "Portrait-Backlight"; 1151366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case S_SCENERY_BACKLIGHT: 1151466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return "Scenery-Backlight"; 1151566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin case S_BACKLIGHT: 1151666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return "Backlight"; 1151766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin default: 1151866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return "<Unknown!>"; 1151966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1152066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1152166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1152266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1152366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : parseNDimVector 1152466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1152566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: helper function to parse a string like "(1, 2, 3, 4, ..., N)" 1152666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * into N-dimension vector 1152766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1152866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1152966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @str : string to be parsed 1153066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @num : output array of size N to store vector element values 1153166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @N : number of dimension 1153266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @delim : delimeter to seperete string 1153366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1153466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1153566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1153666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1153766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1153866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::parseNDimVector(const char *str, int *num, int N, char delim = ',') 1153966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1154066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char *start, *end; 1154166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (num == NULL) { 1154266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid output array (num == NULL)"); 1154366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1154466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1154566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1154666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //check if string starts and ends with parantheses 1154766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(str[0] != '(' || str[strlen(str)-1] != ')') { 1154866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalid format of string %s, valid format is (n1, n2, n3, n4 ...)", 1154966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str); 1155066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1155166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1155266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin start = (char*) str; 1155366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin start++; 1155466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(int i=0; i<N; i++) { 1155566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *(num+i) = (int) strtol(start, &end, 10); 1155666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(*end != delim && i < N-1) { 1155766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Cannot find delimeter '%c' in string \"%s\". end = %c", 1155866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin delim, str, *end); 1155966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return -1; 1156066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1156166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin start = end+1; 1156266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1156366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1156466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1156566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1156666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1156766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : parseCameraAreaString 1156866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1156966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: helper function to parse a string of camera areas like 1157066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * "(1, 2, 3, 4, 5),(1, 2, 3, 4, 5),..." 1157166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1157266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1157366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @str : string to be parsed 1157466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @max_num_areas : max number of areas 1157566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @pAreas : ptr to struct to store areas 1157666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @num_areas_found : number of areas found 1157766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1157866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1157966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1158066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1158166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1158266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::parseCameraAreaString(const char *str, 1158366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int max_num_areas, 1158466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_area_t *pAreas, 1158566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int& num_areas_found) 1158666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1158766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char area_str[32]; 1158866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *start, *end, *p; 1158966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin start = str; end = NULL; 1159066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int values[5], index=0; 1159166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin num_areas_found = 0; 1159266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1159366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(values, 0, sizeof(values)); 1159466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin while(start != NULL) { 1159566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(*start != '(') { 1159666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("error: Ill formatted area string: %s", str); 1159766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1159866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1159966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin end = strchr(start, ')'); 1160066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(end == NULL) { 1160166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("error: Ill formatted area string: %s", str); 1160266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1160366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1160466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int i; 1160566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (i=0,p=start; p<=end; p++, i++) { 1160666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin area_str[i] = *p; 1160766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1160866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin area_str[i] = '\0'; 1160966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(parseNDimVector(area_str, values, 5) < 0){ 1161066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("error: Failed to parse the area string: %s", area_str); 1161166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1161266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1161366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // no more areas than max_num_areas are accepted. 1161466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(index >= max_num_areas) { 1161566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("error: too many areas specified %s", str); 1161666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1161766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1161866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pAreas[index].rect.left = values[0]; 1161966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pAreas[index].rect.top = values[1]; 1162066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pAreas[index].rect.width = values[2] - values[0]; 1162166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pAreas[index].rect.height = values[3] - values[1]; 1162266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pAreas[index].weight = values[4]; 1162366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1162466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin index++; 1162566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin start = strchr(end, '('); // serach for next '(' 1162666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1162766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin num_areas_found = index; 1162866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return 0; 1162966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1163066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1163166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1163266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : validateCameraAreas 1163366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1163466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: helper function to validate camera areas within (-1000, 1000) 1163566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1163666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1163766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @areas : ptr to array of areas 1163866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @num_areas : number of areas 1163966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1164066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true -- area is in valid range 1164166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * false -- not valid 1164266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1164366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::validateCameraAreas(cam_area_t *areas, int num_areas) 1164466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1164566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // special case: default area 1164666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (num_areas == 1 && 1164766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.left == 0 && 1164866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.top == 0 && 1164966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.width == 0 && 1165066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].rect.height == 0 && 1165166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin areas[0].weight == 0) { 1165266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 1165366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1165466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1165566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(int i = 0; i < num_areas; i++) { 1165666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // left should be >= -1000 1165766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(areas[i].rect.left < -1000) { 1165866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1165966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1166066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1166166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // top should be >= -1000 1166266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(areas[i].rect.top < -1000) { 1166366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1166466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1166566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1166666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // width or height should be > 0 1166766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (areas[i].rect.width <= 0 || areas[i].rect.height <= 0) { 1166866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1166966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1167066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1167166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // right should be <= 1000 1167266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(areas[i].rect.left + areas[i].rect.width > 1000) { 1167366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1167466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1167566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1167666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // bottom should be <= 1000 1167766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(areas[i].rect.top + areas[i].rect.height > 1000) { 1167866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1167966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1168066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1168166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // weight should be within (1, 1000) 1168266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (areas[i].weight < 1 || areas[i].weight > 1000) { 1168366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1168466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1168566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1168666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 1168766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1168866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1168966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1169066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isYUVFrameInfoNeeded 1169166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1169266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: In AE-Bracket mode, we need set yuv buffer information for up-layer 1169366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1169466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1169566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1169666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true: needed 1169766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * false: no need 1169866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1169966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isYUVFrameInfoNeeded() 1170066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1170166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //In AE-Bracket mode, we need set raw buffer information for up-layer 1170266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!isNV21PictureFormat() && !isNV16PictureFormat()){ 1170366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1170466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1170566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *aecBracketStr = get(KEY_QC_AE_BRACKET_HDR); 1170666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1170766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int value = lookupAttr(BRACKETING_MODES_MAP, PARAM_MAP_SIZE(BRACKETING_MODES_MAP), 1170866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin aecBracketStr); 1170966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("aecBracketStr=%s, value=%d.", aecBracketStr, value); 1171066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (value == CAM_EXP_BRACKETING_ON); 1171166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1171266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1171366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1171466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getFrameFmtString 1171566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1171666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get string name of frame format 1171766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1171866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1171966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @frame : frame format 1172066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1172166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : string name of frame format 1172266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1172366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst char *QCameraParameters::getFrameFmtString(cam_format_t fmt) 1172466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1172566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return lookupNameByValue(PICTURE_TYPES_MAP, PARAM_MAP_SIZE(PICTURE_TYPES_MAP), fmt); 1172666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1172766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1172866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1172966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setDcrf 1173066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1173166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Enable/Disable DCRF (dual-camera-range-finding) 1173266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1173366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 1173466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1173566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setDcrf() 1173666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1173766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 1173866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 1173966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1174066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Set DCRF to off by default (assuming single-camera mode) 1174166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDcrfEnabled = 0; 1174266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1174366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // In dual-cam mode, get sysprop and set it to on by default 1174466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_relCamSyncInfo.sync_control == CAM_SYNC_RELATED_SENSORS_ON) { 1174566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.dcrf.enable", prop, "1"); 1174666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bDcrfEnabled = atoi(prop); 1174766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1174866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1174966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1175066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1175166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setRelatedCamSyncInfo 1175266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1175366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set the related cam info parameters 1175466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * the related cam info is cached into params to make some decisions beforehand 1175566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1175666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1175766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @info : ptr to related cam info parameters 1175866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1175966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1176066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1176166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1176266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1176366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setRelatedCamSyncInfo( 1176466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_sync_related_sensors_event_info_t* info) 1176566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1176666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(info != NULL){ 1176766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memcpy(&m_relCamSyncInfo, info, 1176866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sizeof(cam_sync_related_sensors_event_info_t)); 1176966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1177066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1177166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("info buffer is null"); 1177266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return UNKNOWN_ERROR; 1177366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1177466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1177566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1177666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1177766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getRelatedCamSyncInfo 1177866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1177966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION:returns the related cam sync info for this HWI instance 1178066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1178166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS :none 1178266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1178366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : const pointer to cam_sync_related_sensors_event_info_t 1178466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1178566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinconst cam_sync_related_sensors_event_info_t* 1178666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters::getRelatedCamSyncInfo(void) 1178766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1178866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return &m_relCamSyncInfo; 1178966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1179066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1179166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1179266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : bundleRelatedCameras 1179366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1179466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: send trigger for bundling related camera sessions in the server 1179566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1179666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1179766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sync :indicates whether syncing is On or Off 1179866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @sessionid :session id for other camera session 1179966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1180066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1180166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1180266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1180366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1180466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::bundleRelatedCameras(bool sync, 1180566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t sessionid) 1180666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1180766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1180866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1180966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == m_pCamOpsTbl) { 1181066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Ops not initialized"); 1181166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1181266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1181366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1181466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Sending Bundling cmd sync %d, SessionId %d ", 1181566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin sync, sessionid); 1181666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1181766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_pRelCamSyncBuf) { 1181866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(sync) { 1181966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf->sync_control = CAM_SYNC_RELATED_SENSORS_ON; 1182066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1182166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else { 1182266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf->sync_control = CAM_SYNC_RELATED_SENSORS_OFF; 1182366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1182466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf->mode = m_relCamSyncInfo.mode; 1182566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf->type = m_relCamSyncInfo.type; 1182666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pRelCamSyncBuf->related_sensor_session_id = sessionid; 1182766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = m_pCamOpsTbl->ops->sync_related_sensors( 1182866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCamOpsTbl->camera_handle, m_pRelCamSyncBuf); 1182966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1183066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Related Cam SyncBuffer not allocated", rc); 1183166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1183266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1183366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1183466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1183566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1183666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1183766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1183866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getRelatedCamCalibration 1183966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1184066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: fetch the related camera subsystem calibration data 1184166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1184266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1184366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @calib : calibration data fetched 1184466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1184566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1184666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1184766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1184866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1184966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getRelatedCamCalibration( 1185066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_related_system_calibration_data_t* calib) 1185166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1185266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1185366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1185466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!calib) { 1185566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1185666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1185766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1185866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1185966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1186066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1186166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1186266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1186366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ADD_GET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 1186466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_RELATED_SENSORS_CALIBRATION); 1186566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1186666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitGetBatch(); 1186766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1186866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to get related cam calibration info"); 1186966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1187066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1187166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1187266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin READ_PARAM_ENTRY(m_pParamBuf, 1187366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_RELATED_SENSORS_CALIBRATION, *calib); 1187466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1187566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("CALIB version %d ", calib->calibration_format_version); 1187666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("CALIB normalized_focal_length %f ", 1187766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin calib->main_cam_specific_calibration.normalized_focal_length); 1187866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("CALIB native_sensor_resolution_width %d ", 1187966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin calib->main_cam_specific_calibration.native_sensor_resolution_width); 1188066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("CALIB native_sensor_resolution_height %d ", 1188166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin calib->main_cam_specific_calibration.native_sensor_resolution_height); 1188266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("CALIB sensor_resolution_width %d ", 1188366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin calib->main_cam_specific_calibration.calibration_sensor_resolution_width); 1188466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("CALIB sensor_resolution_height %d ", 1188566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin calib->main_cam_specific_calibration.calibration_sensor_resolution_height); 1188666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("CALIB focal_length_ratio %f ", 1188766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin calib->main_cam_specific_calibration.focal_length_ratio); 1188866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1188966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1189066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1189166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1189266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1189366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : initBatchUpdate 1189466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1189566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: init camera parameters buf entries 1189666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1189766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1189866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @p_table : ptr to parameter buffer 1189966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1190066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1190166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1190266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1190366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1190466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::initBatchUpdate(parm_buffer_t *p_table) 1190566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1190666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_tempMap.clear(); 1190766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1190866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin clear_metadata_buffer(p_table); 1190966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1191066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1191166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1191266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1191366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : commitSetBatch 1191466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1191566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: commit all set parameters in the batch work to backend 1191666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1191766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1191866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1191966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1192066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1192166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1192266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1192366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::commitSetBatch() 1192466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1192566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1192666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t i = 0; 1192766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1192866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == m_pParamBuf) { 1192966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Params not initialized"); 1193066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1193166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1193266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1193366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Loop to check if atleast one entry is valid */ 1193466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(i = 0; i < CAM_INTF_PARM_MAX; i++){ 1193566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_pParamBuf->is_valid[i]) 1193666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1193766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1193866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1193966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == m_pCamOpsTbl) { 1194066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Ops not initialized"); 1194166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1194266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1194366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1194466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (i < CAM_INTF_PARM_MAX) { 1194566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = m_pCamOpsTbl->ops->set_parms(m_pCamOpsTbl->camera_handle, m_pParamBuf); 1194666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1194766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc == NO_ERROR) { 1194866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // commit change from temp storage into param map 1194966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitParamChanges(); 1195066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1195166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1195266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1195366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1195466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1195566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : commitGetBatch 1195666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1195766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: commit all get parameters in the batch work to backend 1195866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1195966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1196066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1196166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1196266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1196366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1196466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1196566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::commitGetBatch() 1196666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1196766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1196866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t i = 0; 1196966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1197066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == m_pParamBuf) { 1197166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Params not initialized"); 1197266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1197366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1197466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1197566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Loop to check if atleast one entry is valid */ 1197666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(i = 0; i < CAM_INTF_PARM_MAX; i++){ 1197766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(m_pParamBuf->is_valid[i]) 1197866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1197966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1198066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1198166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NULL == m_pCamOpsTbl) { 1198266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Ops not initialized"); 1198366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1198466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1198566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1198666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (i < CAM_INTF_PARM_MAX) { 1198766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return m_pCamOpsTbl->ops->get_parms(m_pCamOpsTbl->camera_handle, m_pParamBuf); 1198866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1198966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1199066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1199166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1199266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1199366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1199466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1199566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateParamEntry 1199666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1199766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: update a parameter entry in the local temp map obj 1199866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1199966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1200066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @key : key of the entry 1200166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @value : value of the entry 1200266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1200366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1200466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1200566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1200666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1200766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateParamEntry(const char *key, const char *value) 1200866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1200966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_tempMap.replaceValueFor(String8(key), String8(value)); 1201066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1201166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1201266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1201366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1201466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : commitParamChanges 1201566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1201666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: commit all changes in local temp map obj into parameter obj 1201766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1201866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1201966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1202066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1202166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1202266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1202366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1202466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::commitParamChanges() 1202566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1202666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t size = m_tempMap.size(); 1202766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < size; i++) { 1202866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 k, v; 1202966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin k = m_tempMap.keyAt(i); 1203066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin v = m_tempMap.valueAt(i); 1203166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(k, v); 1203266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1203366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_tempMap.clear(); 1203466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1203566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // update local changes 1203666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bRecordingHint = m_bRecordingHint_new; 1203766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bZslMode = m_bZslMode_new; 1203866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1203966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* After applying scene mode auto, 1204066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Camera effects need to be reapplied */ 1204166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( m_bSceneTransitionAuto ) { 1204266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bUpdateEffects = true; 1204366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bSceneTransitionAuto = false; 1204466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1204566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1204666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1204766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1204866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1204966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1205066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1205166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : QCameraReprocScaleParam 1205266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1205366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: constructor of QCameraReprocScaleParam 1205466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1205566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1205666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1205766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 1205866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1205966f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinQCameraParameters::QCameraReprocScaleParam::QCameraReprocScaleParam() 1206066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin : mScaleEnabled(false), 1206166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mIsUnderScaling(false), 1206266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mNeedScaleCnt(0), 1206366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mSensorSizeTblCnt(0), 1206466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mSensorSizeTbl(NULL), 1206566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalSizeTblCnt(0) 1206666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1206766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeFromAPK.width = 0; 1206866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeFromAPK.height = 0; 1206966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeSetted.width = 0; 1207066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeSetted.height = 0; 1207166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(mNeedScaledSizeTbl, 0, sizeof(mNeedScaledSizeTbl)); 1207266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(mTotalSizeTbl, 0, sizeof(mTotalSizeTbl)); 1207366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1207466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1207566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1207666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : ~~QCameraReprocScaleParam 1207766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1207866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: destructor of QCameraReprocScaleParam 1207966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1208066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1208166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1208266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 1208366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1208466f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinQCameraParameters::QCameraReprocScaleParam::~QCameraReprocScaleParam() 1208566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1208666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //do nothing now. 1208766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1208866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1208966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1209066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setScaledSizeTbl 1209166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1209266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: re-set picture size table with dimensions that need scaling if Reproc Scale is enabled 1209366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1209466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1209566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @scale_cnt : count of picture sizes that want scale 1209666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @scale_tbl : picture size table that want scale 1209766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @org_cnt : sensor supported picture size count 1209866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @org_tbl : sensor supported picture size table 1209966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1210066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1210166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1210266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1210366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1210466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::QCameraReprocScaleParam::setScaleSizeTbl(size_t scale_cnt, 1210566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t *scale_tbl, size_t org_cnt, cam_dimension_t *org_tbl) 1210666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1210766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1210866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t i; 1210966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mNeedScaleCnt = 0; 1211066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1211166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!mScaleEnabled || scale_cnt <=0 || scale_tbl == NULL || org_cnt <=0 || org_tbl == NULL){ 1211266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; // Do not need scale, so also need not reset picture size table 1211366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1211466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1211566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mSensorSizeTblCnt = org_cnt; 1211666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mSensorSizeTbl = org_tbl; 1211766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mNeedScaleCnt = checkScaleSizeTable(scale_cnt, scale_tbl, org_cnt, org_tbl); 1211866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(mNeedScaleCnt <= 0){ 1211966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("do not have picture sizes need scaling."); 1212066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1212166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1212266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1212366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(mNeedScaleCnt + org_cnt > MAX_SIZES_CNT){ 1212466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("picture size list exceed the max count."); 1212566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1212666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1212766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1212866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //get the total picture size table 1212966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalSizeTblCnt = mNeedScaleCnt + org_cnt; 1213066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1213166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (mNeedScaleCnt > MAX_SCALE_SIZES_CNT) { 1213266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Error!! mNeedScaleCnt (%d) is more than MAX_SCALE_SIZES_CNT", 1213366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mNeedScaleCnt); 1213466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1213566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1213666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1213766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(i = 0; i < mNeedScaleCnt; i++){ 1213866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalSizeTbl[i].width = mNeedScaledSizeTbl[i].width; 1213966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalSizeTbl[i].height = mNeedScaledSizeTbl[i].height; 1214066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("scale picture size: i =%d, width=%d, height=%d.", 1214166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin i, mTotalSizeTbl[i].width, mTotalSizeTbl[i].height); 1214266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1214366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(; i < mTotalSizeTblCnt; i++){ 1214466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalSizeTbl[i].width = org_tbl[i-mNeedScaleCnt].width; 1214566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalSizeTbl[i].height = org_tbl[i-mNeedScaleCnt].height; 1214666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("sensor supportted picture size: i =%d, width=%d, height=%d.", 1214766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin i, mTotalSizeTbl[i].width, mTotalSizeTbl[i].height); 1214866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1214966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1215066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1215166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1215266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1215366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getScaledSizeTblCnt 1215466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1215566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get picture size cnt that need scale 1215666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1215766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1215866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1215966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : uint8_t type of picture size count 1216066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1216166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinsize_t QCameraParameters::QCameraReprocScaleParam::getScaleSizeTblCnt() 1216266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1216366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return mNeedScaleCnt; 1216466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1216566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1216666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1216766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getScaledSizeTbl 1216866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1216966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get picture size table that need scale 1217066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1217166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1217266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1217366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : cam_dimension_t list of picture size table 1217466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1217566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjincam_dimension_t *QCameraParameters::QCameraReprocScaleParam::getScaledSizeTbl() 1217666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1217766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!mScaleEnabled) 1217866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NULL; 1217966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1218066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return mNeedScaledSizeTbl; 1218166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1218266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1218366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1218466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setScaleEnable 1218566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1218666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: enable or disable Reproc Scale 1218766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1218866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1218966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @enabled : enable: 1; disable 0 1219066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1219166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 1219266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1219366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::QCameraReprocScaleParam::setScaleEnable(bool enabled) 1219466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1219566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mScaleEnabled = enabled; 1219666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1219766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1219866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1219966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isScaleEnabled 1220066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1220166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: check if Reproc Scale is enabled 1220266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1220366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1220466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1220566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : bool type of status 1220666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1220766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::QCameraReprocScaleParam::isScaleEnabled() 1220866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1220966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return mScaleEnabled; 1221066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1221166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1221266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1221366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isScalePicSize 1221466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1221566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: check if current picture size is from Scale Table 1221666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1221766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1221866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @width : current picture width 1221966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @height : current picture height 1222066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1222166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : bool type of status 1222266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1222366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::QCameraReprocScaleParam::isScalePicSize(int width, int height) 1222466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1222566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Check if the picture size is in scale table 1222666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(mNeedScaleCnt <= 0) 1222766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1222866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1222966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (size_t i = 0; i < mNeedScaleCnt; i++) { 1223066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((mNeedScaledSizeTbl[i].width == width) && (mNeedScaledSizeTbl[i].height == height)) { 1223166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //found match 1223266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return TRUE; 1223366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1223466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1223566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1223666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Not in scale picture size table."); 1223766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1223866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1223966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1224066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1224166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isValidatePicSize 1224266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1224366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: check if current picture size is validate 1224466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1224566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1224666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @width : current picture width 1224766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @height : current picture height 1224866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1224966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : bool type of status 1225066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1225166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::QCameraReprocScaleParam::isValidatePicSize(int width, int height) 1225266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1225366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t i = 0; 1225466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1225566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(i = 0; i < mSensorSizeTblCnt; i++){ 1225666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(mSensorSizeTbl[i].width == width 1225766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && mSensorSizeTbl[i].height== height){ 1225866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return TRUE; 1225966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1226066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1226166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1226266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for(i = 0; i < mNeedScaleCnt; i++){ 1226366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(mNeedScaledSizeTbl[i].width == width 1226466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && mNeedScaledSizeTbl[i].height== height){ 1226566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return TRUE; 1226666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1226766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1226866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1226966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Invalidate input picture size."); 1227066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1227166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1227266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1227366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1227466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setSensorSupportedPicSize 1227566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1227666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set sensor supported picture size. 1227766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * For Snapshot stream size configuration, we need use sensor supported size. 1227866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * We will use CPP to do Scaling based on output Snapshot stream. 1227966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1228066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1228166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1228266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1228366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1228466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1228566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1228666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::QCameraReprocScaleParam::setSensorSupportedPicSize() 1228766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1228866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //will find a suitable picture size (here we leave a prossibility to add other scale requirement) 1228966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Currently we only focus on upscaling, and checkScaleSizeTable() has guaranteed the dimension ratio. 1229066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1229166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!mIsUnderScaling || mSensorSizeTblCnt <= 0) 1229266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1229366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1229466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //We just get the max sensor supported size here. 1229566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeSetted.width = mSensorSizeTbl[0].width; 1229666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeSetted.height = mSensorSizeTbl[0].height; 1229766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1229866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1229966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1230066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1230166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1230266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1230366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setValidatePicSize 1230466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1230566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set sensor supported size and change scale status. 1230666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1230766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1230866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @width : input picture width 1230966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @height : input picture height 1231066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1231166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1231266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1231366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1231466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1231566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::QCameraReprocScaleParam::setValidatePicSize(int &width,int &height) 1231666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1231766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!mScaleEnabled) 1231866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1231966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1232066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mIsUnderScaling = FALSE; //default: not under scale 1232166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1232266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(isScalePicSize(width, height)){ 1232366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // input picture size need scaling operation. Record size from APK and setted 1232466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mIsUnderScaling = TRUE; 1232566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeFromAPK.width = width; 1232666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeFromAPK.height = height; 1232766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1232866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(setSensorSupportedPicSize() != NO_ERROR) 1232966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1233066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1233166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //re-set picture size to sensor supported size 1233266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin width = mPicSizeSetted.width; 1233366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height = mPicSizeSetted.height; 1233466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("mPicSizeFromAPK- with=%d, height=%d, mPicSizeSetted- with =%d, height=%d.", 1233566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeFromAPK.width, mPicSizeFromAPK.height, mPicSizeSetted.width, mPicSizeSetted.height); 1233666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{ 1233766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mIsUnderScaling = FALSE; 1233866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //no scale is needed for input picture size 1233966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!isValidatePicSize(width, height)){ 1234066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("invalidate input picture size."); 1234166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1234266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1234366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeSetted.width = width; 1234466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mPicSizeSetted.height = height; 1234566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1234666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1234766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("X. mIsUnderScaling=%d, width=%d, height=%d.", mIsUnderScaling, width, height); 1234866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1234966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1235066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1235166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1235266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getPicSizeFromAPK 1235366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1235466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get picture size that get from APK 1235566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1235666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1235766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @width : input width 1235866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @height : input height 1235966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1236066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1236166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1236266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1236366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1236466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::QCameraReprocScaleParam::getPicSizeFromAPK(int &width, int &height) 1236566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1236666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!mIsUnderScaling) 1236766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1236866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1236966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin width = mPicSizeFromAPK.width; 1237066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height = mPicSizeFromAPK.height; 1237166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1237266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1237366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1237466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1237566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getPicSizeSetted 1237666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1237766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get picture size that setted into mm-camera 1237866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1237966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1238066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @width : input width 1238166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @height : input height 1238266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1238366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1238466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1238566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1238666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1238766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::QCameraReprocScaleParam::getPicSizeSetted(int &width, int &height) 1238866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1238966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin width = mPicSizeSetted.width; 1239066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin height = mPicSizeSetted.height; 1239166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1239266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1239366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1239466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1239566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isUnderScaling 1239666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1239766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: check if we are in Reproc Scaling requirment 1239866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1239966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1240066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1240166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : bool type of status 1240266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1240366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::QCameraReprocScaleParam::isUnderScaling() 1240466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1240566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return mIsUnderScaling; 1240666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1240766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1240866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1240966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : checkScaleSizeTable 1241066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1241166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: check PICTURE_SIZE_NEED_SCALE to choose 1241266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1241366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1241466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @scale_cnt : count of picture sizes that want scale 1241566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @scale_tbl : picture size table that want scale 1241666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @org_cnt : sensor supported picture size count 1241766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @org_tbl : sensor supported picture size table 1241866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1241966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : bool type of status 1242066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1242166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinsize_t QCameraParameters::QCameraReprocScaleParam::checkScaleSizeTable(size_t scale_cnt, 1242266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t *scale_tbl, size_t org_cnt, cam_dimension_t *org_tbl) 1242366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1242466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t stbl_cnt = 0; 1242566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t temp_cnt = 0; 1242666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ssize_t i = 0; 1242766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(scale_cnt <=0 || scale_tbl == NULL || org_tbl == NULL || org_cnt <= 0) 1242866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return stbl_cnt; 1242966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1243066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //get validate scale size table. Currently we only support: 1243166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // 1. upscale. The scale size must larger than max sensor supported size 1243266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // 2. Scale dimension ratio must be same as the max sensor supported size. 1243366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin temp_cnt = scale_cnt; 1243466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (i = (ssize_t)(scale_cnt - 1); i >= 0; i--) { 1243566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (scale_tbl[i].width > org_tbl[0].width || 1243666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (scale_tbl[i].width == org_tbl[0].width && 1243766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin scale_tbl[i].height > org_tbl[0].height)) { 1243866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //get the smallest scale size 1243966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1244066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1244166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin temp_cnt--; 1244266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1244366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1244466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //check dimension ratio 1244566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double supported_ratio = (double)org_tbl[0].width / (double)org_tbl[0].height; 1244666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (i = 0; i < (ssize_t)temp_cnt; i++) { 1244766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double cur_ratio = (double)scale_tbl[i].width / (double)scale_tbl[i].height; 1244866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (fabs(supported_ratio - cur_ratio) > ASPECT_TOLERANCE) { 1244966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin continue; 1245066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1245166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mNeedScaledSizeTbl[stbl_cnt].width = scale_tbl[i].width; 1245266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mNeedScaledSizeTbl[stbl_cnt].height= scale_tbl[i].height; 1245366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stbl_cnt++; 1245466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1245566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1245666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return stbl_cnt; 1245766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1245866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1245966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1246066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getTotalSizeTblCnt 1246166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1246266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get total picture size count after adding dimensions that need scaling 1246366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1246466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1246566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1246666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : uint8_t type of picture size count 1246766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1246866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinsize_t QCameraParameters::QCameraReprocScaleParam::getTotalSizeTblCnt() 1246966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1247066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return mTotalSizeTblCnt; 1247166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1247266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1247366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1247466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getTotalSizeTbl 1247566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1247666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get picture size table after adding dimensions that need scaling 1247766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1247866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1247966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1248066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : cam_dimension_t list of picture size table 1248166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1248266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjincam_dimension_t *QCameraParameters::QCameraReprocScaleParam::getTotalSizeTbl() 1248366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1248466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!mScaleEnabled) 1248566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NULL; 1248666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1248766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return mTotalSizeTbl; 1248866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1248966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1249066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1249166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setEztune 1249266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1249366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Enable/Disable EZtune 1249466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1249566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1249666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setEztune() 1249766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1249866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 1249966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 1250066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.eztune.enable", prop, "0"); 1250166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bEztuneEnabled = atoi(prop); 1250266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1250366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1250466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1250566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1250666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isHDREnabled 1250766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1250866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: if HDR is enabled 1250966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1251066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1251166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1251266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true: needed 1251366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * false: no need 1251466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1251566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isHDREnabled() 1251666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 12517d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return ((m_bHDREnabled || m_HDRSceneEnabled)); 1251866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1251966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1252066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1252166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isAVTimerEnabled 1252266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1252366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: if AVTimer is enabled 1252466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1252566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1252666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1252766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true: needed 1252866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * false: no need 1252966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1253066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isAVTimerEnabled() 1253166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1253266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return m_bAVTimerEnabled; 1253366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1253466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1253566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1253666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* FUNCTION : isDISEnabled 1253766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 1253866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* DESCRIPTION: if DIS is enabled 1253966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 1254066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* PARAMETERS : none 1254166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 1254266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* RETURN : true: needed 1254366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* false: no need 1254466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*==========================================================================*/ 1254566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isDISEnabled() 1254666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1254766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return m_bDISEnabled; 1254866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1254966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1255066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1255166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* FUNCTION : getISType 1255266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 1255366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* DESCRIPTION: returns IS type 1255466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 1255566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* PARAMETERS : none 1255666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 1255766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* RETURN : IS type 1255866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 1255966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*==========================================================================*/ 1256066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjincam_is_type_t QCameraParameters::getISType() 1256166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1256266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return mIsType; 1256366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1256466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1256566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1256666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : MobicatMask 1256766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1256866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: returns mobicat mask 1256966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1257066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1257166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1257266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : mobicat mask 1257366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1257466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1257566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getMobicatMask() 1257666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1257766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return m_MobiMask; 1257866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1257966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1258066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1258166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : sendStreamConfigInfo 1258266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1258366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: send Stream config info. 1258466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1258566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1258666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @stream_config_info: Stream config information 1258766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1258866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1258966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1259066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1259166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1259266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::sendStreamConfigInfo(cam_stream_size_info_t &stream_config_info) { 1259366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1259466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1259566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1259666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1259766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1259866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1259966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 1260066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_META_STREAM_INFO, stream_config_info)) { 1260166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 1260266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1260366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1260466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1260566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1260666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1260766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set stream info parm"); 1260866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1260966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1261066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1261166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1261266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1261366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1261466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1261566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setStreamConfigure 1261666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1261766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set stream type, stream dimension for all configured streams. 1261866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1261966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1262066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @isCapture: Whether this configureation is for an image capture 1262166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @previewAsPostview: Use preview as postview 1262266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1262366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1262466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1262566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1262666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1262766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::setStreamConfigure(bool isCapture, 1262866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool previewAsPostview, bool resetConfig) { 1262966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1263066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1263166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_size_info_t stream_config_info; 1263266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1263366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool raw_yuv = false; 1263466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool raw_capture = false; 1263566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1263666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( m_pParamBuf == NULL ) { 1263766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1263866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1263966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1264066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&stream_config_info, 0, sizeof(stream_config_info)); 1264166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams = 0; 1264266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1264366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bStreamsConfigured) { 1264466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Reset stream config!!"); 1264566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = sendStreamConfigInfo(stream_config_info); 1264666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bStreamsConfigured = false; 1264766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1264866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (resetConfig) { 1264966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Done Resetting stream config!!"); 1265066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1265166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1265266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1265366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.hfr_mode = static_cast<cam_hfr_mode_t>(mHfrMode); 1265466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.buf_alignment = m_pCapability->buf_alignment; 1265566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.min_stride = m_pCapability->min_stride; 1265666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.min_scanline = m_pCapability->min_scanline; 1265766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.batch_size = getBufBatchCount(); 1265866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("buf_alignment=%d stride X scan=%dx%d batch size = %d\n", 1265966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->buf_alignment, 1266066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_stride, 1266166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->min_scanline, 1266266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.batch_size); 1266366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1266466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1266566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.raw_yuv", value, "0"); 1266666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin raw_yuv = atoi(value) > 0 ? true : false; 1266766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1266866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isZSLMode() && getRecordingHintValue() != true) { 1266966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1267066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_PREVIEW; 1267166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_PREVIEW, 1267266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1267366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_PREVIEW); 1267466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1267566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_PREVIEW]; 1267666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_PREVIEW, 1267766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1267866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1267966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1268066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1268166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_ANALYSIS; 1268266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_ANALYSIS, 1268366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1268466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_ANALYSIS); 1268566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1268666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_ANALYSIS]; 1268766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_ANALYSIS, 1268866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1268966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1269066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1269166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1269266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_SNAPSHOT; 1269366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, 1269466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1269566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_SNAPSHOT); 1269666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1269766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_SNAPSHOT]; 1269866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_SNAPSHOT, 1269966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1270066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1270166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1270266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUBWCEnabled() && getRecordingHintValue() != true) { 1270366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t fmt; 1270466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_PREVIEW,fmt); 1270566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (fmt == CAM_FORMAT_YUV_420_NV12_UBWC) { 1270666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1270766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_CALLBACK; 1270866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_CALLBACK, 1270966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1271066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_CALLBACK); 1271166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1271266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_CALLBACK]; 1271366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_CALLBACK, 1271466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1271566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1271666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1271766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1271866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1271966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (!isCapture) { 1272066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bRecordingHint) { 1272166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bDISEnabled) { 1272266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1272366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Make default value for IS_TYPE as IS_TYPE_EIS_2_0 1272466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.is_type", value, "4"); 1272566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mIsType = static_cast<cam_is_type_t>(atoi(value)); 1272666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1272766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mIsType = IS_TYPE_NONE; 1272866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1272966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.is_type = mIsType; 1273066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1273166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_SNAPSHOT; 1273266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, 1273366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1273466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_SNAPSHOT); 1273566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1273666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_SNAPSHOT]; 1273766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_SNAPSHOT, 1273866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1273966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1274066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1274166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1274266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_VIDEO; 1274366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_VIDEO, 1274466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1274566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_VIDEO); 1274666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1274766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_VIDEO]; 1274866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_VIDEO, 1274966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1275066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1275166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1275266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1275366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Analysis stream is needed by DCRF regardless of recording hint */ 1275466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((getDcrf() == true) || 1275566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (getRecordingHintValue() != true) || 12756d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch (fdModeInVideo())) { 1275766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1275866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_ANALYSIS; 1275966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_ANALYSIS, 1276066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1276166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_ANALYSIS); 1276266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1276366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_ANALYSIS]; 1276466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_ANALYSIS, 1276566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1276666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1276766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1276866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1276966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1277066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_PREVIEW; 1277166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_PREVIEW, 1277266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1277366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_PREVIEW); 1277466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1277566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_PREVIEW]; 1277666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_PREVIEW, 1277766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1277866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1277966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1278066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUBWCEnabled() && getRecordingHintValue() != true) { 1278166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_format_t fmt; 1278266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_PREVIEW,fmt); 1278366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (fmt == CAM_FORMAT_YUV_420_NV12_UBWC) { 1278466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1278566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_CALLBACK; 1278666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_CALLBACK, 1278766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1278866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_CALLBACK); 1278966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1279066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_CALLBACK]; 1279166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_CALLBACK, 1279266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1279366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1279466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1279566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1279666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1279766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1279866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isJpegPictureFormat() || isNV16PictureFormat() || isNV21PictureFormat()) { 1279966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!getofflineRAW()) { 1280066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1280166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_SNAPSHOT; 1280266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, 1280366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1280466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_SNAPSHOT); 1280566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1280666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_SNAPSHOT]; 1280766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_SNAPSHOT, 1280866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1280966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1281066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1281166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1281266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (previewAsPostview) { 1281366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1281466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_PREVIEW; 1281566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_PREVIEW, 1281666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1281766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_PREVIEW); 1281866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1281966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_PREVIEW]; 1282066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_PREVIEW, 1282166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1282266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1282366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1282466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1282566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_POSTVIEW; 1282666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_POSTVIEW, 1282766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1282866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_POSTVIEW); 1282966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1283066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_POSTVIEW]; 1283166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_POSTVIEW, 1283266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1283366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1283466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1283566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1283666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin raw_capture = true; 1283766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1283866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_RAW; 1283966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_RAW, 1284066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1284166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_RAW); 1284266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1284366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_RAW]; 1284466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_RAW, 1284566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1284666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1284766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1284866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1284966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1285066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((!raw_capture) && ((getofflineRAW() && !getRecordingHintValue()) 1285166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin || (raw_yuv))) { 1285266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t max_dim = {0,0}; 1285366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Find the Maximum dimension admong all the streams 1285466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (uint32_t j = 0; j < stream_config_info.num_streams; j++) { 1285566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (stream_config_info.stream_sizes[j].width > max_dim.width) { 1285666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_dim.width = stream_config_info.stream_sizes[j].width; 1285766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1285866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (stream_config_info.stream_sizes[j].height > max_dim.height) { 1285966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin max_dim.height = stream_config_info.stream_sizes[j].height; 1286066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1286166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1286266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Max Dimension = %d X %d", max_dim.width, max_dim.height); 1286366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updateRAW(max_dim); 1286466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[stream_config_info.num_streams] = 1286566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_STREAM_TYPE_RAW; 1286666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamDimension(CAM_STREAM_TYPE_RAW, 1286766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[stream_config_info.num_streams]); 1286866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin updatePpFeatureMask(CAM_STREAM_TYPE_RAW); 1286966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[stream_config_info.num_streams] = 1287066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[CAM_STREAM_TYPE_RAW]; 1287166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamFormat(CAM_STREAM_TYPE_RAW, 1287266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[stream_config_info.num_streams]); 1287366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.num_streams++; 1287466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1287566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (uint32_t k = 0; k < stream_config_info.num_streams; k++) { 1287666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGI("STREAM INFO : type %d, wxh: %d x %d, pp_mask: 0x%x Format = %d", 1287766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.type[k], 1287866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[k].width, 1287966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.stream_sizes[k].height, 1288066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.postprocess_mask[k], 1288166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_config_info.format[k]); 1288266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1288366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1288466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = sendStreamConfigInfo(stream_config_info); 1288566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_bStreamsConfigured = true; 1288666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1288766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1288866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1288966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1289066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1289166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : addOnlineRotation 1289266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1289366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: send additional rotation information for specific stream 1289466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1289566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1289666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @rotation: rotation 1289766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @streamId: internal stream id 1289866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @device_rotation: device rotation 1289966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1290066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1290166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1290266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1290366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1290466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::addOnlineRotation(uint32_t rotation, uint32_t streamId, 1290566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t device_rotation) 1290666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1290766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1290866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_rotation_info_t rotation_info; 1290966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&rotation_info, 0, sizeof(cam_rotation_info_t)); 1291066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1291166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Add jpeg rotation information */ 1291266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rotation == 0) { 1291366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.rotation = ROTATE_0; 1291466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (rotation == 90) { 1291566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.rotation = ROTATE_90; 1291666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (rotation == 180) { 1291766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.rotation = ROTATE_180; 1291866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (rotation == 270) { 1291966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.rotation = ROTATE_270; 1292066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1292166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.rotation = ROTATE_0; 1292266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1292366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.streamId = streamId; 1292466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1292566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Add device rotation information */ 1292666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (device_rotation == 0) { 1292766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.device_rotation = ROTATE_0; 1292866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (device_rotation == 90) { 1292966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.device_rotation = ROTATE_90; 1293066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (device_rotation == 180) { 1293166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.device_rotation = ROTATE_180; 1293266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (device_rotation == 270) { 1293366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.device_rotation = ROTATE_270; 1293466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1293566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rotation_info.device_rotation = ROTATE_0; 1293666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1293766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1293866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(initBatchUpdate(m_pParamBuf) < 0 ) { 1293966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1294066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1294166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1294266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1294366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_ROTATION, rotation_info)) { 1294466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update table"); 1294566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1294666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1294766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1294866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1294966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1295066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set stream info parm"); 1295166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1295266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1295366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1295466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1295566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1295666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1295766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1295866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : needThumbnailReprocess 1295966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1296066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Check if thumbnail reprocessing is needed 1296166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1296266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : @pFeatureMask - feature mask 1296366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1296466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true: needed 1296566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * false: no need 1296666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1296766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::needThumbnailReprocess(uint32_t *pFeatureMask) 1296866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1296966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiFocusEnabled() || isChromaFlashEnabled() || 1297066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isOptiZoomEnabled() || isUbiRefocus() || 1297166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isStillMoreEnabled() || 1297266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (isHDREnabled() && !isHDRThumbnailProcessNeeded()) 1297366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin || isUBWCEnabled()) { 1297466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *pFeatureMask &= ~CAM_QCOM_FEATURE_CHROMA_FLASH; 1297566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *pFeatureMask &= ~CAM_QCOM_FEATURE_UBIFOCUS; 1297666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *pFeatureMask &= ~CAM_QCOM_FEATURE_REFOCUS; 1297766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *pFeatureMask &= ~CAM_QCOM_FEATURE_OPTIZOOM; 1297866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *pFeatureMask &= ~CAM_QCOM_FEATURE_STILLMORE; 1297966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *pFeatureMask &= ~CAM_QCOM_FEATURE_HDR; 1298066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1298166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1298266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t thumb_dim; 1298366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getThumbnailSize(&(thumb_dim.width), &(thumb_dim.height)); 1298466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (thumb_dim.width == 0 || thumb_dim.height == 0) { 1298566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return false; 1298666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1298766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else { 1298866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return true; 1298966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1299066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1299166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1299266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1299366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1299466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumOfExtraBuffersForImageProc 1299566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1299666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of extra input buffers needed by image processing 1299766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1299866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1299966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1300066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of extra buffers needed by ImageProc; 1300166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 0 if not ImageProc enabled 1300266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1300366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getNumOfExtraBuffersForImageProc() 1300466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1300566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int numOfBufs = 0; 1300666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1300766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiRefocus()) { 1300866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (uint8_t)(m_pCapability->refocus_af_bracketing_need.burst_count - 1); 1300966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isUbiFocusEnabled()) { 1301066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs += m_pCapability->ubifocus_af_bracketing_need.burst_count - 1; 1301166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (m_bOptiZoomOn) { 1301266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs += m_pCapability->opti_zoom_settings_need.burst_count - 1; 1301366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isChromaFlashEnabled()) { 1301466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs += m_pCapability->chroma_flash_settings_need.burst_count - 1; 1301566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isStillMoreEnabled()) { 1301666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isSeeMoreEnabled()) { 1301766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_stillmore_config.burst_count = 1; 1301866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if ((m_stillmore_config.burst_count >= 1301966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->stillmore_settings_need.min_burst_count) && 1302066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_stillmore_config.burst_count <= 1302166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->stillmore_settings_need.max_burst_count)) { 1302266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs += m_stillmore_config.burst_count - 1; 1302366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1302466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs += m_pCapability->stillmore_settings_need.burst_count - 1; 1302566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1302666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isOEMFeatEnabled()) { 1302766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs += 1; 1302866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1302966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 13030d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return (uint8_t)(numOfBufs); 1303166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1303266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1303366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1303466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getExifBufIndex 1303566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1303666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get index of metadata to be used for EXIF 1303766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1303866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : @captureIndex - index of current captured frame 1303966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1304066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : index of metadata to be used for EXIF 1304166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1304266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t QCameraParameters::getExifBufIndex(uint32_t captureIndex) 1304366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1304466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t index = captureIndex; 1304566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1304666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiRefocus()) { 1304766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (captureIndex < m_pCapability->refocus_af_bracketing_need.burst_count) { 1304866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin index = captureIndex; 1304966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1305066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin index = 0; 1305166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1305266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isChromaFlashEnabled()) { 1305366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin index = m_pCapability->chroma_flash_settings_need.metadata_index; 1305466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isHDREnabled()) { 1305566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDR1xFrameEnabled() && isHDR1xExtraBufferNeeded()) { 1305666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin index = m_pCapability->hdr_bracketing_setting.num_frames; 1305766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1305866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin for (index = 0; index < m_pCapability->hdr_bracketing_setting.num_frames; index++) { 1305966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (0 == m_pCapability->hdr_bracketing_setting.exp_val.values[index]) { 1306066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin break; 1306166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1306266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1306366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (index == m_pCapability->hdr_bracketing_setting.num_frames) { 1306466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin index = captureIndex; 1306566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1306666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1306766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1306866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1306966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return index; 1307066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1307166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1307266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1307366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumberInBufsForSingleShot 1307466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1307566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of input buffers for single shot 1307666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1307766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1307866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1307966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of input buffers for single shot 1308066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1308166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t QCameraParameters::getNumberInBufsForSingleShot() 1308266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1308366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t numOfBufs = 1; 1308466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1308566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiRefocus()) { 1308666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_pCapability->refocus_af_bracketing_need.burst_count; 1308766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isUbiFocusEnabled()) { 1308866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_pCapability->ubifocus_af_bracketing_need.burst_count; 1308966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (m_bOptiZoomOn) { 1309066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_pCapability->opti_zoom_settings_need.burst_count; 1309166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isChromaFlashEnabled()) { 1309266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_pCapability->chroma_flash_settings_need.burst_count; 1309366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isHDREnabled()) { 1309466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_pCapability->hdr_bracketing_setting.num_frames; 1309566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDR1xFrameEnabled() && isHDR1xExtraBufferNeeded()) { 1309666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs++; 1309766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1309866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isStillMoreEnabled()) { 1309966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isSeeMoreEnabled()) { 1310066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_stillmore_config.burst_count = 1; 1310166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_stillmore_config.burst_count; 1310266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if ((m_stillmore_config.burst_count >= 1310366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->stillmore_settings_need.min_burst_count) && 1310466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_stillmore_config.burst_count <= 1310566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_pCapability->stillmore_settings_need.max_burst_count)) { 1310666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_stillmore_config.burst_count; 1310766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1310866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_pCapability->stillmore_settings_need.burst_count; 1310966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1311066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1311166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1311266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return numOfBufs; 1311366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1311466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1311566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1311666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumberOutBufsForSingleShot 1311766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1311866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of output buffers for single shot 1311966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1312066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1312166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1312266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of output buffers for single shot 1312366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1312466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t QCameraParameters::getNumberOutBufsForSingleShot() 1312566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1312666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t numOfBufs = 1; 1312766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1312866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isUbiRefocus()) { 1312966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = m_pCapability->refocus_af_bracketing_need.output_count; 1313066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (isHDREnabled()) { 1313166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHDR1xFrameEnabled()) { 1313266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs++; 1313366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1313466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1313566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1313666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return numOfBufs; 1313766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1313866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1313966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1314066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : is4k2kVideoResolution 1314166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1314266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: if resolution is 4k x 2k or true 4k x 2k 1314366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1314466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1314566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1314666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true: video resolution is 4k x 2k 1314766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * false: video resolution is not 4k x 2k 1314866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1314966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::is4k2kVideoResolution() 1315066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1315166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool enabled = false; 1315266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t resolution; 1315366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getVideoSize(&resolution.width, &resolution.height); 1315466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!(resolution.width < 3840 && resolution.height < 2160)) { 1315566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin enabled = true; 1315666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1315766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1315866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return enabled; 1315966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1316066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1316166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1316266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isPreviewSeeMoreRequired 1316366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1316466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: This function checks whether SeeMmore(SW TNR) needs to be applied for 1316566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * preview stream depending on video resoluion and setprop 1316666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1316766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1316866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1316966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : true: If SeeMore needs to apply 1317066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * false: No need to apply 1317166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1317266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isPreviewSeeMoreRequired() 1317366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1317466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t dim; 1317566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 1317666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1317766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getVideoSize(&dim.width, &dim.height); 1317866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 1317966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.preview.seemore", prop, "0"); 1318066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int enable = atoi(prop); 1318166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1318266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Enable SeeMore for preview stream if : 1318366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // 1. Video resolution <= (1920x1080) (or) 1318466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // 2. persist.camera.preview.seemore is set 1318566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("width=%d, height=%d, enable=%d", dim.width, dim.height, enable); 1318666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (((dim.width * dim.height) <= (1920 * 1080)) || enable); 1318766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1318866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1318966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1319066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updateDebugLevel 1319166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1319266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: send CAM_INTF_PARM_UPDATE_DEBUG_LEVEL to backend 1319366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1319466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1319566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1319666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : NO_ERROR --success 1319766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * int32_t type of status 1319866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1319966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updateDebugLevel() 1320066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1320166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( m_pParamBuf == NULL ) { 1320266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_INIT; 1320366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1320466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1320566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = initBatchUpdate(m_pParamBuf); 1320666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( rc != NO_ERROR ) { 1320766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1320866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1320966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1321066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1321166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t dummyDebugLevel = 0; 1321266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* The value of dummyDebugLevel is irrelavent. On 1321366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * CAM_INTF_PARM_UPDATE_DEBUG_LEVEL, read debug property */ 1321466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_UPDATE_DEBUG_LEVEL, dummyDebugLevel)) { 1321566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Parameters batch failed"); 1321666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1321766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1321866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1321966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1322066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ( rc != NO_ERROR ) { 1322166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to commit batch parameters"); 1322266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1322366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1322466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1322566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1322666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1322766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1322866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1322966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setOfflineRAW 1323066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1323166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Function to decide Offline RAW feature. 1323266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1323366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1323466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @raw_value: offline raw value to set. 1323566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1323666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : none 1323766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1323866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setOfflineRAW(bool raw_value) 1323966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1324066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1324166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool raw_yuv = false; 1324266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool offlineRaw = false; 1324366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1324466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (raw_value) { 1324566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mOfflineRAW = true; 1324666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Offline Raw %d", mOfflineRAW); 1324766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 1324866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1324966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1325066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.raw_yuv", value, "0"); 1325166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin raw_yuv = atoi(value) > 0 ? true : false; 1325266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.offlineraw", value, "0"); 1325366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin offlineRaw = atoi(value) > 0 ? true : false; 1325466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((raw_yuv || isRdiMode()) && offlineRaw) { 1325566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mOfflineRAW = true; 1325666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1325766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mOfflineRAW = false; 1325866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1325966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Offline Raw %d", mOfflineRAW); 1326066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1326166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1326266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1326366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : updatePpFeatureMask 1326466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1326566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Updates the feature mask for a particular stream depending 1326666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * on current client configuration. 1326766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1326866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1326966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @stream_type: Camera stream type 1327066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1327166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : NO_ERROR --success 1327266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * int32_t type of status 1327366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1327466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::updatePpFeatureMask(cam_stream_type_t stream_type) { 1327566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1327666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t feature_mask = 0; 1327766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1327866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (stream_type >= CAM_STREAM_TYPE_MAX) { 1327966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Error!! stream type: %d not valid", stream_type); 1328066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return -1; 1328166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1328266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1328366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Update feature mask for SeeMore in video and video preview 1328466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isSeeMoreEnabled() && ((stream_type == CAM_STREAM_TYPE_VIDEO) || 1328566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (stream_type == CAM_STREAM_TYPE_PREVIEW && getRecordingHintValue() && 1328666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isPreviewSeeMoreRequired()))) { 1328766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_LLVD; 1328866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1328966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1329066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isHighQualityNoiseReductionMode() && 1329166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((stream_type == CAM_STREAM_TYPE_VIDEO) || 13292d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch (stream_type == CAM_STREAM_TYPE_PREVIEW && getRecordingHintValue() && 13293d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch isPreviewSeeMoreRequired()))) { 1329466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QTI_FEATURE_SW_TNR; 1329566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1329666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1329766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Do not enable feature mask for ZSL/non-ZSL/liveshot snapshot except for 4K2k case 1329866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((getRecordingHintValue() && 1329966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (stream_type == CAM_STREAM_TYPE_SNAPSHOT) && is4k2kVideoResolution()) || 1330066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (stream_type != CAM_STREAM_TYPE_SNAPSHOT)) { 1330166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_nMinRequiredPpMask & CAM_QCOM_FEATURE_SHARPNESS) && 1330266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin !isOptiZoomEnabled()) { 1330366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_SHARPNESS; 1330466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1330566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1330666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_nMinRequiredPpMask & CAM_QCOM_FEATURE_EFFECT) { 1330766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_EFFECT; 1330866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1330966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isWNREnabled()) { 1331066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_DENOISE2D; 1331166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1331266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1331366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Set flip mode based on Stream type; 1331466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int flipMode = getFlipMode(stream_type); 1331566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (flipMode > 0) { 1331666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_FLIP; 1331766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1331866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1331966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1332066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((isTNRVideoEnabled() && (CAM_STREAM_TYPE_VIDEO == stream_type)) 1332166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin || (isTNRPreviewEnabled() && (CAM_STREAM_TYPE_PREVIEW == stream_type))) { 1332266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_CPP_TNR; 1332366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1332466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isEztuneEnabled() && 1332566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((CAM_STREAM_TYPE_PREVIEW == stream_type) || 1332666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (CAM_STREAM_TYPE_SNAPSHOT == stream_type))) { 1332766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_EZTUNE; 1332866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1332966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1333066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((getCDSMode() != CAM_CDS_MODE_OFF) && 1333166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((CAM_STREAM_TYPE_PREVIEW == stream_type) || 1333266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (CAM_STREAM_TYPE_VIDEO == stream_type) || 1333366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (CAM_STREAM_TYPE_CALLBACK == stream_type) || 1333466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ((CAM_STREAM_TYPE_SNAPSHOT == stream_type) && 1333566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getRecordingHintValue() && is4k2kVideoResolution()))) { 1333666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_nMinRequiredPpMask & CAM_QCOM_FEATURE_DSDN) { 1333766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_DSDN; 1333866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1333966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_CDS; 1334066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1334166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1334266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1334366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isTNRSnapshotEnabled() && (CAM_STREAM_TYPE_SNAPSHOT == stream_type) 1334466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && (isZSLMode() || getRecordingHintValue())) { 1334566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_CPP_TNR; 1334666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1334766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1334866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Rotation could also have an effect on pp feature mask 1334966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_pp_feature_config_t config; 1335066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t dim; 1335166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(&config, 0, sizeof(cam_pp_feature_config_t)); 1335266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getStreamRotation(stream_type, config, dim); 1335366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= config.feature_mask; 1335466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1335566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Dual Camera scenarios 1335666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // all feature masks are disabled for preview and analysis streams for aux session 1335766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // all required feature masks for aux session preview and analysis streams need 1335866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // to be enabled explicitly here 1335966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ///@note When aux camera is of bayer type, keep pp mask as is or we'd run 1336066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /// into stream mapping problems. YUV sensor is marked as interleaved and has 1336166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /// preferred mapping setup so we don't see any mapping issues. 1336266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_relCamSyncInfo.sync_control == CAM_SYNC_RELATED_SENSORS_ON) { 1336366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (((CAM_STREAM_TYPE_ANALYSIS == stream_type) || 1336466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (CAM_STREAM_TYPE_PREVIEW == stream_type)) && 1336566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_relCamSyncInfo.mode == CAM_MODE_SECONDARY) && 1336666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_pCapability->sensor_type.sens_type == CAM_SENSOR_YUV)) { 1336766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Disabling all pp feature masks for aux preview and " 1336866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin "analysis streams"); 1336966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask = 0; 1337066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1337166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1337266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // all feature masks need to be enabled here 1337366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // enable DCRF feature mask on analysis stream in case of dual camera 1337466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_bDcrfEnabled && (CAM_STREAM_TYPE_ANALYSIS == stream_type)) { 1337566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask |= CAM_QCOM_FEATURE_DCRF; 1337666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1337766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin feature_mask &= ~CAM_QCOM_FEATURE_DCRF; 1337866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1337966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1338066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1338166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Store stream feature mask 1338266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setStreamPpMask(stream_type, feature_mask); 1338366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("stream type: %d, pp_mask: 0x%x", stream_type, feature_mask); 1338466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1338566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1338666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1338766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1338866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1338966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setStreamPpMask 1339066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1339166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Stores a particular feature mask for a given camera stream 1339266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1339366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1339466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @stream_type: Camera stream type 1339566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @pp_mask : Feature mask 1339666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1339766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : NO_ERROR --success 1339866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * int32_t type of status 1339966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1340066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setStreamPpMask(cam_stream_type_t stream_type, 1340166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t pp_mask) { 1340266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1340366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(stream_type >= CAM_STREAM_TYPE_MAX) { 1340466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1340566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1340666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1340766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mStreamPpMask[stream_type] = pp_mask; 1340866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1340966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1341066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1341166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1341266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getStreamPpMask 1341366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1341466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Retrieves the feature mask for a given camera stream 1341566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1341666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1341766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @stream_type: Camera stream type 1341866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @pp_mask : Feature mask 1341966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1342066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : NO_ERROR --success 1342166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * int32_t type of status 1342266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1342366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getStreamPpMask(cam_stream_type_t stream_type, 1342466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t &pp_mask) { 1342566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1342666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(stream_type >= CAM_STREAM_TYPE_MAX) { 1342766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_TYPE; 1342866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1342966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1343066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pp_mask = mStreamPpMask[stream_type]; 1343166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1343266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1343366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1343466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1343566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isMultiPassReprocessing 1343666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1343766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Read setprop to enable/disable multipass 1343866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1343966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1344066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1344166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : TRUE -- If enabled 1344266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FALSE -- disabled 1344366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1344466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isMultiPassReprocessing() 1344566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1344666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1344766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int multpass = 0; 1344866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1344966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.multi_pass", value, "0"); 1345066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin multpass = atoi(value); 1345166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1345266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (multpass == 0)? FALSE : TRUE; 1345366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1345466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1345566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1345666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setReprocCount 1345766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1345866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Set total reprocessing pass count 1345966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1346066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1346166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1346266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : None 1346366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1346466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setReprocCount() 1346566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1346666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalPPCount = 1; //Default reprocessing Pass count 1346766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1346866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getManualCaptureMode() >= 1346966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_MANUAL_CAPTURE_TYPE_3) { 1347066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("Additional post processing enabled for manual capture"); 1347166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalPPCount++; 1347266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1347366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1347466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!isMultiPassReprocessing()) { 1347566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 1347666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1347766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1347866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((getZoomLevel() != 0) 1347966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && (getBurstCountForAdvancedCapture() 1348066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin == getNumOfSnapshots())) { 1348166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("2 Pass postprocessing enabled"); 1348266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mTotalPPCount++; 1348366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1348466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1348566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1348666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1348766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isUBWCEnabled 1348866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1348966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Function to get UBWC hardware support. 1349066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1349166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : None 1349266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1349366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : TRUE -- UBWC format supported 1349466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FALSE -- UBWC is not supported. 1349566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1349666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isUBWCEnabled() 1349766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1349866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifdef UBWC_PRESENT 1349966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1350066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prop_value = 0; 1350166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0, sizeof(value)); 1350266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("debug.gralloc.gfx_ubwc_disable", value, "0"); 1350366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prop_value = atoi(value); 1350466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prop_value) { 1350566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1350666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1350766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1350866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Disable UBWC if it is YUV sensor. 1350966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((m_pCapability != NULL) && 1351066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (m_pCapability->sensor_type.sens_type == CAM_SENSOR_YUV)) { 1351166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1351266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1351366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1351466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Disable UBWC if Eztune is enabled 1351566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Eztune works on CPP output and cannot understand UBWC buffer. 1351666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0, sizeof(value)); 1351766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.eztune.enable", value, "0"); 1351866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin prop_value = atoi(value); 1351966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (prop_value) { 1352066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1352166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1352266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return TRUE; 1352366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#else 1352466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1352566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 1352666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1352766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1352866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1352966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isPostProcScaling 1353066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1353166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: is scaling to be done by CPP? 1353266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1353366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1353466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1353566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : TRUE : If CPP scaling enabled 1353666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FALSE : If VFE scaling enabled 1353766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1353866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isPostProcScaling() 1353966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1354066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1354166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool cpp_scaling = FALSE; 1354266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1354366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getRecordingHintValue()) { 1354466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1354566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1354666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1354766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.pp_scaling", value, "0"); 1354866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cpp_scaling = atoi(value) > 0 ? TRUE : FALSE; 1354966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1355066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Post proc scaling enabled : %d", 1355166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cpp_scaling); 1355266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return cpp_scaling; 1355366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1355466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1355566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1355666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isLLNoiseEnabled 1355766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1355866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Low light noise change 1355966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1356066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1356166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1356266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : TRUE : If low light noise enabled 1356366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FALSE : If low light noise disabled 1356466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1356566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isLLNoiseEnabled() 1356666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1356766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1356866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool llnoise = FALSE; 1356966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1357066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!isWNREnabled()) { 1357166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FALSE; 1357266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1357366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1357466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.llnoise", value, "0"); 1357566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin llnoise = atoi(value) > 0 ? TRUE : FALSE; 1357666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1357766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Low light noise enabled : %d", 1357866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin llnoise); 1357966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return llnoise; 1358066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1358166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1358266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1358366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setBufBatchCount 1358466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1358566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Function to configure batch buffer 1358666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1358766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : int8_t buf_cnt 1358866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Buffer batch count 1358966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1359066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : None 1359166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1359266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setBufBatchCount(int8_t buf_cnt) 1359366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1359466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mBufBatchCnt = 0; 1359566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1359666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t count = 0; 1359766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1359866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.batchcount", value, "0"); 1359966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin count = atoi(value); 1360066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1360166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!(count != 0 || buf_cnt > CAMERA_MIN_BATCH_COUNT)) { 1360266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Buffer batch count = %d", mBufBatchCnt); 1360366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_BATCH_SIZE, mBufBatchCnt); 1360466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 1360566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1360666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1360766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin while((m_pCapability->max_batch_bufs_supported != 0) 1360866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && (m_pCapability->max_batch_bufs_supported < buf_cnt)) { 1360966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin buf_cnt = buf_cnt / 2; 1361066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1361166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1361266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (count > 0) { 1361366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mBufBatchCnt = count; 1361466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Buffer batch count = %d", mBufBatchCnt); 1361566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_BATCH_SIZE, mBufBatchCnt); 1361666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 1361766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1361866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1361966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (buf_cnt > CAMERA_MIN_BATCH_COUNT) { 1362066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mBufBatchCnt = buf_cnt; 1362166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Buffer batch count = %d", mBufBatchCnt); 1362266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_BATCH_SIZE, mBufBatchCnt); 1362366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 1362466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1362566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1362666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1362766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1362866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setVideoBatch() 1362966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1363066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Function to batching for video. 1363166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1363266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1363366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1363466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : None 1363566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1363666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setVideoBatchSize() 1363766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1363866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1363966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t minBatchcnt = 2; //Batching enabled only if batch size if greater than 2; 1364066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t width = 0, height = 0; 1364166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mVideoBatchSize = 0; 1364266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1364366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (getBufBatchCount()) { 1364466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //We don't need HAL to HAL batching if camera batching enabled. 1364566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 1364666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1364766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1364866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getVideoSize(&width, &height); 1364966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((width > 1920) || (height > 1080)) { 1365066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Cannot enable batch mode for video size bigger than 1080p 1365166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return; 1365266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1365366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1365466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Batch size "6" is the recommended and gives optimal power saving. 1365566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.video.batchsize", value, "0"); 1365666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mVideoBatchSize = atoi(value); 1365766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1365866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (mVideoBatchSize > CAMERA_MAX_CONSUMER_BATCH_BUFFER_SIZE) { 1365966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mVideoBatchSize = CAMERA_MAX_CONSUMER_BATCH_BUFFER_SIZE; 1366066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (mVideoBatchSize <= minBatchcnt) { 1366166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Batching enabled only if batch size is greater than 2. 1366266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mVideoBatchSize = 0; 1366366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1366466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("mVideoBatchSize = %d", mVideoBatchSize); 1366566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin set(KEY_QC_VIDEO_BATCH_SIZE, mVideoBatchSize); 1366666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1366766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1366866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1366966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setCustomParams 1367066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1367166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Function to update OEM specific custom parameter 1367266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1367366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : params: Input Parameter object 1367466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1367566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : error value 1367666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 136771687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanint32_t QCameraParameters::setCustomParams(__unused const QCameraParameters& params) 1367866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1367966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1368066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1368166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Application specific parameter can be read from "params" and update m_pParamBuf 1368266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin We can also update internal OEM custom parameters in this funcion. 1368366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin "CAM_CUSTOM_PARM_EXAMPLE" is used as a example */ 1368466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1368566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Get the pointer of shared buffer for custom parameter*/ 1368666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin custom_parm_buffer_t *customParam = 1368766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin (custom_parm_buffer_t *)POINTER_OF_META(CAM_INTF_PARM_CUSTOM, m_pParamBuf); 1368866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1368966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1369066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*start updating custom parameter values*/ 1369166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(customParam, CAM_CUSTOM_PARM_EXAMPLE, 1)) { 1369266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update CAM_CUSTOM_PARM_DUMMY"); 1369366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1369466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1369566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1369666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*set custom parameter values to main parameter buffer. Update isvalid flag*/ 1369766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ADD_GET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CUSTOM); 1369866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1369966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1370066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1370166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1370266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1370366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : dump 1370466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1370566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Composes a string based on current configuration 1370666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1370766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1370866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1370966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : Formatted string 1371066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1371166f9976540f830b0090ff2ca557b0364a53f2008Patrick TjinString8 QCameraParameters::dump() 1371266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1371366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 str("\n"); 1371466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char s[128]; 1371566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1371666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "Preview Pixel Fmt: %d\n", getPreviewHalPixelFormat()); 1371766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1371866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1371966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "ZSL Burst Interval: %d\n", getZSLBurstInterval()); 1372066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1372166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1372266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "ZSL Queue Depth: %d\n", getZSLQueueDepth()); 1372366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1372466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1372566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "ZSL Back Look Count %d\n", getZSLBackLookCount()); 1372666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1372766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1372866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "Max Unmatched Frames In Queue: %d\n", 1372966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getMaxUnmatchedFramesInQueue()); 1373066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1373166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1373266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "Is ZSL Mode: %d\n", isZSLMode()); 1373366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1373466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1373566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "Is No Display Mode: %d\n", isNoDisplayMode()); 1373666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1373766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1373866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "Is WNR Enabled: %d\n", isWNREnabled()); 1373966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1374066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1374166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isHfrMode: %d\n", isHfrMode()); 1374266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1374366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1374466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getNumOfSnapshots: %d\n", getNumOfSnapshots()); 1374566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1374666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1374766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getNumOfExtraHDRInBufsIfNeeded: %d\n", 1374866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getNumOfExtraHDRInBufsIfNeeded()); 1374966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1375066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1375166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getNumOfExtraHDROutBufsIfNeeded: %d\n", 1375266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getNumOfExtraHDROutBufsIfNeeded()); 1375366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1375466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1375566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getRecordingHintValue: %d\n", getRecordingHintValue()); 1375666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1375766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1375866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getJpegQuality: %u\n", getJpegQuality()); 1375966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1376066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1376166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getJpegRotation: %u\n", getJpegRotation()); 1376266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1376366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1376466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isHistogramEnabled: %d\n", isHistogramEnabled()); 1376566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1376666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1376766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isFaceDetectionEnabled: %d\n", isFaceDetectionEnabled()); 1376866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1376966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1377066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isHDREnabled: %d\n", isHDREnabled()); 1377166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1377266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1377366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isAutoHDREnabled: %d\n", isAutoHDREnabled()); 1377466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1377566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1377666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isAVTimerEnabled: %d\n", isAVTimerEnabled()); 1377766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1377866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1377966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getFocusMode: %d\n", getFocusMode()); 1378066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1378166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1378266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isJpegPictureFormat: %d\n", isJpegPictureFormat()); 1378366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1378466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1378566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isNV16PictureFormat: %d\n", isNV16PictureFormat()); 1378666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1378766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1378866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isNV21PictureFormat: %d\n", isNV21PictureFormat()); 1378966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1379066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1379166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isSnapshotFDNeeded: %d\n", isSnapshotFDNeeded()); 1379266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1379366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1379466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isHDR1xFrameEnabled: %d\n", isHDR1xFrameEnabled()); 1379566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1379666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1379766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isYUVFrameInfoNeeded: %d\n", isYUVFrameInfoNeeded()); 1379866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1379966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1380066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isHDR1xExtraBufferNeeded: %d\n", 1380166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isHDR1xExtraBufferNeeded()); 1380266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1380366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1380466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isHDROutputCropEnabled: %d\n", isHDROutputCropEnabled()); 1380566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1380666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1380766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isPreviewFlipChanged: %d\n", isPreviewFlipChanged()); 1380866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1380966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1381066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isVideoFlipChanged: %d\n", isVideoFlipChanged()); 1381166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1381266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1381366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isSnapshotFlipChanged: %d\n", isSnapshotFlipChanged()); 1381466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1381566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1381666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isHDRThumbnailProcessNeeded: %d\n", 1381766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isHDRThumbnailProcessNeeded()); 1381866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1381966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1382066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getAutoFlickerMode: %d\n", getAutoFlickerMode()); 1382166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1382266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1382366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getNumOfExtraBuffersForImageProc: %d\n", 1382466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getNumOfExtraBuffersForImageProc()); 1382566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1382666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1382766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isUbiFocusEnabled: %d\n", isUbiFocusEnabled()); 1382866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1382966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1383066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isChromaFlashEnabled: %d\n", isChromaFlashEnabled()); 1383166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1383266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1383366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isOptiZoomEnabled: %d\n", isOptiZoomEnabled()); 1383466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1383566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1383666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "isStillMoreEnabled: %d\n", isStillMoreEnabled()); 1383766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1383866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1383966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin snprintf(s, 128, "getBurstCountForAdvancedCapture: %d\n", 1384066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin getBurstCountForAdvancedCapture()); 1384166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin str += s; 1384266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1384366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return str; 1384466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1384566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1384666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1384766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumOfExtraBuffersForVideo 1384866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1384966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of extra buffers needed by image processing 1385066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1385166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1385266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1385366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of extra buffers needed by ImageProc; 1385466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 0 if not ImageProc enabled 1385566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1385666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getNumOfExtraBuffersForVideo() 1385766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1385866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t numOfBufs = 0; 1385966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1386066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (isSeeMoreEnabled() || isHighQualityNoiseReductionMode()) { 1386166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = 1; 1386266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1386366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1386466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return numOfBufs; 1386566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1386666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1386766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1386866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getNumOfExtraBuffersForPreview 1386966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1387066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of extra buffers needed by image processing 1387166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1387266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1387366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1387466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of extra buffers needed by ImageProc; 1387566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 0 if not ImageProc enabled 1387666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1387766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getNumOfExtraBuffersForPreview() 1387866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1387966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t numOfBufs = 0; 1388066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1388166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if ((isSeeMoreEnabled() || isHighQualityNoiseReductionMode()) 1388266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin && !isZSLMode() && getRecordingHintValue()) { 1388366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numOfBufs = 1; 1388466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1388566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1388666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return numOfBufs; 1388766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1388866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1388966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1389066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setToneMapMode 1389166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1389266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: enable or disable tone map 1389366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1389466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1389566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @enable : enable: 1; disable 0 1389666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @initCommit: if configuration list needs to be initialized and commited 1389766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1389866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1389966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1390066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1390166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1390266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setToneMapMode(uint32_t enable, bool initCommit) 1390366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1390466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1390566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("tone map mode %d ", enable); 1390666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1390766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initCommit) { 1390866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initBatchUpdate(m_pParamBuf) < 0) { 1390966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1391066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FAILED_TRANSACTION; 1391166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1391266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1391366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1391466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_TONE_MAP_MODE, enable)) { 1391566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update tone map mode"); 1391666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1391766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1391866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1391966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initCommit) { 1392066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1392166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (rc != NO_ERROR) { 1392266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to commit tone map mode"); 1392366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1392466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1392566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1392666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1392766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1392866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1392966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1393066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1393166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getLongshotStages 1393266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1393366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: get number of stages for longshot 1393466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1393566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1393666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1393766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : number of stages 1393866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1393966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t QCameraParameters::getLongshotStages() 1394066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1394166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t numStages = 1394266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin isLowMemoryDevice() ? CAMERA_MIN_LONGSHOT_STAGES : CAMERA_DEFAULT_LONGSHOT_STAGES; 1394366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1394466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 1394566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 1394666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.longshot.stages", prop, "0"); 1394766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t propStages = atoi(prop); 1394866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (propStages > 0 && propStages <= CAMERA_DEFAULT_LONGSHOT_STAGES) { 1394966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin numStages = propStages; 1395066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1395166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return numStages; 1395266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1395366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1395466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1395566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setCDSMode 1395666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1395766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set CDS mode 1395866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1395966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1396066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @cds_mode : cds mode 1396166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @initCommit: if configuration list needs to be initialized and commited 1396266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1396366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1396466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1396566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1396666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1396766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setCDSMode(int32_t cds_mode, bool initCommit) 1396866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1396966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initCommit) { 1397066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initBatchUpdate(m_pParamBuf) < 0) { 1397166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to initialize group update table"); 1397266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return FAILED_TRANSACTION; 1397366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1397466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1397566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1397666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1397766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_CDS_MODE, cds_mode)) { 1397866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to update cds mode"); 1397966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1398066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1398166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1398266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (initCommit) { 1398366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = commitSetBatch(); 1398466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (NO_ERROR != rc) { 1398566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("Failed to set cds mode"); 1398666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1398766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1398866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1398966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1399066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("cds mode -> %d", cds_mode); 1399166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1399266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1399366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1399466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1399566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1399666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setLowLightCapture 1399766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1399866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Function to enable low light capture 1399966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1400066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinvoid QCameraParameters::setLowLightCapture() 1400166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1400266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char prop[PROPERTY_VALUE_MAX]; 1400366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(prop, 0, sizeof(prop)); 1400466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.llc", prop, "0"); 1400566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LLCaptureEnabled = (atoi(prop) > 0) ? TRUE : FALSE; 1400666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1400766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_LLCaptureEnabled) { 1400866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_LowLightLevel = CAM_LOW_LIGHT_OFF; 1400966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1401066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1401166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1401266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 14013d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * FUNCTION : fdModeInVideo 1401466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1401566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: FD in Video change 1401666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1401766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1401866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 14019d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * RETURN : FD Mode in Video 14020d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 0 : If FD in Video disabled 14021d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 1 : If FD in Video enabled for Detection, focus 14022d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 2 : If FD in Video enabled only for focus 1402366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 14024d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschuint8_t QCameraParameters::fdModeInVideo() 1402566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1402666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 14027d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint8_t fdvideo = 0; 1402866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1402966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (!m_pCapability->hw_analysis_supported) { 14030d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return 0; 1403166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1403266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1403366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.fdvideo", value, "0"); 14034d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch fdvideo = (atoi(value) > 0) ? atoi(value) : 0; 1403566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14036d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGD("FD mode in Video : %d", fdvideo); 1403766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return fdvideo; 1403866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1403966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1404066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1404166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setManualCaptureMode 1404266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1404366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Function to set Manual capture modes 1404466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1404566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1404666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @mode : Capture mode configured 1404766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1404866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1404966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1405066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1405166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1405266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::setManualCaptureMode(QCameraManualCaptureModes mode) 1405366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1405466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t rc = NO_ERROR; 1405566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1405666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t count = 0; 1405766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1405866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.manual.capture", value, "0"); 1405966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin count = atoi(value); 1406066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1406166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (count) { 1406266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (mode == CAM_MANUAL_CAPTURE_TYPE_OFF) { 1406366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_ManualCaptureMode = CAM_MANUAL_CAPTURE_TYPE_1; 1406466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1406566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_ManualCaptureMode = mode; 1406666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1406766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1406866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_ManualCaptureMode = CAM_MANUAL_CAPTURE_TYPE_OFF; 1406966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1407066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1407166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (m_ManualCaptureMode == CAM_MANUAL_CAPTURE_TYPE_2) { 1407266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setOfflineRAW(FALSE); 1407366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else if (m_ManualCaptureMode >= CAM_MANUAL_CAPTURE_TYPE_3) { 1407466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setOfflineRAW(TRUE); 1407566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } else { 1407666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setOfflineRAW(FALSE); 1407766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1407866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin setReprocCount(); 1407966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGH("Manual capture mode - %d", m_ManualCaptureMode); 1408066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return rc; 1408166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1408266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1408366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1408466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isReprocScaleEnabled 1408566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1408666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Whether reprocess scale is enabled or not 1408766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1408866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1408966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1409066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : TRUE : Reprocess scale is enabled 1409166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FALSE : Reprocess scale is not enabled 1409266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1409366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isReprocScaleEnabled() 1409466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1409566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return m_reprocScaleParam.isScaleEnabled(); 1409666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1409766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1409866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1409966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : isUnderReprocScaling 1410066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1410166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Whether image is under reprocess scaling 1410266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1410366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : none 1410466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1410566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : TRUE : Image is under reprocess scaling 1410666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FALSE : Image is not under reprocess scaling 1410766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1410866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinbool QCameraParameters::isUnderReprocScaling() 1410966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1411066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return m_reprocScaleParam.isUnderScaling(); 1411166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1411266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1411366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1411466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : getPicSizeFromAPK 1411566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1411666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: Get picture size set from application. 1411766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1411866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1411966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @width : with set by application 1412066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @height : height set by application 1412166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1412266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1412366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1412466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1412566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 1412666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t QCameraParameters::getPicSizeFromAPK(int &width, int &height) 1412766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1412866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return m_reprocScaleParam.getPicSizeFromAPK(width, height); 1412966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1413066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1413166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1413266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1413366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/*=========================================================================== 1413466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * FUNCTION : setDualLedCalibration 1413566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1413666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * DESCRIPTION: set dual led calibration 1413766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1413866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * PARAMETERS : 1413966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * @params : user setting parameters 1414066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1414166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * RETURN : int32_t type of status 1414266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * NO_ERROR -- success 1414366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * none-zero failure code 1414466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *==========================================================================*/ 141451687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajanint32_t QCameraParameters::setDualLedCalibration( 141461687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan __unused const QCameraParameters& params) 1414766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 1414866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char value[PROPERTY_VALUE_MAX]; 1414966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t calibration = 0; 1415066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1415166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin memset(value, 0, sizeof(value)); 1415266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin property_get("persist.camera.dual_led_calib", value, "0"); 1415366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin calibration = atoi(value); 1415466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (calibration != m_dualLedCalibration) { 1415566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_dualLedCalibration = calibration; 1415666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGD("%s:updating calibration=%d m_dualLedCalibration=%d", 1415766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin __func__, calibration, m_dualLedCalibration); 1415866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 1415966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 1416066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CAM_INTF_PARM_DUAL_LED_CALIBRATION, 1416166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin m_dualLedCalibration)) { 1416266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin LOGE("%s:Failed to update dual led calibration param", __func__); 1416366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return BAD_VALUE; 1416466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1416566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } 1416666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return NO_ERROR; 1416766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 1416866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14169d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch/*=========================================================================== 14170d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * FUNCTION : setinstantAEC 14171d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 14172d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * DESCRIPTION: set instant AEC value to backend 14173d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 14174d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * PARAMETERS : 14175d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * @value : instant aec enabled or not. 14176d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 0 - disable 14177d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 1 - Enable and set agressive AEC algo to the backend 14178d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 2 - Enable and set fast AEC algo to the backend 14179d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 14180d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * RETURN : int32_t type of status 14181d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * NO_ERROR -- success 14182d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * none-zero failure code 14183d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch *==========================================================================*/ 14184d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschint32_t QCameraParameters::setInstantAEC(uint8_t value, bool initCommit) 14185d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch{ 14186d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (initCommit) { 14187d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (initBatchUpdate(m_pParamBuf) < 0) { 14188d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGE("Failed to initialize group update table"); 14189d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return FAILED_TRANSACTION; 14190d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 14191d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 14192d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 14193d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int32_t rc = NO_ERROR; 14194d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, CAM_INTF_PARM_INSTANT_AEC, value)) { 14195d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGE("Failed to instant aec value"); 14196d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return BAD_VALUE; 14197d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 14198d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 14199d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // set the new value 14200d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch char val[8]; 14201d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch snprintf(val, sizeof(val), "%d", value); 14202d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch updateParamEntry(KEY_QC_INSTANT_AEC, val); 14203d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 14204d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (initCommit) { 14205d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch rc = commitSetBatch(); 14206d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (NO_ERROR != rc) { 14207d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGE("Failed to instant aec value"); 14208d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return rc; 14209d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 14210d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 14211d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 14212d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGD(" Instant AEC value set to backend %d", value); 14213d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch m_bInstantAEC = value; 14214d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return rc; 14215d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch} 14216d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 14217d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch/*=========================================================================== 14218d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * FUNCTION : setAdvancedCaptureMode 14219d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 14220d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * DESCRIPTION: set advanced capture mode 14221d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 14222d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * PARAMETERS : none 14223d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * 14224d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * RETURN : int32_t type of status 14225d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * NO_ERROR -- success 14226d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch * none-zero failure code 14227d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch *==========================================================================*/ 14228d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschint32_t QCameraParameters::setAdvancedCaptureMode() 14229d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch{ 14230d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint8_t value = isAdvCamFeaturesEnabled(); 14231d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGD("updating advanced capture mode value to %d",value); 14232d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if (ADD_SET_PARAM_ENTRY_TO_BATCH(m_pParamBuf, 14233d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch CAM_INTF_PARM_ADV_CAPTURE_MODE, value)) { 14234d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch LOGE("Failed to set advanced capture mode param"); 14235d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return BAD_VALUE; 14236d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch } 14237d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch return NO_ERROR; 14238d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch} 14239d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 1424066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; // namespace qcamera 14241