1 /*
2 * phoexif.c: glue between pho and the jhead exif code.
3 *
4 * Copyright 2002 by Akkana Peck.
5 * You are free to use or modify this code under the Gnu Public License.
6 */
7
8 #include "jhead.h"
9
10 #include "phoexif.h"
11
12 #include <stdio.h>
13
14 struct ExifTypes_s ExifLabels[] =
15 {
16 { "Camera make", ExifString },
17 { "Camera model", ExifString },
18 { "Date", ExifString },
19 { "Orientation", ExifInt },
20 { "Color", ExifInt },
21 { "Flash", ExifInt },
22 { "Focal Length", ExifFloat },
23 { "Exposure Time", ExifFloat },
24 { "ApertureNumber", ExifFloat },
25 { "Distance", ExifFloat },
26 { "CCD Width", ExifFloat },
27 { "Exposure Bias", ExifFloat },
28 { "White Balance", ExifInt },
29 { "Metering Mode", ExifInt },
30 { "Exposure Program", ExifInt },
31 { "ISO equivalent", ExifInt },
32 { "Compression Level", ExifInt },
33 { "EXIF Comments", ExifString },
34 { "Thumbnail Size", ExifInt }
35 };
36
ExifReadInfo(char * filename)37 void ExifReadInfo(char* filename)
38 {
39 ProcessFile(filename);
40 }
41
42 static char buf[BUFSIZ];
43
ItoS(int i)44 static char* ItoS(int i)
45 {
46 sprintf(buf, "%d", i);
47 return buf;
48 }
49
FtoS(float f)50 static char* FtoS(float f)
51 {
52 sprintf(buf, "%f", f);
53 return buf;
54 }
55
HasExif(void)56 int HasExif(void)
57 {
58 return (ImageInfo.FileName[0] != '\0');
59 }
60
ExifGetString(ExifFields_e field)61 const char* ExifGetString(ExifFields_e field)
62 {
63 if (!HasExif()) {
64 fprintf(stderr, "No info!\n");
65 return 0;
66 }
67
68 switch (field)
69 {
70 case ExifCameraMake:
71 return ImageInfo.CameraMake;
72 case ExifCameraModel:
73 return ImageInfo.CameraModel;
74 case ExifDate:
75 return ImageInfo.DateTime;
76 case ExifOrientation:
77 return OrientTab[ImageInfo.Orientation];
78 case ExifColor:
79 return ItoS(ImageInfo.IsColor);
80 case ExifFlash:
81 return ItoS(ImageInfo.FlashUsed);
82 case ExifFocalLength:
83 return FtoS(ImageInfo.FocalLength);
84 case ExifExposureTime:
85 return FtoS(ImageInfo.ExposureTime);
86 case ExifAperture:
87 return FtoS(ImageInfo.ApertureFNumber);
88 case ExifDistance:
89 return FtoS(ImageInfo.Distance);
90 case ExifCCDWidth:
91 return FtoS(ImageInfo.CCDWidth);
92 case ExifExposureBias:
93 return FtoS(ImageInfo.ExposureBias);
94 case ExifWhiteBalance:
95 return ItoS(ImageInfo.Whitebalance);
96 case ExifMetering:
97 return ItoS(ImageInfo.MeteringMode);
98 case ExifExposureProgram:
99 return ItoS(ImageInfo.ExposureProgram);
100 case ExifISO:
101 return ItoS(ImageInfo.ISOequivalent);
102 case ExifCompression:
103 return ItoS(ImageInfo.CompressionLevel);
104 case ExifComments:
105 return ImageInfo.Comments;
106 case ExifThumbnailSize:
107 return ItoS(ImageInfo.ThumbnailSize);
108 }
109
110 return 0;
111 }
112
ExifGetInt(ExifFields_e field)113 int ExifGetInt(ExifFields_e field)
114 {
115 if (!HasExif()) {
116 fprintf(stderr, "No info!\n");
117 return 0;
118 }
119
120 switch (field)
121 {
122 case ExifOrientation:
123 return OrientRot[ImageInfo.Orientation];
124 case ExifColor:
125 return ImageInfo.IsColor;
126 case ExifFlash:
127 return ImageInfo.FlashUsed;
128 case ExifFocalLength:
129 return (int)ImageInfo.FocalLength;
130 case ExifExposureTime:
131 return (int)ImageInfo.ExposureTime;
132 case ExifAperture:
133 return (int)ImageInfo.ApertureFNumber;
134 case ExifDistance:
135 return (int)ImageInfo.Distance;
136 case ExifCCDWidth:
137 return (int)ImageInfo.CCDWidth;
138 case ExifExposureBias:
139 return (int)ImageInfo.ExposureBias;
140 case ExifWhiteBalance:
141 return ImageInfo.Whitebalance;
142 case ExifMetering:
143 return ImageInfo.MeteringMode;
144 case ExifExposureProgram:
145 return ImageInfo.ExposureProgram;
146 case ExifISO:
147 return ImageInfo.ISOequivalent;
148 case ExifCompression:
149 return ImageInfo.CompressionLevel;
150 case ExifThumbnailSize:
151 return ImageInfo.ThumbnailSize;
152 case ExifCameraMake:
153 case ExifCameraModel:
154 case ExifDate:
155 case ExifComments:
156 return 0;
157 }
158 return 0;
159 }
160
ExifGetFloat(ExifFields_e field)161 float ExifGetFloat(ExifFields_e field)
162 {
163 if (!HasExif()) {
164 fprintf(stderr, "No info!\n");
165 return 0;
166 }
167
168 switch (field)
169 {
170 case ExifOrientation:
171 return (float)OrientRot[ImageInfo.Orientation];
172 case ExifColor:
173 return (float)ImageInfo.IsColor;
174 case ExifFlash:
175 return (float)ImageInfo.FlashUsed;
176 case ExifFocalLength:
177 return ImageInfo.FocalLength;
178 case ExifExposureTime:
179 return ImageInfo.ExposureTime;
180 case ExifAperture:
181 return ImageInfo.ApertureFNumber;
182 case ExifDistance:
183 return ImageInfo.Distance;
184 case ExifCCDWidth:
185 return ImageInfo.CCDWidth;
186 case ExifExposureBias:
187 return ImageInfo.ExposureBias;
188 case ExifWhiteBalance:
189 return (float)ImageInfo.Whitebalance;
190 case ExifMetering:
191 return (float)ImageInfo.MeteringMode;
192 case ExifExposureProgram:
193 return (float)ImageInfo.ExposureProgram;
194 case ExifISO:
195 return (float)ImageInfo.ISOequivalent;
196 case ExifCompression:
197 return (float)ImageInfo.CompressionLevel;
198 case ExifThumbnailSize:
199 return (float)ImageInfo.ThumbnailSize;
200 case ExifCameraMake:
201 case ExifCameraModel:
202 case ExifDate:
203 case ExifComments:
204 return 0;
205 }
206 return 0;
207 }
208
209