13cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian/*
23cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian**
33cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** Copyright 2008, The Android Open Source Project
43cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian**
53cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** Licensed under the Apache License, Version 2.0 (the "License");
63cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** you may not use this file except in compliance with the License.
73cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** You may obtain a copy of the License at
83cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian**
93cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian**     http://www.apache.org/licenses/LICENSE-2.0
103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian**
113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** Unless required by applicable law or agreed to in writing, software
123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** distributed under the License is distributed on an "AS IS" BASIS,
133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** See the License for the specific language governing permissions and
153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian** limitations under the License.
163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian*/
173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#define LOG_TAG "CameraParams"
193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <utils/Log.h>
203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <string.h>
223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <stdlib.h>
233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <camera/CameraParameters.h>
243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopiannamespace android {
263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// Parameter keys to communicate between camera application and driver.
273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_PREVIEW_SIZE[] = "preview-size";
283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES[] = "preview-size-values";
293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_PREVIEW_FORMAT[] = "preview-format";
303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS[] = "preview-format-values";
313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_PREVIEW_FRAME_RATE[] = "preview-frame-rate";
323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES[] = "preview-frame-rate-values";
3304379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Liconst char CameraParameters::KEY_PREVIEW_FPS_RANGE[] = "preview-fps-range";
3404379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE[] = "preview-fps-range-values";
353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_PICTURE_SIZE[] = "picture-size";
363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_PICTURE_SIZES[] = "picture-size-values";
373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_PICTURE_FORMAT[] = "picture-format";
383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS[] = "picture-format-values";
393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH[] = "jpeg-thumbnail-width";
403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT[] = "jpeg-thumbnail-height";
413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES[] = "jpeg-thumbnail-size-values";
423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY[] = "jpeg-thumbnail-quality";
433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_JPEG_QUALITY[] = "jpeg-quality";
443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_ROTATION[] = "rotation";
453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_GPS_LATITUDE[] = "gps-latitude";
463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_GPS_LONGITUDE[] = "gps-longitude";
473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_GPS_ALTITUDE[] = "gps-altitude";
483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_GPS_TIMESTAMP[] = "gps-timestamp";
49c0170bc6c6c81f5dfa86a132bf29ee48c01329d9Ray Chenconst char CameraParameters::KEY_GPS_PROCESSING_METHOD[] = "gps-processing-method";
503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_WHITE_BALANCE[] = "whitebalance";
513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_WHITE_BALANCE[] = "whitebalance-values";
523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_EFFECT[] = "effect";
533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_EFFECTS[] = "effect-values";
543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_ANTIBANDING[] = "antibanding";
553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_ANTIBANDING[] = "antibanding-values";
563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SCENE_MODE[] = "scene-mode";
573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_SCENE_MODES[] = "scene-mode-values";
583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_FLASH_MODE[] = "flash-mode";
593cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_FLASH_MODES[] = "flash-mode-values";
603cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_FOCUS_MODE[] = "focus-mode";
613cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_SUPPORTED_FOCUS_MODES[] = "focus-mode-values";
62a1c3d37ef921bfc79a0f7d2ac7f897943134d48dWu-cheng Liconst char CameraParameters::KEY_MAX_NUM_FOCUS_AREAS[] = "max-num-focus-areas";
63a1c3d37ef921bfc79a0f7d2ac7f897943134d48dWu-cheng Liconst char CameraParameters::KEY_FOCUS_AREAS[] = "focus-areas";
643cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_FOCAL_LENGTH[] = "focal-length";
653cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE[] = "horizontal-view-angle";
663cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_VERTICAL_VIEW_ANGLE[] = "vertical-view-angle";
673cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::KEY_EXPOSURE_COMPENSATION[] = "exposure-compensation";
684f1bff97170d33575e55a8e110b097c05607095fWu-cheng Liconst char CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION[] = "max-exposure-compensation";
694f1bff97170d33575e55a8e110b097c05607095fWu-cheng Liconst char CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION[] = "min-exposure-compensation";
704f1bff97170d33575e55a8e110b097c05607095fWu-cheng Liconst char CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP[] = "exposure-compensation-step";
7195fbf2cdccb127bae1f68827564b36290c8de2c3Eino-Ville Talvalaconst char CameraParameters::KEY_AUTO_EXPOSURE_LOCK[] = "auto-exposure-lock";
7295fbf2cdccb127bae1f68827564b36290c8de2c3Eino-Ville Talvalaconst char CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED[] = "auto-exposure-lock-supported";
73fd99e1dda6a46ac3312cacb3bc1b633b2df95df2Eino-Ville Talvalaconst char CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK[] = "auto-whitebalance-lock";
74fd99e1dda6a46ac3312cacb3bc1b633b2df95df2Eino-Ville Talvalaconst char CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED[] = "auto-whitebalance-lock-supported";
7538ecadbeb09fc0504621f5aa513e51b7a204983fWu-cheng Liconst char CameraParameters::KEY_MAX_NUM_METERING_AREAS[] = "max-num-metering-areas";
7638ecadbeb09fc0504621f5aa513e51b7a204983fWu-cheng Liconst char CameraParameters::KEY_METERING_AREAS[] = "metering-areas";
77949c5037a6e019ff575bd481d286908c2eaa1e34Wu-cheng Liconst char CameraParameters::KEY_ZOOM[] = "zoom";
78949c5037a6e019ff575bd481d286908c2eaa1e34Wu-cheng Liconst char CameraParameters::KEY_MAX_ZOOM[] = "max-zoom";
79949c5037a6e019ff575bd481d286908c2eaa1e34Wu-cheng Liconst char CameraParameters::KEY_ZOOM_RATIOS[] = "zoom-ratios";
80949c5037a6e019ff575bd481d286908c2eaa1e34Wu-cheng Liconst char CameraParameters::KEY_ZOOM_SUPPORTED[] = "zoom-supported";
81949c5037a6e019ff575bd481d286908c2eaa1e34Wu-cheng Liconst char CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED[] = "smooth-zoom-supported";
8209a2ab9dfe5c8fe74703b9894d930b1b1dbf0c11Wu-cheng Liconst char CameraParameters::KEY_FOCUS_DISTANCES[] = "focus-distances";
830b0279e0d20a8beb69aa2af5f4cb278841710dfbWu-cheng Liconst char CameraParameters::KEY_VIDEO_FRAME_FORMAT[] = "video-frame-format";
840d14c25355b7807b88fcdc76040ef986aa754815James Dongconst char CameraParameters::KEY_VIDEO_SIZE[] = "video-size";
850d14c25355b7807b88fcdc76040ef986aa754815James Dongconst char CameraParameters::KEY_SUPPORTED_VIDEO_SIZES[] = "video-size-values";
860f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dongconst char CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO[] = "preferred-preview-size-for-video";
877fc25dd82dec8474139315b8e905f103c13406f5Wu-cheng Liconst char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW[] = "max-num-detected-faces-hw";
887fc25dd82dec8474139315b8e905f103c13406f5Wu-cheng Liconst char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW[] = "max-num-detected-faces-sw";
8940cdc56efa47580d89a93750cefecb8ccbaf9a72Wu-cheng Liconst char CameraParameters::KEY_RECORDING_HINT[] = "recording-hint";
90a8e409f8f9b40737d0b03355894b5e141d0aff6bWu-cheng Liconst char CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED[] = "video-snapshot-supported";
917019d2247e644470a0e8eb99b02b8b2d656fd9fbEino-Ville Talvalaconst char CameraParameters::KEY_VIDEO_STABILIZATION[] = "video-stabilization";
927019d2247e644470a0e8eb99b02b8b2d656fd9fbEino-Ville Talvalaconst char CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED[] = "video-stabilization-supported";
93c3dbf1a40df85b75e5805382838a90416f69730fJames Painterconst char CameraParameters::KEY_LIGHTFX[] = "light-fx";
943cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
95d8d888ea7c14715c2210c8dea1a623116c992264Wu-cheng Liconst char CameraParameters::TRUE[] = "true";
9695fbf2cdccb127bae1f68827564b36290c8de2c3Eino-Ville Talvalaconst char CameraParameters::FALSE[] = "false";
97ae77ffa16bda593fb3751e41d45327d867f3c8e1Wu-cheng Liconst char CameraParameters::FOCUS_DISTANCE_INFINITY[] = "Infinity";
98d8d888ea7c14715c2210c8dea1a623116c992264Wu-cheng Li
993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// Values for white balance settings.
1003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::WHITE_BALANCE_AUTO[] = "auto";
1013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::WHITE_BALANCE_INCANDESCENT[] = "incandescent";
1023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::WHITE_BALANCE_FLUORESCENT[] = "fluorescent";
1033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT[] = "warm-fluorescent";
1043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::WHITE_BALANCE_DAYLIGHT[] = "daylight";
1053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT[] = "cloudy-daylight";
1063cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::WHITE_BALANCE_TWILIGHT[] = "twilight";
1073cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::WHITE_BALANCE_SHADE[] = "shade";
1083cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1093cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// Values for effect settings.
1103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_NONE[] = "none";
1113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_MONO[] = "mono";
1123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_NEGATIVE[] = "negative";
1133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_SOLARIZE[] = "solarize";
1143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_SEPIA[] = "sepia";
1153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_POSTERIZE[] = "posterize";
1163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_WHITEBOARD[] = "whiteboard";
1173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_BLACKBOARD[] = "blackboard";
1183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::EFFECT_AQUA[] = "aqua";
1193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// Values for antibanding settings.
1213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::ANTIBANDING_AUTO[] = "auto";
1223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::ANTIBANDING_50HZ[] = "50hz";
1233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::ANTIBANDING_60HZ[] = "60hz";
1243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::ANTIBANDING_OFF[] = "off";
1253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// Values for flash mode settings.
1273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FLASH_MODE_OFF[] = "off";
1283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FLASH_MODE_AUTO[] = "auto";
1293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FLASH_MODE_ON[] = "on";
1303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FLASH_MODE_RED_EYE[] = "red-eye";
1313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FLASH_MODE_TORCH[] = "torch";
1323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// Values for scene mode settings.
1343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_AUTO[] = "auto";
1353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_ACTION[] = "action";
1363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_PORTRAIT[] = "portrait";
1373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_LANDSCAPE[] = "landscape";
1383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_NIGHT[] = "night";
1393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_NIGHT_PORTRAIT[] = "night-portrait";
1403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_THEATRE[] = "theatre";
1413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_BEACH[] = "beach";
1423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_SNOW[] = "snow";
1433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_SUNSET[] = "sunset";
1443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_STEADYPHOTO[] = "steadyphoto";
1453cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_FIREWORKS[] = "fireworks";
1463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_SPORTS[] = "sports";
1473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_PARTY[] = "party";
1483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::SCENE_MODE_CANDLELIGHT[] = "candlelight";
149465d5a7f3517f11aaa819c8ae982e113ad5ec479Wu-cheng Liconst char CameraParameters::SCENE_MODE_BARCODE[] = "barcode";
150c81284a2b77c630046ee57e6d73ac5d367e558f1Eino-Ville Talvalaconst char CameraParameters::SCENE_MODE_HDR[] = "hdr";
1513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::PIXEL_FORMAT_YUV422SP[] = "yuv422sp";
1533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::PIXEL_FORMAT_YUV420SP[] = "yuv420sp";
1543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::PIXEL_FORMAT_YUV422I[] = "yuv422i-yuyv";
155d42c6e8904f1648a7dedcd1dc27b926951f8ff28Wu-cheng Liconst char CameraParameters::PIXEL_FORMAT_YUV420P[]  = "yuv420p";
1563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::PIXEL_FORMAT_RGB565[] = "rgb565";
1575e7271d6e24efb891e0de141a06228c99866f49fIliyan Malchevconst char CameraParameters::PIXEL_FORMAT_RGBA8888[] = "rgba8888";
1583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::PIXEL_FORMAT_JPEG[] = "jpeg";
15979e2ab42c38d1099bcd7c8840caa5a85c9fcb104Wu-cheng Liconst char CameraParameters::PIXEL_FORMAT_BAYER_RGGB[] = "bayer-rggb";
160f6d9696bf1db133d16dd8981380e1bfbd2e0bc70Eino-Ville Talvalaconst char CameraParameters::PIXEL_FORMAT_ANDROID_OPAQUE[] = "android-opaque";
1613cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1623cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian// Values for focus mode settings.
1633cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FOCUS_MODE_AUTO[] = "auto";
1643cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FOCUS_MODE_INFINITY[] = "infinity";
1653cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FOCUS_MODE_MACRO[] = "macro";
1663cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char CameraParameters::FOCUS_MODE_FIXED[] = "fixed";
167465d5a7f3517f11aaa819c8ae982e113ad5ec479Wu-cheng Liconst char CameraParameters::FOCUS_MODE_EDOF[] = "edof";
168ac4205c9064ca961883b1ccf2ce565e449c0983eWu-cheng Liconst char CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO[] = "continuous-video";
169ab3f1388c71aed957f94ddab976faa77ab77e67fWu-cheng Liconst char CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE[] = "continuous-picture";
1703cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
171c3dbf1a40df85b75e5805382838a90416f69730fJames Painter// Values for light fx settings
172c3dbf1a40df85b75e5805382838a90416f69730fJames Painterconst char CameraParameters::LIGHTFX_LOWLIGHT[] = "low-light";
173c3dbf1a40df85b75e5805382838a90416f69730fJames Painterconst char CameraParameters::LIGHTFX_HDR[] = "high-dynamic-range";
174c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
1753cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias AgopianCameraParameters::CameraParameters()
1763cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian                : mMap()
1773cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
1783cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
1793cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1803cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias AgopianCameraParameters::~CameraParameters()
1813cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
1823cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
1833cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1843cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias AgopianString8 CameraParameters::flatten() const
1853cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
1863cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    String8 flattened("");
1873cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    size_t size = mMap.size();
1883cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1893cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    for (size_t i = 0; i < size; i++) {
1903cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        String8 k, v;
1913cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        k = mMap.keyAt(i);
1923cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        v = mMap.valueAt(i);
1933cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
1943cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        flattened += k;
1953cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        flattened += "=";
1963cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        flattened += v;
1973cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        if (i != size-1)
1983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian            flattened += ";";
1993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    }
2003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return flattened;
2023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
2033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::unflatten(const String8 &params)
2053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
2063cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    const char *a = params.string();
2073cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    const char *b;
2083cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2093cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    mMap.clear();
2103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2113cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    for (;;) {
2123cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        // Find the bounds of the key name.
2133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        b = strchr(a, '=');
2143cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        if (b == 0)
2153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian            break;
2163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        // Create the key string.
2183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        String8 k(a, (size_t)(b-a));
2193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        // Find the value.
2213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        a = b+1;
2223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        b = strchr(a, ';');
2233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        if (b == 0) {
2243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian            // If there's no semicolon, this is the last item.
2253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian            String8 v(a);
2263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian            mMap.add(k, v);
2273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian            break;
2283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        }
2293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        String8 v(a, (size_t)(b-a));
2313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        mMap.add(k, v);
2323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        a = b+1;
2333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    }
2343cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
2353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::set(const char *key, const char *value)
2383cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
2393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    // XXX i think i can do this with strspn()
2403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    if (strchr(key, '=') || strchr(key, ';')) {
24129357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block        //XXX ALOGE("Key \"%s\"contains invalid character (= or ;)", key);
2423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        return;
2433cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    }
2443cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2454c18eb30b493a4cd8d56bbcf8acb526b97c401a4You Kim    if (strchr(value, '=') || strchr(value, ';')) {
24629357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block        //XXX ALOGE("Value \"%s\"contains invalid character (= or ;)", value);
2473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        return;
2483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    }
2493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    mMap.replaceValueFor(String8(key), String8(value));
2513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
2523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::set(const char *key, int value)
2543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
2553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    char str[16];
2563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    sprintf(str, "%d", value);
2573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    set(key, str);
2583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
2593cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2603cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::setFloat(const char *key, float value)
2613cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
2623cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    char str[16];  // 14 should be enough. We overestimate to be safe.
2633cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    snprintf(str, sizeof(str), "%g", value);
2643cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    set(key, str);
2653cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
2663cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2673cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char *CameraParameters::get(const char *key) const
2683cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
2693cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    String8 v = mMap.valueFor(String8(key));
2703cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    if (v.length() == 0)
2713cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        return 0;
2723cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return v.string();
2733cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
2743cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2753cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianint CameraParameters::getInt(const char *key) const
2763cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
2773cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    const char *v = get(key);
2783cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    if (v == 0)
2793cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        return -1;
2803cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return strtol(v, 0, 0);
2813cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
2823cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
2833cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianfloat CameraParameters::getFloat(const char *key) const
2843cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
2853cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    const char *v = get(key);
2863cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    if (v == 0) return -1;
2873cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return strtof(v, 0);
2883cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
2893cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
290adbda96f6a05507788bb4163d7fbe8a95948f0a5Wu-cheng Livoid CameraParameters::remove(const char *key)
291adbda96f6a05507788bb4163d7fbe8a95948f0a5Wu-cheng Li{
292adbda96f6a05507788bb4163d7fbe8a95948f0a5Wu-cheng Li    mMap.removeItem(String8(key));
293adbda96f6a05507788bb4163d7fbe8a95948f0a5Wu-cheng Li}
294adbda96f6a05507788bb4163d7fbe8a95948f0a5Wu-cheng Li
29504379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li// Parse string like "640x480" or "10000,20000"
29604379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Listatic int parse_pair(const char *str, int *first, int *second, char delim,
29704379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li                      char **endptr = NULL)
2983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
29904379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    // Find the first integer.
3003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    char *end;
3013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    int w = (int)strtol(str, &end, 10);
30204379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    // If a delimeter does not immediately follow, give up.
30304379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    if (*end != delim) {
30429357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block        ALOGE("Cannot find delimeter (%c) in str=%s", delim, str);
3053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        return -1;
30604379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    }
3073cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
30804379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    // Find the second integer, immediately after the delimeter.
30934c91a321c297c1a7518ec4f10ae5993904034ddNipun Kwatra    int h = (int)strtol(end+1, &end, 10);
3103cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
31104379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    *first = w;
31204379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    *second = h;
3133cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
31434c91a321c297c1a7518ec4f10ae5993904034ddNipun Kwatra    if (endptr) {
31534c91a321c297c1a7518ec4f10ae5993904034ddNipun Kwatra        *endptr = end;
31634c91a321c297c1a7518ec4f10ae5993904034ddNipun Kwatra    }
31734c91a321c297c1a7518ec4f10ae5993904034ddNipun Kwatra
3183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return 0;
3193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
3203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
321e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatrastatic void parseSizesList(const char *sizesStr, Vector<Size> &sizes)
322e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra{
323e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    if (sizesStr == 0) {
324e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra        return;
325e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    }
326e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra
327e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    char *sizeStartPtr = (char *)sizesStr;
328e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra
329e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    while (true) {
330e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra        int width, height;
33104379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li        int success = parse_pair(sizeStartPtr, &width, &height, 'x',
33204379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li                                 &sizeStartPtr);
333e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra        if (success == -1 || (*sizeStartPtr != ',' && *sizeStartPtr != '\0')) {
33429357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block            ALOGE("Picture sizes string \"%s\" contains invalid character.", sizesStr);
335e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra            return;
336e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra        }
337e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra        sizes.push(Size(width, height));
338e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra
339e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra        if (*sizeStartPtr == '\0') {
340e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra            return;
341e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra        }
342e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra        sizeStartPtr++;
343e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    }
344e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra}
345e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra
3463cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::setPreviewSize(int width, int height)
3473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
3483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    char str[32];
3493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    sprintf(str, "%dx%d", width, height);
3503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    set(KEY_PREVIEW_SIZE, str);
3513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
3523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
3533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::getPreviewSize(int *width, int *height) const
3543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
35504379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    *width = *height = -1;
3563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    // Get the current string, if it doesn't exist, leave the -1x-1
3573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    const char *p = get(KEY_PREVIEW_SIZE);
35804379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    if (p == 0)  return;
3590f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dong    parse_pair(p, width, height, 'x');
3600f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dong}
3610f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dong
3620f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dongvoid CameraParameters::getPreferredPreviewSizeForVideo(int *width, int *height) const
3630f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dong{
3640f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dong    *width = *height = -1;
3650f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dong    const char *p = get(KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO);
3660f5a6f9231e04b5c04af5dc2ad020755e2616f31James Dong    if (p == 0)  return;
36704379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    parse_pair(p, width, height, 'x');
3683cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
3693cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
370e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatravoid CameraParameters::getSupportedPreviewSizes(Vector<Size> &sizes) const
371e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra{
372e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    const char *previewSizesStr = get(KEY_SUPPORTED_PREVIEW_SIZES);
373e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    parseSizesList(previewSizesStr, sizes);
374e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra}
375e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra
3760d14c25355b7807b88fcdc76040ef986aa754815James Dongvoid CameraParameters::setVideoSize(int width, int height)
3770d14c25355b7807b88fcdc76040ef986aa754815James Dong{
3780d14c25355b7807b88fcdc76040ef986aa754815James Dong    char str[32];
3790d14c25355b7807b88fcdc76040ef986aa754815James Dong    sprintf(str, "%dx%d", width, height);
3800d14c25355b7807b88fcdc76040ef986aa754815James Dong    set(KEY_VIDEO_SIZE, str);
3810d14c25355b7807b88fcdc76040ef986aa754815James Dong}
3820d14c25355b7807b88fcdc76040ef986aa754815James Dong
3830d14c25355b7807b88fcdc76040ef986aa754815James Dongvoid CameraParameters::getVideoSize(int *width, int *height) const
3840d14c25355b7807b88fcdc76040ef986aa754815James Dong{
3850d14c25355b7807b88fcdc76040ef986aa754815James Dong    *width = *height = -1;
3860d14c25355b7807b88fcdc76040ef986aa754815James Dong    const char *p = get(KEY_VIDEO_SIZE);
3870d14c25355b7807b88fcdc76040ef986aa754815James Dong    if (p == 0) return;
3880d14c25355b7807b88fcdc76040ef986aa754815James Dong    parse_pair(p, width, height, 'x');
3890d14c25355b7807b88fcdc76040ef986aa754815James Dong}
3900d14c25355b7807b88fcdc76040ef986aa754815James Dong
3910d14c25355b7807b88fcdc76040ef986aa754815James Dongvoid CameraParameters::getSupportedVideoSizes(Vector<Size> &sizes) const
3920d14c25355b7807b88fcdc76040ef986aa754815James Dong{
3930d14c25355b7807b88fcdc76040ef986aa754815James Dong    const char *videoSizesStr = get(KEY_SUPPORTED_VIDEO_SIZES);
3940d14c25355b7807b88fcdc76040ef986aa754815James Dong    parseSizesList(videoSizesStr, sizes);
3950d14c25355b7807b88fcdc76040ef986aa754815James Dong}
3960d14c25355b7807b88fcdc76040ef986aa754815James Dong
3973cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::setPreviewFrameRate(int fps)
3983cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
3993cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    set(KEY_PREVIEW_FRAME_RATE, fps);
4003cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4013cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
4023cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianint CameraParameters::getPreviewFrameRate() const
4033cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
4043cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return getInt(KEY_PREVIEW_FRAME_RATE);
4053cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4063cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
40704379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Livoid CameraParameters::getPreviewFpsRange(int *min_fps, int *max_fps) const
40804379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li{
40904379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    *min_fps = *max_fps = -1;
41004379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    const char *p = get(KEY_PREVIEW_FPS_RANGE);
41104379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    if (p == 0) return;
41204379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    parse_pair(p, min_fps, max_fps, ',');
41304379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li}
41404379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li
4153cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::setPreviewFormat(const char *format)
4163cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
4173cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    set(KEY_PREVIEW_FORMAT, format);
4183cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4193cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
4203cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char *CameraParameters::getPreviewFormat() const
4213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
4223cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return get(KEY_PREVIEW_FORMAT);
4233cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4243cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
4253cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::setPictureSize(int width, int height)
4263cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
4273cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    char str[32];
4283cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    sprintf(str, "%dx%d", width, height);
4293cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    set(KEY_PICTURE_SIZE, str);
4303cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4313cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
4323cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::getPictureSize(int *width, int *height) const
4333cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
43404379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    *width = *height = -1;
4353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    // Get the current string, if it doesn't exist, leave the -1x-1
4363cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    const char *p = get(KEY_PICTURE_SIZE);
43704379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    if (p == 0) return;
43804379fa9a001934373bf17358978c753c7e4e8b5Wu-cheng Li    parse_pair(p, width, height, 'x');
4393cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4403cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
441e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatravoid CameraParameters::getSupportedPictureSizes(Vector<Size> &sizes) const
442e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra{
443e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    const char *pictureSizesStr = get(KEY_SUPPORTED_PICTURE_SIZES);
444e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra    parseSizesList(pictureSizesStr, sizes);
445e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra}
446e44607eacd044362d3debf5d95abc93ca36a9274Nipun Kwatra
4473cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::setPictureFormat(const char *format)
4483cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
4493cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    set(KEY_PICTURE_FORMAT, format);
4503cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4513cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
4523cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianconst char *CameraParameters::getPictureFormat() const
4533cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
4543cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return get(KEY_PICTURE_FORMAT);
4553cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4563cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
4573cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianvoid CameraParameters::dump() const
4583cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
459b8a805261bf0282e992d3608035e47d05a898710Steve Block    ALOGD("dump: mMap.size = %d", mMap.size());
4603cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    for (size_t i = 0; i < mMap.size(); i++) {
4613cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        String8 k, v;
4623cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        k = mMap.keyAt(i);
4633cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        v = mMap.valueAt(i);
464b8a805261bf0282e992d3608035e47d05a898710Steve Block        ALOGD("%s: %s\n", k.string(), v.string());
4653cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    }
4663cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4673cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
4683cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianstatus_t CameraParameters::dump(int fd, const Vector<String16>& args) const
4693cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian{
4703cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    const size_t SIZE = 256;
4713cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    char buffer[SIZE];
4723cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    String8 result;
4733cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    snprintf(buffer, 255, "CameraParameters::dump: mMap.size = %d\n", mMap.size());
4743cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    result.append(buffer);
4753cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    for (size_t i = 0; i < mMap.size(); i++) {
4763cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        String8 k, v;
4773cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        k = mMap.keyAt(i);
4783cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        v = mMap.valueAt(i);
4793cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        snprintf(buffer, 255, "\t%s: %s\n", k.string(), v.string());
4803cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian        result.append(buffer);
4813cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    }
4823cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    write(fd, result.string(), result.size());
4833cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian    return NO_ERROR;
4843cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}
4853cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian
4863cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian}; // namespace android
487