1/* Copyright (c) 2012, Code Aurora Forum. All rights reserved.
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 *     * Redistributions of source code must retain the above copyright
7 *       notice, this list of conditions and the following disclaimer.
8 *     * Redistributions in binary form must reproduce the above
9 *       copyright notice, this list of conditions and the following
10 *       disclaimer in the documentation and/or other materials provided
11 *       with the distribution.
12 *     * Neither the name of Code Aurora Forum, Inc. nor the names of its
13 *       contributors may be used to endorse or promote products derived
14 *       from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30#ifndef __QCAMERA_INTF_H__
31#define __QCAMERA_INTF_H__
32
33#include <stdint.h>
34#include <pthread.h>
35#include <inttypes.h>
36#include <media/msm_camera.h>
37
38#define PAD_TO_WORD(a)               (((a)+3)&~3)
39#define PAD_TO_2K(a)                 (((a)+2047)&~2047)
40#define PAD_TO_4K(a)                 (((a)+4095)&~4095)
41#define PAD_TO_8K(a)                 (((a)+8191)&~8191)
42
43#define CEILING32(X) (((X) + 0x0001F) & 0xFFFFFFE0)
44#define CEILING16(X) (((X) + 0x000F) & 0xFFF0)
45#define CEILING4(X)  (((X) + 0x0003) & 0xFFFC)
46#define CEILING2(X)  (((X) + 0x0001) & 0xFFFE)
47
48#define MAX_ROI 2
49#define MAX_NUM_PARM 5
50#define MAX_NUM_OPS 2
51#define VIDEO_MAX_PLANES 8
52#define MAX_SNAPSHOT_BUFFERS 5
53#define MAX_EXP_BRACKETING_LENGTH 32
54#define ANDROID_FB0 "/dev/graphics/fb0"
55#define LE_FB0 "/dev/fb0"
56
57// Events common to encoder and decoder
58#define JPEG_EVENT_DONE      0
59#define JPEG_EVENT_WARNING   1
60#define JPEG_EVENT_ERROR     2
61#define JPEG_EVENT_ABORTED   3
62// Events specific to encoder
63#define JPEG_EVENT_THUMBNAIL_DROPPED 4
64
65/* Exif Tag ID */
66typedef uint32_t exif_tag_id_t;
67
68/* Exif Info (opaque definition) */
69struct exif_info_t;
70typedef struct exif_info_t * exif_info_obj_t;
71
72typedef enum {
73  BACK_CAMERA,
74  FRONT_CAMERA,
75}cam_position_t;
76
77typedef enum {
78  CAM_CTRL_FAILED,        /* Failure in doing operation */
79  CAM_CTRL_SUCCESS,       /* Operation Succeded */
80  CAM_CTRL_INVALID_PARM,  /* Inavlid parameter provided */
81  CAM_CTRL_NOT_SUPPORTED, /* Parameter/operation not supported */
82  CAM_CTRL_ACCEPTED,      /* Parameter accepted */
83  CAM_CTRL_MAX,
84} cam_ctrl_status_t;
85
86typedef enum {
87  CAMERA_YUV_420_NV12,
88  CAMERA_YUV_420_NV21,
89  CAMERA_YUV_420_NV21_ADRENO,
90  CAMERA_BAYER_SBGGR10,
91  CAMERA_RDI,
92  CAMERA_YUV_420_YV12,
93  CAMERA_YUV_422_NV16,
94  CAMERA_YUV_422_NV61,
95  CAMERA_YUV_422_YUYV,
96} cam_format_t;
97
98typedef enum {
99  CAMERA_PAD_NONE,
100  CAMERA_PAD_TO_WORD,   /*2 bytes*/
101  CAMERA_PAD_TO_LONG_WORD, /*4 bytes*/
102  CAMERA_PAD_TO_8, /*8 bytes*/
103  CAMERA_PAD_TO_16, /*16 bytes*/
104
105  CAMERA_PAD_TO_1K, /*1k bytes*/
106  CAMERA_PAD_TO_2K, /*2k bytes*/
107  CAMERA_PAD_TO_4K,
108  CAMERA_PAD_TO_8K
109} cam_pad_format_t;
110
111typedef struct {
112  int ext_mode;   /* preview, main, thumbnail, video, raw, etc */
113  int frame_idx;  /* frame index */
114  int fd;         /* origin fd */
115  uint32_t size;
116} mm_camera_frame_map_type;
117
118typedef struct {
119  int ext_mode;   /* preview, main, thumbnail, video, raw, etc */
120  int frame_idx;  /* frame index */
121} mm_camera_frame_unmap_type;
122
123typedef enum {
124  CAM_SOCK_MSG_TYPE_FD_MAPPING,
125  CAM_SOCK_MSG_TYPE_FD_UNMAPPING,
126  CAM_SOCK_MSG_TYPE_WDN_START,
127  CAM_SOCK_MSG_TYPE_HIST_MAPPING,
128  CAM_SOCK_MSG_TYPE_HIST_UNMAPPING,
129  CAM_SOCK_MSG_TYPE_MAX
130}mm_camera_socket_msg_type;
131
132#define MM_MAX_WDN_NUM 2
133typedef struct {
134  unsigned long cookie;
135  int num_frames;
136  int ext_mode[MM_MAX_WDN_NUM];
137  int frame_idx[MM_MAX_WDN_NUM];
138} mm_camera_wdn_start_type;
139
140typedef struct {
141  mm_camera_socket_msg_type msg_type;
142  union {
143    mm_camera_frame_map_type frame_fd_map;
144    mm_camera_frame_unmap_type frame_fd_unmap;
145    mm_camera_wdn_start_type wdn_start;
146  } payload;
147} cam_sock_packet_t;
148
149
150typedef enum {
151  CAM_VIDEO_FRAME,
152  CAM_SNAPSHOT_FRAME,
153  CAM_PREVIEW_FRAME,
154}cam_frame_type_t;
155
156
157typedef enum {
158  CAMERA_MODE_2D = (1<<0),
159  CAMERA_MODE_3D = (1<<1),
160  CAMERA_NONZSL_MODE = (1<<2),
161  CAMERA_ZSL_MODE = (1<<3),
162  CAMERA_MODE_MAX = CAMERA_ZSL_MODE,
163} camera_mode_t;
164
165
166typedef struct {
167  int  modes_supported;
168  int8_t camera_id;
169  cam_position_t position;
170  uint32_t sensor_mount_angle;
171}camera_info_t;
172
173typedef struct {
174  camera_mode_t mode;
175  int8_t camera_id;
176  camera_mode_t cammode;
177}config_params_t;
178
179typedef struct {
180  uint32_t len;
181  uint32_t y_offset;
182  uint32_t cbcr_offset;
183} cam_sp_len_offset_t;
184
185typedef struct{
186  uint32_t len;
187  uint32_t offset;
188} cam_mp_len_offset_t;
189
190typedef struct {
191  int num_planes;
192  union {
193    cam_sp_len_offset_t sp;
194    cam_mp_len_offset_t mp[8];
195  };
196  uint32_t frame_len;
197} cam_frame_len_offset_t;
198
199typedef struct {
200  uint32_t parm[MAX_NUM_PARM];
201  uint32_t ops[MAX_NUM_OPS];
202  uint8_t yuv_output;
203  uint8_t jpeg_capture;
204  uint32_t max_pict_width;
205  uint32_t max_pict_height;
206  uint32_t max_preview_width;
207  uint32_t max_preview_height;
208  uint32_t max_video_width;
209  uint32_t max_video_height;
210  uint32_t effect;
211  camera_mode_t modes;
212  uint8_t preview_format;
213  uint32_t preview_sizes_cnt;
214  uint32_t thumb_sizes_cnt;
215  uint32_t video_sizes_cnt;
216  uint32_t hfr_sizes_cnt;
217  uint8_t vfe_output_enable;
218  uint8_t hfr_frame_skip;
219  uint32_t default_preview_width;
220  uint32_t default_preview_height;
221  uint32_t bestshot_reconfigure;
222  uint32_t pxlcode;
223}cam_prop_t;
224
225typedef struct {
226  uint16_t video_width;         /* Video width seen by VFE could be different than orig. Ex. DIS */
227  uint16_t video_height;        /* Video height seen by VFE */
228  uint16_t picture_width;       /* Picture width seen by VFE */
229  uint16_t picture_height;      /* Picture height seen by VFE */
230  uint16_t display_width;       /* width of display */
231  uint16_t display_height;      /* height of display */
232  uint16_t orig_video_width;    /* original video width received */
233  uint16_t orig_video_height;   /* original video height received */
234  uint16_t orig_picture_dx;     /* original picture width received */
235  uint16_t orig_picture_dy;     /* original picture height received */
236  uint16_t ui_thumbnail_height; /* Just like orig_picture_dx */
237  uint16_t ui_thumbnail_width;  /* Just like orig_picture_dy */
238  uint16_t thumbnail_height;
239  uint16_t thumbnail_width;
240  uint16_t orig_picture_width;
241  uint16_t orig_picture_height;
242  uint16_t orig_thumb_width;
243  uint16_t orig_thumb_height;
244  uint16_t raw_picture_height;
245  uint16_t raw_picture_width;
246  uint16_t rdi0_height;
247  uint16_t rdi0_width;
248  uint16_t rdi1_height;
249  uint16_t rdi1_width;
250  uint32_t hjr_xtra_buff_for_bayer_filtering;
251  cam_format_t    prev_format;
252  cam_format_t    enc_format;
253  cam_format_t    thumb_format;
254  cam_format_t    main_img_format;
255  cam_format_t    rdi0_format;
256  cam_format_t    rdi1_format;
257  cam_format_t    raw_img_format;
258  cam_pad_format_t prev_padding_format;
259  cam_pad_format_t enc_padding_format;
260  cam_pad_format_t thumb_padding_format;
261  cam_pad_format_t main_padding_format;
262  uint16_t display_luma_width;
263  uint16_t display_luma_height;
264  uint16_t display_chroma_width;
265  uint16_t display_chroma_height;
266  uint16_t video_luma_width;
267  uint16_t video_luma_height;
268  uint16_t video_chroma_width;
269  uint16_t video_chroma_height;
270  uint16_t thumbnail_luma_width;
271  uint16_t thumbnail_luma_height;
272  uint16_t thumbnail_chroma_width;
273  uint16_t thumbnail_chroma_height;
274  uint16_t main_img_luma_width;
275  uint16_t main_img_luma_height;
276  uint16_t main_img_chroma_width;
277  uint16_t main_img_chroma_height;
278  int rotation;
279  cam_frame_len_offset_t display_frame_offset;
280  cam_frame_len_offset_t video_frame_offset;
281  cam_frame_len_offset_t picture_frame_offset;
282  cam_frame_len_offset_t thumb_frame_offset;
283  uint32_t channel_interface_mask;
284} cam_ctrl_dimension_t;
285
286typedef struct {
287  uint8_t cid;
288  uint8_t dt;
289  uint32_t inst_handle;
290} cam_cid_entry_t;
291
292#define CAM_MAX_CID_NUM    8
293typedef struct {
294  /*should we hard code max CIDs? if not we need to have two CMD*/
295  uint8_t num_cids;
296  cam_cid_entry_t cid_entries[CAM_MAX_CID_NUM];
297} cam_cid_info_t;
298
299typedef struct {
300  /* we still use prev, video, main,
301   * thumb to interprete image types */
302  uint32_t image_mode;                 /* input */
303  cam_format_t format;                 /* input */
304  cam_pad_format_t padding_format;     /* input */
305  int rotation;                        /* input */
306  uint16_t width;                      /* input/output */
307  uint16_t height;                     /* input/output */
308  cam_frame_len_offset_t frame_offset; /* output */
309} cam_frame_resolution_t;
310
311/* Add enumenrations at the bottom but before MM_CAMERA_PARM_MAX */
312typedef enum {
313    MM_CAMERA_PARM_PICT_SIZE,
314    MM_CAMERA_PARM_ZOOM_RATIO,
315    MM_CAMERA_PARM_HISTOGRAM,
316    MM_CAMERA_PARM_DIMENSION,
317    MM_CAMERA_PARM_FPS,
318    MM_CAMERA_PARM_FPS_MODE, /*5*/
319    MM_CAMERA_PARM_EFFECT,
320    MM_CAMERA_PARM_EXPOSURE_COMPENSATION,
321    MM_CAMERA_PARM_EXPOSURE,
322    MM_CAMERA_PARM_SHARPNESS,
323    MM_CAMERA_PARM_CONTRAST, /*10*/
324    MM_CAMERA_PARM_SATURATION,
325    MM_CAMERA_PARM_BRIGHTNESS,
326    MM_CAMERA_PARM_WHITE_BALANCE,
327    MM_CAMERA_PARM_LED_MODE,
328    MM_CAMERA_PARM_ANTIBANDING, /*15*/
329    MM_CAMERA_PARM_ROLLOFF,
330    MM_CAMERA_PARM_CONTINUOUS_AF,
331    MM_CAMERA_PARM_FOCUS_RECT,
332    MM_CAMERA_PARM_AEC_ROI,
333    MM_CAMERA_PARM_AF_ROI, /*20*/
334    MM_CAMERA_PARM_HJR,
335    MM_CAMERA_PARM_ISO,
336    MM_CAMERA_PARM_BL_DETECTION,
337    MM_CAMERA_PARM_SNOW_DETECTION,
338    MM_CAMERA_PARM_BESTSHOT_MODE, /*25*/
339    MM_CAMERA_PARM_ZOOM,
340    MM_CAMERA_PARM_VIDEO_DIS,
341    MM_CAMERA_PARM_VIDEO_ROT,
342    MM_CAMERA_PARM_SCE_FACTOR,
343    MM_CAMERA_PARM_FD, /*30*/
344    MM_CAMERA_PARM_MODE,
345    /* 2nd 32 bits */
346    MM_CAMERA_PARM_3D_FRAME_FORMAT,
347    MM_CAMERA_PARM_CAMERA_ID,
348    MM_CAMERA_PARM_CAMERA_INFO,
349    MM_CAMERA_PARM_PREVIEW_SIZE, /*35*/
350    MM_CAMERA_PARM_QUERY_FALSH4SNAP,
351    MM_CAMERA_PARM_FOCUS_DISTANCES,
352    MM_CAMERA_PARM_BUFFER_INFO,
353    MM_CAMERA_PARM_JPEG_ROTATION,
354    MM_CAMERA_PARM_JPEG_MAINIMG_QUALITY, /* 40 */
355    MM_CAMERA_PARM_JPEG_THUMB_QUALITY,
356    MM_CAMERA_PARM_ZSL_ENABLE,
357    MM_CAMERA_PARM_FOCAL_LENGTH,
358    MM_CAMERA_PARM_HORIZONTAL_VIEW_ANGLE,
359    MM_CAMERA_PARM_VERTICAL_VIEW_ANGLE, /* 45 */
360    MM_CAMERA_PARM_MCE,
361    MM_CAMERA_PARM_RESET_LENS_TO_INFINITY,
362    MM_CAMERA_PARM_SNAPSHOTDATA,
363    MM_CAMERA_PARM_HFR,
364    MM_CAMERA_PARM_REDEYE_REDUCTION, /* 50 */
365    MM_CAMERA_PARM_WAVELET_DENOISE,
366    MM_CAMERA_PARM_3D_DISPLAY_DISTANCE,
367    MM_CAMERA_PARM_3D_VIEW_ANGLE,
368    MM_CAMERA_PARM_PREVIEW_FORMAT,
369    MM_CAMERA_PARM_RDI_FORMAT,
370    MM_CAMERA_PARM_HFR_SIZE, /* 55 */
371    MM_CAMERA_PARM_3D_EFFECT,
372    MM_CAMERA_PARM_3D_MANUAL_CONV_RANGE,
373    MM_CAMERA_PARM_3D_MANUAL_CONV_VALUE,
374    MM_CAMERA_PARM_ENABLE_3D_MANUAL_CONVERGENCE,
375    /* These are new parameters defined here */
376    MM_CAMERA_PARM_CH_IMAGE_FMT, /* 60 */       // mm_camera_ch_image_fmt_parm_t
377    MM_CAMERA_PARM_OP_MODE,             // camera state, sub state also
378    MM_CAMERA_PARM_SHARPNESS_CAP,       //
379    MM_CAMERA_PARM_SNAPSHOT_BURST_NUM,  // num shots per snapshot action
380    MM_CAMERA_PARM_LIVESHOT_MAIN,       // enable/disable full size live shot
381    MM_CAMERA_PARM_MAXZOOM, /* 65 */
382    MM_CAMERA_PARM_LUMA_ADAPTATION,     // enable/disable
383    MM_CAMERA_PARM_HDR,
384    MM_CAMERA_PARM_CROP,
385    MM_CAMERA_PARM_MAX_PICTURE_SIZE,
386    MM_CAMERA_PARM_MAX_PREVIEW_SIZE, /* 70 */
387    MM_CAMERA_PARM_ASD_ENABLE,
388    MM_CAMERA_PARM_RECORDING_HINT,
389    MM_CAMERA_PARM_CAF_ENABLE,
390    MM_CAMERA_PARM_FULL_LIVESHOT,
391    MM_CAMERA_PARM_DIS_ENABLE, /* 75 */
392    MM_CAMERA_PARM_AEC_LOCK,
393    MM_CAMERA_PARM_AWB_LOCK,
394    MM_CAMERA_PARM_AF_MTR_AREA,
395    MM_CAMERA_PARM_AEC_MTR_AREA,
396    MM_CAMERA_PARM_LOW_POWER_MODE,
397    MM_CAMERA_PARM_MAX_HFR_MODE, /* 80 */
398    MM_CAMERA_PARM_MAX_VIDEO_SIZE,
399    MM_CAMERA_PARM_DEF_PREVIEW_SIZES,
400    MM_CAMERA_PARM_DEF_VIDEO_SIZES,
401    MM_CAMERA_PARM_DEF_THUMB_SIZES,
402    MM_CAMERA_PARM_DEF_HFR_SIZES,
403    MM_CAMERA_PARM_PREVIEW_SIZES_CNT,
404    MM_CAMERA_PARM_VIDEO_SIZES_CNT,
405    MM_CAMERA_PARM_THUMB_SIZES_CNT,
406    MM_CAMERA_PARM_HFR_SIZES_CNT,
407    MM_CAMERA_PARM_GRALLOC_USAGE,
408    MM_CAMERA_PARM_VFE_OUTPUT_ENABLE, //to check whether both oputputs are
409    MM_CAMERA_PARM_DEFAULT_PREVIEW_WIDTH,
410    MM_CAMERA_PARM_DEFAULT_PREVIEW_HEIGHT,
411    MM_CAMERA_PARM_FOCUS_MODE,
412    MM_CAMERA_PARM_HFR_FRAME_SKIP,
413    MM_CAMERA_PARM_CH_INTERFACE,
414    //or single output enabled to differentiate 7x27a with others
415    MM_CAMERA_PARM_BESTSHOT_RECONFIGURE,
416    MM_CAMERA_PARM_MAX_NUM_FACES_DECT,
417    MM_CAMERA_PARM_FPS_RANGE,
418    MM_CAMERA_PARM_CID,
419    MM_CAMERA_PARM_FRAME_RESOLUTION,
420    MM_CAMERA_PARM_RAW_SNAPSHOT_FMT,
421    MM_CAMERA_PARM_FACIAL_FEATURE_INFO,
422    MM_CAMERA_PARM_CAF_LOCK_CANCEL,
423    MM_CAMERA_PARM_APERTURE,
424    MM_CAMERA_PARM_MAX
425} mm_camera_parm_type_t;
426
427typedef enum {
428  STREAM_IMAGE,
429  STREAM_RAW,
430  STREAM_IMAGE_AND_RAW,
431  STREAM_RAW_AND_RAW,
432  STREAM_MAX,
433} mm_camera_channel_stream_info_t;
434
435typedef enum {
436  CAMERA_SET_PARM_DISPLAY_INFO,
437  CAMERA_SET_PARM_DIMENSION,
438
439  CAMERA_SET_PARM_ZOOM,
440  CAMERA_SET_PARM_SENSOR_POSITION,
441  CAMERA_SET_PARM_FOCUS_RECT,
442  CAMERA_SET_PARM_LUMA_ADAPTATION,
443  CAMERA_SET_PARM_CONTRAST,
444  CAMERA_SET_PARM_BRIGHTNESS,
445  CAMERA_SET_PARM_EXPOSURE_COMPENSATION,
446  CAMERA_SET_PARM_SHARPNESS,
447  CAMERA_SET_PARM_HUE,  /* 10 */
448  CAMERA_SET_PARM_SATURATION,
449  CAMERA_SET_PARM_EXPOSURE,
450  CAMERA_SET_PARM_AUTO_FOCUS,
451  CAMERA_SET_PARM_WB,
452  CAMERA_SET_PARM_EFFECT,
453  CAMERA_SET_PARM_FPS,
454  CAMERA_SET_PARM_FLASH,
455  CAMERA_SET_PARM_NIGHTSHOT_MODE,
456  CAMERA_SET_PARM_REFLECT,
457  CAMERA_SET_PARM_PREVIEW_MODE,  /* 20 */
458  CAMERA_SET_PARM_ANTIBANDING,
459  CAMERA_SET_PARM_RED_EYE_REDUCTION,
460  CAMERA_SET_PARM_FOCUS_STEP,
461  CAMERA_SET_PARM_EXPOSURE_METERING,
462  CAMERA_SET_PARM_AUTO_EXPOSURE_MODE,
463  CAMERA_SET_PARM_ISO,
464  CAMERA_SET_PARM_BESTSHOT_MODE,
465  CAMERA_SET_PARM_ENCODE_ROTATION,
466
467  CAMERA_SET_PARM_PREVIEW_FPS,
468  CAMERA_SET_PARM_AF_MODE,  /* 30 */
469  CAMERA_SET_PARM_HISTOGRAM,
470  CAMERA_SET_PARM_FLASH_STATE,
471  CAMERA_SET_PARM_FRAME_TIMESTAMP,
472  CAMERA_SET_PARM_STROBE_FLASH,
473  CAMERA_SET_PARM_FPS_LIST,
474  CAMERA_SET_PARM_HJR,
475  CAMERA_SET_PARM_ROLLOFF,
476
477  CAMERA_STOP_PREVIEW,
478  CAMERA_START_PREVIEW,
479  CAMERA_START_SNAPSHOT, /* 40 */
480  CAMERA_START_RAW_SNAPSHOT,
481  CAMERA_STOP_SNAPSHOT,
482  CAMERA_EXIT,
483  CAMERA_ENABLE_BSM,
484  CAMERA_DISABLE_BSM,
485  CAMERA_GET_PARM_ZOOM,
486  CAMERA_GET_PARM_MAXZOOM,
487  CAMERA_GET_PARM_ZOOMRATIOS,
488  CAMERA_GET_PARM_AF_SHARPNESS,
489  CAMERA_SET_PARM_LED_MODE, /* 50 */
490  CAMERA_SET_MOTION_ISO,
491  CAMERA_AUTO_FOCUS_CANCEL,
492  CAMERA_GET_PARM_FOCUS_STEP,
493  CAMERA_ENABLE_AFD,
494  CAMERA_PREPARE_SNAPSHOT,
495  CAMERA_SET_FPS_MODE,
496  CAMERA_START_VIDEO,
497  CAMERA_STOP_VIDEO,
498  CAMERA_START_RECORDING,
499  CAMERA_STOP_RECORDING, /* 60 */
500  CAMERA_SET_VIDEO_DIS_PARAMS,
501  CAMERA_SET_VIDEO_ROT_PARAMS,
502  CAMERA_SET_PARM_AEC_ROI,
503  CAMERA_SET_CAF,
504  CAMERA_SET_PARM_BL_DETECTION_ENABLE,
505  CAMERA_SET_PARM_SNOW_DETECTION_ENABLE,
506  CAMERA_SET_PARM_STROBE_FLASH_MODE,
507  CAMERA_SET_PARM_AF_ROI,
508  CAMERA_START_LIVESHOT,
509  CAMERA_SET_SCE_FACTOR, /* 70 */
510  CAMERA_GET_CAPABILITIES,
511  CAMERA_GET_PARM_DIMENSION,
512  CAMERA_GET_PARM_LED_MODE,
513  CAMERA_SET_PARM_FD,
514  CAMERA_GET_PARM_3D_FRAME_FORMAT,
515  CAMERA_QUERY_FLASH_FOR_SNAPSHOT,
516  CAMERA_GET_PARM_FOCUS_DISTANCES,
517  CAMERA_START_ZSL,
518  CAMERA_STOP_ZSL,
519  CAMERA_ENABLE_ZSL, /* 80 */
520  CAMERA_GET_PARM_FOCAL_LENGTH,
521  CAMERA_GET_PARM_HORIZONTAL_VIEW_ANGLE,
522  CAMERA_GET_PARM_VERTICAL_VIEW_ANGLE,
523  CAMERA_SET_PARM_WAVELET_DENOISE,
524  CAMERA_SET_PARM_MCE,
525  CAMERA_ENABLE_STEREO_CAM,
526  CAMERA_SET_PARM_RESET_LENS_TO_INFINITY,
527  CAMERA_GET_PARM_SNAPSHOTDATA,
528  CAMERA_SET_PARM_HFR,
529  CAMERA_SET_REDEYE_REDUCTION, /* 90 */
530  CAMERA_SET_PARM_3D_DISPLAY_DISTANCE,
531  CAMERA_SET_PARM_3D_VIEW_ANGLE,
532  CAMERA_SET_PARM_3D_EFFECT,
533  CAMERA_SET_PARM_PREVIEW_FORMAT,
534  CAMERA_GET_PARM_3D_DISPLAY_DISTANCE, /* 95 */
535  CAMERA_GET_PARM_3D_VIEW_ANGLE,
536  CAMERA_GET_PARM_3D_EFFECT,
537  CAMERA_GET_PARM_3D_MANUAL_CONV_RANGE,
538  CAMERA_SET_PARM_3D_MANUAL_CONV_VALUE,
539  CAMERA_ENABLE_3D_MANUAL_CONVERGENCE, /* 100 */
540  CAMERA_SET_PARM_HDR,
541  CAMERA_SET_ASD_ENABLE,
542  CAMERA_POSTPROC_ABORT,
543  CAMERA_SET_AEC_MTR_AREA,
544  CAMERA_SET_AEC_LOCK,       /*105*/
545  CAMERA_SET_AWB_LOCK,
546  CAMERA_SET_RECORDING_HINT,
547  CAMERA_SET_PARM_CAF,
548  CAMERA_SET_FULL_LIVESHOT,
549  CAMERA_SET_DIS_ENABLE,  /*110*/
550  CAMERA_GET_PARM_MAX_HFR_MODE,
551  CAMERA_SET_LOW_POWER_MODE,
552  CAMERA_GET_PARM_DEF_PREVIEW_SIZES,
553  CAMERA_GET_PARM_DEF_VIDEO_SIZES,
554  CAMERA_GET_PARM_DEF_THUMB_SIZES, /*115*/
555  CAMERA_GET_PARM_DEF_HFR_SIZES,
556  CAMERA_GET_PARM_MAX_LIVESHOT_SIZE,
557  CAMERA_GET_PARM_FPS_RANGE,
558  CAMERA_SET_3A_CONVERGENCE,
559  CAMERA_SET_PREVIEW_HFR, /*120*/
560  CAMERA_GET_MAX_DIMENSION,
561  CAMERA_GET_MAX_NUM_FACES_DECT,
562  CAMERA_SET_CHANNEL_STREAM,
563  CAMERA_GET_CHANNEL_STREAM,
564  CAMERA_SET_PARM_CID, /*125*/
565  CAMERA_GET_PARM_FRAME_RESOLUTION,
566  CAMERA_GET_FACIAL_FEATURE_INFO,
567  CAMERA_SET_CAF_LOCK_CANCEL,
568  CAMERA_CTRL_PARM_MAX
569} cam_ctrl_type;
570
571typedef enum {
572  CAMERA_ERROR_NO_MEMORY,
573  CAMERA_ERROR_EFS_FAIL,                /* Low-level operation failed */
574  CAMERA_ERROR_EFS_FILE_OPEN,           /* File already opened */
575  CAMERA_ERROR_EFS_FILE_NOT_OPEN,       /* File not opened */
576  CAMERA_ERROR_EFS_FILE_ALREADY_EXISTS, /* File already exists */
577  CAMERA_ERROR_EFS_NONEXISTENT_DIR,     /* User directory doesn't exist */
578  CAMERA_ERROR_EFS_NONEXISTENT_FILE,    /* User directory doesn't exist */
579  CAMERA_ERROR_EFS_BAD_FILE_NAME,       /* Client specified invalid file/directory name*/
580  CAMERA_ERROR_EFS_BAD_FILE_HANDLE,     /* Client specified invalid file/directory name*/
581  CAMERA_ERROR_EFS_SPACE_EXHAUSTED,     /* Out of file system space */
582  CAMERA_ERROR_EFS_OPEN_TABLE_FULL,     /* Out of open-file table slots                */
583  CAMERA_ERROR_EFS_OTHER_ERROR,         /* Other error                                 */
584  CAMERA_ERROR_CONFIG,
585  CAMERA_ERROR_EXIF_ENCODE,
586  CAMERA_ERROR_VIDEO_ENGINE,
587  CAMERA_ERROR_IPL,
588  CAMERA_ERROR_INVALID_FORMAT,
589  CAMERA_ERROR_TIMEOUT,
590  CAMERA_ERROR_ESD,
591  CAMERA_ERROR_MAX
592} camera_error_type;
593
594#if defined CAMERA_ANTIBANDING_OFF
595#undef CAMERA_ANTIBANDING_OFF
596#endif
597
598#if defined CAMERA_ANTIBANDING_60HZ
599#undef CAMERA_ANTIBANDING_60HZ
600#endif
601
602#if defined CAMERA_ANTIBANDING_50HZ
603#undef CAMERA_ANTIBANDING_50HZ
604#endif
605
606#if defined CAMERA_ANTIBANDING_AUTO
607#undef CAMERA_ANTIBANDING_AUTO
608#endif
609
610typedef enum {
611  CAMERA_ANTIBANDING_OFF,
612  CAMERA_ANTIBANDING_60HZ,
613  CAMERA_ANTIBANDING_50HZ,
614  CAMERA_ANTIBANDING_AUTO,
615  CAMERA_ANTIBANDING_AUTO_50HZ,
616  CAMERA_ANTIBANDING_AUTO_60HZ,
617  CAMERA_MAX_ANTIBANDING,
618} camera_antibanding_type;
619
620/* Enum Type for different ISO Mode supported */
621typedef enum {
622  CAMERA_ISO_AUTO = 0,
623  CAMERA_ISO_DEBLUR,
624  CAMERA_ISO_100,
625  CAMERA_ISO_200,
626  CAMERA_ISO_400,
627  CAMERA_ISO_800,
628  CAMERA_ISO_1600,
629  CAMERA_ISO_MAX
630} camera_iso_mode_type;
631
632typedef enum {
633  MM_CAMERA_FACIAL_FEATURE_FD, // facial detection
634  MM_CAMERA_FACIAL_FEATURE_MAX
635} camera_facial_features;
636
637typedef enum {
638  AEC_ROI_OFF,
639  AEC_ROI_ON
640} aec_roi_ctrl_t;
641
642typedef enum {
643  AEC_ROI_BY_INDEX,
644  AEC_ROI_BY_COORDINATE,
645} aec_roi_type_t;
646
647typedef struct {
648  uint32_t x;
649  uint32_t y;
650} cam_coordinate_type_t;
651
652/*
653 * Define DRAW_RECTANGLES to draw rectangles on screen. Just for test purpose.
654 */
655//#define DRAW_RECTANGLES
656
657typedef struct {
658  uint16_t x;
659  uint16_t y;
660  uint16_t dx;
661  uint16_t dy;
662} roi_t;
663
664typedef struct {
665  aec_roi_ctrl_t aec_roi_enable;
666  aec_roi_type_t aec_roi_type;
667  union {
668    cam_coordinate_type_t coordinate;
669    uint32_t aec_roi_idx;
670  } aec_roi_position;
671} cam_set_aec_roi_t;
672
673typedef struct {
674  uint32_t frm_id;
675  uint8_t num_roi;
676  roi_t roi[MAX_ROI];
677  uint8_t is_multiwindow;
678} roi_info_t;
679
680/* Exif Tag Data Type */
681typedef enum
682{
683    EXIF_BYTE      = 1,
684    EXIF_ASCII     = 2,
685    EXIF_SHORT     = 3,
686    EXIF_LONG      = 4,
687    EXIF_RATIONAL  = 5,
688    EXIF_UNDEFINED = 7,
689    EXIF_SLONG     = 9,
690    EXIF_SRATIONAL = 10
691} exif_tag_type_t;
692
693
694/* Exif Rational Data Type */
695typedef struct
696{
697    uint32_t  num;    // Numerator
698    uint32_t  denom;  // Denominator
699
700} rat_t;
701
702/* Exif Signed Rational Data Type */
703typedef struct
704{
705    int32_t  num;    // Numerator
706    int32_t  denom;  // Denominator
707
708} srat_t;
709
710typedef struct
711{
712  exif_tag_type_t type;
713  uint8_t copy;
714  uint32_t count;
715  union
716  {
717    char      *_ascii;
718    uint8_t   *_bytes;
719    uint8_t    _byte;
720    uint16_t  *_shorts;
721    uint16_t   _short;
722    uint32_t  *_longs;
723    uint32_t   _long;
724    rat_t     *_rats;
725    rat_t      _rat;
726    uint8_t   *_undefined;
727    int32_t   *_slongs;
728    int32_t    _slong;
729    srat_t    *_srats;
730    srat_t     _srat;
731  } data;
732} exif_tag_entry_t;
733
734typedef struct {
735    uint32_t      tag_id;
736    exif_tag_entry_t  tag_entry;
737} exif_tags_info_t;
738
739
740typedef enum {
741 HDR_BRACKETING_OFF,
742 HDR_MODE,
743 EXP_BRACKETING_MODE
744 } hdr_mode;
745
746typedef struct {
747  hdr_mode mode;
748  uint32_t hdr_enable;
749  uint32_t total_frames;
750  uint32_t total_hal_frames;
751  char values[MAX_EXP_BRACKETING_LENGTH];  /* user defined values */
752} exp_bracketing_t;
753typedef struct {
754  roi_t      mtr_area[MAX_ROI];
755  uint32_t   num_area;
756  int        weight[MAX_ROI];
757} aec_mtr_area_t;
758
759typedef struct {
760  int denoise_enable;
761  int process_plates;
762} denoise_param_t;
763
764#ifndef HAVE_CAMERA_SIZE_TYPE
765  #define HAVE_CAMERA_SIZE_TYPE
766struct camera_size_type {
767  int width;
768  int height;
769};
770#endif
771
772typedef struct {
773  uint32_t yoffset;
774  uint32_t cbcr_offset;
775  uint32_t size;
776  struct camera_size_type resolution;
777}cam_buf_info_t;
778
779typedef struct {
780  int x;
781  int y;
782}cam_point_t;
783
784typedef struct {
785  /* AF parameters */
786  uint8_t focus_position;
787  /* AEC parameters */
788  uint32_t line_count;
789  uint8_t luma_target;
790  /* AWB parameters */
791  int32_t r_gain;
792  int32_t b_gain;
793  int32_t g_gain;
794  uint8_t exposure_mode;
795  uint8_t exposure_program;
796  float exposure_time;
797  uint32_t iso_speed;
798} snapshotData_info_t;
799
800
801typedef enum {
802  CAMERA_HFR_MODE_OFF = 1,
803  CAMERA_HFR_MODE_60FPS,
804  CAMERA_HFR_MODE_90FPS,
805  CAMERA_HFR_MODE_120FPS,
806  CAMERA_HFR_MODE_150FPS,
807} camera_hfr_mode_t;
808
809/* frame Q*/
810struct fifo_node
811{
812  struct fifo_node *next;
813  void *f;
814};
815
816struct fifo_queue
817{
818  int num_of_frames;
819  struct fifo_node *front;
820  struct fifo_node *back;
821  pthread_mutex_t mut;
822  pthread_cond_t wait;
823  char* name;
824};
825
826typedef struct {
827  uint32_t buf_len;
828  uint8_t num;
829  uint8_t pmem_type;
830  uint32_t vaddr[8];
831} mm_camera_histo_mem_info_t;
832
833typedef enum {
834  MM_CAMERA_CTRL_EVT_ZOOM_DONE,
835  MM_CAMERA_CTRL_EVT_AUTO_FOCUS_DONE,
836  MM_CAMERA_CTRL_EVT_PREP_SNAPSHOT,
837  MM_CAMERA_CTRL_EVT_SNAPSHOT_CONFIG_DONE,
838  MM_CAMERA_CTRL_EVT_WDN_DONE, // wavelet denoise done
839  MM_CAMERA_CTRL_EVT_ERROR,
840  MM_CAMERA_CTRL_EVT_MAX
841}mm_camera_ctrl_event_type_t;
842
843typedef struct {
844  mm_camera_ctrl_event_type_t evt;
845  cam_ctrl_status_t status;
846  unsigned long cookie;
847} mm_camera_ctrl_event_t;
848
849typedef enum {
850  MM_CAMERA_CH_EVT_STREAMING_ON,
851  MM_CAMERA_CH_EVT_STREAMING_OFF,
852  MM_CAMERA_CH_EVT_STREAMING_ERR,
853  MM_CAMERA_CH_EVT_DATA_DELIVERY_DONE,
854  MM_CAMERA_CH_EVT_DATA_REQUEST_MORE,
855  MM_CAMERA_CH_EVT_MAX
856}mm_camera_ch_event_type_t;
857
858typedef struct {
859  uint32_t ch;
860  mm_camera_ch_event_type_t evt;
861} mm_camera_ch_event_t;
862
863typedef struct {
864  uint32_t index;
865  /* TBD: need more fields for histo stats? */
866} mm_camera_stats_histo_t;
867
868typedef struct  {
869  uint32_t event_id;
870  union {
871    mm_camera_stats_histo_t    stats_histo;
872  } e;
873} mm_camera_stats_event_t;
874
875typedef enum {
876  FD_ROI_TYPE_HEADER,
877  FD_ROI_TYPE_DATA
878} fd_roi_type_t;
879
880typedef struct {
881  int fd_mode;
882  int num_fd;
883} fd_set_parm_t;
884
885typedef struct {
886  uint32_t frame_id;
887  int16_t num_face_detected;
888} fd_roi_header_type;
889
890struct fd_rect_t {
891  uint16_t x;
892  uint16_t y;
893  uint16_t dx;
894  uint16_t dy;
895};
896
897typedef struct {
898  struct fd_rect_t face_boundary;
899  uint16_t left_eye_center[2];
900  uint16_t right_eye_center[2];
901  uint16_t mouth_center[2];
902  uint8_t smile_degree;  //0 -100
903  uint8_t smile_confidence;  //
904  uint8_t blink_detected;  // 0 or 1
905  uint8_t is_face_recognised;  // 0 or 1
906  int8_t gaze_angle;  // -90 -45 0 45 90 for head left to rigth tilt
907  int8_t updown_dir;  // -90 to 90
908  int8_t leftright_dir;  //-90 to 90
909  int8_t roll_dir;  // -90 to 90
910  int8_t left_right_gaze;  // -50 to 50
911  int8_t top_bottom_gaze;  // -50 to 50
912  uint8_t left_blink;  // 0 - 100
913  uint8_t right_blink;  // 0 - 100
914  int8_t id;  // unique id for face tracking within view unless view changes
915  int8_t score;  // score of confidence( 0 -100)
916} fd_face_type;
917
918typedef struct {
919  uint32_t frame_id;
920  uint8_t idx;
921  fd_face_type face;
922} fd_roi_data_type;
923
924struct fd_roi_t {
925  fd_roi_type_t type;
926  union {
927    fd_roi_header_type hdr;
928    fd_roi_data_type data;
929  } d;
930};
931
932typedef struct  {
933  uint32_t event_id;
934  union {
935    mm_camera_histo_mem_info_t histo_mem_info;
936    struct fd_roi_t roi;
937  } e;
938} mm_camera_info_event_t;
939
940
941typedef enum {
942  MM_CAMERA_EVT_TYPE_CH,
943  MM_CAMERA_EVT_TYPE_CTRL,
944  MM_CAMERA_EVT_TYPE_STATS,
945  MM_CAMERA_EVT_TYPE_INFO,
946  MM_CAMERA_EVT_TYPE_MAX
947} mm_camera_event_type_t;
948
949/*
950 * the APP event related defines
951*/
952typedef enum {
953  MM_CAMERA_STATS_EVT_HISTO,
954  MM_CAMERA_STATS_EVT_MAX
955} mm_camera_stats_event_type_t;
956
957typedef enum {
958  MM_CAMERA_INFO_EVT_ROI,
959  MM_CAMERA_INFO_FLASH_FRAME_IDX,
960  MM_CAMERA_INFO_EVT_MAX
961} mm_camera_info_event_type_t;
962
963/* !!WARNING: PLAESE BE VERY CAREFUL!!
964 * v4l2_event payload has a limitation of 64 bytes.
965 * This makes that the whole mm_camera_event_t size
966 * cannot go beyond 64 bytes.
967 */
968typedef struct {
969  mm_camera_event_type_t event_type;
970  /* the union size cannot go beyond 64 bytes. need RFC */
971  union {
972    mm_camera_ch_event_t ch;
973    mm_camera_ctrl_event_t ctrl;
974    mm_camera_stats_event_t stats;
975    mm_camera_info_event_t info;
976  } e;
977} mm_camera_event_t;
978
979/******************************************************************************
980 * Function: exif_set_tag
981 * Description: Inserts or modifies an Exif tag to the Exif Info object. Typical
982 *              use is to call this function multiple times - to insert all the
983 *              desired Exif Tags individually to the Exif Info object and
984 *              then pass the info object to the Jpeg Encoder object so
985 *              the inserted tags would be emitted as tags in the Exif header.
986 * Input parameters:
987 *   obj       - The Exif Info object where the tag would be inserted to or
988 *               modified from.
989 *   tag_id    - The Exif Tag ID of the tag to be inserted/modified.
990 *   p_entry   - The pointer to the tag entry structure which contains the
991 *               details of tag. The pointer can be set to NULL to un-do
992 *               previous insertion for a certain tag.
993 * Return values:
994 *     JPEGERR_SUCCESS
995 *     JPEGERR_ENULLPTR
996 *     JPEGERR_EFAILED
997 * (See jpegerr.h for description of error values.)
998 * Notes: none
999 *****************************************************************************/
1000int exif_set_tag(exif_info_obj_t    obj,
1001                 exif_tag_id_t      tag_id,
1002                 exif_tag_entry_t  *p_entry);
1003
1004typedef uint32_t  jpeg_event_t;
1005
1006/* Auto focus mode, used for CAMERA_PARM_AF_MODE */
1007typedef enum {
1008  AF_MODE_UNCHANGED = -1,
1009  AF_MODE_NORMAL    = 0,
1010  AF_MODE_MACRO,
1011  AF_MODE_AUTO,
1012  AF_MODE_CAF,
1013  AF_MODE_INFINITY,
1014  AF_MODE_MAX
1015} isp3a_af_mode_t;
1016
1017typedef struct {
1018  uint32_t  in1_w;
1019  uint32_t  out1_w;
1020  uint32_t  in1_h;
1021  uint32_t  out1_h;
1022  uint32_t  in2_w;
1023  uint32_t  out2_w;
1024  uint32_t  in2_h;
1025  uint32_t  out2_h;
1026  uint8_t update_flag;
1027} common_crop_t;
1028
1029typedef enum {
1030  LED_MODE_OFF,
1031  LED_MODE_AUTO,
1032  LED_MODE_ON,
1033  LED_MODE_TORCH,
1034
1035  /*new mode above should be added above this line*/
1036  LED_MODE_MAX
1037} led_mode_t;
1038
1039typedef struct video_dis_param_ctrl_t {
1040  uint32_t dis_enable;       /* DIS feature: 1 = enable, 0 = disable.
1041                               when enable, caller makes sure w/h are 10% more. */
1042  uint32_t video_rec_width;  /* video frame width for recording */
1043  uint32_t video_rec_height; /* video frame height for recording */
1044  uint32_t output_cbcr_offset;
1045} video_dis_param_ctrl_t;
1046
1047typedef enum camera_rotation_type {
1048  ROT_NONE               = 0,
1049  ROT_CLOCKWISE_90       = 1,
1050  ROT_CLOCKWISE_180      = 6,
1051  ROT_CLOCKWISE_270      = 7,
1052} camera_rotation_type;
1053
1054typedef struct video_rotation_param_ctrl_t {
1055  camera_rotation_type rotation; /* 0 degree = rot disable. */
1056} video_rotation_param_ctrl_t;
1057
1058enum focus_distance_index{
1059  FOCUS_DISTANCE_NEAR_INDEX,  /* 0 */
1060  FOCUS_DISTANCE_OPTIMAL_INDEX,
1061  FOCUS_DISTANCE_FAR_INDEX,
1062  FOCUS_DISTANCE_MAX_INDEX
1063};
1064
1065typedef struct {
1066  float focus_distance[FOCUS_DISTANCE_MAX_INDEX];
1067  float real_gain;
1068} focus_distances_info_t;
1069
1070typedef enum msm_st_frame_packing cam_3d_frame_format_t;
1071
1072typedef struct {
1073  cam_frame_type_t frame_type;
1074  cam_3d_frame_format_t format;
1075}camera_3d_frame_t;
1076
1077// Possibly supported color formats
1078// Ordering handcrafted for efficient coding, alter with care!
1079typedef enum
1080{
1081    YCRCBLP_H2V2 = 0,
1082    YCBCRLP_H2V2 = 1,
1083
1084    YCRCBLP_H2V1 = 2,
1085    YCBCRLP_H2V1 = 3,
1086
1087    YCRCBLP_H1V2 = 4,
1088    YCBCRLP_H1V2 = 5,
1089
1090    YCRCBLP_H1V1 = 6,
1091    YCBCRLP_H1V1 = 7,
1092
1093    RGB565 = 8,
1094    RGB888 = 9,
1095    RGBa   = 10,
1096
1097    JPEG_BITSTREAM_H2V2 = 12,
1098    JPEG_BITSTREAM_H2V1 = 14,
1099    JPEG_BITSTREAM_H1V2 = 16,
1100    JPEG_BITSTREAM_H1V1 = 18,
1101
1102    JPEG_COLOR_FORMAT_MAX,
1103
1104} jpeg_color_format_t;
1105
1106typedef enum {
1107    CAMERA_BESTSHOT_OFF = 0,
1108    CAMERA_BESTSHOT_AUTO = 1,
1109    CAMERA_BESTSHOT_LANDSCAPE = 2,
1110    CAMERA_BESTSHOT_SNOW,
1111    CAMERA_BESTSHOT_BEACH,
1112    CAMERA_BESTSHOT_SUNSET,
1113    CAMERA_BESTSHOT_NIGHT,
1114    CAMERA_BESTSHOT_PORTRAIT,
1115    CAMERA_BESTSHOT_BACKLIGHT,
1116    CAMERA_BESTSHOT_SPORTS,
1117    CAMERA_BESTSHOT_ANTISHAKE,
1118    CAMERA_BESTSHOT_FLOWERS,
1119    CAMERA_BESTSHOT_CANDLELIGHT,
1120    CAMERA_BESTSHOT_FIREWORKS,
1121    CAMERA_BESTSHOT_PARTY,
1122    CAMERA_BESTSHOT_NIGHT_PORTRAIT,
1123    CAMERA_BESTSHOT_THEATRE,
1124    CAMERA_BESTSHOT_ACTION,
1125    CAMERA_BESTSHOT_AR,
1126    CAMERA_BESTSHOT_MAX
1127} camera_bestshot_mode_type;
1128
1129typedef enum {
1130  AUTO = 1,
1131  SPOT,
1132  CENTER_WEIGHTED,
1133  AVERAGE
1134} cam_af_focusrect_t;
1135
1136typedef enum {
1137  CAMERA_AEC_FRAME_AVERAGE,
1138  CAMERA_AEC_CENTER_WEIGHTED,
1139  CAMERA_AEC_SPOT_METERING,
1140  CAMERA_AEC_SMART_METERING,
1141  CAMERA_AEC_USER_METERING,
1142  CAMERA_AEC_MAX_MODES
1143} camera_auto_exposure_mode_type;
1144
1145typedef enum {
1146  FPS_MODE_AUTO,
1147  FPS_MODE_FIXED,
1148} fps_mode_t;
1149
1150typedef struct {
1151  int32_t  buffer[256];       /* buffer to hold data */
1152  int32_t  max_value;
1153} camera_preview_histogram_info;
1154
1155/* Clockwise */
1156typedef enum {
1157  CAMERA_ENCODING_ROTATE_0,
1158  CAMERA_ENCODING_ROTATE_90,
1159  CAMERA_ENCODING_ROTATE_180,
1160  CAMERA_ENCODING_ROTATE_270
1161} camera_encoding_rotate_t;
1162
1163typedef enum {
1164  MOTION_ISO_OFF,
1165  MOTION_ISO_ON
1166} motion_iso_t;
1167
1168typedef struct {
1169  struct msm_ctrl_cmd ctrlCmd;
1170  int fd;
1171  void (*af_cb)(int8_t );
1172  int8_t is_camafctrl_thread_join;
1173  isp3a_af_mode_t af_mode;
1174} cam_af_ctrl_t;
1175
1176/* Display */
1177typedef struct {
1178    uint16_t user_input_display_width;
1179    uint16_t user_input_display_height;
1180} USER_INPUT_DISPLAY_T;
1181
1182#if defined CAMERA_WB_AUTO
1183#undef CAMERA_WB_AUTO
1184#endif
1185
1186#if defined CAMERA_WB_CUSTOM
1187#undef CAMERA_WB_CUSTOM
1188#endif
1189
1190#if defined  CAMERA_WB_INCANDESCENT
1191#undef CAMERA_WB_INCANDESCENT
1192#endif
1193
1194#if defined CAMERA_WB_FLUORESCENT
1195#undef CAMERA_WB_FLUORESCENT
1196#endif
1197
1198#if defined CAMERA_WB_DAYLIGHT
1199#undef CAMERA_WB_DAYLIGHT
1200#endif
1201
1202#if defined CAMERA_WB_CLOUDY_DAYLIGHT
1203#undef CAMERA_WB_CLOUDY_DAYLIGHT
1204#endif
1205
1206#if defined CAMERA_WB_TWILIGHT
1207#undef CAMERA_WB_TWILIGHT
1208#endif
1209
1210#if defined CAMERA_WB_SHADE
1211#undef CAMERA_WB_SHADE
1212#endif
1213
1214typedef enum {
1215  CAMERA_WB_MIN_MINUS_1,
1216  CAMERA_WB_AUTO = 1,  /* This list must match aeecamera.h */
1217  CAMERA_WB_CUSTOM,
1218  CAMERA_WB_INCANDESCENT,
1219  CAMERA_WB_FLUORESCENT,
1220  CAMERA_WB_DAYLIGHT,
1221  CAMERA_WB_CLOUDY_DAYLIGHT,
1222  CAMERA_WB_TWILIGHT,
1223  CAMERA_WB_SHADE,
1224  CAMERA_WB_OFF,
1225  CAMERA_WB_MAX_PLUS_1
1226} config3a_wb_t;
1227
1228/* EXIF header */
1229
1230/* =======================================================================
1231**                          Macro Definitions
1232** ======================================================================= */
1233/* Enum defined to let compiler generate unique offset numbers for different
1234 * tags - ordering matters! NOT INTENDED to be used by any application. */
1235typedef enum
1236{
1237    // GPS IFD
1238    GPS_VERSION_ID = 0,
1239    GPS_LATITUDE_REF,
1240    GPS_LATITUDE,
1241    GPS_LONGITUDE_REF,
1242    GPS_LONGITUDE,
1243    GPS_ALTITUDE_REF,
1244    GPS_ALTITUDE,
1245    GPS_TIMESTAMP,
1246    GPS_SATELLITES,
1247    GPS_STATUS,
1248    GPS_MEASUREMODE,
1249    GPS_DOP,
1250    GPS_SPEED_REF,
1251    GPS_SPEED,
1252    GPS_TRACK_REF,
1253    GPS_TRACK,
1254    GPS_IMGDIRECTION_REF,
1255    GPS_IMGDIRECTION,
1256    GPS_MAPDATUM,
1257    GPS_DESTLATITUDE_REF,
1258    GPS_DESTLATITUDE,
1259    GPS_DESTLONGITUDE_REF,
1260    GPS_DESTLONGITUDE,
1261    GPS_DESTBEARING_REF,
1262    GPS_DESTBEARING,
1263    GPS_DESTDISTANCE_REF,
1264    GPS_DESTDISTANCE,
1265    GPS_PROCESSINGMETHOD,
1266    GPS_AREAINFORMATION,
1267    GPS_DATESTAMP,
1268    GPS_DIFFERENTIAL,
1269
1270    // TIFF IFD
1271    NEW_SUBFILE_TYPE,
1272    SUBFILE_TYPE,
1273    IMAGE_WIDTH,
1274    IMAGE_LENGTH,
1275    BITS_PER_SAMPLE,
1276    COMPRESSION,
1277    PHOTOMETRIC_INTERPRETATION,
1278    THRESH_HOLDING,
1279    CELL_WIDTH,
1280    CELL_HEIGHT,
1281    FILL_ORDER,
1282    DOCUMENT_NAME,
1283    IMAGE_DESCRIPTION,
1284    MAKE,
1285    MODEL,
1286    STRIP_OFFSETS,
1287    ORIENTATION,
1288    SAMPLES_PER_PIXEL,
1289    ROWS_PER_STRIP,
1290    STRIP_BYTE_COUNTS,
1291    MIN_SAMPLE_VALUE,
1292    MAX_SAMPLE_VALUE,
1293    X_RESOLUTION,
1294    Y_RESOLUTION,
1295    PLANAR_CONFIGURATION,
1296    PAGE_NAME,
1297    X_POSITION,
1298    Y_POSITION,
1299    FREE_OFFSET,
1300    FREE_BYTE_COUNTS,
1301    GRAY_RESPONSE_UNIT,
1302    GRAY_RESPONSE_CURVE,
1303    T4_OPTION,
1304    T6_OPTION,
1305    RESOLUTION_UNIT,
1306    PAGE_NUMBER,
1307    TRANSFER_FUNCTION,
1308    SOFTWARE,
1309    DATE_TIME,
1310    ARTIST,
1311    HOST_COMPUTER,
1312    PREDICTOR,
1313    WHITE_POINT,
1314    PRIMARY_CHROMATICITIES,
1315    COLOR_MAP,
1316    HALFTONE_HINTS,
1317    TILE_WIDTH,
1318    TILE_LENGTH,
1319    TILE_OFFSET,
1320    TILE_BYTE_COUNTS,
1321    INK_SET,
1322    INK_NAMES,
1323    NUMBER_OF_INKS,
1324    DOT_RANGE,
1325    TARGET_PRINTER,
1326    EXTRA_SAMPLES,
1327    SAMPLE_FORMAT,
1328    TRANSFER_RANGE,
1329    JPEG_PROC,
1330    JPEG_INTERCHANGE_FORMAT,
1331    JPEG_INTERCHANGE_FORMAT_LENGTH,
1332    JPEG_RESTART_INTERVAL,
1333    JPEG_LOSSLESS_PREDICTORS,
1334    JPEG_POINT_TRANSFORMS,
1335    JPEG_Q_TABLES,
1336    JPEG_DC_TABLES,
1337    JPEG_AC_TABLES,
1338    YCBCR_COEFFICIENTS,
1339    YCBCR_SUB_SAMPLING,
1340    YCBCR_POSITIONING,
1341    REFERENCE_BLACK_WHITE,
1342    GAMMA,
1343    ICC_PROFILE_DESCRIPTOR,
1344    SRGB_RENDERING_INTENT,
1345    IMAGE_TITLE,
1346    COPYRIGHT,
1347    EXIF_IFD,
1348    ICC_PROFILE,
1349    GPS_IFD,
1350
1351
1352    // TIFF IFD (Thumbnail)
1353    TN_IMAGE_WIDTH,
1354    TN_IMAGE_LENGTH,
1355    TN_BITS_PER_SAMPLE,
1356    TN_COMPRESSION,
1357    TN_PHOTOMETRIC_INTERPRETATION,
1358    TN_IMAGE_DESCRIPTION,
1359    TN_MAKE,
1360    TN_MODEL,
1361    TN_STRIP_OFFSETS,
1362    TN_ORIENTATION,
1363    TN_SAMPLES_PER_PIXEL,
1364    TN_ROWS_PER_STRIP,
1365    TN_STRIP_BYTE_COUNTS,
1366    TN_X_RESOLUTION,
1367    TN_Y_RESOLUTION,
1368    TN_PLANAR_CONFIGURATION,
1369    TN_RESOLUTION_UNIT,
1370    TN_TRANSFER_FUNCTION,
1371    TN_SOFTWARE,
1372    TN_DATE_TIME,
1373    TN_ARTIST,
1374    TN_WHITE_POINT,
1375    TN_PRIMARY_CHROMATICITIES,
1376    TN_JPEGINTERCHANGE_FORMAT,
1377    TN_JPEGINTERCHANGE_FORMAT_L,
1378    TN_YCBCR_COEFFICIENTS,
1379    TN_YCBCR_SUB_SAMPLING,
1380    TN_YCBCR_POSITIONING,
1381    TN_REFERENCE_BLACK_WHITE,
1382    TN_COPYRIGHT,
1383
1384    // EXIF IFD
1385    EXPOSURE_TIME,
1386    F_NUMBER,
1387    EXPOSURE_PROGRAM,
1388    SPECTRAL_SENSITIVITY,
1389    ISO_SPEED_RATING,
1390    OECF,
1391    EXIF_VERSION,
1392    EXIF_DATE_TIME_ORIGINAL,
1393    EXIF_DATE_TIME_DIGITIZED,
1394    EXIF_COMPONENTS_CONFIG,
1395    EXIF_COMPRESSED_BITS_PER_PIXEL,
1396    SHUTTER_SPEED,
1397    APERTURE,
1398    BRIGHTNESS,
1399    EXPOSURE_BIAS_VALUE,
1400    MAX_APERTURE,
1401    SUBJECT_DISTANCE,
1402    METERING_MODE,
1403    LIGHT_SOURCE,
1404    FLASH,
1405    FOCAL_LENGTH,
1406    SUBJECT_AREA,
1407    EXIF_MAKER_NOTE,
1408    EXIF_USER_COMMENT,
1409    SUBSEC_TIME,
1410    SUBSEC_TIME_ORIGINAL,
1411    SUBSEC_TIME_DIGITIZED,
1412    EXIF_FLASHPIX_VERSION,
1413    EXIF_COLOR_SPACE,
1414    EXIF_PIXEL_X_DIMENSION,
1415    EXIF_PIXEL_Y_DIMENSION,
1416    RELATED_SOUND_FILE,
1417    INTEROP,
1418    FLASH_ENERGY,
1419    SPATIAL_FREQ_RESPONSE,
1420    FOCAL_PLANE_X_RESOLUTION,
1421    FOCAL_PLANE_Y_RESOLUTION,
1422    FOCAL_PLANE_RESOLUTION_UNIT,
1423    SUBJECT_LOCATION,
1424    EXPOSURE_INDEX,
1425    SENSING_METHOD,
1426    FILE_SOURCE,
1427    SCENE_TYPE,
1428    CFA_PATTERN,
1429    CUSTOM_RENDERED,
1430    EXPOSURE_MODE,
1431    WHITE_BALANCE,
1432    DIGITAL_ZOOM_RATIO,
1433    FOCAL_LENGTH_35MM,
1434    SCENE_CAPTURE_TYPE,
1435    GAIN_CONTROL,
1436    CONTRAST,
1437    SATURATION,
1438    SHARPNESS,
1439    DEVICE_SETTINGS_DESCRIPTION,
1440    SUBJECT_DISTANCE_RANGE,
1441    IMAGE_UID,
1442    PIM,
1443
1444    EXIF_TAG_MAX_OFFSET
1445
1446} exif_tag_offset_t;
1447
1448/* Below are the supported Tags (ID and structure for their data) */
1449#define CONSTRUCT_TAGID(offset,ID)   (offset << 16 | ID)
1450
1451// GPS tag version
1452// Use EXIFTAGTYPE_GPS_VERSION_ID as the exif_tag_type (EXIF_BYTE)
1453// Count should be 4
1454#define _ID_GPS_VERSION_ID                  0x0000
1455#define EXIFTAGID_GPS_VERSION_ID            CONSTRUCT_TAGID(GPS_VERSION_ID, _ID_GPS_VERSION_ID)
1456#define EXIFTAGTYPE_GPS_VERSION_ID          EXIF_BYTE
1457// North or South Latitude
1458// Use EXIFTAGTYPE_GPS_LATITUDE_REF as the exif_tag_type (EXIF_ASCII)
1459// It should be 2 characters long including the null-terminating character.
1460#define _ID_GPS_LATITUDE_REF                0x0001
1461#define EXIFTAGID_GPS_LATITUDE_REF          CONSTRUCT_TAGID(GPS_LATITUDE_REF, _ID_GPS_LATITUDE_REF)
1462#define EXIFTAGTYPE_GPS_LATITUDE_REF         EXIF_ASCII
1463// Latitude
1464// Use EXIFTAGTYPE_GPS_LATITUDE as the exif_tag_type (EXIF_RATIONAL)
1465// Count should be 3
1466#define _ID_GPS_LATITUDE                    0x0002
1467#define EXIFTAGID_GPS_LATITUDE              CONSTRUCT_TAGID(GPS_LATITUDE, _ID_GPS_LATITUDE)
1468#define EXIFTAGTYPE_GPS_LATITUDE             EXIF_RATIONAL
1469// East or West Longitude
1470// Use EXIFTAGTYPE_GPS_LONGITUDE_REF as the exif_tag_type (EXIF_ASCII)
1471// It should be 2 characters long including the null-terminating character.
1472#define _ID_GPS_LONGITUDE_REF               0x0003
1473#define EXIFTAGID_GPS_LONGITUDE_REF         CONSTRUCT_TAGID(GPS_LONGITUDE_REF, _ID_GPS_LONGITUDE_REF)
1474#define EXIFTAGTYPE_GPS_LONGITUDE_REF       EXIF_ASCII
1475// Longitude
1476// Use EXIFTAGTYPE_GPS_LONGITUDE as the exif_tag_type (EXIF_RATIONAL)
1477// Count should be 3
1478#define _ID_GPS_LONGITUDE                   0x0004
1479#define EXIFTAGID_GPS_LONGITUDE             CONSTRUCT_TAGID(GPS_LONGITUDE, _ID_GPS_LONGITUDE)
1480#define EXIFTAGTYPE_GPS_LONGITUDE           EXIF_RATIONAL
1481// Altitude reference
1482// Use EXIFTAGTYPE_GPS_ALTITUDE_REF as the exif_tag_type (EXIF_BYTE)
1483#define _ID_GPS_ALTITUDE_REF                0x0005
1484#define EXIFTAGID_GPS_ALTITUDE_REF          CONSTRUCT_TAGID(GPS_ALTITUDE_REF, _ID_GPS_ALTITUDE_REF)
1485#define EXIFTAGTYPE_GPS_ALTITUDE_REF        EXIF_BYTE
1486// Altitude
1487// Use EXIFTAGTYPE_GPS_ALTITUDE as the exif_tag_type (EXIF_RATIONAL)
1488#define _ID_GPS_ALTITUDE                    0x0006
1489#define EXIFTAGID_GPS_ALTITUDE              CONSTRUCT_TAGID(GPS_ALTITUDE, _ID_GPS_ALTITUDE)
1490#define EXIFTAGTYPE_GPS_ALTITUE             EXIF_RATIONAL
1491// GPS time (atomic clock)
1492// Use EXIFTAGTYPE_GPS_TIMESTAMP as the exif_tag_type (EXIF_RATIONAL)
1493// Count should be 3
1494#define _ID_GPS_TIMESTAMP                   0x0007
1495#define EXIFTAGID_GPS_TIMESTAMP             CONSTRUCT_TAGID(GPS_TIMESTAMP, _ID_GPS_TIMESTAMP)
1496#define EXIFTAGTYPE_GPS_TIMESTAMP           EXIF_RATIONAL
1497// GPS Satellites
1498// Use EXIFTAGTYPE_GPS_SATELLITES as the exif_tag_type (EXIF_ASCII)
1499// Count can be anything.
1500#define _ID_GPS_SATELLITES                  0x0008
1501#define EXIFTAGID_GPS_SATELLITES            CONSTRUCT_TAGID(GPS_SATELLITES, _ID_GPS_SATELLITES)
1502#define EXIFTAGTYPE_GPS_SATELLITES          EXIF_ASCII
1503// GPS Status
1504// Use EXIFTAGTYPE_GPS_STATUS as the exif_tag_type (EXIF_ASCII)
1505// It should be 2 characters long including the null-terminating character.
1506// "A" - Measurement in progress
1507// "V" - Measurement Interoperability
1508// Other - Reserved
1509#define _ID_GPS_STATUS                      0x0009
1510#define EXIFTAGID_GPS_STATUS                CONSTRUCT_TAGID(GPS_STATUS, _ID_GPS_STATUS)
1511#define EXIFTATTYPE_GPS_STATUS              EXIF_ASCII
1512// GPS Measure Mode
1513// Use EXIFTAGTYPE_GPS_MEASUREMODE as the exif_tag_type (EXIF_ASCII)
1514// It should be 2 characters long including the null-terminating character.
1515// "2" - 2-dimensional measurement
1516// "3" - 3-dimensional measurement
1517// Other - Reserved
1518#define _ID_GPS_MEASUREMODE                 0x000a
1519#define EXIFTAGID_GPS_MEASUREMODE           CONSTRUCT_TAGID(GPS_MEASUREMODE, _ID_GPS_MEASUREMODE)
1520#define EXIFTAGTYPE_GPS_MEASUREMODE         EXIF_ASCII
1521// GPS Measurement precision (DOP)
1522// Use EXIFTAGTYPE_GPS_DOP as the exif_tag_type (EXIF_RATIONAL)
1523// Count should be 1
1524#define _ID_GPS_DOP                         0x000b
1525#define EXIFTAGID_GPS_DOP                   CONSTRUCT_TAGID(GPS_DOP, _ID_GPS_DOP)
1526#define EXIFTAGTYPE_GPS_DOP                 EXIF_RATIONAL
1527// Speed Unit
1528// Use EXIFTAGTYPE_GPS_SPEED_REF as the exif_tag_type (EXIF_ASCII)
1529// It should be 2 characters long including the null-terminating character.
1530// "K" - Kilometers per hour
1531// "M" - Miles per hour
1532// "N" - Knots
1533// Other - Reserved
1534#define _ID_GPS_SPEED_REF                   0x000c
1535#define EXIFTAGID_GPS_SPEED_REF             CONSTRUCT_TAGID(GPS_SPEED_REF, _ID_GPS_SPEED_REF)
1536#define EXIFTAGTYPE_GPS_SPEED_REF           EXIF_ASCII
1537// Speed of GPS receiver
1538// Use EXIFTAGTYPE_GPS_SPEED as the exif_tag_type (EXIF_RATIONAL)
1539// Count should be 1
1540#define _ID_GPS_SPEED                       0x000d
1541#define EXIFTAGID_GPS_SPEED                 CONSTRUCT_TAGID(GPS_SPEED, _ID_GPS_SPEED)
1542#define EXIFTAGTYPE_GPS_SPEED               EXIF_RATIONAL
1543// Reference of direction of movement
1544// Use EXIFTAGTYPE_GPS_TRACK_REF as the exif_tag_type (EXIF_ASCII)
1545// It should be 2 characters long including the null-terminating character.
1546// "T" - True direction
1547// "M" - Magnetic direction
1548// Other - Reserved
1549#define _ID_GPS_TRACK_REF                    0x000e
1550#define EXIFTAGID_GPS_TRACK_REF              CONSTRUCT_TAGID(GPS_TRACK_REF, _ID_GPS_TRACK_REF)
1551#define EXIFTAGTYPE_GPS_TRACK_REF            EXIF_ASCII
1552// Direction of movement
1553// Use EXIFTAGTYPE_GPS_TRACK as the exif_tag_type (EXIF_RATIONAL)
1554// Count should be 1
1555#define _ID_GPS_TRACK                       0x000f
1556#define EXIFTAGID_GPS_TRACK                 CONSTRUCT_TAGID(GPS_TRACK, _ID_GPS_TRACK)
1557#define EXIFTAGTYPE_GPS_TRACK               EXIF_RATIONAL
1558// Reference of direction of image
1559// Use EXIFTAGTYPE_GPS_IMGDIRECTION_REF as the exif_tag_type (EXIF_ASCII)
1560// It should be 2 characters long including the null-terminating character.
1561// "T" - True direction
1562// "M" - Magnetic direction
1563// Other - Reserved
1564#define _ID_GPS_IMGDIRECTION_REF            0x0010
1565#define EXIFTAGID_GPS_IMGDIRECTION_REF      CONSTRUCT_TAGID(GPS_IMGDIRECTION_REF, _ID_GPS_IMGDIRECTION_REF)
1566#define EXIFTAGTYPE_GPS_IMGDIRECTION_REF    EXIF_ASCII
1567// Direction of image
1568// Use EXIFTAGTYPE_GPS_IMGDIRECTION as the exif_tag_type (EXIF_RATIONAL)
1569// Count should be 1
1570#define _ID_GPS_IMGDIRECTION                0x0011
1571#define EXIFTAGID_GPS_IMGDIRECTION          CONSTRUCT_TAGID(GPS_IMGDIRECTION, _ID_GPS_IMGDIRECTION)
1572#define EXIFTAGTYPE_GPS_IMGDIRECTION        EXIF_RATIONAL
1573// Geodetic survey data used
1574// Use EXIFTAGTYPE_GPS_MAPDATUM as the exif_tag_type (EXIF_ASCII)
1575// Count can be any
1576#define _ID_GPS_MAPDATUM                    0x0012
1577#define EXIFTAGID_GPS_MAPDATUM              CONSTRUCT_TAGID(GPS_MAPDATUM, _ID_GPS_MAPDATUM)
1578#define EXIFTAGTYPE_GPS_MAPDATUM            EXIF_ASCII
1579// Reference for latitude of destination
1580// Use EXIFTAGTYPE_GPS_DESTLATITUDE_REF as the exif_tag_type (EXIF_ASCII)
1581// It should be 2 characters long including the null-terminating character.
1582// "N" - North latitude
1583// "S" - South latitude
1584// Other - Reserved
1585#define _ID_GPS_DESTLATITUDE_REF            0x0013
1586#define EXIFTAGID_GPS_DESTLATITUDE_REF      CONSTRUCT_TAGID(GPS_DESTLATITUDE_REF, _ID_GPS_DESTLATITUDE_REF)
1587#define EXIFTAGTYPE_GPS_DESTLATITUDE_REF    EXIF_ASCII
1588// Latitude of destination
1589// Use EXIFTAGTYPE_GPS_DESTLATITUDE as the exif_tag_type (EXIF_RATIONAL)
1590// Count should be 3
1591#define _ID_GPS_DESTLATITUDE                0x0014
1592#define EXIFTAGID_GPS_DESTLATITUDE          CONSTRUCT_TAGID(GPS_DESTLATITUDE, _ID_GPS_DESTLATITUDE)
1593#define EXIFTAGTYPE_GPS_DESTLATITUDE        EXIF_RATIONAL
1594// Reference for longitude of destination
1595// Use EXIFTAGTYPE_GPS_DESTLONGITUDE_REF as the exif_tag_type (EXIF_ASCII)
1596// It should be 2 characters long including the null-terminating character.
1597// "E" - East longitude
1598// "W" - West longitude
1599// Other - Reserved
1600#define _ID_GPS_DESTLONGITUDE_REF           0x0015
1601#define EXIFTAGID_GPS_DESTLONGITUDE_REF     CONSTRUCT_TAGID(GPS_DESTLONGITUDE_REF, _ID_GPS_DESTLONGITUDE_REF)
1602#define EXIFTAGTYPE_GPS_DESTLONGITUDE_REF   EXIF_ASCII
1603// Longitude of destination
1604// Use EXIFTAGTYPE_GPS_DESTLONGITUDE as the exif_tag_type (EXIF_RATIONAL)
1605// Count should be 3
1606#define _ID_GPS_DESTLONGITUDE               0x0016
1607#define EXIFTAGID_GPS_DESTLONGITUDE         CONSTRUCT_TAGID(GPS_DESTLONGITUDE, _ID_GPS_DESTLONGITUDE)
1608#define EXIFTAGTYPE_GPS_DESTLONGITUDE       EXIF_RATIONAL
1609// Reference for bearing of destination
1610// Use EXIFTAGTYPE_GPS_DESTBEARING_REF as the exif_tag_type (EXIF_ASCII)
1611// It should be 2 characters long including the null-terminating character.
1612// "T" - True direction
1613// "M" - Magnetic direction
1614// Other - Reserved
1615#define _ID_GPS_DESTBEARING_REF             0x0017
1616#define EXIFTAGID_GPS_DESTBEARING_REF       CONSTRUCT_TAGID(GPS_DESTBEARING_REF, _ID_GPS_DESTBEARING_REF)
1617#define EXIFTAGTYPE_GPS_DESTBEARING_REF     EXIF_ASCII
1618// Bearing of destination
1619// Use EXIFTAGTYPE_GPS_DESTBEARING as the exif_tag_type (EXIF_RATIONAL)
1620// Count should be 1
1621#define _ID_GPS_DESTBEARING                 0x0018
1622#define EXIFTAGID_GPS_DESTBEARING           CONSTRUCT_TAGID(GPS_DESTBEARING, _ID_GPS_DESTBEARING)
1623#define EXIFTAGTYPE_GPS_DESTBEARING         EXIF_RATIONAL
1624// Reference for distance to destination
1625// Use EXIFTAGTYPE_GPS_DESTDISTANCE_REF as the exif_tag_type (EXIF_ASCII)
1626// It should be 2 characters long including the null-terminating character.
1627// "K" - Kilometers per hour
1628// "M" - Miles per hour
1629// "N" - Knots
1630// Other - Reserved
1631#define _ID_GPS_DESTDISTANCE_REF            0x0019
1632#define EXIFTAGID_GPS_DESTDISTANCE_REF      CONSTRUCT_TAGID(GPS_DESTDISTANCE_REF, _ID_GPS_DESTDISTANCE_REF)
1633#define EXIFTAGTYPE_GPS_DESTDISTANCE_REF    EXIF_ASCII
1634// Distance to destination
1635// Use EXIFTAGTYPE_GPS_DESTDISTANCE as the exif_tag_type (EXIF_RATIONAL)
1636// Count should be 1
1637#define _ID_GPS_DESTDISTANCE                0x001a
1638#define EXIFTAGID_GPS_DESTDISTANCE          CONSTRUCT_TAGID(GPS_DESTDISTANCE, _ID_GPS_DESTDISTANCE)
1639#define EXIFTAGTYPE_GPS_DESTDISTANCE        EXIF_RATIONAL
1640// Name of GPS processing method
1641// Use EXIFTAGTYPE_GPS_PROCESSINGMETHOD as the exif_tag_type (EXIF_UNDEFINED)
1642// Count can be any
1643#define _ID_GPS_PROCESSINGMETHOD            0x001b
1644#define EXIFTAGID_GPS_PROCESSINGMETHOD      CONSTRUCT_TAGID(GPS_PROCESSINGMETHOD, _ID_GPS_PROCESSINGMETHOD)
1645#define EXIFTAGTYPE_GPS_PROCESSINGMETHOD    EXIF_UNDEFINED
1646// Name of GPS area
1647// Use EXIFTAGTYPE_GPS_AREAINFORMATION as the exif_tag_type (EXIF_UNDEFINED)
1648// Count can be any
1649#define _ID_GPS_AREAINFORMATION             0x001c
1650#define EXIFTAGID_GPS_AREAINFORMATION       CONSTRUCT_TAGID(GPS_AREAINFORMATION, _ID_GPS_AREAINFORMATION)
1651#define EXIFTAGTYPE_GPS_AREAINFORMATION     EXIF_UNDEFINED
1652// GPS date
1653// Use EXIFTAGTYPE_GPS_DATESTAMP as the exif_tag_type (EXIF_ASCII)
1654// It should be 11 characters long including the null-terminating character.
1655#define _ID_GPS_DATESTAMP                   0x001d
1656#define EXIFTAGID_GPS_DATESTAMP             CONSTRUCT_TAGID(GPS_DATESTAMP, _ID_GPS_DATESTAMP)
1657#define EXIFTAGTYPE_GPS_DATESTAMP           EXIF_ASCII
1658// GPS differential correction
1659// Use EXIFTAGTYPE_GPS_DIFFERENTIAL as the exif_tag_type (EXIF_SHORT)
1660// Count should be 1
1661// 0 - Measurement without differential correction
1662// 1 - Differential correction applied
1663// Other - Reserved
1664#define _ID_GPS_DIFFERENTIAL                0x001e
1665#define EXIFTAGID_GPS_DIFFERENTIAL          CONSTRUCT_TAGID(GPS_DIFFERENTIAL, _ID_GPS_DIFFERENTIAL)
1666#define EXIFTAGTYPE_GPS_DIFFERENTIAL        EXIF_SHORT
1667// Image width
1668// Use EXIFTAGTYPE_IMAGE_WIDTH as the exif_tag_type (EXIF_LONG)
1669// Count should be 1
1670#define _ID_IMAGE_WIDTH                     0x0100
1671#define EXIFTAGID_IMAGE_WIDTH               CONSTRUCT_TAGID(IMAGE_WIDTH, _ID_IMAGE_WIDTH)
1672#define EXIFTAGTYPE_IMAGE_WIDTH             EXIF_LONG
1673// Image height
1674// Use EXIFTAGTYPE_IMAGE_LENGTH as the exif_tag_type (EXIF_SHORT_OR_LONG)
1675// Count should be 1
1676#define _ID_IMAGE_LENGTH                    0x0101
1677#define EXIFTAGID_IMAGE_LENGTH              CONSTRUCT_TAGID(IMAGE_LENGTH, _ID_IMAGE_LENGTH)
1678#define EXIFTAGTYPE_IMAGE_LENGTH            EXIF_LONG
1679// Number of bits per component
1680// Use EXIFTAGTYPE_BITS_PER_SAMPLE as the exif_tag_type (EXIF_SHORT)
1681// Count should be 1
1682#define _ID_BITS_PER_SAMPLE                 0x0102
1683#define EXIFTAGID_BITS_PER_SAMPLE           CONSTRUCT_TAGID(BITS_PER_SAMPLE, _ID_BITS_PER_SAMPLE)
1684#define EXIFTAGTYPE_BITS_PER_SAMPLE         EXIF_SHORT
1685// Compression scheme
1686// Use EXIFTAGTYPE_COMPRESSION as the exif_tag_type (EXIF_SHORT)
1687// Count should be 1
1688#define _ID_COMPRESSION                     0x0103
1689#define EXIFTAGID_COMPRESSION               CONSTRUCT_TAGID(COMPRESSION, _ID_COMPRESSION)
1690#define EXIFTAGTYPE_COMPRESSION             EXIF_SHORT
1691// Pixel composition
1692// Use EXIFTAGTYPE_PHOTOMETRIC_INTERPRETATION as the exif_tag_type (EXIF_SHORT)
1693// Count should be 1
1694#define _ID_PHOTOMETRIC_INTERPRETATION           0x0106
1695#define EXIFTAGID_PHOTOMETRIC_INTERPRETATION     CONSTRUCT_TAGID(PHOTOMETRIC_INTERPRETATION, _ID_PHOTOMETRIC_INTERPRETATION)
1696#define EXIFTAGTYPE_PHOTOMETRIC_INTERPRETATION   EXIF_SHORT
1697
1698// Thresholding
1699// Use EXIFTAGTYPE_THRESH_HOLDING as the exif_tag_type (EXIF_SHORT)
1700//
1701//1 = No dithering or halftoning
1702//2 = Ordered dither or halftone
1703//3 = Randomized dither
1704#define _ID_THRESH_HOLDING                  0x0107
1705#define EXIFTAGID_THRESH_HOLDING            CONSTRUCT_TAGID(THRESH_HOLDING, _ID_THRESH_HOLDING)
1706#define EXIFTAGTYPE_THRESH_HOLDING          EXIF_SHORT
1707
1708// Cell Width
1709// Use EXIFTAGTYPE_CELL_WIDTH as the exif_tag_type (EXIF_SHORT)
1710//
1711#define _ID_CELL_WIDTH                      0x0108
1712#define EXIFTAGID_CELL_WIDTH                CONSTRUCT_TAGID(CELL_WIDTH, _ID_CELL_WIDTH)
1713#define EXIFTAGTYPE_CELL_WIDTH              EXIF_SHORT
1714// Cell Height
1715// Use EXIFTAGTYPE_CELL_HEIGHT as the exif_tag_type (EXIF_SHORT)
1716// Count should be 1
1717#define _ID_CELL_HEIGHT                     0x0109
1718#define EXIFTAGID_CELL_HEIGHT               CONSTRUCT_TAGID(CELL_HEIGHT, _ID_CELL_HEIGHT)
1719#define EXIFTAGTYPE_CELL_HEIGHT             EXIF_SHORT
1720// Fill Order
1721// Use EXIFTAGTYPE_FILL_ORDER as the exif_tag_type (EXIF_SHORT)
1722// 	1 = Normal
1723//  2 = Reversed
1724#define _ID_FILL_ORDER                      0x010A
1725#define EXIFTAGID_FILL_ORDER                CONSTRUCT_TAGID(FILL_ORDER, _ID_FILL_ORDER)
1726#define EXIFTAGTYPE_FILL_ORDER              EXIF_SHORT
1727
1728// DOCUMENT NAME
1729// Use EXIFTAGTYPE_DOCUMENT_NAME as the exif_tag_type (EXIF_ASCII)
1730//
1731#define _ID_DOCUMENT_NAME                   0x010D
1732#define EXIFTAGID_DOCUMENT_NAME             CONSTRUCT_TAGID(DOCUMENT_NAME, _ID_DOCUMENT_NAME)
1733#define EXIFTAGTYPE_DOCUMENT_NAME           EXIF_ASCII
1734
1735// Image title
1736// Use EXIFTAGTYPE_IMAGE_DESCRIPTION as the exif_tag_type (EXIF_ASCII)
1737// Count can be any
1738#define _ID_IMAGE_DESCRIPTION               0x010e
1739#define EXIFTAGID_IMAGE_DESCRIPTION         CONSTRUCT_TAGID(IMAGE_DESCRIPTION, _ID_IMAGE_DESCRIPTION)
1740#define EXIFTAGTYPE_IMAGE_DESCRIPTION       EXIF_ASCII
1741// Image input equipment manufacturer
1742// Use EXIFTAGTYPE_MAKE as the exif_tag_type (EXIF_ASCII)
1743// Count can be any
1744#define _ID_MAKE                            0x010f
1745#define EXIFTAGID_MAKE                      CONSTRUCT_TAGID(MAKE, _ID_MAKE)
1746#define EXIFTAGTYPE_MAKE                    EXIF_ASCII
1747// Image input equipment model
1748// Use EXIFTAGTYPE_MODEL as the exif_tag_type (EXIF_ASCII)
1749// Count can be any
1750#define _ID_MODEL                           0x0110
1751#define EXIFTAGID_MODEL                     CONSTRUCT_TAGID(MODEL, _ID_MODEL)
1752#define EXIFTAGTYPE_MODEL                   EXIF_ASCII
1753// Image data location
1754// Use EXIFTAGTYPE_STRIP_OFFSETS as the exif_tag_type (EXIF_LONG)
1755// Count = StripsPerImage                    when PlanarConfiguration = 1
1756//       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
1757#define _ID_STRIP_OFFSETS                   0x0111
1758#define EXIFTAGID_STRIP_OFFSETS             CONSTRUCT_TAGID(STRIP_OFFSETS, _ID_STRIP_OFFSETS)
1759#define EXIFTAGTYPE_STRIP_OFFSETS           EXIF_LONG
1760// Orientation of image
1761// Use EXIFTAGTYPE_ORIENTATION as the exif_tag_type (EXIF_SHORT)
1762// Count should be 1
1763#define _ID_ORIENTATION                     0x0112
1764#define EXIFTAGID_ORIENTATION               CONSTRUCT_TAGID(ORIENTATION, _ID_ORIENTATION)
1765#define EXIFTAGTYPE_ORIENTATION             EXIF_SHORT
1766// Number of components
1767// Use EXIFTAGTYPE_SAMPLES_PER_PIXEL as the exif_tag_type (EXIF_SHORT)
1768// Count should be 1
1769#define _ID_SAMPLES_PER_PIXEL               0x0115
1770#define EXIFTAGID_SAMPLES_PER_PIXEL         CONSTRUCT_TAGID(SAMPLES_PER_PIXEL, _ID_SAMPLES_PER_PIXEL)
1771#define EXIFTAGTYPE_SAMPLES_PER_PIXEL       EXIF_SHORT
1772// Number of rows per strip
1773// Use EXIFTAGTYPE_ROWS_PER_STRIP as the exif_tag_type (EXIF_LONG)
1774// Count should be 1
1775#define _ID_ROWS_PER_STRIP                  0x0116
1776#define EXIFTAGID_ROWS_PER_STRIP            CONSTRUCT_TAGID(ROWS_PER_STRIP, _ID_ROWS_PER_STRIP)
1777#define EXIFTAGTYPE_ROWS_PER_STRIP          EXIF_LONG
1778// Bytes per compressed strip
1779// Use EXIFTAGTYPE_STRIP_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
1780// Count = StripsPerImage                    when PlanarConfiguration = 1
1781//       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
1782#define _ID_STRIP_BYTE_COUNTS               0x0117
1783#define EXIFTAGID_STRIP_BYTE_COUNTS         CONSTRUCT_TAGID(STRIP_BYTE_COUNTS, _ID_STRIP_BYTE_COUNTS)
1784#define EXIFTAGTYPE_STRIP_BYTE_COUNTS       EXIF_LONG
1785// MinSampleValue
1786// Use EXIFTAGTYPE_MIN_SAMPLE_VALUE as the exif_tag_type (EXIF_SHORT)
1787#define _ID_MIN_SAMPLE_VALUE                0x0118
1788#define EXIFTAGID_MIN_SAMPLE_VALUE          CONSTRUCT_TAGID(MIN_SAMPLE_VALUE, _ID_MIN_SAMPLE_VALUE)
1789#define EXIFTAGTYPE_MIN_SAMPLE_VALUE        EXIF_SHORT
1790// MaxSampleValue
1791// Use EXIFTAGTYPE_MAX_SAMPLE_VALUE as the exif_tag_type (EXIF_SHORT)
1792#define _ID_MAX_SAMPLE_VALUE                0x0119
1793#define EXIFTAGID_MAX_SAMPLE_VALUE          CONSTRUCT_TAGID(MAX_SAMPLE_VALUE, _ID_MAX_SAMPLE_VALUE)
1794#define EXIFTAGTYPE_MAX_SAMPLE_VALUE        EXIF_SHORT
1795
1796// Image resolution in width direction
1797// Use EXIFTAGTYPE_X_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
1798// Count should be 1
1799#define _ID_X_RESOLUTION                    0x011a
1800#define EXIFTAGID_X_RESOLUTION              CONSTRUCT_TAGID(X_RESOLUTION, _ID_X_RESOLUTION)
1801#define EXIFTAGTYPE_X_RESOLUTION            EXIF_RATIONAL
1802// Image resolution in height direction
1803// Use EXIFTAGTYPE_Y_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
1804// Count should be 1
1805#define _ID_Y_RESOLUTION                    0x011b
1806#define EXIFTAGID_Y_RESOLUTION              CONSTRUCT_TAGID(Y_RESOLUTION, _ID_Y_RESOLUTION)
1807#define EXIFTAGTYPE_Y_RESOLUTION            EXIF_RATIONAL
1808// Image data arrangement
1809// Use EXIFTAGTYPE_PLANAR_CONFIGURATION as the exif_tag_type (EXIF_SHORT)
1810// Count should be 1
1811#define _ID_PLANAR_CONFIGURATION            0x011c
1812#define EXIFTAGID_PLANAR_CONFIGURATION      CONSTRUCT_TAGID(PLANAR_CONFIGURATION, _ID_PLANAR_CONFIGURATION)
1813#define EXIFTAGTYPE_PLANAR_CONFIGURATION    EXIF_SHORT
1814// PageName
1815// Use EXIFTAGTYPE_PAGE_NAME as the exif_tag_type (EXIF_ASCII)
1816// Count should be 1
1817#define _ID_PAGE_NAME                       0x011d
1818#define EXIFTAGID_PAGE_NAME                 CONSTRUCT_TAGID(PAGE_NAME, _ID_PAGE_NAME)
1819#define EXIFTAGTYPE_PAGE_NAME               EXIF_ASCII
1820// XPosition
1821// Use EXIFTAGTYPE_X_POSITION as the exif_tag_type (EXIF_RATIONAL)
1822//
1823#define _ID_X_POSITION                      0x011e
1824#define EXIFTAGID_X_POSITION                CONSTRUCT_TAGID(X_POSITION, _ID_X_POSITION)
1825#define EXIFTAGTYPE_X_POSITION              EXIF_RATIONAL
1826// YPosition
1827// Use EXIFTAGTYPE_Y_POSITION as the exif_tag_type (EXIF_RATIONAL)
1828//
1829#define _ID_Y_POSITION                      0x011f
1830#define EXIFTAGID_Y_POSITION                CONSTRUCT_TAGID(Y_POSITION, _ID_Y_POSITION)
1831#define EXIFTAGTYPE_Y_POSITION              EXIF_RATIONAL
1832
1833// FREE_OFFSET
1834// Use EXIFTAGTYPE_FREE_OFFSET as the exif_tag_type (EXIF_LONG)
1835//
1836#define _ID_FREE_OFFSET                     0x0120
1837#define EXIFTAGID_FREE_OFFSET               CONSTRUCT_TAGID(FREE_OFFSET, _ID_FREE_OFFSET)
1838#define EXIFTAGTYPE_FREE_OFFSET             EXIF_LONG
1839// FREE_BYTE_COUNTS
1840// Use EXIFTAGTYPE_FREE_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
1841//
1842#define _ID_FREE_BYTE_COUNTS                0x0121
1843#define EXIFTAGID_FREE_BYTE_COUNTS          CONSTRUCT_TAGID(FREE_BYTE_COUNTS, _ID_FREE_BYTE_COUNTS)
1844#define EXIFTAGTYPE_FREE_BYTE_COUNTS        EXIF_LONG
1845
1846// GrayResponseUnit
1847// Use EXIFTAGTYPE_GRAY_RESPONSE_UNIT as the exif_tag_type (EXIF_SHORT)
1848//
1849#define _ID_GRAY_RESPONSE_UNIT              0x0122
1850#define EXIFTAGID_GRAY_RESPONSE_UNIT        CONSTRUCT_TAGID(GRAY_RESPONSE_UNIT, _ID_GRAY_RESPONSE_UNIT)
1851#define EXIFTAGTYPE_GRAY_RESPONSE_UNIT      EXIF_SHORT
1852// GrayResponseCurve
1853// Use EXIFTAGTYPE_GRAY_RESPONSE_CURVE  as the exif_tag_type (EXIF_SHORT)
1854//
1855#define _ID_GRAY_RESPONSE_CURVE             0x0123
1856#define EXIFTAGID_GRAY_RESPONSE_CURVE       CONSTRUCT_TAGID(GRAY_RESPONSE_CURVE , _ID_GRAY_RESPONSE_CURVE )
1857#define EXIFTAGTYPE_GRAY_RESPONSE_CURVE     EXIF_SHORT
1858
1859// T4_OPTION
1860// Use EXIFTAGTYPE_T4_OPTION as the exif_tag_type (EXIF_LONG)
1861//
1862#define _ID_T4_OPTION                       0x0124
1863#define EXIFTAGID_T4_OPTION                 CONSTRUCT_TAGID(T4_OPTION, _ID_T4_OPTION)
1864#define EXIFTAGTYPE_T4_OPTION               EXIF_LONG
1865// T6_OPTION
1866// Use EXIFTAGTYPE_T6_OPTION as the exif_tag_type (EXIF_LONG)
1867//
1868#define _ID_T6_OPTION                       0x0125
1869#define EXIFTAGID_T6_OPTION                 CONSTRUCT_TAGID(T6_OPTION, _ID_T6_OPTION)
1870#define EXIFTAGTYPE_T6_OPTION               EXIF_LONG
1871
1872// Unit of X and Y resolution
1873// Use EXIFTAGTYPE_RESOLUTION_UNIT as the exif_tag_type (EXIF_SHORT)
1874// Count should be 1
1875#define _ID_RESOLUTION_UNIT                 0x0128
1876#define EXIFTAGID_RESOLUTION_UNIT           CONSTRUCT_TAGID(RESOLUTION_UNIT, _ID_RESOLUTION_UNIT)
1877#define EXIFTAGTYPE_RESOLUTION_UNIT         EXIF_SHORT
1878
1879// Page Number
1880// Use EXIFTAGTYPE_PAGE_NUMBER  as the exif_tag_type (EXIF_SHORT)
1881// Count should be 1
1882#define _ID_PAGE_NUMBER                     0x0129
1883#define EXIFTAGID_PAGE_NUMBER               CONSTRUCT_TAGID(PAGE_NUMBER, _ID_PAGE_NUMBER)
1884#define EXIFTAGTYPE_PAGE_NUMBER             EXIF_SHORT
1885// Transfer function
1886// Use EXIFTAGTYPE_TRANSFER_FUNCTION as the exif_tag_type (EXIF_SHORT)
1887// Count should be 3*256
1888#define _ID_TRANSFER_FUNCTION               0x012d
1889#define EXIFTAGID_TRANSFER_FUNCTION         CONSTRUCT_TAGID(TRANSFER_FUNCTION, _ID_TRANSFER_FUNCTION)
1890#define EXIFTAGTYPE_TRANSFER_FUNCTION       EXIF_SHORT
1891// Software used
1892// Use EXIFTAGTYPE_SOFTWARE as the exif_tag_type (EXIF_ASCII)
1893// Count can be any
1894#define _ID_SOFTWARE                        0x0131
1895#define EXIFTAGID_SOFTWARE                  CONSTRUCT_TAGID(SOFTWARE, _ID_SOFTWARE)
1896#define EXIFTAGTYPE_SOFTWARE                EXIF_ASCII
1897// File change date and time
1898// Use EXIFTAGTYPE_DATE_TIME as the exif_tag_type (EXIF_ASCII)
1899// Count should be 20
1900#define _ID_DATE_TIME                       0x0132
1901#define EXIFTAGID_DATE_TIME                 CONSTRUCT_TAGID(DATE_TIME, _ID_DATE_TIME)
1902#define EXIFTAGTYPE_DATE_TIME               EXIF_ASCII
1903// ARTIST, person who created this image
1904// Use EXIFTAGTYPE_ARTIST as the exif_tag_type (EXIF_ASCII)
1905// Count can be any
1906#define _ID_ARTIST                          0x013b
1907#define EXIFTAGID_ARTIST                    CONSTRUCT_TAGID(ARTIST, _ID_ARTIST)
1908#define EXIFTAGTYPE_ARTIST                  EXIF_ASCII
1909// Host Computer Name
1910// Use EXIFTAGTYPE_HOST_COMPUTER as the exif_tag_type (EXIF_ASCII)
1911// Count can be any
1912#define _ID_HOST_COMPUTER                   0x013c
1913#define EXIFTAGID_HOST_COMPUTER             CONSTRUCT_TAGID(HOST_COMPUTER , _ID_HOST_COMPUTER )
1914#define EXIFTAGTYPE_HOST_COMPUTER           EXIF_ASCII
1915// Predictor
1916// Use EXIFTAGTYPE_PREDICTOR as the exif_tag_type (EXIF_SHORT)
1917// Count can be any
1918#define _ID_PREDICTOR                       0x013d
1919#define EXIFTAGID_PREDICTOR                 CONSTRUCT_TAGID(PREDICTOR , _ID_PREDICTOR )
1920#define EXIFTAGTYPE_PREDICTOR               EXIF_SHORT
1921// White point chromaticity
1922// Use EXIFTAGTYPE_WHITE_POINT as the exif_tag_type (EXIF_RATIONAL)
1923// Count should be 2
1924#define _ID_WHITE_POINT                     0x013e
1925#define EXIFTAGID_WHITE_POINT               CONSTRUCT_TAGID(WHITE_POINT, _ID_WHITE_POINT)
1926#define EXIFTAGTYPE_WHITE_POINT             EXIF_RATIONAL
1927// Chromaticities of primaries
1928// Use EXIFTAGTYPE_PRIMARY_CHROMATICITIES as the exif_tag_type (EXIF_RATIONAL)
1929// Count should be 6
1930#define _ID_PRIMARY_CHROMATICITIES                    0x013f
1931#define EXIFTAGID_PRIMARY_CHROMATICITIES              CONSTRUCT_TAGID(PRIMARY_CHROMATICITIES, _ID_PRIMARY_CHROMATICITIES)
1932#define EXIFTAGTYPE_PRIMARY_CHROMATICITIES            EXIF_RATIONAL
1933
1934// COLOR_MAP
1935// Use EXIFTAGTYPE_COLOR_MAP as the exif_tag_type (EXIF_SHORT)
1936// Count should be 6
1937#define _ID_COLOR_MAP                       0x0140
1938#define EXIFTAGID_COLOR_MAP                 CONSTRUCT_TAGID(COLOR_MAP, _ID_COLOR_MAP)
1939#define EXIFTAGTYPE_COLOR_MAP               EXIF_SHORT
1940// HALFTONE_HINTS
1941// Use EXIFTAGTYPE_HALFTONE_HINTS as the exif_tag_type (EXIF_SHORT)
1942// Count should be 6
1943#define _ID_HALFTONE_HINTS                  0x0141
1944#define EXIFTAGID_HALFTONE_HINTS            CONSTRUCT_TAGID(HALFTONE_HINTS, _ID_HALFTONE_HINTS)
1945#define EXIFTAGTYPE_HALFTONE_HINTS          EXIF_SHORT
1946
1947// TILE_WIDTH
1948// Use EXIFTAGTYPE_TILE_WIDTH as the exif_tag_type (EXIF_LONG)
1949// Count should be 6
1950#define _ID_TILE_WIDTH                      0x0142
1951#define EXIFTAGID_TILE_WIDTH                CONSTRUCT_TAGID(TILE_WIDTH, _ID_TILE_WIDTH)
1952#define EXIFTAGTYPE_TILE_WIDTH              EXIF_LONG
1953// TILE_LENGTH
1954// Use EXIFTAGTYPE_TILE_LENGTH  as the exif_tag_type (EXIF_LONG)
1955// Count should be 6
1956#define _ID_TILE_LENGTH                     0x0143
1957#define EXIFTAGID_TILE_LENGTH               CONSTRUCT_TAGID(TILE_LENGTH , _ID_TILE_LENGTH )
1958#define EXIFTAGTYPE_TILE_LENGTH             EXIF_LONG
1959// TILE_OFFSET
1960// Use EXIFTAGTYPE_TILE_OFFSET as the exif_tag_type (EXIF_LONG)
1961//
1962#define _ID_TILE_OFFSET                     0x0144
1963#define EXIFTAGID_TILE_OFFSET               CONSTRUCT_TAGID(TILE_OFFSET , _ID_TILE_OFFSET )
1964#define EXIFTAGTYPE_TILE_OFFSET             EXIF_LONG
1965// tile Byte Counts
1966// Use EXIFTAGTYPE_TILE_OFFSET as the exif_tag_type (EXIF_LONG)
1967//
1968#define _ID_TILE_BYTE_COUNTS                0x0145
1969#define EXIFTAGID_TILE_BYTE_COUNTS          CONSTRUCT_TAGID(TILE_BYTE_COUNTS  , _ID_TILE_BYTE_COUNTS  )
1970#define EXIFTAGTYPE_TILE_BYTE_COUNTS        EXIF_LONG
1971
1972// INK_SET
1973// Use EXIFTAGTYPE_TILE_LENGTH  as the exif_tag_type (EXIF_SHORT)
1974// Count should be 6
1975#define _ID_INK_SET                         0x014c
1976#define EXIFTAGID_INK_SET                   CONSTRUCT_TAGID(INK_SET , _ID_INK_SET )
1977#define EXIFTAGTYPE_INK_SET                 EXIF_SHORT
1978// INK_NAMES
1979// Use EXIFTAGTYPE_INK_NAMES  as the exif_tag_type (EXIF_ASCII)
1980// Count should be 6
1981#define _ID_INK_NAMES                       0x014D
1982#define EXIFTAGID_INK_NAMES                 CONSTRUCT_TAGID(INK_NAMES , _ID_INK_NAMES)
1983#define EXIFTAGTYPE_INK_NAMES               EXIF_ASCII
1984// NUMBER_OF_INKS
1985// Use EXIFTAGTYPE_NUMBER_OF_INKS  as the exif_tag_type (EXIF_SHORT)
1986// Count should be 6
1987#define _ID_NUMBER_OF_INKS                  0x014e
1988#define EXIFTAGID_NUMBER_OF_INKS            CONSTRUCT_TAGID(NUMBER_OF_INKS , _ID_NUMBER_OF_INKS )
1989#define EXIFTAGTYPE_NUMBER_OF_INKS          EXIF_SHORT
1990
1991// DOT_RANGE
1992// Use EXIFTAGTYPE_DOT_RANGE  as the exif_tag_type (EXIF_ASCII)
1993// Count should be 6
1994#define _ID_DOT_RANGE                       0x0150
1995#define EXIFTAGID_DOT_RANGE                 CONSTRUCT_TAGID(DOT_RANGE , _ID_DOT_RANGE )
1996#define EXIFTAGTYPE_DOT_RANGE               EXIF_ASCII
1997
1998// TARGET_PRINTER
1999// Use EXIFTAGTYPE_TARGET_PRINTER  as the exif_tag_type (EXIF_ASCII)
2000// Count should be 6
2001#define _ID_TARGET_PRINTER                  0x0151
2002#define EXIFTAGID_TARGET_PRINTER            CONSTRUCT_TAGID(TARGET_PRINTER , _ID_TARGET_PRINTER)
2003#define EXIFTAGTYPE_TARGET_PRINTER          EXIF_ASCII
2004// EXTRA_SAMPLES
2005// Use EXIFTAGTYPE_EXTRA_SAMPLES as the exif_tag_type (EXIF_SHORT)
2006// Count should be 6
2007#define _ID_EXTRA_SAMPLES                   0x0152
2008#define EXIFTAGID_EXTRA_SAMPLES             CONSTRUCT_TAGID(EXTRA_SAMPLES , _ID_EXTRA_SAMPLES )
2009#define EXIFTAGTYPE_EXTRA_SAMPLES           EXIF_SHORT
2010
2011// SAMPLE_FORMAT
2012// Use EXIFTAGTYPE_SAMPLE_FORMAT  as the exif_tag_type (EXIF_SHORT)
2013// Count should be 6
2014#define _ID_SAMPLE_FORMAT                   0x0153
2015#define EXIFTAGID_SAMPLE_FORMAT             CONSTRUCT_TAGID(SAMPLE_FORMAT , _ID_SAMPLE_FORMAT )
2016#define EXIFTAGTYPE_SAMPLE_FORMAT           EXIF_SHORT
2017
2018// Table of values that extends the range of the transfer function.
2019// Use EXIFTAGTYPE_TRANSFER_RANGE as the exif_tag_type (EXIF_SHORT)
2020// Count should be 6
2021#define _ID_TRANSFER_RANGE                  0x0156
2022#define EXIFTAGID_TRANSFER_RANGE            CONSTRUCT_TAGID(TRANSFER_RANGE , _ID_TRANSFER_RANGE )
2023#define EXIFTAGTYPE_TRANSFER_RANGE          EXIF_SHORT
2024
2025// JPEG compression process.
2026// Use EXIFTAGTYPE_JPEG_PROC as the exif_tag_type (EXIF_SHORT)
2027//
2028#define _ID_JPEG_PROC                       0x0200
2029#define EXIFTAGID_JPEG_PROC                 CONSTRUCT_TAGID(JPEG_PROC , _ID_JPEG_PROC )
2030#define EXIFTAGTYPE_JPEG_PROC               EXIF_SHORT
2031
2032
2033// Offset to JPEG SOI
2034// Use EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT as the exif_tag_type (EXIF_LONG)
2035// Count is undefined
2036#define _ID_JPEG_INTERCHANGE_FORMAT                   0x0201
2037#define EXIFTAGID_JPEG_INTERCHANGE_FORMAT             CONSTRUCT_TAGID(JPEG_INTERCHANGE_FORMAT, _ID_JPEG_INTERCHANGE_FORMAT)
2038#define EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT           EXIF_LONG
2039// Bytes of JPEG data
2040// Use EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT_LENGTH as the exif_tag_type (EXIF_LONG)
2041// Count is undefined
2042#define _ID_JPEG_INTERCHANGE_FORMAT_LENGTH            0x0202
2043#define EXIFTAGID_JPEG_INTERCHANGE_FORMAT_LENGTH      CONSTRUCT_TAGID(JPEG_INTERCHANGE_FORMAT_LENGTH, _ID_JPEG_INTERCHANGE_FORMAT_LENGTH)
2044#define EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT_LENGTH    EXIF_LONG
2045
2046// Length of the restart interval.
2047// Use EXIFTAGTYPE_JPEG_RESTART_INTERVAL as the exif_tag_type (EXIF_SHORT)
2048// Count is undefined
2049#define _ID_JPEG_RESTART_INTERVAL           0x0203
2050#define EXIFTAGID_JPEG_RESTART_INTERVAL     CONSTRUCT_TAGID(JPEG_RESTART_INTERVAL, _ID_JPEG_RESTART_INTERVAL)
2051#define EXIFTAGTYPE_JPEG_RESTART_INTERVAL   EXIF_SHORT
2052
2053// JPEGLosslessPredictors
2054// Use EXIFTAGTYPE_JPEG_LOSSLESS_PREDICTORS as the exif_tag_type (EXIF_SHORT)
2055// Count is undefined
2056#define _ID_JPEG_LOSSLESS_PREDICTORS                  0x0205
2057#define EXIFTAGID_JPEG_LOSSLESS_PREDICTORS            CONSTRUCT_TAGID(JPEG_LOSSLESS_PREDICTORS, _ID_JPEG_LOSSLESS_PREDICTORS)
2058#define EXIFTAGTYPE_JPEG_LOSSLESS_PREDICTORS          EXIF_SHORT
2059
2060// JPEGPointTransforms
2061// Use EXIFTAGTYPE_JPEG_POINT_TRANSFORMS as the exif_tag_type (EXIF_SHORT)
2062// Count is undefined
2063#define _ID_JPEG_POINT_TRANSFORMS           0x0206
2064#define EXIFTAGID_JPEG_POINT_TRANSFORMS     CONSTRUCT_TAGID(JPEG_POINT_TRANSFORMS, _ID_JPEG_POINT_TRANSFORMS)
2065#define EXIFTAGTYPE_JPEG_POINT_TRANSFORMS   EXIF_SHORT
2066
2067// JPEG_Q_TABLES
2068// Use EXIFTAGTYPE_JPEG_Q_TABLES as the exif_tag_type (EXIF_LONG)
2069// Count is undefined
2070#define _ID_JPEG_Q_TABLES                   0x0207
2071#define EXIFTAGID_JPEG_Q_TABLES             CONSTRUCT_TAGID(JPEG_Q_TABLES, _ID_JPEG_Q_TABLES)
2072#define EXIFTAGTYPE_JPEG_Q_TABLES           EXIF_LONG
2073// JPEG_DC_TABLES
2074// Use EXIFTAGTYPE_JPEG_DC_TABLES as the exif_tag_type (EXIF_LONG)
2075// Count is undefined
2076#define _ID_JPEG_DC_TABLES                  0x0208
2077#define EXIFTAGID_JPEG_DC_TABLES            CONSTRUCT_TAGID(JPEG_DC_TABLES, _ID_JPEG_DC_TABLES)
2078#define EXIFTAGTYPE_JPEG_DC_TABLES          EXIF_LONG
2079// JPEG_AC_TABLES
2080// Use EXIFTAGTYPE_JPEG_AC_TABLES as the exif_tag_type (EXIF_LONG)
2081// Count is undefined
2082#define _ID_JPEG_AC_TABLES                  0x0209
2083#define EXIFTAGID_JPEG_AC_TABLES            CONSTRUCT_TAGID(JPEG_AC_TABLES, _ID_JPEG_AC_TABLES)
2084#define EXIFTAGTYPE_JPEG_AC_TABLES          EXIF_LONG
2085
2086// Color space transformation matrix coefficients
2087// Use EXIFTAGTYPE_YCBCR_COEFFICIENTS as the exif_tag_type (EXIF_RATIONAL)
2088// Count should be 3
2089#define _ID_YCBCR_COEFFICIENTS              0x0211
2090#define EXIFTAGID_YCBCR_COEFFICIENTS        CONSTRUCT_TAGID(YCBCR_COEFFICIENTS, _ID_YCBCR_COEFFICIENTS)
2091#define EXIFTAGTYPE_YCBCR_COEFFICIENTS      EXIF_RATIONAL
2092// Subsampling ratio of Y to C
2093// Use EXIFTAGTYPE_YCBCR_SUB_SAMPLING as the exif_tag_type (EXIF_SHORT)
2094// Count should be 2
2095#define _ID_YCBCR_SUB_SAMPLING              0x0212
2096#define EXIFTAGID_YCBCR_SUB_SAMPLING        CONSTRUCT_TAGID(YCBCR_SUB_SAMPLING, _ID_YCBCR_SUB_SAMPLING)
2097#define EXIFTAGTYPE_YCBCR_SUB_SAMPLING      EXIF_SHORT
2098// Y and C positioning
2099// Use EXIFTAGTYPE_YCBCR_POSITIONING as the exif_tag_type (EXIF_SHORT)
2100// Count should be 1
2101#define _ID_YCBCR_POSITIONING               0x0213
2102#define EXIFTAGID_YCBCR_POSITIONING         CONSTRUCT_TAGID(YCBCR_POSITIONING, _ID_YCBCR_POSITIONING)
2103#define EXIFTAGTYPE_YCBCR_POSITIONING       EXIF_SHORT
2104// Pair of black and white reference values
2105// Use EXIFTAGTYPE_REFERENCE_BLACK_WHITE as the exif_tag_type (EXIF_RATIONAL)
2106// Count should be 6
2107#define _ID_REFERENCE_BLACK_WHITE           0x0214
2108#define EXIFTAGID_REFERENCE_BLACK_WHITE     CONSTRUCT_TAGID(REFERENCE_BLACK_WHITE, _ID_REFERENCE_BLACK_WHITE)
2109#define EXIFTAGTYPE_REFERENCE_BLACK_WHITE   EXIF_RATIONAL
2110// GAMMA
2111// Use EXIFTAGTYPE_GAMMA as the exif_tag_type (EXIF_RATIONAL)
2112// Count should be 6
2113#define _ID_GAMMA                           0x0301
2114#define EXIFTAGID_GAMMA                     CONSTRUCT_TAGID(GAMMA, _ID_GAMMA)
2115#define EXIFTAGTYPE_GAMMA                   EXIF_RATIONAL
2116// Null-terminated character string that identifies an ICC profile.
2117// Use EXIFTAGTYPE_ICC_PROFILE_DESCRIPTOR as the exif_tag_type (EXIF_ASCII)
2118// Count should be 6
2119#define _ID_ICC_PROFILE_DESCRIPTOR          0x0302
2120#define EXIFTAGID_ICC_PROFILE_DESCRIPTOR    CONSTRUCT_TAGID(ICC_PROFILE_DESCRIPTOR, _ID_ICC_PROFILE_DESCRIPTOR)
2121#define EXIFTAGTYPE_ICC_PROFILE_DESCRIPTOR  EXIF_ASCII
2122// SRGB_RENDERING_INTENT
2123// Use EXIFTAGTYPE_SRGB_RENDERING_INTENT as the exif_tag_type (EXIF_BYTE)
2124// Count should be 6
2125#define _ID_SRGB_RENDERING_INTENT           0x0303
2126#define EXIFTAGID_SRGB_RENDERING_INTENT     CONSTRUCT_TAGID(SRGB_RENDERING_INTENT, _ID_SRGB_RENDERING_INTENT)
2127#define EXIFTAGTYPE_SRGB_RENDERING_INTENT   EXIF_BYTE
2128
2129// Null-terminated character string that specifies the title of the image.
2130// Use EXIFTAGTYPE_IMAGE_TITLE as the exif_tag_type (EXIF_ASCII		)
2131//
2132#define _ID_IMAGE_TITLE                     0x0320
2133#define EXIFTAGID_IMAGE_TITLE               CONSTRUCT_TAGID(IMAGE_TITLE, _ID_IMAGE_TITLE)
2134#define EXIFTAGTYPE_IMAGE_TITLE             EXIF_ASCII
2135
2136// Copyright holder
2137// Use EXIFTAGTYPE_COPYRIGHT as the exif_tag_type (EXIF_ASCII)
2138// Count can be any
2139#define _ID_COPYRIGHT                       0x8298
2140#define EXIFTAGID_COPYRIGHT                 CONSTRUCT_TAGID(COPYRIGHT, _ID_COPYRIGHT)
2141#define EXIFTAGTYPE_COPYRIGHT               EXIF_ASCII
2142// Old Subfile Type
2143// Use EXIFTAGTYPE_NEW_SUBFILE_TYPE as the exif_tag_type (EXIF_SHORT)
2144// Count can be any
2145#define _ID_NEW_SUBFILE_TYPE                0x00fe
2146#define EXIFTAGID_NEW_SUBFILE_TYPE          CONSTRUCT_TAGID(NEW_SUBFILE_TYPE, _ID_NEW_SUBFILE_TYPE)
2147#define EXIFTAGTYPE_NEW_SUBFILE_TYPE        EXIF_SHORT
2148
2149// New Subfile Type
2150// Use EXIFTAGTYPE_NEW_SUBFILE_TYPE as the exif_tag_type (EXIF_LONG)
2151// Count can be any
2152#define _ID_SUBFILE_TYPE                    0x00ff
2153#define EXIFTAGID_SUBFILE_TYPE              CONSTRUCT_TAGID(SUBFILE_TYPE, _ID_SUBFILE_TYPE)
2154#define EXIFTAGTYPE_SUBFILE_TYPE            EXIF_LONG
2155
2156// Image width (of thumbnail)
2157// Use EXIFTAGTYPE_TN_IMAGE_WIDTH as the exif_tag_type (EXIF_LONG)
2158// Count should be 1
2159#define _ID_TN_IMAGE_WIDTH                  0x0100
2160#define EXIFTAGID_TN_IMAGE_WIDTH            CONSTRUCT_TAGID(TN_IMAGE_WIDTH, _ID_TN_IMAGE_WIDTH)
2161#define EXIFTAGTYPE_TN_IMAGE_WIDTH          EXIF_LONG
2162// Image height (of thumbnail)
2163// Use EXIFTAGTYPE_TN_IMAGE_LENGTH as the exif_tag_type (EXIF_SHORT_OR_LONG)
2164// Count should be 1
2165#define _ID_TN_IMAGE_LENGTH                 0x0101
2166#define EXIFTAGID_TN_IMAGE_LENGTH           CONSTRUCT_TAGID(TN_IMAGE_LENGTH, _ID_TN_IMAGE_LENGTH)
2167#define EXIFTAGTYPE_TN_IMAGE_LENGTH         EXIF_LONG
2168// Number of bits per component (of thumbnail)
2169// Use EXIFTAGTYPE_TN_BITS_PER_SAMPLE as the exif_tag_type (EXIF_SHORT)
2170// Count should be 1
2171#define _ID_TN_BITS_PER_SAMPLE              0x0102
2172#define EXIFTAGID_TN_BITS_PER_SAMPLE        CONSTRUCT_TAGID(TN_BITS_PER_SAMPLE, _ID_TN_BITS_PER_SAMPLE)
2173#define EXIFTAGTYPE_TN_BITS_PER_SAMPLE      EXIF_SHORT
2174// Compression scheme (of thumbnail)
2175// Use EXIFTAGTYPE_TN_COMPRESSION as the exif_tag_type (EXIF_SHORT)
2176// Count should be 1
2177#define _ID_TN_COMPRESSION                  0x0103
2178#define EXIFTAGID_TN_COMPRESSION            CONSTRUCT_TAGID(TN_COMPRESSION, _ID_TN_COMPRESSION)
2179#define EXIFTAGTYPE_TN_COMPRESSION          EXIF_SHORT
2180// Pixel composition (of thumbnail)
2181// Use EXIFTAGTYPE_TN_PHOTOMETRIC_INTERPRETATION as the exif_tag_type (EXIF_SHORT)
2182// Count should be 1
2183#define _ID_TN_PHOTOMETRIC_INTERPRETATION         0x0106
2184#define EXIFTAGID_TN_PHOTOMETRIC_INTERPRETATION   CONSTRUCT_TAGID(TN_PHOTOMETRIC_INTERPRETATION, _ID_TN_PHOTOMETRIC_INTERPRETATION)
2185#define EXIFTAGTYPE_TN_PHOTOMETRIC_INTERPRETATION EXIF_SHORT
2186// Image title (of thumbnail)
2187// Use EXIFTAGTYPE_TN_IMAGE_DESCRIPTION as the exif_tag_type (EXIF_ASCII)
2188// Count can be any
2189#define _ID_TN_IMAGE_DESCRIPTION            0x010e
2190#define EXIFTAGID_TN_IMAGE_DESCRIPTION      CONSTRUCT_TAGID(TN_IMAGE_DESCRIPTION, _ID_TN_IMAGE_DESCRIPTION)
2191#define EXIFTAGTYPE_TN_IMAGE_DESCRIPTION    EXIF_ASCII
2192// Image input equipment manufacturer (of thumbnail)
2193// Use EXIFTAGTYPE_TN_MAKE as the exif_tag_type (EXIF_ASCII)
2194// Count can be any
2195#define _ID_TN_MAKE                         0x010f
2196#define EXIFTAGID_TN_MAKE                   CONSTRUCT_TAGID(TN_MAKE, _ID_TN_MAKE)
2197#define EXIFTAGTYPE_TN_MAKE                 EXIF_ASCII
2198// Image input equipment model (of thumbnail)
2199// Use EXIFTAGTYPE_TN_MODEL as the exif_tag_type (EXIF_ASCII)
2200// Count can be any
2201#define _ID_TN_MODEL                        0x0110
2202#define EXIFTAGID_TN_MODEL                  CONSTRUCT_TAGID(TN_MODEL, _ID_TN_MODEL)
2203#define EXIFTAGTYPE_TN_MODEL                EXIF_ASCII
2204// Image data location (of thumbnail)
2205// Use EXIFTAGTYPE_TN_STRIP_OFFSETS as the exif_tag_type (EXIF_LONG)
2206// Count = StripsPerImage                    when PlanarConfiguration = 1
2207//       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
2208#define _ID_TN_STRIP_OFFSETS                0x0111
2209#define EXIFTAGID_TN_STRIP_OFFSETS          CONSTRUCT_TAGID(STRIP_TN_OFFSETS, _ID_TN_STRIP_OFFSETS)
2210#define EXIFTAGTYPE_TN_STRIP_OFFSETS        EXIF_LONG
2211// Orientation of image (of thumbnail)
2212// Use EXIFTAGTYPE_TN_ORIENTATION as the exif_tag_type (EXIF_SHORT)
2213// Count should be 1
2214#define _ID_TN_ORIENTATION                  0x0112
2215#define EXIFTAGID_TN_ORIENTATION            CONSTRUCT_TAGID(TN_ORIENTATION, _ID_TN_ORIENTATION)
2216#define EXIFTAGTYPE_TN_ORIENTATION          EXIF_SHORT
2217// Number of components (of thumbnail)
2218// Use EXIFTAGTYPE_TN_SAMPLES_PER_PIXEL as the exif_tag_type (EXIF_SHORT)
2219// Count should be 1
2220#define _ID_TN_SAMPLES_PER_PIXEL            0x0115
2221#define EXIFTAGID_TN_SAMPLES_PER_PIXEL      CONSTRUCT_TAGID(TN_SAMPLES_PER_PIXEL, _ID_TN_SAMPLES_PER_PIXEL)
2222#define EXIFTAGTYPE_TN_SAMPLES_PER_PIXEL    EXIF_SHORT
2223// Number of rows per strip (of thumbnail)
2224// Use EXIFTAGTYPE_TN_ROWS_PER_STRIP as the exif_tag_type (EXIF_LONG)
2225// Count should be 1
2226#define _ID_TN_ROWS_PER_STRIP               0x0116
2227#define EXIFTAGID_TN_ROWS_PER_STRIP         CONSTRUCT_TAGID(TN_ROWS_PER_STRIP, _ID_TN_ROWS_PER_STRIP)
2228#define EXIFTAGTYPE_TN_ROWS_PER_STRIP       EXIF_LONG
2229// Bytes per compressed strip (of thumbnail)
2230// Use EXIFTAGTYPE_TN_STRIP_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
2231// Count = StripsPerImage                    when PlanarConfiguration = 1
2232//       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
2233#define _ID_TN_STRIP_BYTE_COUNTS            0x0117
2234#define EXIFTAGID_TN_STRIP_BYTE_COUNTS      CONSTRUCT_TAGID(TN_STRIP_BYTE_COUNTS, _ID_TN_STRIP_BYTE_COUNTS)
2235#define EXIFTAGTYPE_TN_STRIP_BYTE_COUNTS    EXIF_LONG
2236// Image resolution in width direction (of thumbnail)
2237// Use EXIFTAGTYPE_TN_X_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
2238// Count should be 1
2239#define _ID_TN_X_RESOLUTION                 0x011a
2240#define EXIFTAGID_TN_X_RESOLUTION           CONSTRUCT_TAGID(TN_X_RESOLUTION, _ID_TN_X_RESOLUTION)
2241#define EXIFTAGTYPE_TN_X_RESOLUTION         EXIF_RATIONAL
2242// Image resolution in height direction  (of thumbnail)
2243// Use EXIFTAGTYPE_TN_Y_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
2244// Count should be 1
2245#define _ID_TN_Y_RESOLUTION                 0x011b
2246#define EXIFTAGID_TN_Y_RESOLUTION           CONSTRUCT_TAGID(TN_Y_RESOLUTION, _ID_TN_Y_RESOLUTION)
2247#define EXIFTAGTYPE_TN_Y_RESOLUTION         EXIF_RATIONAL
2248// Image data arrangement (of thumbnail)
2249// Use EXIFTAGTYPE_TN_PLANAR_CONFIGURATION as the exif_tag_type (EXIF_SHORT)
2250// Count should be 1
2251#define _ID_TN_PLANAR_CONFIGURATION         0x011c
2252#define EXIFTAGID_TN_PLANAR_CONFIGURATION   CONSTRUCT_TAGID(TN_PLANAR_CONFIGURATION, _ID_TN_PLANAR_CONFIGURATION)
2253#define EXIFTAGTYPE_TN_PLANAR_CONFIGURATION EXIF_SHORT
2254// Unit of X and Y resolution (of thumbnail)
2255// Use EXIFTAGTYPE_TN_RESOLUTION_UNIT as the exif_tag_type (EXIF_SHORT)
2256// Count should be 1
2257#define _ID_TN_RESOLUTION_UNIT              0x128
2258#define EXIFTAGID_TN_RESOLUTION_UNIT        CONSTRUCT_TAGID(TN_RESOLUTION_UNIT, _ID_TN_RESOLUTION_UNIT)
2259#define EXIFTAGTYPE_TN_RESOLUTION_UNIT      EXIF_SHORT
2260// Transfer function (of thumbnail)
2261// Use EXIFTAGTYPE_TN_TRANSFER_FUNCTION as the exif_tag_type (EXIF_SHORT)
2262// Count should be 3*256
2263#define _ID_TN_TRANSFER_FUNCTION            0x012d
2264#define EXIFTAGID_TN_TRANSFER_FUNCTION      CONSTRUCT_TAGID(TN_TRANSFER_FUNCTION, _ID_TN_TRANSFER_FUNCTION)
2265#define EXIFTAGTYPE_TN_TRANSFER_FUNCTION    EXIF_SHORT
2266// Software used (of thumbnail)
2267// Use EXIFTAGTYPE_TN_SOFTWARE as the exif_tag_type (EXIF_ASCII)
2268// Count can be any
2269#define _ID_TN_SOFTWARE                     0x0131
2270#define EXIFTAGID_TN_SOFTWARE               CONSTRUCT_TAGID(TN_SOFTWARE, _ID_TN_SOFTWARE)
2271#define EXIFTAGTYPE_TN_SOFTWARE             EXIF_ASCII
2272// File change date and time (of thumbnail)
2273// Use EXIFTAGTYPE_TN_DATE_TIME as the exif_tag_type (EXIF_ASCII)
2274// Count should be 20
2275#define _ID_TN_DATE_TIME                    0x0132
2276#define EXIFTAGID_TN_DATE_TIME              CONSTRUCT_TAGID(TN_DATE_TIME, _ID_TN_DATE_TIME)
2277#define EXIFTAGTYPE_TN_DATE_TIME            EXIF_ASCII
2278// ARTIST, person who created this image (of thumbnail)
2279// Use EXIFTAGTYPE_TN_ARTIST as the exif_tag_type (EXIF_ASCII)
2280// Count can be any
2281#define _ID_TN_ARTIST                       0x013b
2282#define EXIFTAGID_TN_ARTIST                 CONSTRUCT_TAGID(TN_ARTIST, _ID_TN_ARTIST)
2283#define EXIFTAGTYPE_TN_ARTIST               EXIF_ASCII
2284// White point chromaticity (of thumbnail)
2285// Use EXIFTAGTYPE_TN_WHITE_POINT as the exif_tag_type (EXIF_RATIONAL)
2286// Count should be 2
2287#define _ID_TN_WHITE_POINT                  0x013e
2288#define EXIFTAGID_TN_WHITE_POINT            CONSTRUCT_TAGID(TN_WHITE_POINT, _ID_TN_WHITE_POINT)
2289#define EXIFTAGTYPE_TN_WHITE_POINT          EXIF_RATIONAL
2290// Chromaticities of primaries (of thumbnail)
2291// Use EXIFTAGTYPE_TN_PRIMARY_CHROMATICITIES as the exif_tag_type (EXIF_RATIONAL)
2292// Count should be 6
2293#define _ID_TN_PRIMARY_CHROMATICITIES            0x013f
2294#define EXIFTAGID_TN_PRIMARY_CHROMATICITIES      CONSTRUCT_TAGID(TN_PRIMARY_CHROMATICITIES, _ID_TN_PRIMARY_CHROMATICITIES)
2295#define EXIFTAGTYPE_TN_PRIMARY_CHROMATICITIES    EXIF_RATIONAL
2296// Offset to JPEG SOI (of thumbnail)
2297// Use EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT as the exif_tag_type (EXIF_LONG)
2298// Count is undefined
2299#define _ID_TN_JPEGINTERCHANGE_FORMAT            0x0201
2300#define EXIFTAGID_TN_JPEGINTERCHANGE_FORMAT      CONSTRUCT_TAGID(TN_JPEGINTERCHANGE_FORMAT, _ID_TN_JPEGINTERCHANGE_FORMAT)
2301#define EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT    EXIF_LONG
2302// Bytes of JPEG data (of thumbnail)
2303// Use EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT_L as the exif_tag_type (EXIF_LONG)
2304// Count is undefined
2305#define _ID_TN_JPEGINTERCHANGE_FORMAT_L          0x0202
2306#define EXIFTAGID_TN_JPEGINTERCHANGE_FORMAT_L    CONSTRUCT_TAGID(TN_JPEGINTERCHANGE_FORMAT_L, _ID_TN_JPEGINTERCHANGE_FORMAT_L)
2307#define EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT_L  EXIF_LONG
2308// Color space transformation matrix coefficients (of thumbnail)
2309// Use EXIFTAGTYPE_TN_YCBCR_COEFFICIENTS as the exif_tag_type (EXIF_RATIONAL)
2310// Count should be 3
2311#define _ID_TN_YCBCR_COEFFICIENTS           0x0211
2312#define EXIFTAGID_TN_YCBCR_COEFFICIENTS     CONSTRUCT_TAGID(TN_YCBCR_COEFFICIENTS, _ID_TN_YCBCR_COEFFICIENTS)
2313#define EXIFTAGTYPE_TN_YCBCR_COEFFICIENTS   EXIF_RATIONAL
2314// Subsampling ratio of Y to C (of thumbnail)
2315// Use EXIFTAGTYPE_TN_YCBCR_SUB_SAMPLING as the exif_tag_type (EXIF_SHORT)
2316// Count should be 2
2317#define _ID_TN_YCBCR_SUB_SAMPLING           0x0212
2318#define EXIFTAGID_TN_YCBCR_SUB_SAMPLING     CONSTRUCT_TAGID(TN_YCBCR_SUB_SAMPLING, _ID_TN_YCBCR_SUB_SAMPLING)
2319#define EXIFTAGTYPE_TN_YCBCR_SUB_SAMPLING   EXIF_SHORT
2320// Y and C positioning (of thumbnail)
2321// Use EXIFTAGTYPE_TN_YCBCR_POSITIONING as the exif_tag_type (EXIF_SHORT)
2322// Count should be 1
2323#define _ID_TN_YCBCR_POSITIONING            0x0213
2324#define EXIFTAGID_TN_YCBCR_POSITIONING      CONSTRUCT_TAGID(TN_YCBCR_POSITIONING, _ID_TN_YCBCR_POSITIONING)
2325#define EXIFTAGTYPE_TN_YCBCR_POSITIONING    EXIF_SHORT
2326// Pair of black and white reference values (of thumbnail)
2327// Use EXIFTAGTYPE_TN_REFERENCE_BLACK_WHITE as the exif_tag_type (EXIF_RATIONAL)
2328// Count should be 6
2329#define _ID_TN_REFERENCE_BLACK_WHITE          0x0214
2330#define EXIFTAGID_TN_REFERENCE_BLACK_WHITE    CONSTRUCT_TAGID(TN_REFERENCE_BLACK_WHITE, _ID_TN_REFERENCE_BLACK_WHITE)
2331#define EXIFTAGTYPE_TN_REFERENCE_BLACK_WHITE  EXIF_RATIONAL
2332// Copyright holder (of thumbnail)
2333// Use EXIFTAGTYPE_TN_COPYRIGHT as the exif_tag_type (EXIF_ASCII)
2334// Count can be any
2335#define _ID_TN_COPYRIGHT                    0x8298
2336#define EXIFTAGID_TN_COPYRIGHT              CONSTRUCT_TAGID(TN_COPYRIGHT, _ID_TN_COPYRIGHT)
2337#define EXIFTAGTYPE_TN_COPYRIGHT            EXIF_ASCII
2338// Exposure time
2339// Use EXIFTAGTYPE_EXPOSURE_TIME as the exif_tag_type (EXIF_RATIONAL)
2340// Count should be 1
2341#define _ID_EXPOSURE_TIME                   0x829a
2342#define EXIFTAGID_EXPOSURE_TIME             CONSTRUCT_TAGID(EXPOSURE_TIME, _ID_EXPOSURE_TIME)
2343#define EXIFTAGTYPE_EXPOSURE_TIME           EXIF_RATIONAL
2344// F number
2345// Use EXIFTAGTYPE_F_NUMBER as the exif_tag_type (EXIF_RATIONAL)
2346// Count should be 1
2347#define _ID_F_NUMBER                        0x829d
2348#define EXIFTAGID_F_NUMBER                  CONSTRUCT_TAGID(F_NUMBER, _ID_F_NUMBER)
2349#define EXIFTAGTYPE_F_NUMBER                EXIF_RATIONAL
2350// Exif IFD pointer (NOT INTENDED to be accessible to user)
2351#define _ID_EXIF_IFD_PTR                    0x8769
2352#define EXIFTAGID_EXIF_IFD_PTR              CONSTRUCT_TAGID(EXIF_IFD, _ID_EXIF_IFD_PTR)
2353#define EXIFTAGTYPE_EXIF_IFD_PTR            EXIF_LONG
2354
2355// ICC_PROFILE (NOT INTENDED to be accessible to user)
2356#define _ID_ICC_PROFILE                     0x8773
2357#define EXIFTAGID_ICC_PROFILE               CONSTRUCT_TAGID(ICC_PROFILE, _ID_ICC_PROFILE)
2358#define EXIFTAGTYPE_ICC_PROFILE             EXIF_LONG
2359// Exposure program
2360// Use EXIFTAGTYPE_EXPOSURE_PROGRAM as the exif_tag_type (EXIF_SHORT)
2361// Count should be 1
2362#define _ID_EXPOSURE_PROGRAM                0x8822
2363#define EXIFTAGID_EXPOSURE_PROGRAM          CONSTRUCT_TAGID(EXPOSURE_PROGRAM, _ID_EXPOSURE_PROGRAM)
2364#define EXIFTAGTYPE_EXPOSURE_PROGRAM        EXIF_SHORT
2365// Spectral sensitivity
2366// Use EXIFTAGTYPE_SPECTRAL_SENSITIVITY as the exif_tag_type (EXIF_ASCII)
2367// Count can be any
2368#define _ID_SPECTRAL_SENSITIVITY            0x8824
2369#define EXIFTAGID_SPECTRAL_SENSITIVITY      CONSTRUCT_TAGID(SPECTRAL_SENSITIVITY, _ID_SPECTRAL_SENSITIVITY)
2370#define EXIFTAGTYPE_SPECTRAL_SENSITIVITY    EXIF_ASCII
2371// GPS IFD pointer (NOT INTENDED to be accessible to user)
2372#define _ID_GPS_IFD_PTR                     0x8825
2373#define EXIFTAGID_GPS_IFD_PTR               CONSTRUCT_TAGID(GPS_IFD, _ID_GPS_IFD_PTR)
2374#define EXIFTAGTYPE_GPS_IFD_PTR             EXIF_LONG
2375// ISO Speed Rating
2376// Use EXIFTAGTYPE_ISO_SPEED_RATING as the exif_tag_type (EXIF_SHORT)
2377// Count can be any
2378#define _ID_ISO_SPEED_RATING                0x8827
2379#define EXIFTAGID_ISO_SPEED_RATING          CONSTRUCT_TAGID(ISO_SPEED_RATING, _ID_ISO_SPEED_RATING)
2380#define EXIFTAGTYPE_ISO_SPEED_RATING        EXIF_SHORT
2381// Optoelectric conversion factor
2382// Use EXIFTAGTYPE_OECF as the exif_tag_type (EXIF_UNDEFINED)
2383// Count can be any
2384#define _ID_OECF                            0x8828
2385#define EXIFTAGID_OECF                      CONSTRUCT_TAGID(OECF, _ID_OECF)
2386#define EXIFTAGTYPE_OECF                    EXIF_UNDEFINED
2387// Exif version
2388// Use EXIFTAGTYPE_EXIF_VERSION as the exif_tag_type (EXIF_UNDEFINED)
2389// Count should be 4
2390#define _ID_EXIF_VERSION                    0x9000
2391#define EXIFTAGID_EXIF_VERSION              CONSTRUCT_TAGID(EXIF_VERSION, _ID_EXIF_VERSION)
2392#define EXIFTAGTYPE_EXIF_VERSION            EXIF_UNDEFINED
2393// Date and time of original data gerneration
2394// Use EXIFTAGTYPE_EXIF_DATE_TIME_ORIGINAL as the exif_tag_type (EXIF_ASCII)
2395// It should be 20 characters long including the null-terminating character.
2396#define _ID_EXIF_DATE_TIME_ORIGINAL          0x9003
2397#define EXIFTAGID_EXIF_DATE_TIME_ORIGINAL    CONSTRUCT_TAGID(EXIF_DATE_TIME_ORIGINAL, _ID_EXIF_DATE_TIME_ORIGINAL)
2398#define EXIFTAGTYPE_EXIF_DATE_TIME_ORIGINAL  EXIF_ASCII
2399// Date and time of digital data generation
2400// Use EXIFTAGTYPE_EXIF_DATE_TIME_DIGITIZED as the exif_tag_type (EXIF_ASCII)
2401// It should be 20 characters long including the null-terminating character.
2402#define _ID_EXIF_DATE_TIME_DIGITIZED         0x9004
2403#define EXIFTAGID_EXIF_DATE_TIME_DIGITIZED   CONSTRUCT_TAGID(EXIF_DATE_TIME_DIGITIZED, _ID_EXIF_DATE_TIME_DIGITIZED)
2404#define EXIFTAGTYPE_EXIF_DATE_TIME_DIGITIZED EXIF_ASCII
2405// Meaning of each component
2406// Use EXIFTAGTYPE_EXIF_COMPONENTS_CONFIG as the exif_tag_type (EXIF_UNDEFINED)
2407// Count should be 4
2408#define _ID_EXIF_COMPONENTS_CONFIG          0x9101
2409#define EXIFTAGID_EXIF_COMPONENTS_CONFIG    CONSTRUCT_TAGID(EXIF_COMPONENTS_CONFIG, _ID_EXIF_COMPONENTS_CONFIG)
2410#define EXIFTAGTYPE_EXIF_COMPONENTS_CONFIG  EXIF_UNDEFINED
2411// Meaning of Image compression mode
2412// Use EXIFTAGTYPE_EXIF_COMPRESSED_BITS_PER_PIXEL as the exif_tag_type (EXIF_RATIONAL)
2413// Count should be 1
2414#define _ID_EXIF_COMPRESSED_BITS_PER_PIXEL  0x9102
2415#define EXIFTAGID_EXIF_COMPRESSED_BITS_PER_PIXEL    CONSTRUCT_TAGID(EXIF_COMPRESSED_BITS_PER_PIXEL, _ID_EXIF_COMPRESSED_BITS_PER_PIXEL)
2416#define EXIFTAGTYPE_EXIF_COMPRESSED_BITS_PER_PIXEL  EXIF_RATIONAL
2417// Shutter speed
2418// Use EXIFTAGTYPE_SHUTTER_SPEED as the exif_tag_type (EXIF_SRATIONAL)
2419// Count should be 1
2420#define _ID_SHUTTER_SPEED                   0x9201
2421#define EXIFTAGID_SHUTTER_SPEED             CONSTRUCT_TAGID(SHUTTER_SPEED, _ID_SHUTTER_SPEED)
2422#define EXIFTAGTYPE_SHUTTER_SPEED           EXIF_SRATIONAL
2423// Aperture
2424// Use EXIFTAGTYPE_APERTURE as the exif_tag_type (EXIF_RATIONAL)
2425// Count should be 1
2426#define _ID_APERTURE                        0x9202
2427#define EXIFTAGID_APERTURE                  CONSTRUCT_TAGID(APERTURE, _ID_APERTURE)
2428#define EXIFTAGTYPE_APERTURE                EXIF_RATIONAL
2429// Brigthness
2430// Use EXIFTAGTYPE_BRIGHTNESS as the exif_tag_type (EXIF_SRATIONAL)
2431// Count should be 1
2432#define _ID_BRIGHTNESS                      0x9203
2433#define EXIFTAGID_BRIGHTNESS                CONSTRUCT_TAGID(BRIGHTNESS, _ID_BRIGHTNESS)
2434#define EXIFTAGTYPE_BRIGHTNESS              EXIF_SRATIONAL
2435// Exposure bias
2436// Use EXIFTAGTYPE_EXPOSURE_BIAS_VALUE as the exif_tag_type (EXIF_SRATIONAL)
2437// Count should be 1
2438#define _ID_EXPOSURE_BIAS_VALUE             0x9204
2439#define EXIFTAGID_EXPOSURE_BIAS_VALUE       CONSTRUCT_TAGID(EXPOSURE_BIAS_VALUE, _ID_EXPOSURE_BIAS_VALUE)
2440#define EXIFTAGTYPE_EXPOSURE_BIAS_VALUE     EXIF_SRATIONAL
2441// Maximum lens aperture
2442// Use EXIFTAGTYPE_MAX_APERTURE as the exif_tag_type (EXIF_RATIONAL)
2443// Count should be 1
2444#define _ID_MAX_APERTURE                    0x9205
2445#define EXIFTAGID_MAX_APERTURE              CONSTRUCT_TAGID(MAX_APERTURE, _ID_MAX_APERTURE)
2446#define EXIFTAGTYPE_MAX_APERTURE            EXIF_RATIONAL
2447// Subject distance
2448// Use EXIFTAGTYPE_SUBJECT_DISTANCE as the exif_tag_type (EXIF_RATIONAL)
2449// Count should be 1
2450#define _ID_SUBJECT_DISTANCE                0x9206
2451#define EXIFTAGID_SUBJECT_DISTANCE          CONSTRUCT_TAGID(SUBJECT_DISTANCE, _ID_SUBJECT_DISTANCE)
2452#define EXIFTAGTYPE_SUBJECT_DISTANCE        EXIF_RATIONAL
2453// Metering mode
2454// Use EXIFTAGTYPE_METERING_MODE as the exif_tag_type (EXIF_SHORT)
2455// Count should be 1
2456#define _ID_METERING_MODE                   0x9207
2457#define EXIFTAGID_METERING_MODE             CONSTRUCT_TAGID(METERING_MODE, _ID_METERING_MODE)
2458#define EXIFTAGTYPE_METERING_MODE           EXIF_SHORT
2459// Light source
2460// Use EXIFTAGTYPE_LIGHT_SOURCE as the exif_tag_type (EXIF_SHORT)
2461// Count should be 1
2462#define _ID_LIGHT_SOURCE                    0x9208
2463#define EXIFTAGID_LIGHT_SOURCE              CONSTRUCT_TAGID(LIGHT_SOURCE, _ID_LIGHT_SOURCE)
2464#define EXIFTAGTYPE_LIGHT_SOURCE            EXIF_SHORT
2465// Flash
2466// Use EXIFTAGTYPE_FLASH as the exif_tag_type (EXIF_SHORT)
2467// Count should be 1
2468#define _ID_FLASH                           0x9209
2469#define EXIFTAGID_FLASH                     CONSTRUCT_TAGID(FLASH, _ID_FLASH)
2470#define EXIFTAGTYPE_FLASH                   EXIF_SHORT
2471// Lens focal length
2472// Use EXIFTAGTYPE_FOCAL_LENGTH as the exif_tag_type (EXIF_RATIONAL)
2473// Count should be 1
2474#define _ID_FOCAL_LENGTH                    0x920a
2475#define EXIFTAGID_FOCAL_LENGTH              CONSTRUCT_TAGID(FOCAL_LENGTH, _ID_FOCAL_LENGTH)
2476#define EXIFTAGTYPE_FOCAL_LENGTH            EXIF_RATIONAL
2477// Subject area
2478// Use EXIFTAGTYPE_SUBJECT_AREA as exif_tag_type (EXIF_SHORT)
2479// Count should be 2 or 3 or 4
2480#define _ID_SUBJECT_AREA                    0x9214
2481#define EXIFTAGID_SUBJECT_AREA              CONSTRUCT_TAGID(SUBJECT_AREA, _ID_SUBJECT_AREA)
2482#define EXIFTAGTYPE_SUBJECT_AREA            EXIF_SHORT
2483// Maker note
2484// Use EXIFTAGTYPE_EXIF_MAKER_NOTE as the exif_tag_type (EXIF_UNDEFINED)
2485// Count can be any
2486#define _ID_EXIF_MAKER_NOTE                 0x927c
2487#define EXIFTAGID_EXIF_MAKER_NOTE           CONSTRUCT_TAGID(EXIF_MAKER_NOTE, _ID_EXIF_MAKER_NOTE)
2488#define EXIFTAGTYPE_EXIF_MAKER_NOTE         EXIF_UNDEFINED
2489// User comments
2490// Use EXIFTAGTYPE_EXIF_USER_COMMENT as the exif_tag_type (EXIF_UNDEFINED)
2491// Count can be any
2492#define _ID_EXIF_USER_COMMENT               0x9286
2493#define EXIFTAGID_EXIF_USER_COMMENT         CONSTRUCT_TAGID(EXIF_USER_COMMENT, _ID_EXIF_USER_COMMENT)
2494#define EXIFTAGTYPE_EXIF_USER_COMMENT       EXIF_UNDEFINED
2495// Date time sub-seconds
2496// Use EXIFTAGTYPE_SUBSEC_TIME as the exif_tag_type (EXIF_ASCII)
2497// Count could be any
2498#define _ID_SUBSEC_TIME                     0x9290
2499#define EXIFTAGID_SUBSEC_TIME               CONSTRUCT_TAGID(SUBSEC_TIME, _ID_SUBSEC_TIME)
2500#define EXIFTAGTYPE_SEBSEC_TIME             EXIF_ASCII
2501// Date time original sub-seconds
2502// use EXIFTAGTYPE_SUBSEC_TIME_ORIGINAL as the exif_tag_type (EXIF_ASCII)
2503// Count could be any
2504#define _ID_SUBSEC_TIME_ORIGINAL            0x9291
2505#define EXIFTAGID_SUBSEC_TIME_ORIGINAL      CONSTRUCT_TAGID(SUBSEC_TIME_ORIGINAL, _ID_SUBSEC_TIME_ORIGINAL)
2506#define EXIFTAGTYPE_SUBSEC_TIME_ORIGINAL    EXIF_ASCII
2507// Date time digitized sub-seconds
2508// use EXIFTAGTYPE_SUBSEC_TIME_DIGITIZED as the exif_tag_type (EXIF_ASCII)
2509// Count could be any
2510#define _ID_SUBSEC_TIME_DIGITIZED           0x9292
2511#define EXIFTAGID_SUBSEC_TIME_DIGITIZED     CONSTRUCT_TAGID(SUBSEC_TIME_DIGITIZED, _ID_SUBSEC_TIME_DIGITIZED)
2512#define EXIFTAGTYPE_SUBSEC_TIME_DIGITIZED   EXIF_ASCII
2513// Supported Flashpix version
2514// Use EXIFTAGTYPE_EXIF_FLASHPIX_VERSION as the exif_tag_type (EXIF_UNDEFINED)
2515// Count should be 4
2516#define _ID_EXIF_FLASHPIX_VERSION           0xa000
2517#define EXIFTAGID_EXIF_FLASHPIX_VERSION     CONSTRUCT_TAGID(EXIF_FLASHPIX_VERSION, _ID_EXIF_FLASHPIX_VERSION)
2518#define EXIFTAGTYPE_EXIF_FLASHPIX_VERSION   EXIF_UNDEFINED
2519//  Color space information
2520// Use EXIFTAGTYPE_EXIF_COLOR_SPACE as the exif_tag_type (EXIF_SHORT)
2521// Count should be 1
2522#define _ID_EXIF_COLOR_SPACE                0xa001
2523#define EXIFTAGID_EXIF_COLOR_SPACE          CONSTRUCT_TAGID(EXIF_COLOR_SPACE, _ID_EXIF_COLOR_SPACE)
2524#define EXIFTAGTYPE_EXIF_COLOR_SPACE        EXIF_SHORT
2525//  Valid image width
2526// Use EXIFTAGTYPE_EXIF_PIXEL_X_DIMENSION as the exif_tag_type (EXIF_SHORT)
2527// Count should be 1
2528#define _ID_EXIF_PIXEL_X_DIMENSION          0xa002
2529#define EXIFTAGID_EXIF_PIXEL_X_DIMENSION    CONSTRUCT_TAGID(EXIF_PIXEL_X_DIMENSION, _ID_EXIF_PIXEL_X_DIMENSION)
2530#define EXIFTAGTYPE_EXIF_PIXEL_X_DIMENSION  EXIF_SHORT
2531// Valid image height
2532// Use EXIFTAGTYPE_EXIF_PIXEL_Y_DIMENSION as the exif_tag_type (EXIF_SHORT)
2533// Count should be 1
2534#define _ID_EXIF_PIXEL_Y_DIMENSION          0xa003
2535#define EXIFTAGID_EXIF_PIXEL_Y_DIMENSION    CONSTRUCT_TAGID(EXIF_PIXEL_Y_DIMENSION, _ID_EXIF_PIXEL_Y_DIMENSION)
2536#define EXIFTAGTYPE_EXIF_PIXEL_Y_DIMENSION  EXIF_SHORT
2537// Related audio file
2538// Use EXIFTAGTYPE_EXIF_RELATED_SOUND_FILE as the exif_tag_type (EXIF_ASCII)
2539// Count should be 13
2540#define _ID_RELATED_SOUND_FILE              0xa004
2541#define EXIFTAGID_RELATED_SOUND_FILE        CONSTRUCT_TAGID(RELATED_SOUND_FILE, _ID_RELATED_SOUND_FILE)
2542#define EXIFTAGTYPE_RELATED_SOUND_FILE      EXIF_ASCII
2543// Interop IFD pointer (NOT INTENDED to be accessible to user)
2544#define _ID_INTEROP_IFD_PTR                 0xa005
2545#define EXIFTAGID_INTEROP_IFD_PTR           CONSTRUCT_TAGID(INTEROP, _ID_INTEROP_IFD_PTR)
2546#define EXIFTAGTYPE_INTEROP_IFD_PTR         EXIF_LONG
2547// Flash energy
2548// Use EXIFTAGTYPE_EXIF_FLASH_ENERGY as the exif_tag_type (EXIF_RATIONAL)
2549// Count should be 1
2550#define _ID_FLASH_ENERGY                    0xa20b
2551#define EXIFTAGID_FLASH_ENERGY              CONSTRUCT_TAGID(FLASH_ENERGY, _ID_FLASH_ENERGY)
2552#define EXIFTAGTYPE_FLASH_ENERGY            EXIF_RATIONAL
2553// Spatial frequency response
2554// Use EXIFTAGTYPE_SPATIAL_FREQ_RESPONSE as exif_tag_type (EXIF_UNDEFINED)
2555// Count would be any
2556#define _ID_SPATIAL_FREQ_RESPONSE           0xa20c
2557#define EXIFTAGID_SPATIAL_FREQ_RESPONSE     CONSTRUCT_TAGID(SPATIAL_FREQ_RESPONSE, _ID_SPATIAL_FREQ_RESPONSE)
2558#define EXIFTAGTYPE_SPATIAL_FREQ_RESPONSE   EXIF_UNDEFINED
2559// Focal plane x resolution
2560// Use EXIFTAGTYPE_FOCAL_PLANE_X_RESOLUTION as exif_tag_type (EXIF_RATIONAL)
2561// Count should be 1
2562#define _ID_FOCAL_PLANE_X_RESOLUTION        0xa20e
2563#define EXIFTAGID_FOCAL_PLANE_X_RESOLUTION  CONSTRUCT_TAGID(FOCAL_PLANE_X_RESOLUTION, _ID_FOCAL_PLANE_X_RESOLUTION)
2564#define EXIFTAGTYPE_FOCAL_PLANE_X_RESOLUTION EXIF_RATIONAL
2565// Focal plane y resolution
2566// Use EXIFTAGTYPE_FOCAL_PLANE_Y_RESOLUTION as exif_tag_type (EXIF_RATIONAL)
2567// Count should be 1
2568#define _ID_FOCAL_PLANE_Y_RESOLUTION        0xa20f
2569#define EXIFTAGID_FOCAL_PLANE_Y_RESOLUTION  CONSTRUCT_TAGID(FOCAL_PLANE_Y_RESOLUTION, _ID_FOCAL_PLANE_Y_RESOLUTION)
2570#define EXIFTAGTYPE_FOCAL_PLANE_Y_RESOLUTION EXIF_RATIONAL
2571// Focal plane  resolution unit
2572// Use EXIFTAGTYPE_FOCAL_PLANE_RESOLUTION_UNIT as exif_tag_type (EXIF_SHORT)
2573// Count should be 1
2574#define _ID_FOCAL_PLANE_RESOLUTION_UNIT     0xa210
2575#define EXIFTAGID_FOCAL_PLANE_RESOLUTION_UNIT CONSTRUCT_TAGID(FOCAL_PLANE_RESOLUTION_UNIT, _ID_FOCAL_PLANE_RESOLUTION_UNIT)
2576#define EXIFTAGTYPE_FOCAL_PLANE_RESOLUTION_UNIT EXIF_SHORT
2577// Subject location
2578// Use EXIFTAGTYPE_SUBJECT_LOCATION as the exif_tag_type (EXIF_SHORT)
2579// Count should be 2
2580#define _ID_SUBJECT_LOCATION                0xa214
2581#define EXIFTAGID_SUBJECT_LOCATION          CONSTRUCT_TAGID(SUBJECT_LOCATION, _ID_SUBJECT_LOCATION)
2582#define EXIFTAGTYPE_SUBJECT_LOCATION        EXIF_SHORT
2583// Exposure index
2584// Use EXIFTAGTYPE_EXPOSURE_INDEX as the exif_tag_type (EXIF_RATIONAL)
2585// Count should be 1
2586#define _ID_EXPOSURE_INDEX                  0xa215
2587#define EXIFTAGID_EXPOSURE_INDEX            CONSTRUCT_TAGID(EXPOSURE_INDEX, _ID_EXPOSURE_INDEX)
2588#define EXIFTAGTYPE_EXPOSURE_INDEX          EXIF_RATIONAL
2589// Sensing method
2590// Use EXIFTAGTYPE_SENSING_METHOD as the exif_tag_type (EXIF_SHORT)
2591// Count should be 1
2592#define _ID_SENSING_METHOD                  0xa217
2593#define EXIFTAGID_SENSING_METHOD            CONSTRUCT_TAGID(SENSING_METHOD, _ID_SENSING_METHOD)
2594#define EXIFTAGTYPE_SENSING_METHOD          EXIF_SHORT
2595// File source
2596// Use EXIFTAGTYPE_FILE_SOURCE as the exif_tag_type (EXIF_UNDEFINED)
2597// Count should be 1
2598#define _ID_FILE_SOURCE                     0xa300
2599#define EXIFTAGID_FILE_SOURCE               CONSTRUCT_TAGID(FILE_SOURCE, _ID_FILE_SOURCE)
2600#define EXIFTAGTYPE_FILE_SOURCE             EXIF_UNDEFINED
2601// Scene type
2602// Use EXIFTAGTYPE_SCENE_TYPE as the exif_tag_type (EXIF_UNDEFINED)
2603// Count should be 1
2604#define _ID_SCENE_TYPE                      0xa301
2605#define EXIFTAGID_SCENE_TYPE                CONSTRUCT_TAGID(SCENE_TYPE, _ID_SCENE_TYPE)
2606#define EXIFTAGTYPE_SCENE_TYPE              EXIF_UNDEFINED
2607// CFA pattern
2608// Use EXIFTAGTYPE_CFA_PATTERN as the exif_tag_type (EXIF_UNDEFINED)
2609// Count can be any
2610#define _ID_CFA_PATTERN                     0xa302
2611#define EXIFTAGID_CFA_PATTERN               CONSTRUCT_TAGID(CFA_PATTERN, _ID_CFA_PATTERN)
2612#define EXIFTAGTYPE_CFA_PATTERN             EXIF_UNDEFINED
2613// Custom image processing
2614// Use EXIFTAGTYPE_CUSTOM_RENDERED as the exif_tag_type (EXIF_SHORT)
2615// Count should be 1
2616#define _ID_CUSTOM_RENDERED                 0xa401
2617#define EXIFTAGID_CUSTOM_RENDERED           CONSTRUCT_TAGID(CUSTOM_RENDERED, _ID_CUSTOM_RENDERED)
2618#define EXIFTAGTYPE_CUSTOM_RENDERED         EXIF_SHORT
2619// Exposure mode
2620// Use EXIFTAGTYPE_EXPOSURE_MODE as the exif_tag_type (EXIF_SHORT)
2621// Count should be 1
2622#define _ID_EXPOSURE_MODE                   0xa402
2623#define EXIFTAGID_EXPOSURE_MODE             CONSTRUCT_TAGID(EXPOSURE_MODE, _ID_EXPOSURE_MODE)
2624#define EXIFTAGTYPE_EXPOSURE_MODE           EXIF_SHORT
2625// White balance
2626// Use EXIFTAGTYPE_WHITE_BALANCE as the exif_tag_type (EXIF_SHORT)
2627// Count should be 1
2628#define _ID_WHITE_BALANCE                   0xa403
2629#define EXIFTAGID_WHITE_BALANCE             CONSTRUCT_TAGID(WHITE_BALANCE, _ID_WHITE_BALANCE)
2630#define EXIFTAGTYPE_WHITE_BALANCE           EXIF_SHORT
2631// Digital zoom ratio
2632// Use EXIFTAGTYPE_DIGITAL_ZOOM_RATIO as the exif_tag_type (EXIF_RATIONAL)
2633// Count should be 1
2634#define _ID_DIGITAL_ZOOM_RATIO              0xa404
2635#define EXIFTAGID_DIGITAL_ZOOM_RATIO        CONSTRUCT_TAGID(DIGITAL_ZOOM_RATIO, _ID_DIGITAL_ZOOM_RATIO)
2636#define EXIFTAGTYPE_DIGITAL_ZOOM_RATIO      EXIF_RATIONAL
2637// Focal length in 35mm film
2638// Use EXIFTAGTYPE_FOCAL_LENGTH_35MM as the exif_tag_type (EXIF_SHORT)
2639// Count should be 1
2640#define _ID_FOCAL_LENGTH_35MM               0xa405
2641#define EXIFTAGID_FOCAL_LENGTH_35MM         CONSTRUCT_TAGID(FOCAL_LENGTH_35MM, _ID_FOCAL_LENGTH_35MM)
2642#define EXIFTAGTYPE_FOCAL_LENGTH_35MM       EXIF_SHORT
2643// Scene capture type
2644// Use EXIFTAGTYPE_SCENE_CAPTURE_TYPE as the exif_tag_type (EXIF_SHORT)
2645// Count should be 1
2646#define _ID_SCENE_CAPTURE_TYPE              0xa406
2647#define EXIFTAGID_SCENE_CAPTURE_TYPE        CONSTRUCT_TAGID(SCENE_CAPTURE_TYPE, _ID_SCENE_CAPTURE_TYPE)
2648#define EXIFTAGTYPE_SCENE_CAPTURE_TYPE      EXIF_SHORT
2649// Gain control
2650// Use EXIFTAGTYPE_GAIN_CONTROL as the exif_tag_type (EXIF_SHORT)
2651// Count should be 1
2652#define _ID_GAIN_CONTROL                    0xa407
2653#define EXIFTAGID_GAIN_CONTROL              CONSTRUCT_TAGID(GAIN_CONTROL, _ID_GAIN_CONTROL)
2654#define EXIFTAGTYPE_GAIN_CONTROL            EXIF_SHORT
2655// Contrast
2656// Use EXIFTAGTYPE_CONTRAST as the exif_tag_type (EXIF_SHORT)
2657// Count should be 1
2658#define _ID_CONTRAST                        0xa408
2659#define EXIFTAGID_CONTRAST                  CONSTRUCT_TAGID(CONTRAST, _ID_CONTRAST)
2660#define EXIFTAGTYPE_CONTRAST                EXIF_SHORT
2661// Saturation
2662// Use EXIFTAGTYPE_SATURATION as the exif_tag_type (EXIF_SHORT)
2663// Count should be 1
2664#define _ID_SATURATION                      0xa409
2665#define EXIFTAGID_SATURATION                CONSTRUCT_TAGID(SATURATION, _ID_SATURATION)
2666#define EXIFTAGTYPE_SATURATION              EXIF_SHORT
2667// Sharpness
2668// Use EXIFTAGTYPE_SHARPNESS as the exif_tag_type (EXIF_SHORT)
2669// Count should be 1
2670#define _ID_SHARPNESS                       0xa40a
2671#define EXIFTAGID_SHARPNESS                 CONSTRUCT_TAGID(SHARPNESS, _ID_SHARPNESS)
2672#define EXIFTAGTYPE_SHARPNESS               EXIF_SHORT
2673// Device settings description
2674// Use EXIFTAGID_DEVICE_SETTINGS_DESCRIPTION as exif_tag_type (EXIF_UNDEFINED)
2675// Count could be any
2676#define _ID_DEVICE_SETTINGS_DESCRIPTION     0xa40b
2677#define EXIFTAGID_DEVICE_SETTINGS_DESCRIPTION CONSTRUCT_TAGID(DEVICE_SETTINGS_DESCRIPTION, _ID_DEVICE_SETTINGS_DESCRIPTION)
2678#define EXIFTAGTYPE_DEVIC_SETTIGNS_DESCRIPTION EXIF_UNDEFINED
2679// Subject distance range
2680// Use EXIFTAGTYPE_SUBJECT_DISTANCE_RANGE as the exif_tag_type (EXIF_SHORT)
2681// Count should be 1
2682#define _ID_SUBJECT_DISTANCE_RANGE          0xa40c
2683#define EXIFTAGID_SUBJECT_DISTANCE_RANGE    CONSTRUCT_TAGID(SUBJECT_DISTANCE_RANGE, _ID_SUBJECT_DISTANCE_RANGE)
2684#define EXIFTAGTYPE_SUBJECT_DISTANCE_RANGE  EXIF_SHORT
2685// Unique image id
2686// Use EXIFTAG_TYPE_IMAGE_UIDas the exif_tag_type (EXIF_ASCII)
2687// Count should be 33
2688#define _ID_IMAGE_UID                       0xa420
2689#define EXIFTAGID_IMAGE_UID                 CONSTRUCT_TAGID(IMAGE_UID, _ID_IMAGE_UID)
2690#define EXIFTAGTYPE_IMAGE_UID               EXIF_ASCII
2691// PIM tag
2692// Use EXIFTAGTYPE_PIM_TAG as the exif_tag_type (EXIF_UNDEFINED)
2693// Count can be any
2694#define _ID_PIM                             0xc4a5
2695#define EXIFTAGID_PIM_TAG                   CONSTRUCT_TAGID(PIM, _ID_PIM)
2696#define EXIFTAGTYPE_PIM_TAG                 EXIF_UNDEFINED
2697
2698#endif /* __QCAMERA_INTF_H__ */
2699