134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project//-------------------------------------------------------------------------- 234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// Include file for jhead program. 334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// 4a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chen// This include file only defines stuff that goes across modules. 5a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chen// I like to keep the definitions for macros and structures as close to 6a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chen// where they get used as possible, so include files only get stuff that 734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// gets used in more than one file. 834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project//-------------------------------------------------------------------------- 934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define _CRT_SECURE_NO_DEPRECATE 1 1034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 1134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#include <stdio.h> 1234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#include <stdlib.h> 1334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#include <string.h> 1434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#include <time.h> 1534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#include <errno.h> 1634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#include <ctype.h> 17661f9634b51c200603b32224541327d50808ba65Wu-cheng Li#include <stdint.h> 1834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 1934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project//-------------------------------------------------------------------------- 2034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 2134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#ifdef _WIN32 2234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #include <sys/utime.h> 2334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#else 2434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #include <utime.h> 2534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #include <sys/types.h> 2634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #include <unistd.h> 2734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #include <errno.h> 2834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #include <limits.h> 2934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#endif 3034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 3134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 3234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projecttypedef unsigned char uchar; 3334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 3434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#ifndef TRUE 3534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #define TRUE 1 3634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #define FALSE 0 3734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#endif 3834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 39d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define MAX_COMMENT_SIZE 2000 40434623a0e87c8e145dbb46917b4ab9777475d9ebRay Chen#define GPS_PROCESSING_METHOD_LEN 100 4134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 4234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#ifdef _WIN32 4334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project #define PATH_MAX _MAX_PATH 44d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang #define SLASH '\\' 45d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#else 46d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang #define SLASH '/' 4734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#endif 4834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 49d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang 5034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project//-------------------------------------------------------------------------- 5134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// This structure is used to store jpeg file sections in memory. 5234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projecttypedef struct { 5334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project uchar * Data; 5434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int Type; 5531b17e69a87e4caa50f9c6b1a47c84ef75f79d83Jeff Sharkey unsigned Offset; 5634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned Size; 5734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project}Section_t; 5834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 5934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectextern int ExifSectionIndex; 6034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 6134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectextern int DumpExifMap; 6234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 6334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define MAX_DATE_COPIES 10 6434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 652bfc190bd3be7e1b91fe3d7ca49412ebf0f5ceeeWang Kun// Buffer size must large enough to hold maximum location string 662bfc190bd3be7e1b91fe3d7ca49412ebf0f5ceeeWang Kun// containing six signed integers plus delimeters and terminator, 672bfc190bd3be7e1b91fe3d7ca49412ebf0f5ceeeWang Kun// i.e.: 11 * 6 + 3(‘/’) + 2(’,’) + 1(\0) = 72 682bfc190bd3be7e1b91fe3d7ca49412ebf0f5ceeeWang Kun#define MAX_BUF_SIZE 72 692bfc190bd3be7e1b91fe3d7ca49412ebf0f5ceeeWang Kun 7076aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He// Sub second tag string length (including null termination character), with 7176aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He// nano-second precision. e.g. 0.123456789s is represented as a null terminated 7276aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He// string "123456789". Although it can be any length, it is limited to 9 digits 7376aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He// here as we limit the precision to nano-second. 7476aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He#define SUB_SEC_SIZE 10 7576aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He 76574d52d26f44b600cdab3d3361eaa5f6dd9d7a4dWu-cheng Litypedef struct { 77574d52d26f44b600cdab3d3361eaa5f6dd9d7a4dWu-cheng Li uint32_t num; 78574d52d26f44b600cdab3d3361eaa5f6dd9d7a4dWu-cheng Li uint32_t denom; 79574d52d26f44b600cdab3d3361eaa5f6dd9d7a4dWu-cheng Li} rat_t; 80574d52d26f44b600cdab3d3361eaa5f6dd9d7a4dWu-cheng Li 8134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project//-------------------------------------------------------------------------- 8234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// This structure stores Exif header image elements in a simple manner 8334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// Used to store camera data as extracted from the various ways that it can be 8434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// stored in an exif header 8534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projecttypedef struct { 8634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char FileName [PATH_MAX+1]; 8734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project time_t FileDateTime; 8834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned FileSize; 8934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char CameraMake [32]; 9034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char CameraModel [40]; 9134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char DateTime [20]; 9276aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He char DigitizedTime[20]; 9376aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He // Fractions of seconds for DateTime tag, with milisecond precision. 9476aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He char SubSecTime[SUB_SEC_SIZE]; 9576aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He // Fractions of seconds for DateTimeOriginal tag, with milisecond precision. 9676aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He char SubSecTimeOrig[SUB_SEC_SIZE]; 9776aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He // Fractions of seconds for DateTimeDigitized tag, with milisecond precision. 9876aba45cce69de1b3a7ba29bbacc5339512de13cZhijun He char SubSecTimeDig[SUB_SEC_SIZE]; 9934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int Height, Width; 10034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int Orientation; 10134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int IsColor; 10234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int Process; 10334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int FlashUsed; 104574d52d26f44b600cdab3d3361eaa5f6dd9d7a4dWu-cheng Li rat_t FocalLength; 10534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project float ExposureTime; 10634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project float ApertureFNumber; 10734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project float Distance; 10834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project float CCDWidth; 10934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project float ExposureBias; 11034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project float DigitalZoomRatio; 11134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int FocalLength35mmEquiv; // Exif 2.2 tag - usually not present. 11234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int Whitebalance; 11334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int MeteringMode; 11434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int ExposureProgram; 11534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int ExposureMode; 11634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int ISOequivalent; 11734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int LightSource; 118d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang int DistanceRange; 119d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang 120d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang char Comments[MAX_COMMENT_SIZE]; 121d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang int CommentWidchars; // If nonzer, widechar comment, indicates number of chars. 12234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 12334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned ThumbnailOffset; // Exif offset to thumbnail 12434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned ThumbnailSize; // Size of thumbnail. 12534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned LargestExifOffset; // Last exif data referenced (to check if thumbnail is at end) 12634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 12734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char ThumbnailAtEnd; // Exif header ends with the thumbnail 12834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project // (we can only modify the thumbnail if its at the end) 12934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int ThumbnailSizeOffset; 13034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 13134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int DateTimeOffsets[MAX_DATE_COPIES]; 13234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int numDateTimeTags; 13334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 13434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int GpsInfoPresent; 13534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char GpsLat[31]; 1362bfc190bd3be7e1b91fe3d7ca49412ebf0f5ceeeWang Kun char GpsLatRaw[MAX_BUF_SIZE]; 13734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char GpsLatRef[2]; 13834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char GpsLong[31]; 1392bfc190bd3be7e1b91fe3d7ca49412ebf0f5ceeeWang Kun char GpsLongRaw[MAX_BUF_SIZE]; 14034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char GpsLongRef[2]; 14134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char GpsAlt[20]; 1421ed8197f0cefb2541f630830993e109c59ba822cWu-cheng Li rat_t GpsAltRaw; 1431ed8197f0cefb2541f630830993e109c59ba822cWu-cheng Li char GpsAltRef; 144a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chen // gps-datestamp is 11 bytes ascii in EXIF 2.2 145a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chen char GpsDateStamp[11]; 146a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chen char GpsTimeStamp[11]; 147434623a0e87c8e145dbb46917b4ab9777475d9ebRay Chen char GpsProcessingMethod[GPS_PROCESSING_METHOD_LEN + 1]; 14834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project}ImageInfo_t; 14934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 15034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 15134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 15234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define EXIT_FAILURE 1 15334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define EXIT_SUCCESS 0 15434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 15534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// jpgfile.c functions 15634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projecttypedef enum { 15734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project READ_METADATA = 1, 15834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project READ_IMAGE = 2, 15934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project READ_ALL = 3 16034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project}ReadMode_t; 16134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 16234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 16334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projecttypedef struct { 16434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned short Tag; // tag value, i.e. TAG_MODEL 16534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int Format; // format of data 16634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char* Value; // value of data in string format 16734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int DataLength; // length of string when format says Value is a string 16834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int GpsTag; // bool - the tag is related to GPS info 16934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project} ExifElement_t; 17034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 17134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 17234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projecttypedef struct { 17334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned short Tag; 17434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project char * Desc; 17534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int Format; 17634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project int DataLength; // Number of elements in Format. -1 means any length. 17734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project} TagTable_t; 17834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 17934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 18034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// prototypes for jhead.c functions 18134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid ErrFatal(char * msg); 18234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid ErrNonfatal(char * msg, int a1, int a2); 18334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid FileTimeAsString(char * TimeStr); 18434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 18534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// Prototypes for exif.c functions. 18634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint Exif2tm(struct tm * timeptr, char * ExifTime); 18734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid process_EXIF (unsigned char * CharBuf, unsigned int length); 18834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint RemoveThumbnail(unsigned char * ExifSection); 18934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid ShowImageInfo(int ShowFileInfo); 19034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid ShowConciseImageInfo(void); 19134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectconst char * ClearOrientation(void); 19234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid PrintFormatNumber(void * ValuePtr, int Format, int ByteCount); 19334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectdouble ConvertAnyFormat(void * ValuePtr, int Format); 19434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint Get16u(void * Short); 19534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectunsigned Get32u(void * Long); 19634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint Get32s(void * Long); 19734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid Put32u(void * Value, unsigned PutValue); 198482486a3d21c4d4c933f3081ff14122292314bc7Angus Kongvoid create_EXIF(ExifElement_t* elements, int exifTagCount, int gpsTagCount, int hasDateTimeTag); 19934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint TagNameToValue(const char* tagName); 200482486a3d21c4d4c933f3081ff14122292314bc7Angus Kongint IsDateTimeTag(unsigned short tag); 20134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 20234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project//-------------------------------------------------------------------------- 20334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// Exif format descriptor stuff 20434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectextern const int BytesPerFormat[]; 20534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define NUM_FORMATS 12 20634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 207a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chen#define FMT_BYTE 1 20834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_STRING 2 20934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_USHORT 3 21034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_ULONG 4 21134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_URATIONAL 5 21234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_SBYTE 6 21334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_UNDEFINED 7 21434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_SSHORT 8 21534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_SLONG 9 21634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_SRATIONAL 10 21734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_SINGLE 11 21834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define FMT_DOUBLE 12 21934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 22034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 22134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// makernote.c prototypes 22234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectextern void ProcessMakerNote(unsigned char * DirStart, int ByteCount, 22334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned char * OffsetBase, unsigned ExifLength); 22434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 22534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// gpsinfo.c prototypes 226a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chenvoid ProcessGpsInfo(unsigned char * ValuePtr, int ByteCount, 22734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project unsigned char * OffsetBase, unsigned ExifLength); 22834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint IsGpsTag(const char* tag); 22934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint GpsTagToFormatType(unsigned short tag); 23034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint GpsTagNameToValue(const char* tagName); 23134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source ProjectTagTable_t* GpsTagToTagTableEntry(unsigned short tag); 232bd90094d709a579d8d74c326269e492627be9daaTyler Luustatic const char ExifAsciiPrefix[] = { 0x41, 0x53, 0x43, 0x49, 0x49, 0x0, 0x0, 0x0 }; 23334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 23434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// iptc.c prototpyes 235d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Changvoid show_IPTC (unsigned char * CharBuf, unsigned int length); 236d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Changvoid ShowXmp(Section_t XmpSection); 23734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 23834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// Prototypes for myglob.c module 239d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#ifdef _WIN32 240d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Changvoid MyGlob(const char * Pattern , void (*FileFuncParm)(const char * FileName)); 241d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Changvoid SlashToNative(char * Path); 242d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#endif 243d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang 244d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang// Prototypes for paths.c module 245d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Changint EnsurePathExists(const char * FileName); 246d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Changvoid CatPath(char * BasePath, const char * FilePath); 24734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 24834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// Prototypes from jpgfile.c 24934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint ReadJpegSections (FILE * infile, ReadMode_t ReadMode); 25034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid DiscardData(void); 25134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid DiscardAllButExif(void); 25234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint ReadJpegFile(const char * FileName, ReadMode_t ReadMode); 25334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint ReplaceThumbnail(const char * ThumbFileName); 25413714f28c615c0cf1be4907aa6fe86f0cb5b28b8Tyler Luuint ReplaceThumbnailFromBuffer(const char* Thumb, int ThumbLen); 25534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint SaveThumbnail(char * ThumbFileName); 25634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint RemoveSectionType(int SectionType); 25734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint RemoveUnknownSections(void); 25834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectint WriteJpegFile(const char * FileName); 25934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source ProjectSection_t * FindSection(int SectionType); 26034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source ProjectSection_t * CreateSection(int SectionType, unsigned char * Data, int size); 26134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectvoid ResetJpgfile(void); 26224757b4e0fdd25e118ca322a1243c1dbe060955dTyler Luuint ReadJpegSectionsFromBuffer (unsigned char* buffer, unsigned int buffer_size, ReadMode_t ReadMode); 26324757b4e0fdd25e118ca322a1243c1dbe060955dTyler Luuint WriteJpegToBuffer(unsigned char* buffer, unsigned int buffer_size); 26434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 26534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// Variables from jhead.c used by exif.c 26634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectextern ImageInfo_t ImageInfo; 26734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectextern int ShowTags; 26834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Projectextern char* formatStr(int format); 26934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 27034a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project//-------------------------------------------------------------------------- 27134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// JPEG markers consist of one or more 0xFF bytes, followed by a marker 27234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// code byte (which is not an FF). Here are the marker codes of interest 27334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project// in this program. (See jdmarker.c for a more complete list.) 27434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project//-------------------------------------------------------------------------- 27534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project 276d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_SOF0 0xC0 // Start Of Frame N 277d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_SOF1 0xC1 // N indicates which compression process 278d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_SOF2 0xC2 // Only SOF0-SOF2 are now in common use 27934a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF3 0xC3 280d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_SOF5 0xC5 // NB: codes C4 and CC are NOT SOF markers 28134a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF6 0xC6 28234a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF7 0xC7 28334a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF9 0xC9 28434a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF10 0xCA 28534a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF11 0xCB 28634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF13 0xCD 28734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF14 0xCE 28834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_SOF15 0xCF 289d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_SOI 0xD8 // Start Of Image (beginning of datastream) 290d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_EOI 0xD9 // End Of Image (end of datastream) 291d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_SOS 0xDA // Start Of Scan (begins compressed data) 292d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_JFIF 0xE0 // Jfif marker 293d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_EXIF 0xE1 // Exif marker. Also used for XMP data! 294d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_XMP 0x10E1 // Not a real tag (same value in file as Exif!) 295a39920ca4b96a456511fa32ba90c77f119a274c3Ray Chen#define M_COM 0xFE // COMment 29634a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_DQT 0xDB 29734a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_DHT 0xC4 29834a2564d3268a5ca1472c5076675782fbaf724d6The Android Open Source Project#define M_DRI 0xDD 299d6a02c32e6fa83fad5794b0e19b1d28563e5a99bChih-Chung Chang#define M_IPTC 0xED // IPTC marker 300