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 #define CAMERA_ROOT         "CameraRoot"
     27 #define CAMERA_INSTANCE     "CameraInstance"
     28 
     29 namespace Ti {
     30 namespace Camera {
     31 
     32 // lower entries have higher priority
     33 static const char* g_camera_adapters[] = {
     34 #ifdef OMAP4_SUPPORT_OMX_CAMERA_ADAPTER
     35     "libomxcameraadapter.so",
     36 #endif
     37 #ifdef OMAP4_SUPPORT_USB_CAMERA_ADAPTER
     38     "libusbcameraadapter.so"
     39 #endif
     40 };
     41 
     42 /*********************************************************
     43  CameraProperties - public function implemetation
     44 **********************************************************/
     45 
     46 CameraProperties::CameraProperties() : mCamerasSupported(0)
     47 {
     48     LOG_FUNCTION_NAME;
     49 
     50     mCamerasSupported = 0;
     51     mInitialized = 0;
     52 
     53     LOG_FUNCTION_NAME_EXIT;
     54 }
     55 
     56 CameraProperties::~CameraProperties()
     57 {
     58     LOG_FUNCTION_NAME;
     59 
     60     LOG_FUNCTION_NAME_EXIT;
     61 }
     62 
     63 
     64 // Initializes the CameraProperties class
     65 status_t CameraProperties::initialize()
     66 {
     67     LOG_FUNCTION_NAME;
     68 
     69     status_t ret;
     70 
     71     android::AutoMutex lock(mLock);
     72 
     73     if(mInitialized)
     74         return NO_ERROR;
     75 
     76     ret = loadProperties();
     77 
     78     if (ret == NO_ERROR) {
     79         mInitialized = 1;
     80     }
     81 
     82     LOG_FUNCTION_NAME_EXIT;
     83 
     84     return ret;
     85 }
     86 
     87 extern "C" status_t CameraAdapter_Capabilities(CameraProperties::Properties* properties_array,
     88         int starting_camera, int max_camera, int & supported_cameras);
     89 
     90 ///Loads all the Camera related properties
     91 status_t CameraProperties::loadProperties()
     92 {
     93     LOG_FUNCTION_NAME;
     94 
     95     status_t ret = NO_ERROR;
     96 
     97     //Must be re-initialized here, since loadProperties() could potentially be called more than once.
     98     mCamerasSupported = 0;
     99 
    100     // adapter updates capabilities and we update camera count
    101     const status_t err = CameraAdapter_Capabilities(mCameraProps, mCamerasSupported,
    102             MAX_CAMERAS_SUPPORTED, mCamerasSupported);
    103 
    104     if(err != NO_ERROR) {
    105         CAMHAL_LOGE("error while getting capabilities");
    106         ret = UNKNOWN_ERROR;
    107     } else if (mCamerasSupported == 0) {
    108         CAMHAL_LOGE("camera busy. properties not loaded. num_cameras = %d", mCamerasSupported);
    109         ret = UNKNOWN_ERROR;
    110     } else if (mCamerasSupported > MAX_CAMERAS_SUPPORTED) {
    111         CAMHAL_LOGE("returned too many adapaters");
    112         ret = UNKNOWN_ERROR;
    113     } else {
    114         CAMHAL_LOGI("num_cameras = %d", mCamerasSupported);
    115 
    116         for (int i = 0; i < mCamerasSupported; i++) {
    117             mCameraProps[i].setSensorIndex(i);
    118             mCameraProps[i].dump();
    119         }
    120     }
    121 
    122     CAMHAL_LOGV("mCamerasSupported = %d", mCamerasSupported);
    123     LOG_FUNCTION_NAME_EXIT;
    124     return ret;
    125 }
    126 
    127 // Returns the number of Cameras found
    128 int CameraProperties::camerasSupported()
    129 {
    130     LOG_FUNCTION_NAME;
    131     return mCamerasSupported;
    132 }
    133 
    134 } // namespace Camera
    135 } // namespace Ti
    136