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
35namespace Ti {
36namespace 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
45enum 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
57class CameraProperties
58{
59public:
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
196            Properties()
197            {
198            }
199
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
229private:
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