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 
CameraProperties()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 
~CameraProperties()56 CameraProperties::~CameraProperties()
57 {
58     LOG_FUNCTION_NAME;
59 
60     LOG_FUNCTION_NAME_EXIT;
61 }
62 
63 
64 // Initializes the CameraProperties class
initialize()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
loadProperties()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
camerasSupported()128 int CameraProperties::camerasSupported()
129 {
130     LOG_FUNCTION_NAME;
131     return mCamerasSupported;
132 }
133 
134 } // namespace Camera
135 } // namespace Ti
136