172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng/* 272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * Copyright (C) Texas Instruments - http://www.ti.com/ 372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * 472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * Licensed under the Apache License, Version 2.0 (the "License"); 572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * you may not use this file except in compliance with the License. 672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * You may obtain a copy of the License at 772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * 872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * http://www.apache.org/licenses/LICENSE-2.0 972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * 1072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * Unless required by applicable law or agreed to in writing, software 1172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * distributed under the License is distributed on an "AS IS" BASIS, 1272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * See the License for the specific language governing permissions and 1472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng * limitations under the License. 1572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng */ 1672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 1772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 1872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 1972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 2072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#ifndef CAMERA_PROPERTIES_H 2172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#define CAMERA_PROPERTIES_H 2272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 2372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include <utils/KeyedVector.h> 2472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include <utils/String8.h> 2572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include <stdio.h> 2672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include <dirent.h> 2772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include <errno.h> 2872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include <stdio.h> 2972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include <string.h> 3072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include <ctype.h> 3172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#include "cutils/properties.h" 3272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 3372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boatengnamespace android { 3472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 3572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#define MAX_CAMERAS_SUPPORTED 2 3672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#define MAX_SIMUL_CAMERAS_SUPPORTED 1 3772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#define MAX_PROP_NAME_LENGTH 50 3872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#define MAX_PROP_VALUE_LENGTH 2048 3972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 4072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#define EXIF_MAKE_DEFAULT "default_make" 4172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#define EXIF_MODEL_DEFAULT "default_model" 4272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 4372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng// Class that handles the Camera Properties 4472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boatengclass CameraProperties 4572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng{ 4672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boatengpublic: 4772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char INVALID[]; 4872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char CAMERA_NAME[]; 4972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char CAMERA_SENSOR_INDEX[]; 5072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char ORIENTATION_INDEX[]; 5172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char FACING_INDEX[]; 5272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char S3D_SUPPORTED[]; 5372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_PREVIEW_SIZES[]; 5472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_PREVIEW_FORMATS[]; 5572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_PREVIEW_FRAME_RATES[]; 5672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_PICTURE_SIZES[]; 5772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_PICTURE_FORMATS[]; 5872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_THUMBNAIL_SIZES[]; 5972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_WHITE_BALANCE[]; 6072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_EFFECTS[]; 6172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_ANTIBANDING[]; 6272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_EXPOSURE_MODES[]; 6372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_EV_MIN[]; 6472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_EV_MAX[]; 6572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_EV_STEP[]; 6672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_ISO_VALUES[]; 6772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_SCENE_MODES[]; 6872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_FLASH_MODES[]; 6972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_FOCUS_MODES[]; 7072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char REQUIRED_PREVIEW_BUFS[]; 7172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char REQUIRED_IMAGE_BUFS[]; 7272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_ZOOM_RATIOS[]; 7372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_ZOOM_STAGES[]; 7472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_IPP_MODES[]; 7572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SMOOTH_ZOOM_SUPPORTED[]; 7672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char ZOOM_SUPPORTED[]; 7772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char PREVIEW_SIZE[]; 7872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char PREVIEW_FORMAT[]; 7972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char PREVIEW_FRAME_RATE[]; 8072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char ZOOM[]; 8172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char PICTURE_SIZE[]; 8272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char PICTURE_FORMAT[]; 8372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char JPEG_THUMBNAIL_SIZE[]; 8472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char WHITEBALANCE[]; 8572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char EFFECT[]; 8672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char ANTIBANDING[]; 8772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char EXPOSURE_MODE[]; 8872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char EV_COMPENSATION[]; 8972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char ISO_MODE[]; 9072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char FOCUS_MODE[]; 9172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SCENE_MODE[]; 9272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char FLASH_MODE[]; 9372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char JPEG_QUALITY[]; 9472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char BRIGHTNESS[]; 9572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SATURATION[]; 9672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SHARPNESS[]; 9772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char CONTRAST[]; 9872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char IPP[]; 9972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char GBCE[]; 10072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char AUTOCONVERGENCE[]; 10172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char AUTOCONVERGENCE_MODE[]; 10272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char MANUALCONVERGENCE_VALUES[]; 10372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SENSOR_ORIENTATION[]; 10472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SENSOR_ORIENTATION_VALUES[]; 10572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char REVISION[]; 10672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char FOCAL_LENGTH[]; 10772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char HOR_ANGLE[]; 10872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char VER_ANGLE[]; 10972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char EXIF_MAKE[]; 11072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char EXIF_MODEL[]; 11172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char JPEG_THUMBNAIL_QUALITY[]; 11272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char MAX_FOCUS_AREAS[]; 11372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char MAX_FD_HW_FACES[]; 11472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char MAX_FD_SW_FACES[]; 11572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 11672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char PARAMS_DELIMITER []; 11772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 11872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char S3D2D_PREVIEW[]; 11972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char S3D2D_PREVIEW_MODES[]; 12072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char VSTAB[]; 12172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char VSTAB_SUPPORTED[]; 12272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char FRAMERATE_RANGE[]; 12372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char FRAMERATE_RANGE_IMAGE[]; 12472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char FRAMERATE_RANGE_VIDEO[]; 12572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char FRAMERATE_RANGE_SUPPORTED[]; 12672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 12772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char DEFAULT_VALUE[]; 12872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 12972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char AUTO_EXPOSURE_LOCK[]; 13072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char AUTO_EXPOSURE_LOCK_SUPPORTED[]; 13172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char AUTO_WHITEBALANCE_LOCK[]; 13272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char AUTO_WHITEBALANCE_LOCK_SUPPORTED[]; 13372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char MAX_NUM_METERING_AREAS[]; 13472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char METERING_AREAS[]; 13572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char MAX_NUM_FOCUS_AREAS[]; 13672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 13772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char VIDEO_SNAPSHOT_SUPPORTED[]; 13872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 13972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char VIDEO_SIZE[]; 14072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char SUPPORTED_VIDEO_SIZES[]; 14172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng static const char PREFERRED_PREVIEW_SIZE_FOR_VIDEO[]; 14272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 14372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng CameraProperties(); 14472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng ~CameraProperties(); 14572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 14672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng // container class passed around for accessing properties 14772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng class Properties 14872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng { 14972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng public: 15072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng Properties() 15172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng { 15272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng mProperties = new DefaultKeyedVector<String8, String8>(String8(DEFAULT_VALUE)); 15372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng char property[PROPERTY_VALUE_MAX]; 15472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng property_get("ro.product.manufacturer", property, EXIF_MAKE_DEFAULT); 15572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng property[0] = toupper(property[0]); 15672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng set(EXIF_MAKE, property); 15772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng property_get("ro.product.model", property, EXIF_MODEL_DEFAULT); 15872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng property[0] = toupper(property[0]); 15972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng set(EXIF_MODEL, property); 16072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng } 16172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng ~Properties() 16272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng { 16372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng delete mProperties; 16472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng } 16572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng ssize_t set(const char *prop, const char *value); 16672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng ssize_t set(const char *prop, int value); 16772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng const char* get(const char * prop); 16872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng void dump(); 16972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 17072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng protected: 17172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng const char* keyAt(unsigned int); 17272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng const char* valueAt(unsigned int); 17372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 17472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng private: 17572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng DefaultKeyedVector<String8, String8>* mProperties; 17672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 17772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng }; 17872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 17972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng ///Initializes the CameraProperties class 18072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng status_t initialize(); 18172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng status_t loadProperties(); 18272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng int camerasSupported(); 18372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng int getProperties(int cameraIndex, Properties** properties); 18472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 18572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boatengprivate: 18672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 18772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng uint32_t mCamerasSupported; 18872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng int mInitialized; 18972dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng mutable Mutex mLock; 19072dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 19172dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng Properties mCameraProps[MAX_CAMERAS_SUPPORTED]; 19272dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 19372dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng}; 19472dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 19572dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng}; 19672dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 19772dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng#endif //CAMERA_PROPERTIES_H 19872dbc3152137ec7b77deddede4229f73149e92c8Akwasi Boateng 199