Home | History | Annotate | Download | only in camera
      1 /*
      2  * Copyright (C) Texas Instruments - http://www.ti.com/
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /**
     18 * @file CameraProperties.cpp
     19 *
     20 * This file maps the CameraHardwareInterface to the Camera interfaces on OMAP4 (mainly OMX).
     21 *
     22 */
     23 
     24 #include "CameraProperties.h"
     25 
     26 namespace Ti {
     27 namespace Camera {
     28 
     29 const char CameraProperties::INVALID[]="prop-invalid-key";
     30 const char CameraProperties::CAMERA_NAME[]="prop-camera-name";
     31 const char CameraProperties::CAMERA_SENSOR_INDEX[]="prop-sensor-index";
     32 const char CameraProperties::CAMERA_SENSOR_ID[] = "prop-sensor-id";
     33 const char CameraProperties::ORIENTATION_INDEX[]="prop-orientation";
     34 const char CameraProperties::FACING_INDEX[]="prop-facing";
     35 const char CameraProperties::SUPPORTED_PREVIEW_SIZES[] = "prop-preview-size-values";
     36 const char CameraProperties::SUPPORTED_PREVIEW_SUBSAMPLED_SIZES[] = "prop-preview-subsampled-size-values";
     37 const char CameraProperties::SUPPORTED_PREVIEW_TOPBOTTOM_SIZES[] = "prop-preview-topbottom-size-values";
     38 const char CameraProperties::SUPPORTED_PREVIEW_SIDEBYSIDE_SIZES[] = "prop-preview-sidebyside-size-values";
     39 const char CameraProperties::SUPPORTED_PREVIEW_FORMATS[] = "prop-preview-format-values";
     40 const char CameraProperties::SUPPORTED_PREVIEW_FRAME_RATES[] = "prop-preview-frame-rate-values";
     41 const char CameraProperties::SUPPORTED_PREVIEW_FRAME_RATES_EXT[] = "prop-preview-frame-rate-ext-values";
     42 const char CameraProperties::SUPPORTED_PICTURE_SIZES[] = "prop-picture-size-values";
     43 const char CameraProperties::SUPPORTED_PICTURE_SUBSAMPLED_SIZES[] = "prop-picture-subsampled-size-values";
     44 const char CameraProperties::SUPPORTED_PICTURE_TOPBOTTOM_SIZES[] = "prop-picture-topbottom-size-values";
     45 const char CameraProperties::SUPPORTED_PICTURE_SIDEBYSIDE_SIZES[] = "prop-picture-sidebyside-size-values";
     46 const char CameraProperties::SUPPORTED_PICTURE_FORMATS[] = "prop-picture-format-values";
     47 const char CameraProperties::SUPPORTED_THUMBNAIL_SIZES[] = "prop-jpeg-thumbnail-size-values";
     48 const char CameraProperties::SUPPORTED_WHITE_BALANCE[] = "prop-whitebalance-values";
     49 const char CameraProperties::SUPPORTED_EFFECTS[] = "prop-effect-values";
     50 const char CameraProperties::SUPPORTED_ANTIBANDING[] = "prop-antibanding-values";
     51 const char CameraProperties::SUPPORTED_EXPOSURE_MODES[] = "prop-exposure-mode-values";
     52 const char CameraProperties::SUPPORTED_MANUAL_EXPOSURE_MIN[] = "prop-manual-exposure-min";
     53 const char CameraProperties::SUPPORTED_MANUAL_EXPOSURE_MAX[] = "prop-manual-exposure-max";
     54 const char CameraProperties::SUPPORTED_MANUAL_EXPOSURE_STEP[] = "prop-manual-exposure-step";
     55 const char CameraProperties::SUPPORTED_MANUAL_GAIN_ISO_MIN[] = "prop-manual-gain-iso-min";
     56 const char CameraProperties::SUPPORTED_MANUAL_GAIN_ISO_MAX[] = "prop-manual-gain-iso-max";
     57 const char CameraProperties::SUPPORTED_MANUAL_GAIN_ISO_STEP[] = "prop-manual-gain-iso-step";
     58 const char CameraProperties::SUPPORTED_EV_MAX[] = "prop-ev-compensation-max";
     59 const char CameraProperties::SUPPORTED_EV_MIN[] = "prop-ev-compensation-min";
     60 const char CameraProperties::SUPPORTED_EV_STEP[] = "prop-ev-compensation-step";
     61 const char CameraProperties::SUPPORTED_ISO_VALUES[] = "prop-iso-mode-values";
     62 const char CameraProperties::SUPPORTED_SCENE_MODES[] = "prop-scene-mode-values";
     63 const char CameraProperties::SUPPORTED_FLASH_MODES[] = "prop-flash-mode-values";
     64 const char CameraProperties::SUPPORTED_FOCUS_MODES[] = "prop-focus-mode-values";
     65 const char CameraProperties::REQUIRED_PREVIEW_BUFS[] = "prop-required-preview-bufs";
     66 const char CameraProperties::REQUIRED_IMAGE_BUFS[] = "prop-required-image-bufs";
     67 const char CameraProperties::SUPPORTED_ZOOM_RATIOS[] = "prop-zoom-ratios";
     68 const char CameraProperties::SUPPORTED_ZOOM_STAGES[] = "prop-zoom-stages";
     69 const char CameraProperties::SUPPORTED_IPP_MODES[] = "prop-ipp-values";
     70 const char CameraProperties::SMOOTH_ZOOM_SUPPORTED[] = "prop-smooth-zoom-supported";
     71 const char CameraProperties::ZOOM_SUPPORTED[] = "prop-zoom-supported";
     72 const char CameraProperties::PREVIEW_SIZE[] = "prop-preview-size-default";
     73 const char CameraProperties::PREVIEW_FORMAT[] = "prop-preview-format-default";
     74 const char CameraProperties::PREVIEW_FRAME_RATE[] = "prop-preview-frame-rate-default";
     75 const char CameraProperties::ZOOM[] = "prop-zoom-default";
     76 const char CameraProperties::PICTURE_SIZE[] = "prop-picture-size-default";
     77 const char CameraProperties::PICTURE_FORMAT[] = "prop-picture-format-default";
     78 const char CameraProperties::JPEG_THUMBNAIL_SIZE[] = "prop-jpeg-thumbnail-size-default";
     79 const char CameraProperties::WHITEBALANCE[] = "prop-whitebalance-default";
     80 const char CameraProperties::EFFECT[] = "prop-effect-default";
     81 const char CameraProperties::ANTIBANDING[] = "prop-antibanding-default";
     82 const char CameraProperties::EXPOSURE_MODE[] = "prop-exposure-mode-default";
     83 const char CameraProperties::EV_COMPENSATION[] = "prop-ev-compensation-default";
     84 const char CameraProperties::ISO_MODE[] = "prop-iso-mode-default";
     85 const char CameraProperties::FOCUS_MODE[] = "prop-focus-mode-default";
     86 const char CameraProperties::SCENE_MODE[] = "prop-scene-mode-default";
     87 const char CameraProperties::FLASH_MODE[] = "prop-flash-mode-default";
     88 const char CameraProperties::JPEG_QUALITY[] = "prop-jpeg-quality-default";
     89 const char CameraProperties::CONTRAST[] = "prop-contrast-default";
     90 const char CameraProperties::BRIGHTNESS[] = "prop-brightness-default";
     91 const char CameraProperties::SATURATION[] = "prop-saturation-default";
     92 const char CameraProperties::SHARPNESS[] = "prop-sharpness-default";
     93 const char CameraProperties::IPP[] = "prop-ipp-default";
     94 const char CameraProperties::GBCE[] = "prop-gbce-default";
     95 const char CameraProperties::SUPPORTED_GBCE[] = "prop-gbce-supported";
     96 const char CameraProperties::GLBCE[] = "prop-glbce-default";
     97 const char CameraProperties::SUPPORTED_GLBCE[] = "prop-glbce-supported";
     98 const char CameraProperties::S3D_PRV_FRAME_LAYOUT[] = "prop-s3d-prv-frame-layout";
     99 const char CameraProperties::S3D_PRV_FRAME_LAYOUT_VALUES[] = "prop-s3d-prv-frame-layout-values";
    100 const char CameraProperties::S3D_CAP_FRAME_LAYOUT[] = "prop-s3d-cap-frame-layout";
    101 const char CameraProperties::S3D_CAP_FRAME_LAYOUT_VALUES[] = "prop-s3d-cap-frame-layout-values";
    102 const char CameraProperties::AUTOCONVERGENCE_MODE[] = "prop-auto-convergence-mode";
    103 const char CameraProperties::AUTOCONVERGENCE_MODE_VALUES[] = "prop-auto-convergence-mode-values";
    104 const char CameraProperties::MANUAL_CONVERGENCE[] = "prop-manual-convergence";
    105 const char CameraProperties::SUPPORTED_MANUAL_CONVERGENCE_MIN[] = "prop-supported-manual-convergence-min";
    106 const char CameraProperties::SUPPORTED_MANUAL_CONVERGENCE_MAX[] = "prop-supported-manual-convergence-max";
    107 const char CameraProperties::SUPPORTED_MANUAL_CONVERGENCE_STEP[] = "prop-supported-manual-convergence-step";
    108 const char CameraProperties::VSTAB[] = "prop-vstab-default";
    109 const char CameraProperties::VSTAB_SUPPORTED[] = "prop-vstab-supported";
    110 const char CameraProperties::VNF[] = "prop-vnf-default";
    111 const char CameraProperties::VNF_SUPPORTED[] = "prop-vnf-supported";
    112 const char CameraProperties::REVISION[] = "prop-revision";
    113 const char CameraProperties::FOCAL_LENGTH[] = "prop-focal-length";
    114 const char CameraProperties::HOR_ANGLE[] = "prop-horizontal-angle";
    115 const char CameraProperties::VER_ANGLE[] = "prop-vertical-angle";
    116 const char CameraProperties::FRAMERATE_RANGE[] = "prop-framerate-range-default";
    117 const char CameraProperties::FRAMERATE_RANGE_SUPPORTED[]="prop-framerate-range-values";
    118 const char CameraProperties::FRAMERATE_RANGE_EXT_SUPPORTED[]="prop-framerate-range-ext-values";
    119 const char CameraProperties::SENSOR_ORIENTATION[]= "sensor-orientation";
    120 const char CameraProperties::SENSOR_ORIENTATION_VALUES[]= "sensor-orientation-values";
    121 const char CameraProperties::EXIF_MAKE[] = "prop-exif-make";
    122 const char CameraProperties::EXIF_MODEL[] = "prop-exif-model";
    123 const char CameraProperties::JPEG_THUMBNAIL_QUALITY[] = "prop-jpeg-thumbnail-quality-default";
    124 const char CameraProperties::MAX_FOCUS_AREAS[] = "prop-max-focus-areas";
    125 const char CameraProperties::MAX_FD_HW_FACES[] = "prop-max-fd-hw-faces";
    126 const char CameraProperties::MAX_FD_SW_FACES[] = "prop-max-fd-sw-faces";
    127 const char CameraProperties::AUTO_EXPOSURE_LOCK[] = "prop-auto-exposure-lock";
    128 const char CameraProperties::AUTO_EXPOSURE_LOCK_SUPPORTED[] = "prop-auto-exposure-lock-supported";
    129 const char CameraProperties::AUTO_WHITEBALANCE_LOCK[] = "prop-auto-whitebalance-lock";
    130 const char CameraProperties::AUTO_WHITEBALANCE_LOCK_SUPPORTED[] = "prop-auto-whitebalance-lock-supported";
    131 const char CameraProperties::MAX_NUM_METERING_AREAS[] = "prop-max-num-metering-areas";
    132 const char CameraProperties::METERING_AREAS[] = "prop-metering-areas";
    133 const char CameraProperties::VIDEO_SNAPSHOT_SUPPORTED[] = "prop-video-snapshot-supported";
    134 const char CameraProperties::VIDEO_SIZE[] = "video-size";
    135 const char CameraProperties::SUPPORTED_VIDEO_SIZES[] = "video-size-values";
    136 const char CameraProperties::MECHANICAL_MISALIGNMENT_CORRECTION_SUPPORTED[] = "prop-mechanical-misalignment-correction-supported";
    137 const char CameraProperties::MECHANICAL_MISALIGNMENT_CORRECTION[] = "prop-mechanical-misalignment-correction";
    138 const char CameraProperties::CAP_MODE_VALUES[] = "prop-mode-values";
    139 const char CameraProperties::RAW_WIDTH[] = "prop-raw-width-values";
    140 const char CameraProperties::RAW_HEIGHT[] = "prop-raw-height-values";
    141 const char CameraProperties::MAX_PICTURE_WIDTH[] = "prop-max-picture-width";
    142 const char CameraProperties::MAX_PICTURE_HEIGHT[] = "prop-max-picture-height";
    143 
    144 const char CameraProperties::DEFAULT_VALUE[] = "";
    145 
    146 const char CameraProperties::PARAMS_DELIMITER []= ",";
    147 
    148 // Returns the properties class for a specific Camera
    149 // Each value is indexed by the CameraProperties::CameraPropertyIndex enum
    150 int CameraProperties::getProperties(int cameraIndex, CameraProperties::Properties** properties)
    151 {
    152     LOG_FUNCTION_NAME;
    153 
    154     if(cameraIndex >= mCamerasSupported)
    155     {
    156         LOG_FUNCTION_NAME_EXIT;
    157         return -EINVAL;
    158     }
    159 
    160     *properties = mCameraProps+cameraIndex;
    161 
    162     LOG_FUNCTION_NAME_EXIT;
    163     return 0;
    164 }
    165 
    166 void CameraProperties::Properties::set(const char * const prop, const char * const value) {
    167     CAMHAL_ASSERT(prop);
    168 
    169     if ( !value ) {
    170         mProperties[mCurrentMode].removeItem(android::String8(prop));
    171     } else {
    172         mProperties[mCurrentMode].replaceValueFor(android::String8(prop), android::String8(value));
    173     }
    174 }
    175 
    176 void CameraProperties::Properties::set(const char * const prop, const int value) {
    177     char s_val[30];
    178     sprintf(s_val, "%d", value);
    179     set(prop, s_val);
    180 }
    181 
    182 const char* CameraProperties::Properties::get(const char * prop) const {
    183     return mProperties[mCurrentMode].valueFor(android::String8(prop)).string();
    184 }
    185 
    186 int CameraProperties::Properties::getInt(const char * prop) const {
    187     android::String8 value = mProperties[mCurrentMode].valueFor(android::String8(prop));
    188     if (value.isEmpty()) {
    189         return -1;
    190     }
    191     return strtol(value, 0, 0);
    192 }
    193 
    194 void CameraProperties::Properties::setSensorIndex(int idx) {
    195     OperatingMode originalMode = getMode();
    196     for ( int i = 0 ; i < MODE_MAX ; i++ ) {
    197         setMode(static_cast<OperatingMode>(i));
    198         set(CAMERA_SENSOR_INDEX, idx);
    199     }
    200     setMode(originalMode);
    201 }
    202 
    203 void CameraProperties::Properties::setMode(OperatingMode mode) {
    204     CAMHAL_ASSERT(mode >= 0 && mode < MODE_MAX);
    205     mCurrentMode = mode;
    206 }
    207 
    208 OperatingMode CameraProperties::Properties::getMode() const {
    209     return mCurrentMode;
    210 }
    211 
    212 void CameraProperties::Properties::dump() {
    213     CAMHAL_LOGD("================================");
    214     CAMHAL_LOGD("Dumping properties for camera: %d", getInt("prop-sensor-index"));
    215 
    216     for (size_t i = 0; i < mProperties[mCurrentMode].size(); i++) {
    217         CAMHAL_LOGD("%s = %s",
    218                 mProperties[mCurrentMode].keyAt(i).string(),
    219                 mProperties[mCurrentMode].valueAt(i).string());
    220     }
    221 
    222     CAMHAL_LOGD("--------------------------------");
    223 }
    224 
    225 const char* CameraProperties::Properties::keyAt(const unsigned int index) const {
    226     if (index < mProperties[mCurrentMode].size()) {
    227         return mProperties[mCurrentMode].keyAt(index).string();
    228     }
    229     return NULL;
    230 }
    231 
    232 const char* CameraProperties::Properties::valueAt(const unsigned int index) const {
    233     if (index < mProperties[mCurrentMode].size()) {
    234         return mProperties[mCurrentMode].valueAt(index).string();
    235     }
    236     return NULL;
    237 }
    238 
    239 } // namespace Camera
    240 } // namespace Ti
    241