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 ¶ms) 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