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