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 
19 
20 #ifndef CAMERA_PROPERTIES_H
21 #define CAMERA_PROPERTIES_H
22 
23 #include <utils/KeyedVector.h>
24 #include <utils/String8.h>
25 #include <stdio.h>
26 #include <dirent.h>
27 #include <errno.h>
28 #include <stdio.h>
29 #include <string.h>
30 #include <ctype.h>
31 #include "cutils/properties.h"
32 
33 #include "Common.h"
34 
35 namespace Ti {
36 namespace Camera {
37 
38 #define MAX_CAMERAS_SUPPORTED 3
39 #define MAX_SIMUL_CAMERAS_SUPPORTED 1
40 #define MAX_PROP_NAME_LENGTH 50
41 #define MAX_PROP_VALUE_LENGTH 2048
42 
43 #define REMAINING_BYTES(buff) ((((int)sizeof(buff) - 1 - (int)strlen(buff)) < 0) ? 0 : (sizeof(buff) - 1 - strlen(buff)))
44 
45 enum OperatingMode {
46     MODE_HIGH_SPEED = 0,
47     MODE_HIGH_QUALITY,
48     MODE_ZEROSHUTTERLAG,
49     MODE_VIDEO,
50     MODE_STEREO,
51     MODE_CPCAM,
52     MODE_VIDEO_HIGH_QUALITY,
53     MODE_MAX
54 };
55 
56 // Class that handles the Camera Properties
57 class CameraProperties
58 {
59 public:
60     static const char INVALID[];
61     static const char CAMERA_NAME[];
62     static const char CAMERA_SENSOR_INDEX[];
63     static const char CAMERA_SENSOR_ID[];
64     static const char ORIENTATION_INDEX[];
65     static const char FACING_INDEX[];
66     static const char SUPPORTED_PREVIEW_SIZES[];
67     static const char SUPPORTED_PREVIEW_SUBSAMPLED_SIZES[];
68     static const char SUPPORTED_PREVIEW_TOPBOTTOM_SIZES[];
69     static const char SUPPORTED_PREVIEW_SIDEBYSIDE_SIZES[];
70     static const char SUPPORTED_PREVIEW_FORMATS[];
71     static const char SUPPORTED_PREVIEW_FRAME_RATES[];
72     static const char SUPPORTED_PREVIEW_FRAME_RATES_EXT[];
73     static const char SUPPORTED_PICTURE_SIZES[];
74     static const char SUPPORTED_PICTURE_SUBSAMPLED_SIZES[];
75     static const char SUPPORTED_PICTURE_TOPBOTTOM_SIZES[];
76     static const char SUPPORTED_PICTURE_SIDEBYSIDE_SIZES[];
77     static const char SUPPORTED_PICTURE_FORMATS[];
78     static const char SUPPORTED_THUMBNAIL_SIZES[];
79     static const char SUPPORTED_WHITE_BALANCE[];
80     static const char SUPPORTED_EFFECTS[];
81     static const char SUPPORTED_ANTIBANDING[];
82     static const char SUPPORTED_EXPOSURE_MODES[];
83     static const char SUPPORTED_MANUAL_EXPOSURE_MIN[];
84     static const char SUPPORTED_MANUAL_EXPOSURE_MAX[];
85     static const char SUPPORTED_MANUAL_EXPOSURE_STEP[];
86     static const char SUPPORTED_MANUAL_GAIN_ISO_MIN[];
87     static const char SUPPORTED_MANUAL_GAIN_ISO_MAX[];
88     static const char SUPPORTED_MANUAL_GAIN_ISO_STEP[];
89     static const char SUPPORTED_EV_MIN[];
90     static const char SUPPORTED_EV_MAX[];
91     static const char SUPPORTED_EV_STEP[];
92     static const char SUPPORTED_ISO_VALUES[];
93     static const char SUPPORTED_SCENE_MODES[];
94     static const char SUPPORTED_FLASH_MODES[];
95     static const char SUPPORTED_FOCUS_MODES[];
96     static const char REQUIRED_PREVIEW_BUFS[];
97     static const char REQUIRED_IMAGE_BUFS[];
98     static const char SUPPORTED_ZOOM_RATIOS[];
99     static const char SUPPORTED_ZOOM_STAGES[];
100     static const char SUPPORTED_IPP_MODES[];
101     static const char SMOOTH_ZOOM_SUPPORTED[];
102     static const char ZOOM_SUPPORTED[];
103     static const char PREVIEW_SIZE[];
104     static const char PREVIEW_FORMAT[];
105     static const char PREVIEW_FRAME_RATE[];
106     static const char ZOOM[];
107     static const char PICTURE_SIZE[];
108     static const char PICTURE_FORMAT[];
109     static const char JPEG_THUMBNAIL_SIZE[];
110     static const char WHITEBALANCE[];
111     static const char EFFECT[];
112     static const char ANTIBANDING[];
113     static const char EXPOSURE_MODE[];
114     static const char EV_COMPENSATION[];
115     static const char ISO_MODE[];
116     static const char FOCUS_MODE[];
117     static const char SCENE_MODE[];
118     static const char FLASH_MODE[];
119     static const char JPEG_QUALITY[];
120     static const char BRIGHTNESS[];
121     static const char SATURATION[];
122     static const char SHARPNESS[];
123     static const char CONTRAST[];
124     static const char IPP[];
125     static const char GBCE[];
126     static const char SUPPORTED_GBCE[];
127     static const char GLBCE[];
128     static const char SUPPORTED_GLBCE[];
129     static const char AUTOCONVERGENCE_MODE[];
130     static const char AUTOCONVERGENCE_MODE_VALUES[];
131     static const char MANUAL_CONVERGENCE[];
132     static const char SUPPORTED_MANUAL_CONVERGENCE_MIN[];
133     static const char SUPPORTED_MANUAL_CONVERGENCE_MAX[];
134     static const char SUPPORTED_MANUAL_CONVERGENCE_STEP[];
135     static const char SENSOR_ORIENTATION[];
136     static const char SENSOR_ORIENTATION_VALUES[];
137     static const char REVISION[];
138     static const char FOCAL_LENGTH[];
139     static const char HOR_ANGLE[];
140     static const char VER_ANGLE[];
141     static const char EXIF_MAKE[];
142     static const char EXIF_MODEL[];
143     static const char JPEG_THUMBNAIL_QUALITY[];
144     static const char MAX_FOCUS_AREAS[];
145     static const char MAX_FD_HW_FACES[];
146     static const char MAX_FD_SW_FACES[];
147 
148     static const char MAX_PICTURE_WIDTH[];
149     static const char MAX_PICTURE_HEIGHT[];
150 
151     static const char PARAMS_DELIMITER [];
152 
153     static const char S3D_PRV_FRAME_LAYOUT[];
154     static const char S3D_PRV_FRAME_LAYOUT_VALUES[];
155     static const char S3D_CAP_FRAME_LAYOUT[];
156     static const char S3D_CAP_FRAME_LAYOUT_VALUES[];
157     static const char VSTAB[];
158     static const char VSTAB_SUPPORTED[];
159     static const char VNF[];
160     static const char VNF_SUPPORTED[];
161     static const char FRAMERATE_RANGE[];
162     static const char FRAMERATE_RANGE_SUPPORTED[];
163     static const char FRAMERATE_RANGE_EXT_SUPPORTED[];
164 
165     static const char DEFAULT_VALUE[];
166 
167     static const char AUTO_EXPOSURE_LOCK[];
168     static const char AUTO_EXPOSURE_LOCK_SUPPORTED[];
169     static const char AUTO_WHITEBALANCE_LOCK[];
170     static const char AUTO_WHITEBALANCE_LOCK_SUPPORTED[];
171     static const char MAX_NUM_METERING_AREAS[];
172     static const char METERING_AREAS[];
173     static const char MAX_NUM_FOCUS_AREAS[];
174 
175     static const char VIDEO_SNAPSHOT_SUPPORTED[];
176 
177     static const char VIDEO_SIZE[];
178     static const char SUPPORTED_VIDEO_SIZES[];
179 
180     static const char MECHANICAL_MISALIGNMENT_CORRECTION_SUPPORTED[];
181     static const char MECHANICAL_MISALIGNMENT_CORRECTION[];
182 
183     static const char RAW_WIDTH[];
184     static const char RAW_HEIGHT[];
185 
186     static const char CAP_MODE_VALUES[];
187 
188     CameraProperties();
189     ~CameraProperties();
190 
191     // container class passed around for accessing properties
192     class Properties
193     {
194         public:
195 
Properties()196             Properties()
197             {
198             }
199 
~Properties()200             ~Properties()
201             {
202             }
203 
204             void set(const char *prop, const char *value);
205             void set(const char *prop, int value);
206             const char* get(const char * prop) const;
207             int getInt(const char * prop) const;
208             void setSensorIndex(int idx);
209             void setMode(OperatingMode mode);
210             OperatingMode getMode() const;
211             void dump();
212 
213         protected:
214             const char* keyAt(const unsigned int) const;
215             const char* valueAt(const unsigned int) const;
216 
217         private:
218             OperatingMode mCurrentMode;
219             android::DefaultKeyedVector<android::String8, android::String8> mProperties[MODE_MAX];
220 
221     };
222 
223     ///Initializes the CameraProperties class
224     status_t initialize();
225     status_t loadProperties();
226     int camerasSupported();
227     int getProperties(int cameraIndex, Properties** properties);
228 
229 private:
230 
231     int mCamerasSupported;
232     int mInitialized;
233     mutable android::Mutex mLock;
234 
235     Properties mCameraProps[MAX_CAMERAS_SUPPORTED];
236 
237 };
238 
239 } // namespace Camera
240 } // namespace Ti
241 
242 #endif //CAMERA_PROPERTIES_H
243