19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2008, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 58de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li** Licensed under the Apache License, Version 2.0 (the "License"); 68de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li** you may not use this file except in compliance with the License. 78de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 98de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 118de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li** Unless required by applicable law or agreed to in writing, software 128de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li** distributed under the License is distributed on an "AS IS" BASIS, 138de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LOG_TAG "CameraParams" 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h> 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <string.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 23000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <camera/CameraParameters.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 268de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li// Parameter keys to communicate between camera application and driver. 278de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_PREVIEW_SIZE[] = "preview-size"; 288de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES[] = "preview-size-values"; 298de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_PREVIEW_FORMAT[] = "preview-format"; 308de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS[] = "preview-format-values"; 318de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_PREVIEW_FRAME_RATE[] = "preview-frame-rate"; 328de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES[] = "preview-frame-rate-values"; 338de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_PICTURE_SIZE[] = "picture-size"; 348de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_PICTURE_SIZES[] = "picture-size-values"; 358de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_PICTURE_FORMAT[] = "picture-format"; 368de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS[] = "picture-format-values"; 378de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH[] = "jpeg-thumbnail-width"; 388de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT[] = "jpeg-thumbnail-height"; 39acf77033bbd4682566bcd3c535f4f1e94d23f962Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES[] = "jpeg-thumbnail-size-values"; 408de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY[] = "jpeg-thumbnail-quality"; 418de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_JPEG_QUALITY[] = "jpeg-quality"; 428de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_ROTATION[] = "rotation"; 438de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_GPS_LATITUDE[] = "gps-latitude"; 448de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_GPS_LONGITUDE[] = "gps-longitude"; 458de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_GPS_ALTITUDE[] = "gps-altitude"; 468de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_GPS_TIMESTAMP[] = "gps-timestamp"; 47055c986ab841f8f758398841730f1e90313b132aRay Chenconst char CameraParameters::KEY_GPS_PROCESSING_METHOD[] = "gps-processing-method"; 488de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_WHITE_BALANCE[] = "whitebalance"; 498de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_WHITE_BALANCE[] = "whitebalance-values"; 508de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_EFFECT[] = "effect"; 518de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_EFFECTS[] = "effect-values"; 528de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_ANTIBANDING[] = "antibanding"; 538de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_ANTIBANDING[] = "antibanding-values"; 548de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SCENE_MODE[] = "scene-mode"; 558de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_SCENE_MODES[] = "scene-mode-values"; 568de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_FLASH_MODE[] = "flash-mode"; 578de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_FLASH_MODES[] = "flash-mode-values"; 588de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_FOCUS_MODE[] = "focus-mode"; 598de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::KEY_SUPPORTED_FOCUS_MODES[] = "focus-mode-values"; 606c8d2760736a0753dad96b4bb8f98c7d075e6d54Wu-cheng Liconst char CameraParameters::KEY_FOCAL_LENGTH[] = "focal-length"; 616c8d2760736a0753dad96b4bb8f98c7d075e6d54Wu-cheng Liconst char CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE[] = "horizontal-view-angle"; 626c8d2760736a0753dad96b4bb8f98c7d075e6d54Wu-cheng Liconst char CameraParameters::KEY_VERTICAL_VIEW_ANGLE[] = "vertical-view-angle"; 63ff723b6c43d5a8fd0ae0e0732f5d47012d74e01dWu-cheng Liconst char CameraParameters::KEY_EXPOSURE_COMPENSATION[] = "exposure-compensation"; 6424b326a8978bf78e3e560723dde221792784325bWu-cheng Liconst char CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION[] = "max-exposure-compensation"; 6524b326a8978bf78e3e560723dde221792784325bWu-cheng Liconst char CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION[] = "min-exposure-compensation"; 6624b326a8978bf78e3e560723dde221792784325bWu-cheng Liconst char CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP[] = "exposure-compensation-step"; 678cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Liconst char CameraParameters::KEY_ZOOM[] = "zoom"; 688cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Liconst char CameraParameters::KEY_MAX_ZOOM[] = "max-zoom"; 698cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Liconst char CameraParameters::KEY_ZOOM_RATIOS[] = "zoom-ratios"; 708cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Liconst char CameraParameters::KEY_ZOOM_SUPPORTED[] = "zoom-supported"; 718cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Liconst char CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED[] = "smooth-zoom-supported"; 728de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li 73d9ef5d7f13be0e5e0f9cf0ea768742fd91636c8dWu-cheng Liconst char CameraParameters::TRUE[] = "true"; 74d9ef5d7f13be0e5e0f9cf0ea768742fd91636c8dWu-cheng Li 758de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li// Values for white balance settings. 768de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::WHITE_BALANCE_AUTO[] = "auto"; 778de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::WHITE_BALANCE_INCANDESCENT[] = "incandescent"; 788de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::WHITE_BALANCE_FLUORESCENT[] = "fluorescent"; 798de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT[] = "warm-fluorescent"; 808de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::WHITE_BALANCE_DAYLIGHT[] = "daylight"; 818de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT[] = "cloudy-daylight"; 828de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::WHITE_BALANCE_TWILIGHT[] = "twilight"; 838de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::WHITE_BALANCE_SHADE[] = "shade"; 848de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li 858de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li// Values for effect settings. 868de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_NONE[] = "none"; 878de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_MONO[] = "mono"; 888de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_NEGATIVE[] = "negative"; 898de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_SOLARIZE[] = "solarize"; 908de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_SEPIA[] = "sepia"; 918de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_POSTERIZE[] = "posterize"; 928de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_WHITEBOARD[] = "whiteboard"; 938de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_BLACKBOARD[] = "blackboard"; 948de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::EFFECT_AQUA[] = "aqua"; 958de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li 968de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li// Values for antibanding settings. 978de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::ANTIBANDING_AUTO[] = "auto"; 988de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::ANTIBANDING_50HZ[] = "50hz"; 998de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::ANTIBANDING_60HZ[] = "60hz"; 1008de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::ANTIBANDING_OFF[] = "off"; 1018de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li 1028de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li// Values for flash mode settings. 1038de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::FLASH_MODE_OFF[] = "off"; 1048de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::FLASH_MODE_AUTO[] = "auto"; 1058de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::FLASH_MODE_ON[] = "on"; 1068de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::FLASH_MODE_RED_EYE[] = "red-eye"; 107fe1a86df8b1c23e3290f96dce69984bf979a462bWu-cheng Liconst char CameraParameters::FLASH_MODE_TORCH[] = "torch"; 1088de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li 1098de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li// Values for scene mode settings. 1108de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_AUTO[] = "auto"; 1118de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_ACTION[] = "action"; 1128de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_PORTRAIT[] = "portrait"; 1138de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_LANDSCAPE[] = "landscape"; 1148de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_NIGHT[] = "night"; 1158de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_NIGHT_PORTRAIT[] = "night-portrait"; 1168de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_THEATRE[] = "theatre"; 1178de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_BEACH[] = "beach"; 1188de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_SNOW[] = "snow"; 1198de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_SUNSET[] = "sunset"; 1208de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_STEADYPHOTO[] = "steadyphoto"; 1218de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_FIREWORKS[] = "fireworks"; 1228de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_SPORTS[] = "sports"; 1238de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_PARTY[] = "party"; 1248de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::SCENE_MODE_CANDLELIGHT[] = "candlelight"; 125c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Liconst char CameraParameters::SCENE_MODE_BARCODE[] = "barcode"; 1268de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li 1278de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li// Formats for setPreviewFormat and setPictureFormat. 1288de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::PIXEL_FORMAT_YUV422SP[] = "yuv422sp"; 1298de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::PIXEL_FORMAT_YUV420SP[] = "yuv420sp"; 1308de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::PIXEL_FORMAT_YUV422I[] = "yuv422i-yuyv"; 1318de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::PIXEL_FORMAT_RGB565[] = "rgb565"; 1328de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::PIXEL_FORMAT_JPEG[] = "jpeg"; 1338de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li 1348de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li// Values for focus mode settings. 1358de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::FOCUS_MODE_AUTO[] = "auto"; 1368de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::FOCUS_MODE_INFINITY[] = "infinity"; 1378de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::FOCUS_MODE_MACRO[] = "macro"; 1388de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Liconst char CameraParameters::FOCUS_MODE_FIXED[] = "fixed"; 139c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Liconst char CameraParameters::FOCUS_MODE_EDOF[] = "edof"; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCameraParameters::CameraParameters() 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : mMap() 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCameraParameters::~CameraParameters() 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectString8 CameraParameters::flatten() const 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 flattened(""); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t size = mMap.size(); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (size_t i = 0; i < size; i++) { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 k, v; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project k = mMap.keyAt(i); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = mMap.valueAt(i); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project flattened += k; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project flattened += "="; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project flattened += v; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (i != size-1) 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project flattened += ";"; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return flattened; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::unflatten(const String8 ¶ms) 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char *a = params.string(); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char *b; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMap.clear(); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (;;) { 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Find the bounds of the key name. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b = strchr(a, '='); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (b == 0) 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Create the key string. 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 k(a, (size_t)(b-a)); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Find the value. 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a = b+1; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b = strchr(a, ';'); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (b == 0) { 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If there's no semicolon, this is the last item. 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 v(a); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMap.add(k, v); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 v(a, (size_t)(b-a)); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMap.add(k, v); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a = b+1; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::set(const char *key, const char *value) 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2058de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li // XXX i think i can do this with strspn() 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (strchr(key, '=') || strchr(key, ';')) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //XXX LOGE("Key \"%s\"contains invalid character (= or ;)", key); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (strchr(value, '=') || strchr(key, ';')) { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //XXX LOGE("Value \"%s\"contains invalid character (= or ;)", value); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMap.replaceValueFor(String8(key), String8(value)); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::set(const char *key, int value) 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char str[16]; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sprintf(str, "%d", value); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project set(key, str); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2267eae31cab43a36b6feccf523f212968619abe599Wu-cheng Livoid CameraParameters::setFloat(const char *key, float value) 2277eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li{ 2287eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li char str[16]; // 14 should be enough. We overestimate to be safe. 2297eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li snprintf(str, sizeof(str), "%g", value); 2307eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li set(key, str); 2317eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li} 2327eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst char *CameraParameters::get(const char *key) const 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 v = mMap.valueFor(String8(key)); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (v.length() == 0) 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return v.string(); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint CameraParameters::getInt(const char *key) const 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char *v = get(key); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (v == 0) 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return strtol(v, 0, 0); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2497eae31cab43a36b6feccf523f212968619abe599Wu-cheng Lifloat CameraParameters::getFloat(const char *key) const 2507eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li{ 2517eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li const char *v = get(key); 2527eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li if (v == 0) return -1; 2537eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li return strtof(v, 0); 2547eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li} 2557eae31cab43a36b6feccf523f212968619abe599Wu-cheng Li 25678624e41da166712aaa5ae47e4d3467337ac810aWu-cheng Livoid CameraParameters::remove(const char *key) 25778624e41da166712aaa5ae47e4d3467337ac810aWu-cheng Li{ 25878624e41da166712aaa5ae47e4d3467337ac810aWu-cheng Li mMap.removeItem(String8(key)); 25978624e41da166712aaa5ae47e4d3467337ac810aWu-cheng Li} 26078624e41da166712aaa5ae47e4d3467337ac810aWu-cheng Li 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic int parse_size(const char *str, int &width, int &height) 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Find the width. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char *end; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int w = (int)strtol(str, &end, 10); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If an 'x' does not immediately follow, give up. 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (*end != 'x') 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Find the height, immediately after the 'x'. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int h = (int)strtol(end+1, 0, 10); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project width = w; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project height = h; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::setPreviewSize(int width, int height) 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char str[32]; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sprintf(str, "%dx%d", width, height); 2838de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li set(KEY_PREVIEW_SIZE, str); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::getPreviewSize(int *width, int *height) const 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *width = -1; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *height = -1; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the current string, if it doesn't exist, leave the -1x-1 2928de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li const char *p = get(KEY_PREVIEW_SIZE); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (p == 0) 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int w, h; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parse_size(p, w, h) == 0) { 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *width = w; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *height = h; 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::setPreviewFrameRate(int fps) 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3058de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li set(KEY_PREVIEW_FRAME_RATE, fps); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint CameraParameters::getPreviewFrameRate() const 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3108de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li return getInt(KEY_PREVIEW_FRAME_RATE); 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::setPreviewFormat(const char *format) 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3158de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li set(KEY_PREVIEW_FORMAT, format); 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst char *CameraParameters::getPreviewFormat() const 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3208de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li return get(KEY_PREVIEW_FORMAT); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::setPictureSize(int width, int height) 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char str[32]; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sprintf(str, "%dx%d", width, height); 3278de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li set(KEY_PICTURE_SIZE, str); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::getPictureSize(int *width, int *height) const 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *width = -1; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *height = -1; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the current string, if it doesn't exist, leave the -1x-1 3368de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li const char *p = get(KEY_PICTURE_SIZE); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (p == 0) 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int w, h; 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parse_size(p, w, h) == 0) { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *width = w; 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *height = h; 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::setPictureFormat(const char *format) 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3498de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li set(KEY_PICTURE_FORMAT, format); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst char *CameraParameters::getPictureFormat() const 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3548de57d8fa346522404c2064a78e8f24a5aa3bf23Wu-cheng Li return get(KEY_PICTURE_FORMAT); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid CameraParameters::dump() const 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGD("dump: mMap.size = %d", mMap.size()); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (size_t i = 0; i < mMap.size(); i++) { 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 k, v; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project k = mMap.keyAt(i); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = mMap.valueAt(i); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGD("%s: %s\n", k.string(), v.string()); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t CameraParameters::dump(int fd, const Vector<String16>& args) const 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const size_t SIZE = 256; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char buffer[SIZE]; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 result; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project snprintf(buffer, 255, "CameraParameters::dump: mMap.size = %d\n", mMap.size()); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result.append(buffer); 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (size_t i = 0; i < mMap.size(); i++) { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String8 k, v; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project k = mMap.keyAt(i); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = mMap.valueAt(i); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project snprintf(buffer, 255, "\t%s: %s\n", k.string(), v.string()); 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result.append(buffer); 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project write(fd, result.string(), result.size()); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 387