os/linux-2.6-tag--devboard-R2_10-4/include/asm-cris/elphel/exifa.h

Go to the documentation of this file.
00001 /*
00002  exifa.h
00003 */
00004 #ifndef _ASM_EXIF_H
00005 #define _ASM_EXIF_H
00006 
00007 //Major
00008 #define X3X3_EXIF 125
00009 //Minors
00010 #define X3X3_EXIF_EXIF    0 // read encoded Exif data (SEEK_END,
00011 #define X3X3_EXIF_META    1 // write metadata, concurently opened files. All writes atomic
00012 // control/setup devices
00013 #define X3X3_EXIF_TEMPLATE 2 // write Exif template
00014 #define X3X3_EXIF_METADIR  3 // write metadata to Exif header translation (dir_table[MAX_EXIF_FIELDS])
00015 // those 2 files will disable exif_enable and exif_valid, truncate file size to file pointer on release.
00016 #define X3X3_EXIF_TIME     4 // write today/tomorrow date (YYYY:MM:DD) and number of seconds at today/tomorrow
00017                              // midnight (00:00:00) in seconds from epoch (long, startting from LSB)
00018 
00019 // commands for the overloaded lseek:
00020 
00021 //X3X3_EXIF_TIME
00022 #define EXIF_LSEEK_DISABLE       1 // disable Exif (storing of frame meta, generating Exif)
00023 #define EXIF_LSEEK_ENABLE        2 // enable Exif (build buffer if needed)
00024 #define EXIF_LSEEK_INVALIDATE    3 // invalidate (and disable)
00025 #define EXIF_LSEEK_REBUILD       4 // rebuild buffer
00026 
00027 #define EXIF_LSEEK_TOMORROW_DATE 5 // file pointer to YYYY:MM:DD (tomorrow) string
00028 #define EXIF_LSEEK_TOMORROW_SEC  6 // file pointer to unsigned long (little endian) tomorrow seconds from epoch
00029 #define EXIF_LSEEK_TODAY_DATE    7 // file pointer to YYYY:MM:DD (today) string
00030 #define EXIF_LSEEK_TODAY_SEC     8  // file pointer to unsigned long (little endian) today seconds from epoch
00031 
00032 
00033 /*
00034 Exif data in the images is combined from the "static" structure (template), calculated once at startup, and
00035 variable data stored in the buffer for individual frames in the "Exif" form - converted to ASCII strings
00036 or Rational or else. The generated Exif header copies that variable fileds on top of the Exif template.
00037 
00038 The compressed data buffer is stored in "meta pages", one per frame 
00039 */
00040 struct exif_dir_table_t {
00041         union {
00042           unsigned long ltag;// tag group and tag combined
00043           struct {
00044             unsigned short tag_group; // tag group: 0 - IFD0, 1 - Exif, 2 - GPS
00045             unsigned short tag;       // Exif tag as defined in the standard
00046           };
00047         };
00048         unsigned long len; // Number of bytes to be copied from metadata to Exif
00049         unsigned long src; // offset in meta data page
00050         unsigned long dst; // offset in output Exif page
00051 };
00052 #define MAX_EXIF_FIELDS  256 // number of Exif tags in the header
00053 #define MAX_EXIF_SIZE   4096 // Exif data size 
00054 //#define MAX_EXIF_FRAMES  512 // number of frames in the buffer
00055 #define MAX_EXIF_FRAMES  2048 // number of frames in the buffer
00056 
00057 //Exif Tags - unsigned long, combining actual Exif tags with tag groups (0 - IFD0, 1 - Exif, 2 - GPS)
00058 #define  Exif_Image_ImageDescription   0x0010e
00059 #define  Exif_Image_Make               0x0010f
00060 #define  Exif_Image_Model              0x00110
00061 #define  Exif_Image_Software           0x00131
00062 #define  Exif_Image_DateTime           0x00132
00063 #define  Exif_Image_Artist             0x0013b
00064 #define  Exif_Image_HostComputer       0x0013c
00065 #define  Exif_Image_HostComputer       0x0013c
00066 // hack, reusing field to keep it protected
00067 #define  Exif_Image_IPTCNAA            0x083bb
00068 #define  Exif_Image_FrameNumber        0x083bb
00069 
00070 #define  Exif_Image_ExifTag            0x08769
00071 #define  Exif_Image_GPSTag             0x08825
00072 
00073 //Sub IFD
00074 #define  Exif_Photo_ExposureTime       0x1829a
00075 #define  Exif_Photo_DateTimeOriginal   0x19003
00076 #define  Exif_Photo_MakerNote          0x1927c
00077 #define  Exif_Photo_SubSecTime         0x19290
00078 #define  Exif_Photo_SubSecTimeOriginal 0x19291
00079 //GPSInfo
00080 #define  Exif_GPSInfo_GPSLatitudeRef   0x20001
00081 #define  Exif_GPSInfo_GPSLatitude      0x20002
00082 #define  Exif_GPSInfo_GPSLongitudeRef  0x20003
00083 #define  Exif_GPSInfo_GPSLongitude     0x20004
00084 #define  Exif_GPSInfo_GPSAltitudeRef   0x20005
00085 #define  Exif_GPSInfo_GPSAltitude      0x20006
00086 #define  Exif_GPSInfo_GPSTimeStamp     0x20007
00087 #define  Exif_GPSInfo_GPSMeasureMode   0x2000a
00088 #define  Exif_GPSInfo_GPSDateStamp     0x2001D
00089 
00091 #define  Exif_GPSInfo_GPSImgDirectionRef  0x20010
00092 #define  Exif_GPSInfo_GPSImgDirection     0x20011
00093 #define  Exif_GPSInfo_GPSDestLatitudeRef  0x20013
00094 #define  Exif_GPSInfo_GPSDestLatitude     0x20014
00095 #define  Exif_GPSInfo_GPSDestLongitudeRef 0x20015
00096 #define  Exif_GPSInfo_GPSDestLongitude    0x20016
00097 
00098 #define  Exif_GPSInfo_CompassDirectionRef 0x20010
00099 #define  Exif_GPSInfo_CompassDirection    0x20011
00100 #define  Exif_GPSInfo_CompassPitchRef     0x20013
00101 #define  Exif_GPSInfo_CompassPitch        0x20014
00102 #define  Exif_GPSInfo_CompassRollRef      0x20015
00103 #define  Exif_GPSInfo_CompassRoll         0x20016
00104 
00105 //  array(0x9003,2,"2001:06:21 12:00:00","len"=> 20), //date/time original time created, always use 20 bytes (19 ."\0")
00106 //  array(0x9291,2,"0        ") //original time sub-second length=10  9 ."\0"
00108 struct frame_exif_t {
00109           unsigned short meta_index;     
00110           unsigned short signffff;       
00111           unsigned long  frame_length;   
00112 };
00113 
00114 struct meta_GPSInfo_t {
00115    unsigned char GPSLatitudeRef; //"N"/"S"
00116    unsigned long GPSLatitude_deg_nom;
00117    unsigned long GPSLatitude_deg_denom;
00118    unsigned long GPSLatitude_min_nom;
00119    unsigned long GPSLatitude_min_denom;
00120    unsigned char GPSLongitudeRef; //"E"/"W"
00121    unsigned long GPSLongitude_deg_nom;
00122    unsigned long GPSLongitude_deg_denom;
00123    unsigned long GPSLongitude_min_nom;
00124    unsigned long GPSLongitude_min_denom;
00125    unsigned char GPSAltitudeRef; //byte, not ascii 0 - above sea level, 1 - below
00126    unsigned long GPSAltitude_nom;   //in meters
00127    unsigned long GPSAltitude_denom;
00128    unsigned long GPSTimeStamp_hrs_nom;
00129    unsigned long GPSTimeStamp_hrs_denom;
00130    unsigned long GPSTimeStamp_min_nom;
00131    unsigned long GPSTimeStamp_min_denom;
00132    unsigned long GPSTimeStamp_sec_nom;
00133    unsigned long GPSTimeStamp_sec_denom;
00134    unsigned char GPSDateStamp[11]; //includes '\0'
00135    unsigned char GPSMeasureMode;
00136 };
00137 //hack - use
00138 struct meta_CompassInfo_t {
00139 //   unsigned char GPSImgDirectionRef; //"M"/"T" //0x10
00140    unsigned long CompassDirection_nom; //0x11
00141    unsigned long CompassDirection_denom;
00142    unsigned char CompassPitchRef; //"N"/"S"
00143    unsigned long CompassPitch_nom;
00144    unsigned long CompassPitch_denom;
00145    unsigned char CompassRollRef; //"E"/"W"
00146    unsigned long CompassRoll_nom;
00147    unsigned long CompassRoll_denom;
00148 };
00149 
00150 
00151 #define EXIF_GPS_MIN_DENOM     10000
00152 #define EXIF_GPS_METERS_DENOM     10
00153 #define EXIF_GPS_TIMESEC_DENOM  1000
00154 #define EXIF_GPS_COMPASS_DENOM    10
00156 #define EXIF_COMPASS_PITCH_ASCII  "NS" // use for pitch +/-
00157 #define EXIF_COMPASS_ROLL_ASCII   "EW" // use for roll +/-
00158 
00160 #define  Exif_Image_ImageDescription_Index      0x00
00161 #define  Exif_Photo_DateTimeOriginal_Index      0x01
00162 #define  Exif_Photo_SubSecTimeOriginal_Index    0x02
00163 #define  Exif_Photo_ExposureTime_Index          0x03
00164 #define  Exif_GPSInfo_GPSLatitudeRef_Index      0x04
00165 #define  Exif_GPSInfo_GPSLatitude_Index         0x05
00166 #define  Exif_GPSInfo_GPSLongitudeRef_Index     0x06
00167 #define  Exif_GPSInfo_GPSLongitude_Index        0x07
00168 #define  Exif_GPSInfo_GPSAltitudeRef_Index      0x08
00169 #define  Exif_GPSInfo_GPSAltitude_Index         0x09
00170 #define  Exif_GPSInfo_GPSTimeStamp_Index        0x0a
00171 #define  Exif_GPSInfo_GPSDateStamp_Index        0x0b
00172 #define  Exif_GPSInfo_GPSMeasureMode_Index      0x0c
00173 #define  Exif_GPSInfo_CompassDirectionRef_Index 0x0d
00174 #define  Exif_GPSInfo_CompassDirection_Index    0x0e
00175 #define  Exif_GPSInfo_CompassPitchRef_Index     0x0f
00176 #define  Exif_GPSInfo_CompassPitch_Index        0x10
00177 #define  Exif_GPSInfo_CompassRollRef_Index      0x11
00178 #define  Exif_GPSInfo_CompassRoll_Index         0x12
00179 #define  Exif_Image_FrameNumber_Index           0x13
00180 #define  ExifKmlNumber                          0x14
00181 
00182 
00183 
00184 #define EXIF_DEV_NAME "/dev/exif_exif"
00185 #define EXIFDIR_DEV_NAME "/dev/exif_metadir"
00186 #define EXIFMETA_DEV_NAME "/dev/exif_meta"
00187 
00188 #endif

Generated on Fri Nov 28 00:06:24 2008 for elphel by  doxygen 1.5.1