CameraParameters.cpp revision 7019d2247e644470a0e8eb99b02b8b2d656fd9fb
186797937017f52bff088d02edf64fb931177a7eaJun Nakajima/*
286797937017f52bff088d02edf64fb931177a7eaJun Nakajima**
386797937017f52bff088d02edf64fb931177a7eaJun Nakajima** Copyright 2008, The Android Open Source Project
486797937017f52bff088d02edf64fb931177a7eaJun Nakajima**
586797937017f52bff088d02edf64fb931177a7eaJun Nakajima** Licensed under the Apache License, Version 2.0 (the "License");
686797937017f52bff088d02edf64fb931177a7eaJun Nakajima** you may not use this file except in compliance with the License.
786797937017f52bff088d02edf64fb931177a7eaJun Nakajima** You may obtain a copy of the License at
886797937017f52bff088d02edf64fb931177a7eaJun Nakajima**
986797937017f52bff088d02edf64fb931177a7eaJun Nakajima**     http://www.apache.org/licenses/LICENSE-2.0
1086797937017f52bff088d02edf64fb931177a7eaJun Nakajima**
1186797937017f52bff088d02edf64fb931177a7eaJun Nakajima** Unless required by applicable law or agreed to in writing, software
1286797937017f52bff088d02edf64fb931177a7eaJun Nakajima** distributed under the License is distributed on an "AS IS" BASIS,
1386797937017f52bff088d02edf64fb931177a7eaJun Nakajima** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1486797937017f52bff088d02edf64fb931177a7eaJun Nakajima** See the License for the specific language governing permissions and
1586797937017f52bff088d02edf64fb931177a7eaJun Nakajima** limitations under the License.
1686797937017f52bff088d02edf64fb931177a7eaJun Nakajima*/
1786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
1886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define LOG_TAG "CameraParams"
1936597756e589622ee6c6628efb47c1b130d5ee85David 'Digit' Turner#include <utils/Log.h>
2036597756e589622ee6c6628efb47c1b130d5ee85David 'Digit' Turner
2186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#include <string.h>
2286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#include <stdlib.h>
2386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#include <camera/CameraParameters.h>
2434c48ff1e3ad5cd2084ca40188754d45f423750bDavid 'Digit' Turner
2534c48ff1e3ad5cd2084ca40188754d45f423750bDavid 'Digit' Turnernamespace android {
2686797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Parameter keys to communicate between camera application and driver.
27852088c7e08182c2de563872d558309815cbfa0dDavid 'Digit' Turnerconst char CameraParameters::KEY_PREVIEW_SIZE[] = "preview-size";
2886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES[] = "preview-size-values";
29bb0140b925cb2adce03ebc0885067ea3bfd19a20Jun Nakajimaconst char CameraParameters::KEY_PREVIEW_FORMAT[] = "preview-format";
30bb0140b925cb2adce03ebc0885067ea3bfd19a20Jun Nakajimaconst char CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS[] = "preview-format-values";
31bb0140b925cb2adce03ebc0885067ea3bfd19a20Jun Nakajimaconst char CameraParameters::KEY_PREVIEW_FRAME_RATE[] = "preview-frame-rate";
32bb0140b925cb2adce03ebc0885067ea3bfd19a20Jun Nakajimaconst char CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES[] = "preview-frame-rate-values";
3386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_PREVIEW_FPS_RANGE[] = "preview-fps-range";
3486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE[] = "preview-fps-range-values";
3586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_PICTURE_SIZE[] = "picture-size";
3686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_PICTURE_SIZES[] = "picture-size-values";
3786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_PICTURE_FORMAT[] = "picture-format";
3886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS[] = "picture-format-values";
3986797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH[] = "jpeg-thumbnail-width";
4086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT[] = "jpeg-thumbnail-height";
4186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES[] = "jpeg-thumbnail-size-values";
4286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY[] = "jpeg-thumbnail-quality";
4386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_JPEG_QUALITY[] = "jpeg-quality";
4486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_ROTATION[] = "rotation";
4586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_GPS_LATITUDE[] = "gps-latitude";
4686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_GPS_LONGITUDE[] = "gps-longitude";
4786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_GPS_ALTITUDE[] = "gps-altitude";
4886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_GPS_TIMESTAMP[] = "gps-timestamp";
4986797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_GPS_PROCESSING_METHOD[] = "gps-processing-method";
5086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_WHITE_BALANCE[] = "whitebalance";
51aa8236dc1b1ea300ab18716db5b8fab42aca3ca7David 'Digit' Turnerconst char CameraParameters::KEY_SUPPORTED_WHITE_BALANCE[] = "whitebalance-values";
5286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_EFFECT[] = "effect";
5386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_EFFECTS[] = "effect-values";
5486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_ANTIBANDING[] = "antibanding";
5586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_ANTIBANDING[] = "antibanding-values";
5686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SCENE_MODE[] = "scene-mode";
5786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_SCENE_MODES[] = "scene-mode-values";
5886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_FLASH_MODE[] = "flash-mode";
59aa8236dc1b1ea300ab18716db5b8fab42aca3ca7David 'Digit' Turnerconst char CameraParameters::KEY_SUPPORTED_FLASH_MODES[] = "flash-mode-values";
6086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_FOCUS_MODE[] = "focus-mode";
6186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_FOCUS_MODES[] = "focus-mode-values";
6286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_MAX_NUM_FOCUS_AREAS[] = "max-num-focus-areas";
6386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_FOCUS_AREAS[] = "focus-areas";
6486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_FOCAL_LENGTH[] = "focal-length";
6586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE[] = "horizontal-view-angle";
6686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_VERTICAL_VIEW_ANGLE[] = "vertical-view-angle";
6786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_EXPOSURE_COMPENSATION[] = "exposure-compensation";
6886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION[] = "max-exposure-compensation";
6986797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION[] = "min-exposure-compensation";
70e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turnerconst char CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP[] = "exposure-compensation-step";
7186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_AUTO_EXPOSURE_LOCK[] = "auto-exposure-lock";
7286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED[] = "auto-exposure-lock-supported";
7386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK[] = "auto-whitebalance-lock";
7486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED[] = "auto-whitebalance-lock-supported";
7586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_MAX_NUM_METERING_AREAS[] = "max-num-metering-areas";
7686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_METERING_AREAS[] = "metering-areas";
776657678c3d86395084f6a699e73614195f06c445David 'Digit' Turnerconst char CameraParameters::KEY_ZOOM[] = "zoom";
7886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_MAX_ZOOM[] = "max-zoom";
7986797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_ZOOM_RATIOS[] = "zoom-ratios";
8086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_ZOOM_SUPPORTED[] = "zoom-supported";
8186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED[] = "smooth-zoom-supported";
826657678c3d86395084f6a699e73614195f06c445David 'Digit' Turnerconst char CameraParameters::KEY_FOCUS_DISTANCES[] = "focus-distances";
8386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_VIDEO_FRAME_FORMAT[] = "video-frame-format";
8486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_VIDEO_SIZE[] = "video-size";
8586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_SUPPORTED_VIDEO_SIZES[] = "video-size-values";
8686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO[] = "preferred-preview-size-for-video";
8786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW[] = "max-num-detected-faces-hw";
8886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW[] = "max-num-detected-faces-sw";
8986797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_RECORDING_HINT[] = "recording-hint";
9086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED[] = "video-snapshot-supported";
9186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_VIDEO_STABILIZATION[] = "video-stabilization";
9286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED[] = "video-stabilization-supported";
9386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
9486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::TRUE[] = "true";
9586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FALSE[] = "false";
9686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FOCUS_DISTANCE_INFINITY[] = "Infinity";
9786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
9886797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Values for white balance settings.
9986797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::WHITE_BALANCE_AUTO[] = "auto";
10086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::WHITE_BALANCE_INCANDESCENT[] = "incandescent";
10186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::WHITE_BALANCE_FLUORESCENT[] = "fluorescent";
10286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT[] = "warm-fluorescent";
10386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::WHITE_BALANCE_DAYLIGHT[] = "daylight";
104e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turnerconst char CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT[] = "cloudy-daylight";
10586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::WHITE_BALANCE_TWILIGHT[] = "twilight";
10686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::WHITE_BALANCE_SHADE[] = "shade";
10786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
10886797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Values for effect settings.
10986797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::EFFECT_NONE[] = "none";
11086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::EFFECT_MONO[] = "mono";
11186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::EFFECT_NEGATIVE[] = "negative";
112aa8236dc1b1ea300ab18716db5b8fab42aca3ca7David 'Digit' Turnerconst char CameraParameters::EFFECT_SOLARIZE[] = "solarize";
11386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::EFFECT_SEPIA[] = "sepia";
11486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::EFFECT_POSTERIZE[] = "posterize";
11586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::EFFECT_WHITEBOARD[] = "whiteboard";
11686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::EFFECT_BLACKBOARD[] = "blackboard";
11786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::EFFECT_AQUA[] = "aqua";
11886797937017f52bff088d02edf64fb931177a7eaJun Nakajima
119e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner// Values for antibanding settings.
12086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::ANTIBANDING_AUTO[] = "auto";
12186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::ANTIBANDING_50HZ[] = "50hz";
12286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::ANTIBANDING_60HZ[] = "60hz";
12386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::ANTIBANDING_OFF[] = "off";
12486797937017f52bff088d02edf64fb931177a7eaJun Nakajima
12586797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Values for flash mode settings.
12636597756e589622ee6c6628efb47c1b130d5ee85David 'Digit' Turnerconst char CameraParameters::FLASH_MODE_OFF[] = "off";
12736597756e589622ee6c6628efb47c1b130d5ee85David 'Digit' Turnerconst char CameraParameters::FLASH_MODE_AUTO[] = "auto";
12836597756e589622ee6c6628efb47c1b130d5ee85David 'Digit' Turnerconst char CameraParameters::FLASH_MODE_ON[] = "on";
12936597756e589622ee6c6628efb47c1b130d5ee85David 'Digit' Turnerconst char CameraParameters::FLASH_MODE_RED_EYE[] = "red-eye";
130e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turnerconst char CameraParameters::FLASH_MODE_TORCH[] = "torch";
13186797937017f52bff088d02edf64fb931177a7eaJun Nakajima
13286797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Values for scene mode settings.
13386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_AUTO[] = "auto";
13486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_ACTION[] = "action";
13586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_PORTRAIT[] = "portrait";
13686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_LANDSCAPE[] = "landscape";
13786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_NIGHT[] = "night";
138e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turnerconst char CameraParameters::SCENE_MODE_NIGHT_PORTRAIT[] = "night-portrait";
13986797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_THEATRE[] = "theatre";
14086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_BEACH[] = "beach";
14186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_SNOW[] = "snow";
14286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_SUNSET[] = "sunset";
14386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_STEADYPHOTO[] = "steadyphoto";
14486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_FIREWORKS[] = "fireworks";
14586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_SPORTS[] = "sports";
14686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_PARTY[] = "party";
14786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_CANDLELIGHT[] = "candlelight";
14886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::SCENE_MODE_BARCODE[] = "barcode";
14986797937017f52bff088d02edf64fb931177a7eaJun Nakajima
15086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::PIXEL_FORMAT_YUV422SP[] = "yuv422sp";
15186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::PIXEL_FORMAT_YUV420SP[] = "yuv420sp";
15286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::PIXEL_FORMAT_YUV422I[] = "yuv422i-yuyv";
15386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::PIXEL_FORMAT_YUV420P[]  = "yuv420p";
15486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::PIXEL_FORMAT_RGB565[] = "rgb565";
15586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::PIXEL_FORMAT_RGBA8888[] = "rgba8888";
15686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::PIXEL_FORMAT_JPEG[] = "jpeg";
15786797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::PIXEL_FORMAT_BAYER_RGGB[] = "bayer-rggb";
15886797937017f52bff088d02edf64fb931177a7eaJun Nakajima
15986797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Values for focus mode settings.
16086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FOCUS_MODE_AUTO[] = "auto";
16186797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FOCUS_MODE_INFINITY[] = "infinity";
16286797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FOCUS_MODE_MACRO[] = "macro";
16386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FOCUS_MODE_FIXED[] = "fixed";
16486797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FOCUS_MODE_EDOF[] = "edof";
16586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO[] = "continuous-video";
16686797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE[] = "continuous-picture";
16786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
16886797937017f52bff088d02edf64fb931177a7eaJun NakajimaCameraParameters::CameraParameters()
16986797937017f52bff088d02edf64fb931177a7eaJun Nakajima                : mMap()
17086797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
17186797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
17286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
17386797937017f52bff088d02edf64fb931177a7eaJun NakajimaCameraParameters::~CameraParameters()
17486797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
17586797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
17686797937017f52bff088d02edf64fb931177a7eaJun Nakajima
17786797937017f52bff088d02edf64fb931177a7eaJun NakajimaString8 CameraParameters::flatten() const
17886797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
17986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    String8 flattened("");
18086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    size_t size = mMap.size();
18186797937017f52bff088d02edf64fb931177a7eaJun Nakajima
18286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    for (size_t i = 0; i < size; i++) {
18386797937017f52bff088d02edf64fb931177a7eaJun Nakajima        String8 k, v;
18486797937017f52bff088d02edf64fb931177a7eaJun Nakajima        k = mMap.keyAt(i);
18586797937017f52bff088d02edf64fb931177a7eaJun Nakajima        v = mMap.valueAt(i);
18686797937017f52bff088d02edf64fb931177a7eaJun Nakajima
18786797937017f52bff088d02edf64fb931177a7eaJun Nakajima        flattened += k;
18886797937017f52bff088d02edf64fb931177a7eaJun Nakajima        flattened += "=";
18986797937017f52bff088d02edf64fb931177a7eaJun Nakajima        flattened += v;
19086797937017f52bff088d02edf64fb931177a7eaJun Nakajima        if (i != size-1)
19186797937017f52bff088d02edf64fb931177a7eaJun Nakajima            flattened += ";";
19286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
19386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
19486797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return flattened;
19586797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
19686797937017f52bff088d02edf64fb931177a7eaJun Nakajima
19786797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::unflatten(const String8 &params)
19886797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
19986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *a = params.string();
20086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *b;
20186797937017f52bff088d02edf64fb931177a7eaJun Nakajima
20286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    mMap.clear();
20386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
20486797937017f52bff088d02edf64fb931177a7eaJun Nakajima    for (;;) {
20586797937017f52bff088d02edf64fb931177a7eaJun Nakajima        // Find the bounds of the key name.
206e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner        b = strchr(a, '=');
20786797937017f52bff088d02edf64fb931177a7eaJun Nakajima        if (b == 0)
20886797937017f52bff088d02edf64fb931177a7eaJun Nakajima            break;
209e2678e116c8cdb0f36b247a5bd9cfacc849362fcDavid 'Digit' Turner
21086797937017f52bff088d02edf64fb931177a7eaJun Nakajima        // Create the key string.
21186797937017f52bff088d02edf64fb931177a7eaJun Nakajima        String8 k(a, (size_t)(b-a));
21286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
2136657678c3d86395084f6a699e73614195f06c445David 'Digit' Turner        // Find the value.
21486797937017f52bff088d02edf64fb931177a7eaJun Nakajima        a = b+1;
21586797937017f52bff088d02edf64fb931177a7eaJun Nakajima        b = strchr(a, ';');
216c005246ed03de874fdc432073ba8e5e8ebfed922David 'Digit' Turner        if (b == 0) {
21786797937017f52bff088d02edf64fb931177a7eaJun Nakajima            // If there's no semicolon, this is the last item.
21886797937017f52bff088d02edf64fb931177a7eaJun Nakajima            String8 v(a);
21986797937017f52bff088d02edf64fb931177a7eaJun Nakajima            mMap.add(k, v);
22086797937017f52bff088d02edf64fb931177a7eaJun Nakajima            break;
22186797937017f52bff088d02edf64fb931177a7eaJun Nakajima        }
22286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
22386797937017f52bff088d02edf64fb931177a7eaJun Nakajima        String8 v(a, (size_t)(b-a));
2246657678c3d86395084f6a699e73614195f06c445David 'Digit' Turner        mMap.add(k, v);
22586797937017f52bff088d02edf64fb931177a7eaJun Nakajima        a = b+1;
22686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
22786797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
228aa8236dc1b1ea300ab18716db5b8fab42aca3ca7David 'Digit' Turner
22986797937017f52bff088d02edf64fb931177a7eaJun Nakajima
23086797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::set(const char *key, const char *value)
23186797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
2326657678c3d86395084f6a699e73614195f06c445David 'Digit' Turner    // XXX i think i can do this with strspn()
23386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (strchr(key, '=') || strchr(key, ';')) {
23486797937017f52bff088d02edf64fb931177a7eaJun Nakajima        //XXX LOGE("Key \"%s\"contains invalid character (= or ;)", key);
23586797937017f52bff088d02edf64fb931177a7eaJun Nakajima        return;
23686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
23786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
23886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (strchr(value, '=') || strchr(key, ';')) {
23986797937017f52bff088d02edf64fb931177a7eaJun Nakajima        //XXX LOGE("Value \"%s\"contains invalid character (= or ;)", value);
24086797937017f52bff088d02edf64fb931177a7eaJun Nakajima        return;
24186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
24286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
24386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    mMap.replaceValueFor(String8(key), String8(value));
24486797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
24586797937017f52bff088d02edf64fb931177a7eaJun Nakajima
24686797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::set(const char *key, int value)
24786797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
24886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    char str[16];
24986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    sprintf(str, "%d", value);
25086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    set(key, str);
25186797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
25286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
25386797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::setFloat(const char *key, float value)
25486797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
25586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    char str[16];  // 14 should be enough. We overestimate to be safe.
25686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    snprintf(str, sizeof(str), "%g", value);
25786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    set(key, str);
25886797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
25986797937017f52bff088d02edf64fb931177a7eaJun Nakajima
26086797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char *CameraParameters::get(const char *key) const
26186797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
26286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    String8 v = mMap.valueFor(String8(key));
26386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (v.length() == 0)
26486797937017f52bff088d02edf64fb931177a7eaJun Nakajima        return 0;
26586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return v.string();
26686797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
26786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
26886797937017f52bff088d02edf64fb931177a7eaJun Nakajimaint CameraParameters::getInt(const char *key) const
26986797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
27086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *v = get(key);
27186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (v == 0)
27286797937017f52bff088d02edf64fb931177a7eaJun Nakajima        return -1;
27386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return strtol(v, 0, 0);
274c005246ed03de874fdc432073ba8e5e8ebfed922David 'Digit' Turner}
27586797937017f52bff088d02edf64fb931177a7eaJun Nakajima
27686797937017f52bff088d02edf64fb931177a7eaJun Nakajimafloat CameraParameters::getFloat(const char *key) const
27786797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
27886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *v = get(key);
27986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (v == 0) return -1;
28086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return strtof(v, 0);
28186797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
28286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
28386797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::remove(const char *key)
28486797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
28586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    mMap.removeItem(String8(key));
28686797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
28786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
28886797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Parse string like "640x480" or "10000,20000"
28986797937017f52bff088d02edf64fb931177a7eaJun Nakajimastatic int parse_pair(const char *str, int *first, int *second, char delim,
29086797937017f52bff088d02edf64fb931177a7eaJun Nakajima                      char **endptr = NULL)
29186797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
29286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    // Find the first integer.
29386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    char *end;
29486797937017f52bff088d02edf64fb931177a7eaJun Nakajima    int w = (int)strtol(str, &end, 10);
29586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    // If a delimeter does not immediately follow, give up.
29686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (*end != delim) {
29786797937017f52bff088d02edf64fb931177a7eaJun Nakajima        LOGE("Cannot find delimeter (%c) in str=%s", delim, str);
29886797937017f52bff088d02edf64fb931177a7eaJun Nakajima        return -1;
29986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
30086797937017f52bff088d02edf64fb931177a7eaJun Nakajima
30186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    // Find the second integer, immediately after the delimeter.
30286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    int h = (int)strtol(end+1, &end, 10);
30386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
30486797937017f52bff088d02edf64fb931177a7eaJun Nakajima    *first = w;
30586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    *second = h;
30686797937017f52bff088d02edf64fb931177a7eaJun Nakajima
30786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (endptr) {
30886797937017f52bff088d02edf64fb931177a7eaJun Nakajima        *endptr = end;
30986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
31086797937017f52bff088d02edf64fb931177a7eaJun Nakajima
31186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return 0;
31286797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
31386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
31486797937017f52bff088d02edf64fb931177a7eaJun Nakajimastatic void parseSizesList(const char *sizesStr, Vector<Size> &sizes)
31586797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
31686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (sizesStr == 0) {
31786797937017f52bff088d02edf64fb931177a7eaJun Nakajima        return;
31886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
31986797937017f52bff088d02edf64fb931177a7eaJun Nakajima
32086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    char *sizeStartPtr = (char *)sizesStr;
32186797937017f52bff088d02edf64fb931177a7eaJun Nakajima
32286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    while (true) {
32386797937017f52bff088d02edf64fb931177a7eaJun Nakajima        int width, height;
32486797937017f52bff088d02edf64fb931177a7eaJun Nakajima        int success = parse_pair(sizeStartPtr, &width, &height, 'x',
32586797937017f52bff088d02edf64fb931177a7eaJun Nakajima                                 &sizeStartPtr);
32686797937017f52bff088d02edf64fb931177a7eaJun Nakajima        if (success == -1 || (*sizeStartPtr != ',' && *sizeStartPtr != '\0')) {
32786797937017f52bff088d02edf64fb931177a7eaJun Nakajima            LOGE("Picture sizes string \"%s\" contains invalid character.", sizesStr);
32886797937017f52bff088d02edf64fb931177a7eaJun Nakajima            return;
32986797937017f52bff088d02edf64fb931177a7eaJun Nakajima        }
33086797937017f52bff088d02edf64fb931177a7eaJun Nakajima        sizes.push(Size(width, height));
33186797937017f52bff088d02edf64fb931177a7eaJun Nakajima
332e2678e116c8cdb0f36b247a5bd9cfacc849362fcDavid 'Digit' Turner        if (*sizeStartPtr == '\0') {
33386797937017f52bff088d02edf64fb931177a7eaJun Nakajima            return;
33486797937017f52bff088d02edf64fb931177a7eaJun Nakajima        }
33586797937017f52bff088d02edf64fb931177a7eaJun Nakajima        sizeStartPtr++;
33686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
33786797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
338e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner
33986797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::setPreviewSize(int width, int height)
34086797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
34186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    char str[32];
34286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    sprintf(str, "%dx%d", width, height);
34386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    set(KEY_PREVIEW_SIZE, str);
34486797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
34586797937017f52bff088d02edf64fb931177a7eaJun Nakajima
34686797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::getPreviewSize(int *width, int *height) const
34786797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
34886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    *width = *height = -1;
34986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    // Get the current string, if it doesn't exist, leave the -1x-1
35086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *p = get(KEY_PREVIEW_SIZE);
35186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (p == 0)  return;
35286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    parse_pair(p, width, height, 'x');
35386797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
35486797937017f52bff088d02edf64fb931177a7eaJun Nakajima
35586797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::getPreferredPreviewSizeForVideo(int *width, int *height) const
35686797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
35786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    *width = *height = -1;
35886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *p = get(KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO);
35986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (p == 0)  return;
36086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    parse_pair(p, width, height, 'x');
36186797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
36286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
36386797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::getSupportedPreviewSizes(Vector<Size> &sizes) const
36486797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
36586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *previewSizesStr = get(KEY_SUPPORTED_PREVIEW_SIZES);
366e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner    parseSizesList(previewSizesStr, sizes);
36786797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
36886797937017f52bff088d02edf64fb931177a7eaJun Nakajima
36986797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::setVideoSize(int width, int height)
37086797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
371e2678e116c8cdb0f36b247a5bd9cfacc849362fcDavid 'Digit' Turner    char str[32];
37286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    sprintf(str, "%dx%d", width, height);
37386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    set(KEY_VIDEO_SIZE, str);
37486797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
37586797937017f52bff088d02edf64fb931177a7eaJun Nakajima
37686797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::getVideoSize(int *width, int *height) const
37786797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
37886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    *width = *height = -1;
37986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *p = get(KEY_VIDEO_SIZE);
38086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (p == 0) return;
38186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    parse_pair(p, width, height, 'x');
38286797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
38386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
38486797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::getSupportedVideoSizes(Vector<Size> &sizes) const
38586797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
386e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner    const char *videoSizesStr = get(KEY_SUPPORTED_VIDEO_SIZES);
38786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    parseSizesList(videoSizesStr, sizes);
38886797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
389e2678e116c8cdb0f36b247a5bd9cfacc849362fcDavid 'Digit' Turner
39086797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::setPreviewFrameRate(int fps)
39186797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
39286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    set(KEY_PREVIEW_FRAME_RATE, fps);
39386797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
39486797937017f52bff088d02edf64fb931177a7eaJun Nakajima
39586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaint CameraParameters::getPreviewFrameRate() const
39686797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
39786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return getInt(KEY_PREVIEW_FRAME_RATE);
39886797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
39986797937017f52bff088d02edf64fb931177a7eaJun Nakajima
40086797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::getPreviewFpsRange(int *min_fps, int *max_fps) const
40186797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
40286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    *min_fps = *max_fps = -1;
40386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *p = get(KEY_PREVIEW_FPS_RANGE);
40486797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (p == 0) return;
40586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    parse_pair(p, min_fps, max_fps, ',');
40686797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
40786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
40886797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::setPreviewFormat(const char *format)
40986797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
41086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    set(KEY_PREVIEW_FORMAT, format);
41186797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
41286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
41386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char *CameraParameters::getPreviewFormat() const
41486797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
41586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return get(KEY_PREVIEW_FORMAT);
41686797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
41786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
41886797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::setPictureSize(int width, int height)
41986797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
42086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    char str[32];
42186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    sprintf(str, "%dx%d", width, height);
42286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    set(KEY_PICTURE_SIZE, str);
42386797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
42486797937017f52bff088d02edf64fb931177a7eaJun Nakajima
42586797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::getPictureSize(int *width, int *height) const
42686797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
42786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    *width = *height = -1;
42886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    // Get the current string, if it doesn't exist, leave the -1x-1
42986797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *p = get(KEY_PICTURE_SIZE);
43086797937017f52bff088d02edf64fb931177a7eaJun Nakajima    if (p == 0) return;
43186797937017f52bff088d02edf64fb931177a7eaJun Nakajima    parse_pair(p, width, height, 'x');
43286797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
43386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
43486797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::getSupportedPictureSizes(Vector<Size> &sizes) const
43586797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
43686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const char *pictureSizesStr = get(KEY_SUPPORTED_PICTURE_SIZES);
43786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    parseSizesList(pictureSizesStr, sizes);
438e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner}
43986797937017f52bff088d02edf64fb931177a7eaJun Nakajima
44086797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::setPictureFormat(const char *format)
44186797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
44286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    set(KEY_PICTURE_FORMAT, format);
44386797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
44486797937017f52bff088d02edf64fb931177a7eaJun Nakajima
44586797937017f52bff088d02edf64fb931177a7eaJun Nakajimaconst char *CameraParameters::getPictureFormat() const
44686797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
44786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return get(KEY_PICTURE_FORMAT);
448e2678e116c8cdb0f36b247a5bd9cfacc849362fcDavid 'Digit' Turner}
44986797937017f52bff088d02edf64fb931177a7eaJun Nakajima
45086797937017f52bff088d02edf64fb931177a7eaJun Nakajimavoid CameraParameters::dump() const
45186797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
45286797937017f52bff088d02edf64fb931177a7eaJun Nakajima    LOGD("dump: mMap.size = %d", mMap.size());
45386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    for (size_t i = 0; i < mMap.size(); i++) {
45486797937017f52bff088d02edf64fb931177a7eaJun Nakajima        String8 k, v;
45586797937017f52bff088d02edf64fb931177a7eaJun Nakajima        k = mMap.keyAt(i);
45686797937017f52bff088d02edf64fb931177a7eaJun Nakajima        v = mMap.valueAt(i);
45786797937017f52bff088d02edf64fb931177a7eaJun Nakajima        LOGD("%s: %s\n", k.string(), v.string());
45886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
45986797937017f52bff088d02edf64fb931177a7eaJun Nakajima}
46086797937017f52bff088d02edf64fb931177a7eaJun Nakajima
46186797937017f52bff088d02edf64fb931177a7eaJun Nakajimastatus_t CameraParameters::dump(int fd, const Vector<String16>& args) const
46286797937017f52bff088d02edf64fb931177a7eaJun Nakajima{
46386797937017f52bff088d02edf64fb931177a7eaJun Nakajima    const size_t SIZE = 256;
46486797937017f52bff088d02edf64fb931177a7eaJun Nakajima    char buffer[SIZE];
46586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    String8 result;
46686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    snprintf(buffer, 255, "CameraParameters::dump: mMap.size = %d\n", mMap.size());
46786797937017f52bff088d02edf64fb931177a7eaJun Nakajima    result.append(buffer);
46886797937017f52bff088d02edf64fb931177a7eaJun Nakajima    for (size_t i = 0; i < mMap.size(); i++) {
46986797937017f52bff088d02edf64fb931177a7eaJun Nakajima        String8 k, v;
47086797937017f52bff088d02edf64fb931177a7eaJun Nakajima        k = mMap.keyAt(i);
47186797937017f52bff088d02edf64fb931177a7eaJun Nakajima        v = mMap.valueAt(i);
472e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner        snprintf(buffer, 255, "\t%s: %s\n", k.string(), v.string());
47386797937017f52bff088d02edf64fb931177a7eaJun Nakajima        result.append(buffer);
47486797937017f52bff088d02edf64fb931177a7eaJun Nakajima    }
47586797937017f52bff088d02edf64fb931177a7eaJun Nakajima    write(fd, result.string(), result.size());
47686797937017f52bff088d02edf64fb931177a7eaJun Nakajima    return NO_ERROR;
477e2678e116c8cdb0f36b247a5bd9cfacc849362fcDavid 'Digit' Turner}
47886797937017f52bff088d02edf64fb931177a7eaJun Nakajima
47986797937017f52bff088d02edf64fb931177a7eaJun Nakajima}; // namespace android
48086797937017f52bff088d02edf64fb931177a7eaJun Nakajima