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