1bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani/*
2bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani**
3bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** Copyright 2008, The Android Open Source Project
4bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani**
5bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** Licensed under the Apache License, Version 2.0 (the "License");
6bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** you may not use this file except in compliance with the License.
7bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** You may obtain a copy of the License at
8bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani**
9bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani**     http://www.apache.org/licenses/LICENSE-2.0
10bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani**
11bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** Unless required by applicable law or agreed to in writing, software
12bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** distributed under the License is distributed on an "AS IS" BASIS,
13bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** See the License for the specific language governing permissions and
15bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani** limitations under the License.
16bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani*/
17bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
18fece04335ca331d76bf84f75d8818f1b24916f4eAjay Dudani#define LOG_TAG "QCameraParams"
19bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include <utils/Log.h>
20bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include <string.h>
21bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include <stdlib.h>
22bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani#include "QCameraParameters.h"
23bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
24bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaninamespace android {
25bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Parameter keys to communicate between camera application and driver.
26bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_HFR_SIZES[] = "hfr-size-values";
27bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_PREVIEW_FRAME_RATE_MODE[] = "preview-frame-rate-mode";
28bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATE_MODES[] = "preview-frame-rate-modes";
29bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_PREVIEW_FRAME_RATE_AUTO_MODE[] = "frame-rate-auto";
30bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_PREVIEW_FRAME_RATE_FIXED_MODE[] = "frame-rate-fixed";
31bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_TOUCH_AF_AEC[] = "touch-af-aec";
32bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_TOUCH_AF_AEC[] = "touch-af-aec-values";
33bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_TOUCH_INDEX_AEC[] = "touch-index-aec";
34bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_TOUCH_INDEX_AF[] = "touch-index-af";
35bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SCENE_DETECT[] = "scene-detect";
36bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_SCENE_DETECT[] = "scene-detect-values";
37bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_ISO_MODE[] = "iso";
38bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_ISO_MODES[] = "iso-values";
39bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_LENSSHADE[] = "lensshade";
40bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_LENSSHADE_MODES[] = "lensshade-values";
41bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_AUTO_EXPOSURE[] = "auto-exposure";
42bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_AUTO_EXPOSURE[] = "auto-exposure-values";
43bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_DENOISE[] = "denoise";
44bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_DENOISE[] = "denoise-values";
45bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SELECTABLE_ZONE_AF[] = "selectable-zone-af";
46bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_SELECTABLE_ZONE_AF[] = "selectable-zone-af-values";
47bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_FACE_DETECTION[] = "face-detection";
48bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_FACE_DETECTION[] = "face-detection-values";
49bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_MEMORY_COLOR_ENHANCEMENT[] = "mce";
50bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_MEM_COLOR_ENHANCE_MODES[] = "mce-values";
51bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_VIDEO_HIGH_FRAME_RATE[] = "video-hfr";
52bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_VIDEO_HIGH_FRAME_RATE_MODES[] = "video-hfr-values";
53bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_REDEYE_REDUCTION[] = "redeye-reduction";
54bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_REDEYE_REDUCTION[] = "redeye-reduction-values";
55bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_HIGH_DYNAMIC_RANGE_IMAGING[] = "hdr";
56bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_HDR_IMAGING_MODES[] = "hdr-values";
57bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_POWER_MODE_SUPPORTED[] = "power-mode-supported";
58bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_ZSL[] = "zsl";
59bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_ZSL_MODES[] = "zsl-values";
60bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_CAMERA_MODE[] = "camera-mode";
61bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_AE_BRACKET_HDR[] = "ae-bracket-hdr";
62bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_POWER_MODE[] = "power-mode";
63bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani/*only effective when KEY_AE_BRACKET_HDR set to ae_bracketing*/
64bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//const char QCameraParameters::KEY_AE_BRACKET_SETTING_KEY[] = "ae-bracket-setting";
65bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
66bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for effect settings.
67bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::EFFECT_EMBOSS[] = "emboss";
68bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::EFFECT_SKETCH[] = "sketch";
69bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::EFFECT_NEON[] = "neon";
70bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
71bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for auto exposure settings.
72bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::TOUCH_AF_AEC_OFF[] = "touch-off";
73bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::TOUCH_AF_AEC_ON[] = "touch-on";
74bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
75bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for scene mode settings.
76bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SCENE_MODE_ASD[] = "asd";   // corresponds to CAMERA_BESTSHOT_AUTO in HAL
77bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SCENE_MODE_BACKLIGHT[] = "backlight";
78bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SCENE_MODE_FLOWERS[] = "flowers";
79bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SCENE_MODE_AR[] = "AR";
8044131c173e6acb850cca63fb0e9acdff9904468cMansoor Aftabconst char QCameraParameters::SCENE_MODE_HDR[] = "hdr";
81bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
82bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for auto scene detection settings.
83bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SCENE_DETECT_OFF[] = "off";
84bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SCENE_DETECT_ON[] = "on";
85bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
86bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Formats for setPreviewFormat and setPictureFormat.
87bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::PIXEL_FORMAT_YUV420SP_ADRENO[] = "yuv420sp-adreno";
88bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::PIXEL_FORMAT_RAW[] = "raw";
89bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::PIXEL_FORMAT_YV12[] = "yuv420p";
90bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::PIXEL_FORMAT_NV12[] = "nv12";
91bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
92bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for focus mode settings.
93bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::FOCUS_MODE_NORMAL[] = "normal";
94bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SKIN_TONE_ENHANCEMENT[] = "skinToneEnhancement";
95bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_SKIN_TONE_ENHANCEMENT_MODES[] = "skinToneEnhancement-values";
96bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
97bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for ISO Settings
98bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ISO_AUTO[] = "auto";
99bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ISO_HJR[] = "ISO_HJR";
100bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ISO_100[] = "ISO100";
101bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ISO_200[] = "ISO200";
102bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ISO_400[] = "ISO400";
103bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ISO_800[] = "ISO800";
104bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ISO_1600[] = "ISO1600";
105bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
106bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani //Values for Lens Shading
107bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::LENSSHADE_ENABLE[] = "enable";
108bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::LENSSHADE_DISABLE[] = "disable";
109bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
110bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for auto exposure settings.
111bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::AUTO_EXPOSURE_FRAME_AVG[] = "frame-average";
112bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::AUTO_EXPOSURE_CENTER_WEIGHTED[] = "center-weighted";
113bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::AUTO_EXPOSURE_SPOT_METERING[] = "spot-metering";
114bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
115bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_GPS_LATITUDE_REF[] = "gps-latitude-ref";
116bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_GPS_LONGITUDE_REF[] = "gps-longitude-ref";
117bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_GPS_ALTITUDE_REF[] = "gps-altitude-ref";
118bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_GPS_STATUS[] = "gps-status";
119bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_EXIF_DATETIME[] = "exif-datetime";
120bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
121bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_HISTOGRAM[] = "histogram";
122bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SUPPORTED_HISTOGRAM_MODES[] = "histogram-values";
123bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
124bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//Values for Histogram Shading
125bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::HISTOGRAM_ENABLE[] = "enable";
126bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::HISTOGRAM_DISABLE[] = "disable";
127bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
128bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//Values for Skin Tone Enhancement Modes
129bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SKIN_TONE_ENHANCEMENT_ENABLE[] = "enable";
130bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SKIN_TONE_ENHANCEMENT_DISABLE[] = "disable";
131bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
132bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SHARPNESS[] = "sharpness";
133bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_MAX_SHARPNESS[] = "max-sharpness";
134bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_CONTRAST[] = "contrast";
135bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_MAX_CONTRAST[] = "max-contrast";
136bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SATURATION[] = "saturation";
137bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_MAX_SATURATION[] = "max-saturation";
138bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
139bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::KEY_SINGLE_ISP_OUTPUT_ENABLED[] = "single-isp-output-enabled";
1400ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedconst char QCameraParameters::KEY_SUPPORTED_CAMERA_FEATURES[] = "qc-camera-features";
1410ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedconst char QCameraParameters::KEY_MAX_NUM_REQUESTED_FACES[] = "qc-max-num-requested-faces";
142bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
143bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//Values for DENOISE
144bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::DENOISE_OFF[] = "denoise-off";
145bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::DENOISE_ON[] = "denoise-on";
146bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
147bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for selectable zone af Settings
148bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SELECTABLE_ZONE_AF_AUTO[] = "auto";
149bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SELECTABLE_ZONE_AF_SPOT_METERING[] = "spot-metering";
150bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SELECTABLE_ZONE_AF_CENTER_WEIGHTED[] = "center-weighted";
151bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::SELECTABLE_ZONE_AF_FRAME_AVERAGE[] = "frame-average";
152bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
153bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for Face Detection settings.
154bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::FACE_DETECTION_OFF[] = "off";
155bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::FACE_DETECTION_ON[] = "on";
156bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
157bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for MCE settings.
158bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::MCE_ENABLE[] = "enable";
159bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::MCE_DISABLE[] = "disable";
160bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
161bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for HFR settings.
162bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::VIDEO_HFR_OFF[] = "off";
163bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::VIDEO_HFR_2X[] = "60";
164bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::VIDEO_HFR_3X[] = "90";
165bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::VIDEO_HFR_4X[] = "120";
166bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
167bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for Redeye Reduction settings.
168bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::REDEYE_REDUCTION_ENABLE[] = "enable";
169bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::REDEYE_REDUCTION_DISABLE[] = "disable";
170bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
171bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for HDR settings.
172bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::HDR_ENABLE[] = "enable";
173bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::HDR_DISABLE[] = "disable";
174bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
175bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for ZSL settings.
176bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ZSL_OFF[] = "off";
177bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::ZSL_ON[] = "on";
178bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
179bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Values for HDR Bracketing settings.
180bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::AE_BRACKET_HDR_OFF[] = "Off";
181bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::AE_BRACKET_HDR[] = "HDR";
182bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::AE_BRACKET[] = "AE-Bracket";
183bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
184bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::LOW_POWER[] = "Low_Power";
185bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char QCameraParameters::NORMAL_POWER[] = "Normal_Power";
186bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
187bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic const char* portrait = "portrait";
188bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic const char* landscape = "landscape";
189bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
190bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//QCameraParameters::QCameraParameters()
191bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//                : mMap()
192bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//{
193bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani//}
194bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
195bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay DudaniQCameraParameters::~QCameraParameters()
196bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
197bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
198bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
199bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniint QCameraParameters::getOrientation() const
200bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
201bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    const char* orientation = get("orientation");
202bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (orientation && !strcmp(orientation, portrait))
203bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        return CAMERA_ORIENTATION_PORTRAIT;
204bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    return CAMERA_ORIENTATION_LANDSCAPE;
205bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
206bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::setOrientation(int orientation)
207bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
208bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (orientation == CAMERA_ORIENTATION_PORTRAIT) {
209bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        set("orientation", portrait);
210bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    } else {
211bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani         set("orientation", landscape);
212bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
213bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
214bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
215bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        //XXX ALOGE("Key \"%s\"contains invalid character (= or ;)", key);
216bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        //XXX ALOGE("Value \"%s\"contains invalid character (= or ;)", value);
217bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    //snprintf(str, sizeof(str), "%d", value);
218bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        //ALOGE("Cannot find delimeter (%c) in str=%s", delim, str);
219bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
220bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
221bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Parse string like "(1, 2, 3, 4, ..., N)"
222bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// num is pointer to an allocated array of size N
223bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic int parseNDimVector(const char *str, int *num, int N, char delim = ',')
224bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
225bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    char *start, *end;
226bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if(num == NULL) {
227bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        ALOGE("Invalid output array (num == NULL)");
228bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        return -1;
229bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
230bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    //check if string starts and ends with parantheses
231bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if(str[0] != '(' || str[strlen(str)-1] != ')') {
232bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        ALOGE("Invalid format of string %s, valid format is (n1, n2, n3, n4 ...)", str);
233bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        return -1;
234bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
235bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    start = (char*) str;
236bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    start++;
237bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    for(int i=0; i<N; i++) {
238bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        *(num+i) = (int) strtol(start, &end, 10);
239bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        if(*end != delim && i < N-1) {
240bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani            ALOGE("Cannot find delimeter '%c' in string \"%s\". end = %c", delim, str, *end);
241bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani            return -1;
242bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        }
243bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        start = end+1;
244bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
245bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    return 0;
246bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
247bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
248bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
249bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani            //ALOGE("Picture sizes string \"%s\" contains invalid character.", sizesStr);
250bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    //snprintf(str, sizeof(str), "%dx%d", width, height);
251bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
252bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
253bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
254bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani// Parse string like "640x480" or "10000,20000"
255bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic int parse_pair(const char *str, int *first, int *second, char delim,
256bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani                      char **endptr = NULL)
257bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
258bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    // Find the first integer.
259bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    char *end;
260bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    int w = (int)strtol(str, &end, 10);
261bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    // If a delimeter does not immediately follow, give up.
262bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (*end != delim) {
263bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        ALOGE("Cannot find delimeter (%c) in str=%s", delim, str);
264bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        return -1;
265bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
266bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
267bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    // Find the second integer, immediately after the delimeter.
268bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    int h = (int)strtol(end+1, &end, 10);
269bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
270bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    *first = w;
271bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    *second = h;
272bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
273bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (endptr) {
274bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        *endptr = end;
275bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
276bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
277bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    return 0;
278bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
279bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
280bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanistatic void parseSizesList(const char *sizesStr, Vector<Size> &sizes)
281bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
282bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (sizesStr == 0) {
283bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        return;
284bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
285bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
286bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    char *sizeStartPtr = (char *)sizesStr;
287bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
288bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    while (true) {
289bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        int width, height;
290bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        int success = parse_pair(sizeStartPtr, &width, &height, 'x',
291bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani                                 &sizeStartPtr);
292bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        if (success == -1 || (*sizeStartPtr != ',' && *sizeStartPtr != '\0')) {
293bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani            ALOGE("Picture sizes string \"%s\" contains invalid character.", sizesStr);
294bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani            return;
295bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        }
296bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        sizes.push(Size(width, height));
297bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
298bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        if (*sizeStartPtr == '\0') {
299bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani            return;
300bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        }
301bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        sizeStartPtr++;
302bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
303bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
304bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
305bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
306bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::getSupportedHfrSizes(Vector<Size> &sizes) const
307bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
308bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    const char *hfrSizesStr = get(KEY_SUPPORTED_HFR_SIZES);
309bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    parseSizesList(hfrSizesStr, sizes);
310bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
311bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
312bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::setPreviewFpsRange(int minFPS, int maxFPS)
313bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
314bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    char str[32];
315bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    snprintf(str, sizeof(str), "%d,%d",minFPS,maxFPS);
316bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    set(KEY_PREVIEW_FPS_RANGE,str);
317bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
318bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
319bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::setPreviewFrameRateMode(const char *mode)
320bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
321bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    set(KEY_PREVIEW_FRAME_RATE_MODE, mode);
322bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
323bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
324bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudaniconst char *QCameraParameters::getPreviewFrameRateMode() const
325bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
326bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    return get(KEY_PREVIEW_FRAME_RATE_MODE);
327bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
328bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
329bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
330bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    //ALOGD("dump: mMap.size = %d", mMap.size());
331bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        //ALOGD("%s: %s\n", k.string(), v.string());
332bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
333bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
334bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
335bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::setTouchIndexAec(int x, int y)
336bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
337bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    char str[32];
338bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    snprintf(str, sizeof(str), "%dx%d", x, y);
339bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    set(KEY_TOUCH_INDEX_AEC, str);
340bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
341bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
342bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::getTouchIndexAec(int *x, int *y) const
343bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
344bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    *x = -1;
345bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    *y = -1;
346bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
347bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    // Get the current string, if it doesn't exist, leave the -1x-1
348bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    const char *p = get(KEY_TOUCH_INDEX_AEC);
349bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (p == 0)
350bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        return;
351bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
352bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    int tempX, tempY;
353bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (parse_pair(p, &tempX, &tempY, 'x') == 0) {
354bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        *x = tempX;
355bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        *y = tempY;
356bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
357bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
358bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
359bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::setTouchIndexAf(int x, int y)
360bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
361bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    char str[32];
362bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    snprintf(str, sizeof(str), "%dx%d", x, y);
363bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    set(KEY_TOUCH_INDEX_AF, str);
364bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
365bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
366bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::getTouchIndexAf(int *x, int *y) const
367bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
368bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    *x = -1;
369bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    *y = -1;
370bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
371bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    // Get the current string, if it doesn't exist, leave the -1x-1
372bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    const char *p = get(KEY_TOUCH_INDEX_AF);
373bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (p == 0)
374bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        return;
375bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
376bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    int tempX, tempY;
377bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if (parse_pair(p, &tempX, &tempY, 'x') == 0) {
378bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        *x = tempX;
379bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        *y = tempY;
380bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani	}
381bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
382bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
383bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudanivoid QCameraParameters::getMeteringAreaCenter(int *x, int *y) const
384bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani{
385bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    //Default invalid values
386bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    *x = -2000;
387bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    *y = -2000;
388bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
389bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    const char *p = get(KEY_METERING_AREAS);
390bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    if(p != NULL) {
391bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        int arr[5] = {-2000, -2000, -2000, -2000, 0};
392bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        parseNDimVector(p, arr, 5); //p = "(x1, y1, x2, y2, weight)"
393bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        *x = (arr[0] + arr[2])/2; //center_x = (x1+x2)/2
394bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani        *y = (arr[1] + arr[3])/2; //center_y = (y1+y2)/2
395bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani    }
396bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}
397bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
398bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
399bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani}; // namespace android
400bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7aAjay Dudani
401