Merge "Fix "hardware/samsung_slsi/exynos5/libcsc/csc.c:341:67: error: 'errno' undecla...
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos5.git] / libcamera2 / ExynosExif.h
1 /*
2 * Copyright Samsung Electronics Co.,LTD.
3 * Copyright (C) 2010 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 #ifndef EXYNOS_EXIF_H_
18 #define EXYNOS_EXIF_H_
19
20 #include <math.h>
21
22 #define EXIF_LOG2(x) (log((double)(x)) / log(2.0))
23 #define APEX_FNUM_TO_APERTURE(x) (((EXIF_LOG2((double)(x)) * 200) + 0.5)/100)
24 #define APEX_EXPOSURE_TO_SHUTTER(x) ((x) >= 1 ? \
25 (int)(-(EXIF_LOG2((double)(x)) + 0.5)) : \
26 (int)(-(EXIF_LOG2((double)(x)) - 0.5)))
27 #define APEX_ISO_TO_FILMSENSITIVITY(x) ((int)(EXIF_LOG2((x) / 3.125) + 0.5))
28
29 #define NUM_SIZE 2
30 #define IFD_SIZE 12
31 #define OFFSET_SIZE 4
32
33 /* Add any additional writeExifIfd() in sections, increase buffer size */
34 #define NUM_0TH_IFD_TIFF 11
35 #define NUM_0TH_IFD_EXIF 24
36 #define NUM_0TH_IFD_GPS 10
37 #define NUM_1TH_IFD_TIFF 9
38
39 /* Type */
40 #define EXIF_TYPE_BYTE 1
41 #define EXIF_TYPE_ASCII 2
42 #define EXIF_TYPE_SHORT 3
43 #define EXIF_TYPE_LONG 4
44 #define EXIF_TYPE_RATIONAL 5
45 #define EXIF_TYPE_UNDEFINED 7
46 #define EXIF_TYPE_SLONG 9
47 #define EXIF_TYPE_SRATIONAL 10
48
49 #define EXIF_FILE_SIZE 28800
50
51 /* 0th IFD TIFF Tags */
52 #define EXIF_TAG_IMAGE_WIDTH 0x0100
53 #define EXIF_TAG_IMAGE_HEIGHT 0x0101
54 #define EXIF_TAG_MAKE 0x010f
55 #define EXIF_TAG_MODEL 0x0110
56 #define EXIF_TAG_ORIENTATION 0x0112
57 #define EXIF_TAG_SOFTWARE 0x0131
58 #define EXIF_TAG_DATE_TIME 0x0132
59 #define EXIF_TAG_SUBSEC_TIME 0x9290
60 #define EXIF_TAG_YCBCR_POSITIONING 0x0213
61 #define EXIF_TAG_EXIF_IFD_POINTER 0x8769
62 #define EXIF_TAG_GPS_IFD_POINTER 0x8825
63
64 /* 0th IFD Exif Private Tags */
65 #define EXIF_TAG_EXPOSURE_TIME 0x829A
66 #define EXIF_TAG_FNUMBER 0x829D
67 #define EXIF_TAG_EXPOSURE_PROGRAM 0x8822
68 #define EXIF_TAG_ISO_SPEED_RATING 0x8827
69 #define EXIF_TAG_EXIF_VERSION 0x9000
70 #define EXIF_TAG_DATE_TIME_ORG 0x9003
71 #define EXIF_TAG_SUBSEC_TIME_ORG 0x9291
72 #define EXIF_TAG_DATE_TIME_DIGITIZE 0x9004
73 #define EXIF_TAG_SUBSEC_TIME_DIGITIZE 0x9292
74 #define EXIF_TAG_SHUTTER_SPEED 0x9201
75 #define EXIF_TAG_APERTURE 0x9202
76 #define EXIF_TAG_BRIGHTNESS 0x9203
77 #define EXIF_TAG_EXPOSURE_BIAS 0x9204
78 #define EXIF_TAG_MAX_APERTURE 0x9205
79 #define EXIF_TAG_METERING_MODE 0x9207
80 #define EXIF_TAG_FLASH 0x9209
81 #define EXIF_TAG_FOCAL_LENGTH 0x920A
82 #define EXIF_TAG_USER_COMMENT 0x9286
83 #define EXIF_TAG_COLOR_SPACE 0xA001
84 #define EXIF_TAG_PIXEL_X_DIMENSION 0xA002
85 #define EXIF_TAG_PIXEL_Y_DIMENSION 0xA003
86 #define EXIF_TAG_EXPOSURE_MODE 0xA402
87 #define EXIF_TAG_WHITE_BALANCE 0xA403
88 #define EXIF_TAG_SCENCE_CAPTURE_TYPE 0xA406
89
90 /* 0th IFD GPS Info Tags */
91 #define EXIF_TAG_GPS_VERSION_ID 0x0000
92 #define EXIF_TAG_GPS_LATITUDE_REF 0x0001
93 #define EXIF_TAG_GPS_LATITUDE 0x0002
94 #define EXIF_TAG_GPS_LONGITUDE_REF 0x0003
95 #define EXIF_TAG_GPS_LONGITUDE 0x0004
96 #define EXIF_TAG_GPS_ALTITUDE_REF 0x0005
97 #define EXIF_TAG_GPS_ALTITUDE 0x0006
98 #define EXIF_TAG_GPS_TIMESTAMP 0x0007
99 #define EXIF_TAG_GPS_PROCESSING_METHOD 0x001B
100 #define EXIF_TAG_GPS_DATESTAMP 0x001D
101
102 /* 1th IFD TIFF Tags */
103 #define EXIF_TAG_COMPRESSION_SCHEME 0x0103
104 #define EXIF_TAG_X_RESOLUTION 0x011A
105 #define EXIF_TAG_Y_RESOLUTION 0x011B
106 #define EXIF_TAG_RESOLUTION_UNIT 0x0128
107 #define EXIF_TAG_JPEG_INTERCHANGE_FORMAT 0x0201
108 #define EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LEN 0x0202
109
110 typedef enum {
111 EXIF_ORIENTATION_UP = 1,
112 EXIF_ORIENTATION_90 = 6,
113 EXIF_ORIENTATION_180 = 3,
114 EXIF_ORIENTATION_270 = 8,
115 } ExifOrientationType;
116
117 typedef enum {
118 EXIF_SCENE_STANDARD,
119 EXIF_SCENE_LANDSCAPE,
120 EXIF_SCENE_PORTRAIT,
121 EXIF_SCENE_NIGHT,
122 } CamExifSceneCaptureType;
123
124 typedef enum {
125 EXIF_METERING_UNKNOWN,
126 EXIF_METERING_AVERAGE,
127 EXIF_METERING_CENTER,
128 EXIF_METERING_SPOT,
129 EXIF_METERING_MULTISPOT,
130 EXIF_METERING_PATTERN,
131 EXIF_METERING_PARTIAL,
132 EXIF_METERING_OTHER = 255,
133 } CamExifMeteringModeType;
134
135 typedef enum {
136 EXIF_EXPOSURE_AUTO,
137 EXIF_EXPOSURE_MANUAL,
138 EXIF_EXPOSURE_AUTO_BRACKET,
139 } CamExifExposureModeType;
140
141 typedef enum {
142 EXIF_WB_AUTO,
143 EXIF_WB_MANUAL,
144 } CamExifWhiteBalanceType;
145
146 /* Values */
147 #define EXIF_DEF_MAKER "SAMSUNG"
148 #define EXIF_DEF_MODEL "SAMSUNG"
149 #define EXIF_DEF_SOFTWARE "SAMSUNG"
150 #define EXIF_DEF_EXIF_VERSION "0220"
151 #define EXIF_DEF_USERCOMMENTS "User comments"
152
153 #define EXIF_DEF_YCBCR_POSITIONING 1 /* centered */
154 #define EXIF_DEF_FNUMBER_NUM 26 /* 2.6 */
155 #define EXIF_DEF_FNUMBER_DEN 10
156 #define EXIF_DEF_EXPOSURE_PROGRAM 3 /* aperture priority */
157 #define EXIF_DEF_FOCAL_LEN_NUM 278 /* 2.78mm */
158 #define EXIF_DEF_FOCAL_LEN_DEN 100
159 #define EXIF_DEF_FLASH 0 /* O: off, 1: on*/
160 #define EXIF_DEF_COLOR_SPACE 1
161 #define EXIF_DEF_EXPOSURE_MODE EXIF_EXPOSURE_AUTO
162 #define EXIF_DEF_APEX_DEN 100
163
164 #define EXIF_DEF_COMPRESSION 6
165 #define EXIF_DEF_RESOLUTION_NUM 72
166 #define EXIF_DEF_RESOLUTION_DEN 1
167 #define EXIF_DEF_RESOLUTION_UNIT 2 /* inches */
168
169 typedef struct {
170 uint32_t num;
171 uint32_t den;
172 } rational_t;
173
174 typedef struct {
175 int32_t num;
176 int32_t den;
177 } srational_t;
178
179 typedef struct {
180 bool enableGps;
181 bool enableThumb;
182
183 unsigned char maker[32];
184 unsigned char model[32];
185 unsigned char software[32];
186 unsigned char exif_version[4];
187 unsigned char date_time[20];
188 unsigned char sub_sec[4];
189 unsigned char user_comment[150];
190
191 uint32_t width;
192 uint32_t height;
193 uint32_t widthThumb;
194 uint32_t heightThumb;
195
196 uint16_t orientation;
197 uint16_t ycbcr_positioning;
198 uint16_t exposure_program;
199 uint16_t iso_speed_rating;
200 uint16_t metering_mode;
201 uint16_t flash;
202 uint16_t color_space;
203 uint16_t exposure_mode;
204 uint16_t white_balance;
205 uint16_t scene_capture_type;
206
207 rational_t exposure_time;
208 rational_t fnumber;
209 rational_t aperture;
210 rational_t max_aperture;
211 rational_t focal_length;
212
213 srational_t shutter_speed;
214 srational_t brightness;
215 srational_t exposure_bias;
216
217 unsigned char gps_latitude_ref[2];
218 unsigned char gps_longitude_ref[2];
219
220 uint8_t gps_version_id[4];
221 uint8_t gps_altitude_ref;
222
223 rational_t gps_latitude[3];
224 rational_t gps_longitude[3];
225 rational_t gps_altitude;
226 rational_t gps_timestamp[3];
227 unsigned char gps_datestamp[11];
228 unsigned char gps_processing_method[100];
229
230 rational_t x_resolution;
231 rational_t y_resolution;
232 uint16_t resolution_unit;
233 uint16_t compression_scheme;
234 } exif_attribute_t;
235
236 #endif /* EXYNOS_EXIF_H_ */