Rev 5009 | Rev 6313 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4994 | IgorA | 1 | format MS COFF |
2 | public EXPORTS |
||
3 | section '.flat' code readable align 16 |
||
4 | |||
5 | include '../../../../macros.inc' |
||
6 | include '../../../../proc32.inc' |
||
7 | |||
8 | |||
9 | |||
10 | ;--------- |
||
5008 | IgorA | 11 | offs_m_or_i equ 8 ;смещение параметра 'MM' или 'II' (Motorola, Intel) |
12 | offs_id_gr equ 10 ;смещение id group |
||
5010 | IgorA | 13 | offs_id_gr_mak equ 12 ;смещение id group производителя |
5008 | IgorA | 14 | offs_tag_0 equ 2 ;смещение 0-го тега |
4994 | IgorA | 15 | tag_size equ 12 ;размер структуры тега |
16 | ;форматы данных |
||
17 | tag_format_ui1b equ 1 ;unsigned integer 1 byte |
||
18 | tag_format_text equ 2 ;ascii string |
||
19 | tag_format_ui2b equ 3 ;unsigned integer 2 byte |
||
20 | tag_format_ui4b equ 4 ;unsigned integer 4 byte |
||
4995 | IgorA | 21 | tag_format_urb equ 5 ;unsigned integer 4/4 byte |
4994 | IgorA | 22 | tag_format_si1b equ 6 ;signed integer 1 byte |
23 | tag_format_undef equ 7 ;undefined |
||
24 | tag_format_si2b equ 8 ;signed integer 2 byte |
||
25 | tag_format_si4b equ 9 ;signed integer 4 byte |
||
4995 | IgorA | 26 | tag_format_srb equ 10 ;signed integer 4/4 byte |
4994 | IgorA | 27 | tag_format_f4b equ 11 ;float 4 byte |
28 | tag_format_f8b equ 12 ;float 8 byte |
||
29 | |||
30 | align 4 |
||
31 | txt_dp db ': ',0 |
||
5009 | IgorA | 32 | txt_zap db ', ',0 |
4995 | IgorA | 33 | txt_div db '/',0 |
4994 | IgorA | 34 | |
5010 | IgorA | 35 | ;заголовок таблиц с группами тегов |
4994 | IgorA | 36 | align 4 |
37 | exif_tag_numbers: |
||
5010 | IgorA | 38 | dd 0, gr_0 ;группа app1 |
5008 | IgorA | 39 | dd 0x8769, gr_8769 ;Exif offset |
40 | dd 0xa005, gr_a005 ;Interop offset |
||
41 | dd 0x8825, gr_8825 ;GPS info |
||
5010 | IgorA | 42 | |
43 | ;групы app2 (здесь у каждого производителя камер свой формат тегов) |
||
44 | dw 0x927c ;app2 для Nikon |
||
45 | db 'Ni' |
||
46 | dd gr_927c_Ni |
||
47 | |||
48 | dw 0x927c ;app2 для Panasonic |
||
49 | db 'Pa' |
||
50 | dd gr_927c_Pa |
||
51 | |||
52 | dw 0x927c ;app2 для Canon |
||
53 | db 'Ca' |
||
54 | dd gr_927c_Ca |
||
5008 | IgorA | 55 | .end: |
4994 | IgorA | 56 | |
5008 | IgorA | 57 | align 4 |
58 | gr_0: |
||
5002 | IgorA | 59 | db 0x00,0x0b,'Processing software',0 |
60 | db 0x00,0xfe,'Subfile type',0 |
||
61 | db 0x00,0xff,'OldSubfile type',0 |
||
62 | db 0x01,0x00,'Image width',0 |
||
63 | db 0x01,0x01,'Image height',0 |
||
64 | db 0x01,0x02,'Bits per sample',0 |
||
65 | db 0x01,0x03,'Compression',0 |
||
66 | db 0x01,0x06,'Photometric interpretation',0 |
||
67 | db 0x01,0x07,'Thresholding',0 |
||
68 | db 0x01,0x08,'Cell width',0 |
||
69 | db 0x01,0x09,'Cell length',0 |
||
70 | db 0x01,0x0a,'Fill order',0 |
||
71 | db 0x01,0x0d,'Document name',0 |
||
4994 | IgorA | 72 | db 0x01,0x0e,'Image description',0 |
73 | db 0x01,0x0f,'Manufacturer of digicam',0 |
||
74 | db 0x01,0x10,'Model',0 |
||
5002 | IgorA | 75 | db 0x01,0x11,'Strip offsets',0 |
4994 | IgorA | 76 | db 0x01,0x12,'Orientation',0 |
5002 | IgorA | 77 | db 0x01,0x15,'Samples per pixel',0 |
78 | db 0x01,0x16,'Rows per strip',0 |
||
79 | db 0x01,0x17,'Strip byte counts',0 |
||
80 | db 0x01,0x18,'Min sample value',0 |
||
81 | db 0x01,0x19,'Max sample value',0 |
||
4994 | IgorA | 82 | db 0x01,0x1a,'X resolution',0 |
83 | db 0x01,0x1b,'Y resolution',0 |
||
5002 | IgorA | 84 | db 0x01,0x1c,'Planar configuration',0 |
85 | db 0x01,0x1d,'Page name',0 |
||
86 | db 0x01,0x1e,'X position',0 |
||
87 | db 0x01,0x1f,'Y position',0 |
||
88 | db 0x01,0x20,'Free offsets',0 |
||
89 | db 0x01,0x21,'Free byte counts',0 |
||
90 | db 0x01,0x22,'Gray response unit',0 |
||
91 | db 0x01,0x23,'Gray response curve',0 |
||
92 | db 0x01,0x24,'T4 options',0 |
||
93 | db 0x01,0x25,'T6 options',0 |
||
4994 | IgorA | 94 | db 0x01,0x28,'Resolution unit',0 |
5002 | IgorA | 95 | db 0x01,0x29,'Page number',0 |
96 | db 0x01,0x2c,'Color response unit',0 |
||
97 | db 0x01,0x2d,'Transfer function',0 |
||
4994 | IgorA | 98 | db 0x01,0x31,'Software',0 |
5002 | IgorA | 99 | db 0x01,0x32,'Modify date',0 |
100 | db 0x01,0x3b,'Artist',0 |
||
101 | db 0x01,0x3c,'Host computer',0 |
||
102 | db 0x01,0x3d,'Predictor',0 |
||
4994 | IgorA | 103 | db 0x01,0x3e,'White point',0 |
104 | db 0x01,0x3f,'Primary chromaticities',0 |
||
5002 | IgorA | 105 | db 0x01,0x40,'Color map',0 |
106 | db 0x01,0x41,'Halftone hints',0 |
||
107 | db 0x01,0x42,'Tile width',0 |
||
108 | db 0x01,0x43,'Tile length',0 |
||
109 | db 0x01,0x44,'Tile offsets',0 |
||
110 | db 0x01,0x45,'Tile byte counts',0 |
||
111 | db 0x01,0x46,'Bad fax lines',0 |
||
112 | db 0x01,0x47,'Clean fax data',0 |
||
113 | db 0x01,0x48,'Consecutive bad fax lines',0 |
||
114 | db 0x01,0x4a,'Sub IFDs',0 |
||
115 | db 0x01,0x4c,'Ink set',0 |
||
116 | db 0x01,0x4d,'Ink names',0 |
||
117 | db 0x01,0x4e,'Numberof inks',0 |
||
118 | db 0x01,0x50,'Dot range',0 |
||
119 | db 0x01,0x51,'Target printer',0 |
||
120 | db 0x01,0x52,'Extra samples',0 |
||
121 | db 0x01,0x53,'Sample format',0 |
||
122 | db 0x01,0x54,'SMin sample value',0 |
||
123 | db 0x01,0x55,'SMax sample value',0 |
||
124 | db 0x01,0x56,'Transfer range',0 |
||
125 | db 0x01,0x57,'Clip path',0 |
||
126 | db 0x01,0x58,'X clip path units',0 |
||
127 | db 0x01,0x59,'Y clip path units',0 |
||
128 | db 0x01,0x5a,'Indexed',0 |
||
129 | db 0x01,0x5b,'JPEG tables',0 |
||
130 | db 0x01,0x5f,'OPIProxy',0 |
||
131 | db 0x01,0x90,'Global parameters IFD',0 |
||
132 | db 0x01,0x91,'Profile type',0 |
||
133 | db 0x01,0x92,'Fax profile',0 |
||
134 | db 0x01,0x93,'Coding methods',0 |
||
135 | db 0x01,0x94,'Version year',0 |
||
136 | db 0x01,0x95,'Mode number',0 |
||
137 | db 0x01,0xb1,'Decode',0 |
||
138 | db 0x01,0xb2,'Default image color',0 |
||
139 | db 0x01,0xb3,'T82 options',0 |
||
140 | db 0x01,0xb5,'JPEG tables',0 ;уже было ? |
||
141 | db 0x02,0x00,'JPEG proc',0 |
||
142 | db 0x02,0x01,'Thumbnail offset',0 |
||
143 | db 0x02,0x02,'Thumbnail length',0 |
||
144 | db 0x02,0x03,'JPEG restart interval',0 |
||
145 | db 0x02,0x05,'JPEG lossless predictors',0 |
||
146 | db 0x02,0x06,'JPEG point transforms',0 |
||
147 | db 0x02,0x07,'JPEG QTables',0 |
||
148 | db 0x02,0x08,'JPEG DCTables',0 |
||
149 | db 0x02,0x09,'JPEG ACTables',0 |
||
4994 | IgorA | 150 | db 0x02,0x11,'YCbCrCoefficients',0 |
5002 | IgorA | 151 | db 0x02,0x12,'YCbCrSubSampling',0 |
4994 | IgorA | 152 | db 0x02,0x13,'YCbCrPositioning',0 |
153 | db 0x02,0x14,'Reference black white',0 |
||
5002 | IgorA | 154 | db 0x02,0x2f,'Strip row counts',0 |
155 | db 0x03,0xe7,'USPTO Miscellaneous',0 |
||
156 | db 0x47,0x46,'Rating',0 |
||
157 | db 0x47,0x47,'XP_DIP_XML',0 |
||
158 | db 0x47,0x48,'Stitch info',0 |
||
159 | db 0x47,0x49,'Rating percent',0 |
||
160 | db 0x80,0x0d,'Image ID',0 |
||
161 | db 0x80,0xa3,'Wang tag 1',0 |
||
162 | db 0x80,0xa4,'Wang annotation',0 |
||
163 | db 0x80,0xa5,'Wang tag 3',0 |
||
164 | db 0x80,0xa6,'Wang tag 4',0 |
||
165 | db 0x80,0xe3,'Matteing',0 |
||
166 | db 0x80,0xe4,'Data type',0 |
||
167 | db 0x80,0xe5,'Image depth',0 |
||
168 | db 0x80,0xe6,'Tile depth',0 |
||
169 | db 0x82,0x7d,'Model 2',0 |
||
170 | db 0x82,0x8d,'CFA repeat pattern dim',0 |
||
171 | db 0x82,0x8e,'CFA pattern 2',0 |
||
172 | db 0x82,0x8f,'Battery level',0 |
||
173 | db 0x82,0x90,'Kodak IFD',0 |
||
4994 | IgorA | 174 | db 0x82,0x98,'Copyright',0 |
5002 | IgorA | 175 | db 0x82,0xa5,'MD file tag',0 |
176 | db 0x82,0xa6,'MD scale pixel',0 |
||
177 | db 0x82,0xa7,'MD color table',0 |
||
178 | db 0x82,0xa8,'MD lab name',0 |
||
179 | db 0x82,0xa9,'MD sample info',0 |
||
180 | db 0x82,0xaa,'MD prep date',0 |
||
181 | db 0x82,0xab,'MD prep time',0 |
||
182 | db 0x82,0xac,'MD file units',0 |
||
183 | db 0x83,0x0e,'Pixel scale',0 |
||
184 | db 0x83,0x35,'Advent scale',0 |
||
185 | db 0x83,0x36,'Advent revision',0 |
||
186 | db 0x83,0x5c,'UIC1 tag',0 |
||
187 | db 0x83,0x5d,'UIC2 tag',0 |
||
188 | db 0x83,0x5e,'UIC3 tag',0 |
||
189 | db 0x83,0x5f,'UIC4 tag',0 |
||
190 | db 0x83,0xbb,'IPTC-NAA',0 |
||
191 | db 0x84,0x7e,'Intergraph packet data',0 |
||
192 | db 0x84,0x7f,'Intergraph flag registers',0 |
||
193 | db 0x84,0x80,'Intergraph matrix',0 |
||
194 | db 0x84,0x81,'INGR reserved',0 |
||
195 | db 0x84,0x82,'Model tie point',0 |
||
196 | db 0x84,0xe0,'Site',0 |
||
197 | db 0x84,0xe1,'Color sequence',0 |
||
198 | db 0x84,0xe2,'IT8 header',0 |
||
199 | db 0x84,0xe3,'Raster padding',0 |
||
200 | db 0x84,0xe4,'Bits per run length',0 |
||
201 | db 0x84,0xe5,'Bits per extended run length',0 |
||
202 | db 0x84,0xe6,'Color table',0 |
||
203 | db 0x84,0xe7,'Image color indicator',0 |
||
204 | db 0x84,0xe8,'Background color indicator',0 |
||
205 | db 0x84,0xe9,'Image color value',0 |
||
206 | db 0x84,0xea,'Background color value',0 |
||
207 | db 0x84,0xeb,'Pixel intensity range',0 |
||
208 | db 0x84,0xec,'Transparency indicator',0 |
||
209 | db 0x84,0xed,'Color characterization',0 |
||
210 | db 0x84,0xee,'HCUsage',0 |
||
211 | db 0x84,0xef,'Trap indicator',0 |
||
212 | db 0x84,0xf0,'CMYK equivalent',0 |
||
213 | db 0x85,0x46,'SEM info',0 |
||
214 | db 0x85,0x68,'AFCP_IPTC',0 |
||
215 | db 0x85,0xb8,'Pixel magic JBIG options',0 |
||
216 | db 0x85,0xd8,'Model transform',0 |
||
217 | db 0x86,0x02,'WB_GRGB levels',0 |
||
218 | db 0x86,0x06,'Leaf data',0 |
||
219 | db 0x86,0x49,'Photoshop settings',0 |
||
4994 | IgorA | 220 | db 0x87,0x69,'Exif offset',0 |
5002 | IgorA | 221 | db 0x87,0x73,'ICC_Profile',0 |
222 | db 0x87,0x7f,'TIFF_FX extensions',0 |
||
223 | db 0x87,0x80,'Multi profiles',0 |
||
224 | db 0x87,0x81,'Shared data',0 |
||
225 | db 0x87,0x82,'T88 options',0 |
||
226 | db 0x87,0xac,'Image layer',0 |
||
227 | db 0x87,0xaf,'Geo tiff directory',0 |
||
228 | db 0x87,0xb0,'Geo tiff double params',0 |
||
229 | db 0x87,0xb1,'Geo tiff ascii params',0 |
||
5009 | IgorA | 230 | db 0x88,0x25,'GPS info',0 |
5002 | IgorA | 231 | db 0x88,0x28,'Opto-Electric conv factor',0 |
232 | db 0x88,0x29,'Interlace',0 |
||
233 | db 0x88,0x5c,'Fax recv params',0 |
||
234 | db 0x88,0x5d,'Fax sub address',0 |
||
235 | db 0x88,0x5e,'Fax recv time',0 |
||
236 | db 0x88,0x8a,'Leaf sub IFD',0 |
||
237 | db 0x92,0x0b,'Flash energy',0 |
||
238 | db 0x92,0x0c,'Spatial frequency response',0 |
||
239 | db 0x92,0x0d,'Noise',0 |
||
240 | db 0x92,0x0e,'Focal plane X resolution',0 |
||
241 | db 0x92,0x0f,'Focal plane Y resolution',0 |
||
242 | db 0x92,0x10,'Focal plane resolution unit',0 |
||
243 | db 0x92,0x15,'Exposure index',0 |
||
244 | db 0x92,0x16,'TIFF-EP standard ID',0 |
||
245 | db 0x92,0x17,'Sensing method',0 |
||
246 | db 0x92,0x3a,'CIP3 data file',0 |
||
247 | db 0x92,0x3b,'CIP3 sheet',0 |
||
248 | db 0x92,0x3c,'CIP3 side',0 |
||
249 | db 0x92,0x3f,'Sto nits',0 |
||
250 | db 0x93,0x2f,'MS document text',0 |
||
251 | db 0x93,0x30,'MS property set storage',0 |
||
252 | db 0x93,0x31,'MS document text position',0 |
||
253 | db 0x93,0x5c,'Image source data',0 |
||
254 | db 0x9c,0x9b,'XP title',0 |
||
255 | db 0x9c,0x9c,'XP comment',0 |
||
256 | db 0x9c,0x9d,'XP author',0 |
||
257 | db 0x9c,0x9e,'XP keywords',0 |
||
258 | db 0x9c,0x9f,'XP subject',0 |
||
259 | db 0xa2,0x0c,'Spatial frequency fesponse',0 |
||
260 | db 0xa2,0x0d,'Noise',0 |
||
261 | db 0xa2,0x11,'Image number',0 |
||
262 | db 0xa2,0x12,'Security classification',0 |
||
263 | db 0xa2,0x13,'Image history',0 |
||
264 | db 0xa2,0x16,'TIFF-EP standard ID',0 |
||
4995 | IgorA | 265 | db 0xa4,0x80,'GDAL metadata',0 |
266 | db 0xa4,0x81,'GDAL no data',0 |
||
267 | db 0xaf,0xc0,'Expand software',0 |
||
268 | db 0xaf,0xc1,'Expand lens',0 |
||
269 | db 0xaf,0xc2,'Expand film',0 |
||
270 | db 0xaf,0xc3,'Expand filterLens',0 |
||
271 | db 0xaf,0xc4,'Expand scanner',0 |
||
272 | db 0xaf,0xc5,'Expand flash lamp',0 |
||
5002 | IgorA | 273 | db 0xbc,0x01,'Pixel format',0 |
274 | db 0xbc,0x02,'Transformation',0 |
||
275 | db 0xbc,0x03,'Uncompressed',0 |
||
276 | db 0xbc,0x04,'Image type',0 |
||
277 | db 0xbc,0x80,'Image width',0 |
||
278 | db 0xbc,0x81,'Image height',0 |
||
279 | db 0xbc,0x82,'Width resolution',0 |
||
280 | db 0xbc,0x83,'Height resolution',0 |
||
281 | db 0xbc,0xc0,'Image offset',0 |
||
282 | db 0xbc,0xc1,'Image byte count',0 |
||
283 | db 0xbc,0xc2,'Alpha offset',0 |
||
284 | db 0xbc,0xc3,'Alpha byte count',0 |
||
285 | db 0xbc,0xc4,'Image data discard',0 |
||
286 | db 0xbc,0xc5,'Alpha data discard',0 |
||
287 | db 0xc4,0x27,'Oce scanjob desc',0 |
||
288 | db 0xc4,0x28,'Oce application selector',0 |
||
289 | db 0xc4,0x29,'Oce ID number',0 |
||
290 | db 0xc4,0x2a,'Oce image logic',0 |
||
291 | db 0xc4,0x4f,'Annotations',0 |
||
292 | db 0xc4,0xa5,'Print IM',0 |
||
293 | db 0xc5,0x73,'Original file name',0 |
||
294 | db 0xc5,0x80,'USPTO original content type',0 |
||
295 | db 0xc6,0x12,'DNG version',0 |
||
296 | db 0xc6,0x13,'DNG backward version',0 |
||
297 | db 0xc6,0x14,'Unique camera model',0 |
||
298 | db 0xc6,0x15,'Localized camera model',0 |
||
299 | db 0xc6,0x16,'CFA plane color',0 |
||
300 | db 0xc6,0x17,'CFA layout',0 |
||
301 | db 0xc6,0x18,'Linearization table',0 |
||
302 | db 0xc6,0x19,'Black level repeat dim',0 |
||
303 | db 0xc6,0x1a,'Black level',0 |
||
304 | db 0xc6,0x1b,'Black level delta H',0 |
||
305 | db 0xc6,0x1c,'Black level delta V',0 |
||
306 | db 0xc6,0x1d,'White level',0 |
||
307 | db 0xc6,0x1e,'Default scale',0 |
||
308 | db 0xc6,0x1f,'Default crop origin',0 |
||
309 | db 0xc6,0x20,'Default crop size',0 |
||
310 | db 0xc6,0x21,'Color matrix 1',0 |
||
311 | db 0xc6,0x22,'Color matrix 2',0 |
||
312 | db 0xc6,0x23,'Camera calibration 1',0 |
||
313 | db 0xc6,0x24,'Camera calibration 2',0 |
||
314 | db 0xc6,0x25,'Reduction matrix 1',0 |
||
315 | db 0xc6,0x26,'Reduction matrix 2',0 |
||
316 | db 0xc6,0x27,'Analog balance',0 |
||
317 | db 0xc6,0x28,'As shot neutral',0 |
||
318 | db 0xc6,0x29,'As shot white XY',0 |
||
319 | db 0xc6,0x2a,'BaselineExposure',0 |
||
320 | db 0xc6,0x2b,'BaselineNoise',0 |
||
321 | db 0xc6,0x2c,'BaselineSharpness',0 |
||
322 | db 0xc6,0x2d,'BayerGreenSplit',0 |
||
323 | db 0xc6,0x2e,'Linear response limit',0 |
||
324 | db 0xc6,0x2f,'Camera serial number',0 |
||
325 | db 0xc6,0x30,'DNG lens info',0 |
||
326 | db 0xc6,0x31,'Chroma blur radius',0 |
||
327 | db 0xc6,0x32,'Anti alias strength',0 |
||
328 | db 0xc6,0x33,'Shadow scale',0 |
||
329 | db 0xc6,0x34,'SR2 private',0 |
||
330 | db 0xc6,0x35,'Maker note safety',0 |
||
331 | db 0xc6,0x40,'Raw image segmentation',0 |
||
332 | db 0xc6,0x5a,'Calibration illuminant 1',0 |
||
333 | db 0xc6,0x5b,'Calibration illuminant 2',0 |
||
334 | db 0xc6,0x5c,'Best quality scale',0 |
||
335 | db 0xc6,0x5d,'Raw data unique ID',0 |
||
336 | db 0xc6,0x60,'Alias layer metadata',0 |
||
337 | db 0xc6,0x8b,'Original raw file name',0 |
||
338 | db 0xc6,0x8c,'Original raw file data',0 |
||
339 | db 0xc6,0x8d,'Active area',0 |
||
340 | db 0xc6,0x8e,'Masked areas',0 |
||
341 | db 0xc6,0x8f,'AsShot ICC profile',0 |
||
342 | db 0xc6,0x90,'AsShot pre profile matrix',0 |
||
343 | db 0xc6,0x91,'Current ICC profile',0 |
||
344 | db 0xc6,0x92,'Current pre profile matrix',0 |
||
345 | db 0xc6,0xbf,'Colorimetric reference',0 |
||
346 | db 0xc6,0xd2,'Panasonic title',0 |
||
347 | db 0xc6,0xd3,'Panasonic title 2',0 |
||
348 | db 0xc6,0xf3,'Camera calibration sig',0 |
||
349 | db 0xc6,0xf4,'Profile calibration sig',0 |
||
350 | db 0xc6,0xf5,'Profile IFD',0 |
||
351 | db 0xc6,0xf6,'AsShot profile name',0 |
||
352 | db 0xc6,0xf7,'Noise reduction applied',0 |
||
353 | db 0xc6,0xf8,'Profile name',0 |
||
354 | db 0xc6,0xf9,'Profile hue sat map dims',0 |
||
355 | db 0xc6,0xfa,'Profile hue sat map data 1',0 |
||
356 | db 0xc6,0xfb,'Profile hue sat map data 2',0 |
||
357 | db 0xc6,0xfc,'Profile tone curve',0 |
||
358 | db 0xc6,0xfd,'Profile embed policy',0 |
||
359 | db 0xc6,0xfe,'Profile copyright',0 |
||
360 | db 0xc7,0x14,'Forward matrix 1',0 |
||
361 | db 0xc7,0x15,'Forward matrix 2',0 |
||
362 | db 0xc7,0x16,'Preview application name',0 |
||
363 | db 0xc7,0x17,'Preview application version',0 |
||
364 | db 0xc7,0x18,'Preview settings name',0 |
||
365 | db 0xc7,0x19,'Preview settings digest',0 |
||
366 | db 0xc7,0x1a,'Preview color space',0 |
||
367 | db 0xc7,0x1b,'Preview date time',0 |
||
368 | db 0xc7,0x1c,'Raw image digest',0 |
||
369 | db 0xc7,0x1d,'Original raw file digest',0 |
||
370 | db 0xc7,0x1e,'Sub tile block size',0 |
||
371 | db 0xc7,0x1f,'Row interleave factor',0 |
||
372 | db 0xc7,0x25,'Profile look table dims',0 |
||
373 | db 0xc7,0x26,'Profile look table data',0 |
||
374 | db 0xc7,0x40,'Opcode list 1',0 |
||
375 | db 0xc7,0x41,'Opcode list 2',0 |
||
376 | db 0xc7,0x4e,'Opcode list 3',0 |
||
377 | db 0xc7,0x61,'Noise profile',0 |
||
378 | db 0xc7,0x63,'Time codes',0 |
||
379 | db 0xc7,0x64,'Frame rate',0 |
||
380 | db 0xc7,0x72,'TStop',0 |
||
381 | db 0xc7,0x89,'Reel name',0 |
||
382 | db 0xc7,0x91,'Original default final size',0 |
||
383 | db 0xc7,0x92,'Original best quality size',0 |
||
384 | db 0xc7,0x93,'Original default crop size',0 |
||
385 | db 0xc7,0xa1,'Camera label',0 |
||
386 | db 0xc7,0xa3,'Profile hue sat map encoding',0 |
||
387 | db 0xc7,0xa4,'Profile look table encoding',0 |
||
388 | db 0xc7,0xa5,'Baseline exposure offset',0 |
||
389 | db 0xc7,0xa6,'Default black render',0 |
||
390 | db 0xc7,0xa7,'New raw image digest',0 |
||
391 | db 0xc7,0xa8,'Raw to preview gain',0 |
||
392 | db 0xc7,0xb5,'Default user crop',0 |
||
5008 | IgorA | 393 | db 0xfe,0x00,'KDC_IFD',0 |
394 | |||
395 | dd 0 |
||
396 | |||
397 | align 4 |
||
398 | gr_8769: |
||
399 | db 0x02,0xbc,'Application notes',0 |
||
400 | db 0x82,0x9a,'Exposure time',0 |
||
401 | db 0x82,0x9d,'F number',0 |
||
402 | db 0x88,0x22,'Exposure program',0 |
||
403 | db 0x88,0x24,'Spectral sensitivity',0 |
||
404 | db 0x88,0x27,'ISO',0 |
||
405 | db 0x88,0x2a,'Time zone offset',0 |
||
406 | db 0x88,0x2b,'Self timer mode',0 |
||
407 | db 0x88,0x30,'Sensitivity type',0 |
||
408 | db 0x88,0x31,'Standard output sensitivity',0 |
||
409 | db 0x88,0x32,'Recommended exposure index',0 |
||
410 | db 0x88,0x33,'ISO speed',0 |
||
411 | db 0x88,0x34,'ISO speed latitude yyy',0 |
||
412 | db 0x88,0x35,'ISO speed latitude zzz',0 |
||
413 | db 0x90,0x00,'Exif version',0 |
||
414 | db 0x90,0x03,'Date time original',0 |
||
415 | db 0x90,0x04,'Create date',0 |
||
416 | db 0x91,0x01,'Components configuration',0 |
||
417 | db 0x91,0x02,'Compressed bits per pixel',0 |
||
418 | db 0x92,0x01,'Shutter speed value',0 |
||
419 | db 0x92,0x02,'Aperture value',0 |
||
420 | db 0x92,0x03,'Brightness value',0 |
||
421 | db 0x92,0x04,'Exposure compensation',0 |
||
422 | db 0x92,0x05,'Max aperture value',0 |
||
423 | db 0x92,0x06,'Subject distance',0 |
||
424 | db 0x92,0x07,'Metering mode',0 |
||
425 | db 0x92,0x08,'Light source',0 |
||
426 | db 0x92,0x09,'Flash',0 |
||
427 | db 0x92,0x0a,'Focal length',0 |
||
428 | db 0x92,0x11,'Image number',0 |
||
429 | db 0x92,0x12,'Security classification',0 |
||
430 | db 0x92,0x13,'Image history',0 |
||
431 | db 0x92,0x14,'Subject area',0 |
||
432 | db 0x92,0x7c,'Maker note',0 |
||
433 | db 0x92,0x86,'User comment',0 |
||
434 | db 0x92,0x90,'Sub sec time',0 |
||
435 | db 0x92,0x91,'Sub sec time original',0 |
||
436 | db 0x92,0x92,'Sub sec time digitized',0 |
||
437 | db 0xa0,0x00,'Flashpix version',0 |
||
438 | db 0xa0,0x01,'Color space',0 |
||
439 | db 0xa0,0x02,'Exif image width',0 |
||
440 | db 0xa0,0x03,'Exif image height',0 |
||
441 | db 0xa0,0x04,'Related sound file',0 |
||
442 | db 0xa0,0x05,'Interop offset',0 |
||
443 | db 0xa2,0x0b,'Flash energy',0 |
||
444 | db 0xa2,0x0e,'Focal plane X resolution',0 |
||
445 | db 0xa2,0x0f,'Focal plane Y resolution',0 |
||
446 | db 0xa2,0x10,'Focal plane resolution unit',0 |
||
447 | db 0xa2,0x14,'Subject location',0 |
||
448 | db 0xa2,0x15,'Exposure index',0 |
||
449 | db 0xa2,0x17,'Sensing method',0 |
||
450 | db 0xa3,0x00,'File source',0 |
||
451 | db 0xa3,0x01,'Scene type',0 |
||
452 | db 0xa3,0x02,'CFA pattern',0 |
||
453 | db 0xa4,0x01,'Custom rendered',0 |
||
454 | db 0xa4,0x02,'Exposure mode',0 |
||
455 | db 0xa4,0x03,'White balance',0 |
||
456 | db 0xa4,0x04,'Digital zoom ratio',0 |
||
457 | db 0xa4,0x05,'Focal length in 35mm format',0 |
||
458 | db 0xa4,0x06,'Scene capture type',0 |
||
459 | db 0xa4,0x07,'Gain control',0 |
||
460 | db 0xa4,0x08,'Contrast',0 |
||
461 | db 0xa4,0x09,'Saturation',0 |
||
462 | db 0xa4,0x0a,'Sharpness',0 |
||
463 | db 0xa4,0x0b,'Device setting description',0 |
||
464 | db 0xa4,0x0c,'Subject distance range',0 |
||
465 | db 0xa4,0x20,'Image unique ID',0 |
||
466 | db 0xa4,0x30,'Owner name',0 |
||
467 | db 0xa4,0x31,'Serial number',0 |
||
468 | db 0xa4,0x32,'Lens info',0 |
||
469 | db 0xa4,0x33,'Lens make',0 |
||
470 | db 0xa4,0x34,'Lens model',0 |
||
471 | db 0xa4,0x35,'Lens serial number',0 |
||
472 | db 0xa5,0x00,'Gamma',0 |
||
5002 | IgorA | 473 | db 0xea,0x1c,'Padding',0 |
474 | db 0xea,0x1d,'Offset schema',0 |
||
475 | db 0xfd,0xe8,'Owner name',0 |
||
476 | db 0xfd,0xe9,'Serial number',0 |
||
477 | db 0xfd,0xea,'Lens',0 |
||
478 | db 0xfe,0x4c,'Raw file',0 |
||
479 | db 0xfe,0x4d,'Converter',0 |
||
480 | db 0xfe,0x4e,'White balance',0 |
||
481 | db 0xfe,0x51,'Exposure',0 |
||
482 | db 0xfe,0x52,'Shadows',0 |
||
483 | db 0xfe,0x53,'Brightness',0 |
||
484 | db 0xfe,0x54,'Contrast',0 |
||
485 | db 0xfe,0x55,'Saturation',0 |
||
486 | db 0xfe,0x56,'Sharpness',0 |
||
487 | db 0xfe,0x57,'Smoothness',0 |
||
488 | db 0xfe,0x58,'Moire filter',0 |
||
4995 | IgorA | 489 | |
5008 | IgorA | 490 | dd 0 |
491 | |||
492 | align 4 |
||
493 | gr_a005: |
||
494 | db 0x00,0x01,'Interop index',0 |
||
495 | db 0x00,0x02,'Interop version',0 |
||
496 | db 0x10,0x00,'Related image file format',0 |
||
497 | db 0x10,0x01,'Related image width',0 |
||
498 | db 0x10,0x02,'Related image height',0 |
||
499 | dd 0 |
||
500 | |||
501 | align 4 |
||
502 | gr_8825: |
||
5007 | IgorA | 503 | db 0x00,0x00,'GPS version ID',0 |
5008 | IgorA | 504 | db 0x00,0x01,'GPS latitude ref',0 |
505 | db 0x00,0x02,'GPS latitude',0 |
||
506 | db 0x00,0x03,'GPS longitude ref',0 |
||
507 | db 0x00,0x04,'GPS longitude',0 |
||
508 | db 0x00,0x05,'GPS altitude ref',0 |
||
509 | db 0x00,0x06,'GPS altitude',0 |
||
510 | db 0x00,0x07,'GPS time stamp',0 |
||
511 | db 0x00,0x08,'GPS satellites',0 |
||
512 | db 0x00,0x09,'GPS status',0 |
||
513 | db 0x00,0x0a,'GPS measuremode',0 |
||
514 | db 0x00,0x0b,'GPS dop',0 |
||
515 | db 0x00,0x0c,'GPS speed ref',0 |
||
516 | db 0x00,0x0d,'GPS speed',0 |
||
517 | db 0x00,0x0e,'GPS track ref',0 |
||
518 | db 0x00,0x0f,'GPS track',0 |
||
519 | db 0x00,0x10,'GPS img direction ref',0 |
||
520 | db 0x00,0x11,'GPS img direction',0 |
||
521 | db 0x00,0x12,'GPS map datum',0 |
||
522 | db 0x00,0x13,'GPS dest latitude ref',0 |
||
523 | db 0x00,0x14,'GPS dest latitude',0 |
||
524 | db 0x00,0x15,'GPS dest longitude ref',0 |
||
525 | db 0x00,0x16,'GPS dest longitude',0 |
||
526 | db 0x00,0x17,'GPS dest bearing ref',0 |
||
527 | db 0x00,0x18,'GPS dest bearing',0 |
||
528 | db 0x00,0x19,'GPS dest distance ref',0 |
||
529 | db 0x00,0x1a,'GPS dest distance',0 |
||
530 | db 0x00,0x1b,'GPS processing method',0 |
||
531 | db 0x00,0x1c,'GPS area information',0 |
||
532 | db 0x00,0x1d,'GPS date stamp',0 |
||
533 | db 0x00,0x1e,'GPS differential',0 |
||
534 | db 0x00,0x1f,'GPS h positioning error',0 |
||
4994 | IgorA | 535 | |
5007 | IgorA | 536 | dd 0 |
537 | |||
5010 | IgorA | 538 | ;данные app2 для Nikon |
539 | align 4 |
||
540 | gr_927c_Ni: |
||
541 | db 0x00,0x01,'MakerNoteVersion',0 |
||
542 | db 0x00,0x02,'ISO',0 |
||
543 | db 0x00,0x03,'ColorMode',0 |
||
544 | db 0x00,0x04,'Quality',0 |
||
545 | db 0x00,0x05,'WhiteBalance',0 |
||
546 | db 0x00,0x06,'Sharpness',0 |
||
547 | db 0x00,0x07,'FocusMode',0 |
||
548 | db 0x00,0x08,'FlashSetting',0 |
||
549 | db 0x00,0x09,'FlashType',0 |
||
550 | db 0x00,0x0b,'WhiteBalanceFineTune',0 |
||
551 | db 0x00,0x0c,'WB_RBLevels',0 |
||
552 | db 0x00,0x0d,'ProgramShift',0 |
||
553 | db 0x00,0x0e,'ExposureDifference',0 |
||
554 | db 0x00,0x0f,'ISOSelection',0 |
||
555 | db 0x00,0x10,'DataDump',0 |
||
556 | db 0x00,0x11,'PreviewIFD',0 |
||
557 | db 0x00,0x12,'FlashExposureComp',0 |
||
558 | db 0x00,0x13,'ISOSetting',0 |
||
559 | db 0x00,0x14,'ColorBalanceA ',0 |
||
560 | db 0x00,0x16,'ImageBoundary',0 |
||
561 | db 0x00,0x17,'ExternalFlashExposureComp',0 |
||
562 | db 0x00,0x18,'FlashExposureBracketValue',0 |
||
563 | db 0x00,0x19,'ExposureBracketValue',0 |
||
564 | db 0x00,0x1a,'ImageProcessing',0 |
||
565 | db 0x00,0x1b,'CropHiSpeed',0 |
||
566 | db 0x00,0x1c,'ExposureTuning',0 |
||
567 | db 0x00,0x1d,'SerialNumber',0 |
||
568 | db 0x00,0x1e,'ColorSpace',0 |
||
569 | db 0x00,0x1f,'VRInfo',0 |
||
570 | db 0x00,0x20,'ImageAuthentication',0 |
||
571 | db 0x00,0x21,'FaceDetect',0 |
||
572 | db 0x00,0x22,'ActiveD-Lighting',0 |
||
573 | db 0x00,0x23,'PictureControlData',0 |
||
574 | db 0x00,0x24,'WorldTime',0 |
||
575 | db 0x00,0x25,'ISOInfo',0 |
||
576 | db 0x00,0x2a,'VignetteControl',0 |
||
577 | db 0x00,0x2b,'DistortInfo',0 |
||
578 | db 0x00,0x2c,'UnknownInfo',0 |
||
579 | db 0x00,0x32,'UnknownInfo2',0 |
||
580 | db 0x00,0x35,'HDRInfo',0 |
||
581 | db 0x00,0x39,'LocationInfo',0 |
||
582 | db 0x00,0x3d,'BlackLevel',0 |
||
583 | db 0x00,0x80,'ImageAdjustment',0 |
||
584 | db 0x00,0x81,'ToneComp',0 |
||
585 | db 0x00,0x82,'AuxiliaryLens',0 |
||
586 | db 0x00,0x83,'LensType',0 |
||
587 | db 0x00,0x84,'Lens',0 |
||
588 | db 0x00,0x85,'ManualFocusDistance',0 |
||
589 | db 0x00,0x86,'DigitalZoom',0 |
||
590 | db 0x00,0x87,'FlashMode',0 |
||
591 | db 0x00,0x88,'AFInfo',0 |
||
592 | db 0x00,0x89,'ShootingMode',0 |
||
593 | db 0x00,0x8b,'LensFStops',0 |
||
594 | db 0x00,0x8c,'ContrastCurve',0 |
||
595 | db 0x00,0x8d,'ColorHue',0 |
||
596 | db 0x00,0x8f,'SceneMode',0 |
||
597 | db 0x00,0x90,'LightSource',0 |
||
598 | db 0x00,0x91,'ShotInfo',0 |
||
599 | db 0x00,0x92,'HueAdjustment',0 |
||
600 | db 0x00,0x93,'NEFCompression',0 |
||
601 | db 0x00,0x94,'Saturation',0 |
||
602 | db 0x00,0x95,'NoiseReduction',0 |
||
603 | db 0x00,0x96,'NEFLinearizationTable',0 |
||
604 | db 0x00,0x97,'ColorBalance',0 |
||
605 | db 0x00,0x98,'LensData',0 |
||
606 | db 0x00,0x99,'RawImageCenter',0 |
||
607 | db 0x00,0x9a,'SensorPixelSize',0 |
||
608 | db 0x00,0x9c,'SceneAssist',0 |
||
609 | db 0x00,0x9e,'RetouchHistory',0 |
||
610 | db 0x00,0xa0,'SerialNumber',0 |
||
611 | db 0x00,0xa2,'ImageDataSize',0 |
||
612 | db 0x00,0xa5,'ImageCount',0 |
||
613 | db 0x00,0xa6,'DeletedImageCount',0 |
||
614 | db 0x00,0xa7,'ShutterCount',0 |
||
615 | db 0x00,0xa8,'FlashInfo',0 |
||
616 | db 0x00,0xa9,'ImageOptimization',0 |
||
617 | db 0x00,0xaa,'Saturation',0 |
||
618 | db 0x00,0xab,'VariProgram',0 |
||
619 | db 0x00,0xac,'ImageStabilization',0 |
||
620 | db 0x00,0xad,'AFResponse',0 |
||
621 | db 0x00,0xb0,'MultiExposure',0 |
||
622 | db 0x00,0xb1,'HighISONoiseReduction',0 |
||
623 | db 0x00,0xb3,'ToningEffect',0 |
||
624 | db 0x00,0xb6,'PowerUpTime',0 |
||
625 | db 0x00,0xb7,'AFInfo2',0 |
||
626 | db 0x00,0xb8,'FileInfo',0 |
||
627 | db 0x00,0xb9,'AFTune',0 |
||
628 | db 0x00,0xbd,'PictureControlData',0 |
||
629 | db 0x00,0xc3,'BarometerInfo',0 |
||
630 | db 0x0e,0x00,'PrintIM',0 |
||
631 | db 0x0e,0x01,'NikonCaptureData',0 |
||
632 | db 0x0e,0x09,'NikonCaptureVersion',0 |
||
633 | db 0x0e,0x0e,'NikonCaptureOffsets',0 |
||
634 | db 0x0e,0x10,'NikonScanIFD',0 |
||
635 | db 0x0e,0x13,'NikonCaptureEditVersions ',0 |
||
636 | db 0x0e,0x1d,'NikonICCProfile',0 |
||
637 | db 0x0e,0x1e,'NikonCaptureOutput',0 |
||
638 | db 0x0e,0x22,'NEFBitDepth',0 |
||
639 | |||
640 | dd 0 |
||
641 | |||
642 | ;данные app2 для Panasonic |
||
643 | align 4 |
||
644 | gr_927c_Pa: |
||
645 | db 0x00,0x01,'ImageQuality',0 |
||
646 | db 0x00,0x02,'FirmwareVersion',0 |
||
647 | db 0x00,0x03,'WhiteBalance',0 |
||
648 | db 0x00,0x07,'FocusMode',0 |
||
649 | db 0x00,0x0f,'AFAreaMode',0 |
||
650 | db 0x00,0x1a,'ImageStabilization',0 |
||
651 | db 0x00,0x1c,'MacroMode',0 |
||
652 | db 0x00,0x1f,'ShootingMode',0 |
||
653 | db 0x00,0x20,'Audio',0 |
||
654 | db 0x00,0x21,'DataDump',0 |
||
655 | db 0x00,0x23,'WhiteBalanceBias',0 |
||
656 | db 0x00,0x24,'FlashBias',0 |
||
657 | db 0x00,0x25,'InternalSerialNumber',0 |
||
658 | db 0x00,0x26,'PanasonicExifVersion',0 |
||
659 | db 0x00,0x28,'ColorEffect',0 |
||
660 | db 0x00,0x29,'TimeSincePowerOn',0 |
||
661 | db 0x00,0x2a,'BurstMode',0 |
||
662 | db 0x00,0x2b,'SequenceNumber',0 |
||
663 | db 0x00,0x2c,'ContrastMode',0 |
||
664 | db 0x00,0x2d,'NoiseReduction',0 |
||
665 | db 0x00,0x2e,'SelfTimer',0 |
||
666 | db 0x00,0x30,'Rotation',0 |
||
667 | db 0x00,0x31,'AFAssistLamp',0 |
||
668 | db 0x00,0x32,'ColorMode',0 |
||
669 | db 0x00,0x33,'BabyAge',0 |
||
670 | db 0x00,0x34,'OpticalZoomMode',0 |
||
671 | db 0x00,0x35,'ConversionLens',0 |
||
672 | db 0x00,0x36,'TravelDay',0 |
||
673 | db 0x00,0x39,'Contrast',0 |
||
674 | db 0x00,0x3a,'WorldTimeLocation',0 |
||
675 | db 0x00,0x3b,'TextStamp',0 |
||
676 | db 0x00,0x3c,'ProgramISO',0 |
||
677 | db 0x00,0x3d,'AdvancedSceneType',0 |
||
678 | db 0x00,0x3f,'FacesDetected',0 |
||
679 | db 0x00,0x40,'Saturation',0 |
||
680 | db 0x00,0x41,'Sharpness',0 |
||
681 | db 0x00,0x42,'FilmMode',0 |
||
682 | db 0x00,0x44,'ColorTempKelvin',0 |
||
683 | db 0x00,0x45,'BracketSettings',0 |
||
684 | db 0x00,0x46,'WBShiftAB',0 |
||
685 | db 0x00,0x47,'WBShiftGM',0 |
||
686 | db 0x00,0x48,'FlashCurtain',0 |
||
687 | db 0x00,0x49,'LongExposureNoiseReduction',0 |
||
688 | db 0x00,0x4b,'PanasonicImageWidth',0 |
||
689 | db 0x00,0x4c,'PanasonicImageHeight',0 |
||
690 | db 0x00,0x4d,'AFPointPosition',0 |
||
691 | db 0x00,0x51,'LensType',0 |
||
692 | db 0x00,0x52,'LensSerialNumber',0 |
||
693 | db 0x00,0x53,'AccessoryType',0 |
||
694 | db 0x00,0x54,'AccessorySerialNumber',0 |
||
695 | db 0x00,0x59,'Transform',0 |
||
696 | db 0x00,0x5d,'IntelligentExposure',0 |
||
697 | db 0x00,0x60,'LensFirmwareVersion',0 |
||
698 | db 0x00,0x61,'FaceRecInfo',0 |
||
699 | db 0x00,0x62,'FlashWarning',0 |
||
700 | db 0x00,0x63,'RecognizedFaceFlags',0 |
||
701 | db 0x00,0x65,'Title',0 |
||
702 | db 0x00,0x66,'BabyName',0 |
||
703 | db 0x00,0x67,'Location',0 |
||
704 | db 0x00,0x69,'Country',0 |
||
705 | db 0x00,0x6b,'State',0 |
||
706 | db 0x00,0x6d,'City',0 |
||
707 | db 0x00,0x6f,'Landmark',0 |
||
708 | db 0x00,0x70,'IntelligentResolution',0 |
||
709 | db 0x00,0x77,'BurstSpeed',0 |
||
710 | db 0x00,0x79,'IntelligentD-Range',0 |
||
711 | db 0x00,0x7c,'ClearRetouch',0 |
||
712 | db 0x00,0x86,'ManometerPressure',0 |
||
713 | db 0x00,0x89,'PhotoStyle',0 |
||
714 | db 0x00,0x8a,'ShadingCompensation',0 |
||
715 | db 0x00,0x8c,'AccelerometerZ',0 |
||
716 | db 0x00,0x8d,'AccelerometerX',0 |
||
717 | db 0x00,0x8e,'AccelerometerY',0 |
||
718 | db 0x00,0x8f,'CameraOrientation',0 |
||
719 | db 0x00,0x90,'RollAngle',0 |
||
720 | db 0x00,0x91,'PitchAngle',0 |
||
721 | db 0x00,0x93,'SweepPanoramaDirection',0 |
||
722 | db 0x00,0x94,'SweepPanoramaFieldOfView',0 |
||
723 | db 0x00,0x96,'TimerRecording',0 |
||
724 | db 0x00,0x9d,'InternalNDFilter',0 |
||
725 | db 0x00,0x9e,'HDR',0 |
||
726 | db 0x00,0x9f,'ShutterType',0 |
||
727 | db 0x00,0xa3,'ClearRetouchValue',0 |
||
728 | db 0x00,0xab,'TouchAE',0 |
||
729 | db 0x0e,0x00,'PrintIM',0 |
||
730 | db 0x80,0x00,'MakerNoteVersion',0 |
||
731 | db 0x80,0x01,'SceneMode',0 |
||
732 | db 0x80,0x04,'WBRedLevel',0 |
||
733 | db 0x80,0x05,'WBGreenLevel',0 |
||
734 | db 0x80,0x06,'WBBlueLevel',0 |
||
735 | db 0x80,0x07,'FlashFired',0 |
||
736 | db 0x80,0x08,'TextStamp',0 |
||
737 | db 0x80,0x09,'TextStamp',0 |
||
738 | db 0x80,0x10,'BabyAge',0 |
||
739 | db 0x80,0x12,'Transform',0 |
||
740 | |||
741 | dd 0 |
||
742 | |||
743 | ;данные app2 для Canon |
||
744 | align 4 |
||
745 | gr_927c_Ca: |
||
746 | db 0x00,0x01,'CanonCameraSettings',0 |
||
747 | db 0x00,0x02,'CanonFocalLength',0 |
||
748 | db 0x00,0x03,'CanonFlashInfo?',0 |
||
749 | db 0x00,0x04,'CanonShotInfo',0 |
||
750 | db 0x00,0x05,'CanonPanorama',0 |
||
751 | db 0x00,0x06,'CanonImageType',0 |
||
752 | db 0x00,0x07,'CanonFirmwareVersion',0 |
||
753 | db 0x00,0x08,'FileNumber',0 |
||
754 | db 0x00,0x09,'OwnerName',0 |
||
755 | db 0x00,0x0a,'UnknownD30',0 |
||
756 | db 0x00,0x0c,'SerialNumber',0 |
||
757 | db 0x00,0x0d,'CanonCameraInfo',0 |
||
758 | db 0x00,0x0e,'CanonFileLength',0 |
||
759 | db 0x00,0x0f,'CustomFunctions',0 |
||
760 | db 0x00,0x10,'CanonModelID',0 |
||
761 | db 0x00,0x11,'MovieInfo',0 |
||
762 | db 0x00,0x12,'CanonAFInfo',0 |
||
763 | db 0x00,0x13,'ThumbnailImageValidArea',0 |
||
764 | db 0x00,0x15,'SerialNumberFormat',0 |
||
765 | db 0x00,0x1a,'SuperMacro',0 |
||
766 | db 0x00,0x1c,'DateStampMode',0 |
||
767 | db 0x00,0x1d,'MyColors',0 |
||
768 | db 0x00,0x1e,'FirmwareRevision',0 |
||
769 | db 0x00,0x23,'Categories',0 |
||
770 | db 0x00,0x24,'FaceDetect1',0 |
||
771 | db 0x00,0x25,'FaceDetect2',0 |
||
772 | db 0x00,0x26,'CanonAFInfo2',0 |
||
773 | db 0x00,0x27,'ContrastInfo',0 |
||
774 | db 0x00,0x28,'ImageUniqueID',0 |
||
775 | db 0x00,0x2f,'FaceDetect3',0 |
||
776 | db 0x00,0x35,'TimeInfo',0 |
||
777 | db 0x00,0x81,'RawDataOffset',0 |
||
778 | db 0x00,0x83,'OriginalDecisionDataOffset',0 |
||
779 | db 0x00,0x90,'CustomFunctions1D',0 |
||
780 | db 0x00,0x91,'PersonalFunctions',0 |
||
781 | db 0x00,0x92,'PersonalFunctionValues',0 |
||
782 | db 0x00,0x93,'CanonFileInfo',0 |
||
783 | db 0x00,0x94,'AFPointsInFocus1D',0 |
||
784 | db 0x00,0x95,'LensModel',0 |
||
785 | db 0x00,0x96,'SerialInfo ',0 |
||
786 | db 0x00,0x97,'DustRemovalData',0 |
||
787 | db 0x00,0x98,'CropInfo',0 |
||
788 | db 0x00,0x99,'CustomFunctions2',0 |
||
789 | db 0x00,0x9a,'AspectInfo',0 |
||
790 | db 0x00,0xa0,'ProcessingInfo',0 |
||
791 | db 0x00,0xa1,'ToneCurveTable',0 |
||
792 | db 0x00,0xa2,'SharpnessTable',0 |
||
793 | db 0x00,0xa3,'SharpnessFreqTable',0 |
||
794 | db 0x00,0xa4,'WhiteBalanceTable',0 |
||
795 | db 0x00,0xa9,'ColorBalance',0 |
||
796 | db 0x00,0xaa,'MeasuredColor',0 |
||
797 | db 0x00,0xae,'ColorTemperature',0 |
||
798 | db 0x00,0xb0,'CanonFlags',0 |
||
799 | db 0x00,0xb1,'ModifiedInfo',0 |
||
800 | db 0x00,0xb2,'ToneCurveMatching',0 |
||
801 | db 0x00,0xb3,'WhiteBalanceMatching',0 |
||
802 | db 0x00,0xb4,'ColorSpace',0 |
||
803 | db 0x00,0xb6,'PreviewImageInfo',0 |
||
804 | db 0x00,0xd0,'VRDOffset',0 |
||
805 | db 0x00,0xe0,'SensorInfo',0 |
||
806 | db 0x40,0x01,'ColorData',0 |
||
807 | db 0x40,0x02,'CRWParam?',0 |
||
808 | db 0x40,0x03,'ColorInfo',0 |
||
809 | db 0x40,0x05,'Flavor?',0 |
||
810 | db 0x40,0x08,'BlackLevel?',0 |
||
811 | db 0x40,0x10,'CustomPictureStyleFileName',0 |
||
812 | db 0x40,0x13,'AFMicroAdj',0 |
||
813 | db 0x40,0x15,'VignettingCorr ',0 |
||
814 | db 0x40,0x16,'VignettingCorr2',0 |
||
815 | db 0x40,0x18,'LightingOpt',0 |
||
816 | db 0x40,0x19,'LensInfo',0 |
||
817 | db 0x40,0x20,'AmbienceInfo',0 |
||
818 | db 0x40,0x24,'FilterInfo',0 |
||
819 | |||
820 | dd 0 |
||
821 | |||
4994 | IgorA | 822 | ;input: |
823 | ; bof - указатель на начало файла |
||
824 | ; app1 - указатель для заполнения exif.app1 |
||
825 | ;output: |
||
826 | ; app1 - указатель на начало exif.app1 (или 0 если не найдено или формат файла не поддерживается) |
||
827 | align 4 |
||
828 | proc exif_get_app1 uses eax ebx edi, bof:dword, app1:dword |
||
829 | mov eax,[bof] |
||
830 | mov edi,[app1] |
||
831 | |||
832 | ;файл в формате jpg? |
||
833 | cmp word[eax],0xd8ff |
||
834 | jne .no_exif |
||
835 | add eax,2 |
||
836 | |||
837 | ;файл содержит exif.app0? |
||
838 | cmp word[eax],0xe0ff |
||
839 | jne @f |
||
840 | add eax,2 |
||
841 | movzx ebx,word[eax] |
||
842 | ror bx,8 ;всегда ли так надо? |
||
843 | add eax,ebx |
||
844 | @@: |
||
845 | |||
846 | ;файл содержит exif.app1? |
||
847 | cmp word[eax],0xe1ff |
||
848 | jne .no_exif |
||
849 | |||
5007 | IgorA | 850 | xor ebx,ebx |
851 | cmp word[eax+10],'II' |
||
852 | je @f |
||
853 | inc ebx ;if 'MM' edx=1 |
||
854 | @@: |
||
5010 | IgorA | 855 | mov word[edi+offs_m_or_i],bx ;способ выравнивания чисел |
856 | mov dword[edi+offs_id_gr],0 ;id групы и производителя, который всегда 0 для app1 |
||
5007 | IgorA | 857 | add eax,18 |
4994 | IgorA | 858 | mov [edi],eax |
5007 | IgorA | 859 | sub eax,8 |
860 | mov [edi+4],eax |
||
4994 | IgorA | 861 | |
862 | jmp @f |
||
863 | .no_exif: |
||
864 | mov dword[edi],0 |
||
865 | @@: |
||
866 | ret |
||
867 | endp |
||
868 | |||
869 | ;input: |
||
870 | ; app1 - указатель на начало exif.app1 |
||
871 | ; num - порядковый номер тега (начинается с 1) |
||
872 | ; txt - указатель на текст, куда будет записано значение |
||
873 | ; t_max - максимальный размер текста |
||
874 | align 4 |
||
875 | proc exif_get_app1_tag, app1:dword, num:dword, txt:dword, t_max:dword |
||
876 | pushad |
||
877 | mov eax,[app1] |
||
878 | mov edi,[txt] |
||
879 | mov ecx,[num] |
||
880 | |||
881 | xor edx,edx |
||
5002 | IgorA | 882 | mov byte[edi],dl |
5007 | IgorA | 883 | cmp [eax],edx |
4994 | IgorA | 884 | je .end_f ;если не найден указатель на начало exif.app1 |
885 | cmp ecx,edx |
||
886 | jle .end_f ;если порядковый номер тега <= 0 |
||
887 | |||
5007 | IgorA | 888 | movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1 |
4994 | IgorA | 889 | |
890 | ;проверяем число тегов |
||
5007 | IgorA | 891 | mov eax,[eax] |
892 | movzx ebx,word[eax] |
||
4994 | IgorA | 893 | bt edx,0 |
894 | jnc @f |
||
895 | ror bx,8 |
||
896 | @@: |
||
897 | cmp ecx,ebx |
||
898 | jg .end_f ;если номер тега больше чем их есть в файле |
||
899 | |||
900 | ;переходим на заданный тег |
||
901 | dec ecx |
||
902 | imul ecx,tag_size |
||
903 | add eax,offs_tag_0 |
||
904 | add eax,ecx |
||
905 | |||
5002 | IgorA | 906 | stdcall read_tag_value,[app1],[t_max] |
907 | |||
908 | .end_f: |
||
909 | popad |
||
910 | ret |
||
911 | endp |
||
912 | |||
913 | ;input: |
||
5007 | IgorA | 914 | ; app1 - указатель на exif.app1 или на exif.app1.child |
5002 | IgorA | 915 | ; child - указатель для заполнения начала дочерних тегов exif.app1.child |
916 | ; c_tag - тег для которого делается поиск дочерних |
||
917 | ;output: |
||
918 | ; child - указатель на начало дочерних тегов |
||
919 | align 4 |
||
920 | proc exif_get_app1_child, app1:dword, child:dword , c_tag:dword |
||
921 | pushad |
||
922 | mov eax,[app1] |
||
923 | mov edi,[child] |
||
924 | |||
925 | xor edx,edx |
||
5007 | IgorA | 926 | cmp [eax],edx |
927 | je .no_found ;если не найден указатель на начало exif.app1 |
||
5002 | IgorA | 928 | |
5007 | IgorA | 929 | movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1 |
5002 | IgorA | 930 | |
931 | ;начало поиска |
||
932 | mov ebx,[c_tag] |
||
933 | bt edx,0 |
||
934 | jnc @f |
||
935 | ror bx,8 |
||
936 | @@: |
||
937 | |||
938 | ;проверяем число тегов |
||
5007 | IgorA | 939 | mov eax,[eax] |
940 | movzx ecx,word[eax] |
||
5002 | IgorA | 941 | bt edx,0 |
942 | jnc @f |
||
943 | ror cx,8 |
||
944 | @@: |
||
945 | cmp ecx,1 |
||
5007 | IgorA | 946 | jl .no_found ;если число тегов <1 |
5002 | IgorA | 947 | |
948 | ;переходим на 1-й тег |
||
949 | add eax,offs_tag_0 |
||
950 | @@: |
||
951 | cmp word[eax],bx |
||
952 | je @f |
||
953 | add eax,tag_size |
||
954 | loop @b |
||
5007 | IgorA | 955 | jmp .no_found ;если не найдено |
5002 | IgorA | 956 | @@: ;если найдено |
957 | mov ebx,dword[eax+8] |
||
958 | bt edx,0 |
||
959 | jnc @f |
||
960 | ror bx,8 |
||
961 | ror ebx,16 |
||
962 | ror bx,8 |
||
963 | @@: |
||
5007 | IgorA | 964 | mov eax,[app1] |
965 | add ebx,[eax+4] |
||
5002 | IgorA | 966 | mov dword[edi],ebx |
5007 | IgorA | 967 | m2m dword[edi+4],dword[eax+4] |
5008 | IgorA | 968 | ror edx,16 |
969 | mov dx,word[c_tag] |
||
970 | ror edx,16 |
||
5007 | IgorA | 971 | mov dword[edi+offs_m_or_i],edx |
5010 | IgorA | 972 | m2m word[edi+offs_id_gr_mak],word[eax+offs_id_gr_mak] |
5002 | IgorA | 973 | |
5007 | IgorA | 974 | jmp .end_f |
975 | .no_found: |
||
976 | mov dword[edi],0 |
||
5002 | IgorA | 977 | .end_f: |
978 | popad |
||
979 | ret |
||
980 | endp |
||
981 | |||
5009 | IgorA | 982 | ;output: |
983 | ; app2 - указатель на начало exif.app2 (или 0 если не найдено или формат файла не поддерживается) |
||
984 | align 4 |
||
985 | proc exif_get_app2, app1:dword, app2:dword |
||
986 | pushad |
||
987 | mov eax,[app1] |
||
988 | cmp [eax],edx |
||
989 | je .no_suport ;если не найден указатель на начало exif.app1 |
||
990 | |||
991 | mov edi,[app2] |
||
992 | movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1 |
||
993 | |||
994 | ;начало поиска производителя камеры |
||
995 | mov ebx,0x010f |
||
996 | bt edx,0 |
||
997 | jnc @f |
||
998 | ror bx,8 |
||
999 | @@: |
||
1000 | |||
1001 | ;проверяем число тегов |
||
1002 | mov eax,[eax] |
||
1003 | movzx ecx,word[eax] |
||
1004 | bt edx,0 |
||
1005 | jnc @f |
||
1006 | ror cx,8 |
||
1007 | @@: |
||
1008 | cmp ecx,1 |
||
1009 | jl .no_suport ;если число тегов <1 |
||
1010 | |||
1011 | ;переходим на 1-й тег |
||
1012 | add eax,offs_tag_0 |
||
1013 | @@: |
||
1014 | cmp word[eax],bx |
||
1015 | je @f |
||
1016 | add eax,tag_size |
||
1017 | loop @b |
||
1018 | jmp .no_suport ;если не найдено |
||
1019 | @@: ;если найдено |
||
1020 | mov ebx,dword[eax+4] |
||
1021 | bt edx,0 |
||
1022 | jnc @f |
||
1023 | ror bx,8 |
||
1024 | ror ebx,16 |
||
1025 | ror bx,8 |
||
1026 | @@: |
||
1027 | cmp ebx,4 |
||
1028 | jle .no_suport ;название производителя меньше 4 символов, не поддержиавается |
||
1029 | |||
1030 | mov ebx,dword[eax+8] |
||
1031 | bt edx,0 |
||
1032 | jnc @f |
||
1033 | ror bx,8 |
||
1034 | ror ebx,16 |
||
1035 | ror bx,8 |
||
1036 | @@: |
||
1037 | |||
1038 | ;проверка поддерживаемых производителей |
||
1039 | mov eax,[app1] |
||
1040 | add ebx,[eax+4] |
||
1041 | cmp dword[ebx],'Cano' |
||
1042 | je .suport |
||
1043 | cmp dword[ebx],'NIKO' |
||
1044 | je .suport |
||
1045 | cmp dword[ebx],'Pana' |
||
1046 | je .suport |
||
1047 | |||
1048 | ;все остальные не поддерживаются |
||
1049 | jmp .no_suport |
||
1050 | |||
1051 | .suport: |
||
1052 | ;находим тег 0x8769 (расширенные данные по Exif) |
||
1053 | stdcall exif_get_app1_child, eax,edi,0x8769 |
||
1054 | cmp dword[edi],0 |
||
1055 | je .no_suport |
||
5010 | IgorA | 1056 | ;находим тег 0x927c (данные Maker по камере) |
5009 | IgorA | 1057 | stdcall exif_get_app1_child, edi,edi, 0x927c |
1058 | cmp dword[edi],0 |
||
1059 | je .no_suport |
||
1060 | |||
1061 | cmp dword[ebx],'NIKO' |
||
1062 | jne @f |
||
5010 | IgorA | 1063 | ;for Nikon |
1064 | add dword[edi],18 |
||
1065 | mov eax,dword[edi] |
||
1066 | sub eax,8 |
||
1067 | mov dword[edi+4],eax |
||
1068 | mov word[edi+offs_id_gr_mak],'Ni' |
||
5009 | IgorA | 1069 | @@: |
1070 | cmp dword[ebx],'Pana' |
||
1071 | jne @f |
||
5010 | IgorA | 1072 | ;for Panasonic |
1073 | add dword[edi],12 |
||
1074 | mov word[edi+offs_id_gr_mak],'Pa' |
||
5009 | IgorA | 1075 | @@: |
5010 | IgorA | 1076 | cmp dword[ebx],'Cano' |
1077 | jne @f |
||
1078 | ;for Canon |
||
1079 | mov word[edi+offs_id_gr_mak],'Ca' |
||
1080 | @@: |
||
5009 | IgorA | 1081 | |
1082 | jmp @f |
||
1083 | .no_suport: |
||
1084 | mov dword[edi],0 |
||
1085 | @@: |
||
1086 | popad |
||
1087 | ret |
||
1088 | endp |
||
1089 | |||
5002 | IgorA | 1090 | ;description: |
1091 | ; вспомогательная функция для чтения назначений тегов |
||
1092 | ;input: |
||
1093 | ; eax - указатель начала тега |
||
1094 | ; edi - указатель на память для записи текстовой строки |
||
1095 | align 4 |
||
1096 | proc read_tag_value, app1:dword, t_max:dword |
||
4994 | IgorA | 1097 | push exif_tag_numbers |
1098 | pop esi |
||
5008 | IgorA | 1099 | |
1100 | ;поиск таблицы для группы тегов |
||
1101 | mov ebx,[app1] |
||
5010 | IgorA | 1102 | mov ebx,dword[ebx+offs_id_gr] ;берем идентификатор группы тегов |
5008 | IgorA | 1103 | @@: |
5010 | IgorA | 1104 | cmp dword[esi],ebx |
5008 | IgorA | 1105 | je .set_table |
1106 | add esi,8 |
||
1107 | cmp esi,exif_tag_numbers.end |
||
1108 | jge .tag_unknown ;тег не опознан (не найдена таблица группы тегов) |
||
1109 | jmp @b |
||
1110 | .set_table: |
||
1111 | mov esi,dword[esi+4] ;установка адреса таблицы в esi |
||
1112 | |||
1113 | ;поиск названия тега в таблице |
||
4994 | IgorA | 1114 | .next_tag: |
1115 | mov bx,word[esi] |
||
1116 | cmp bx,0 |
||
5007 | IgorA | 1117 | jne @f |
1118 | cmp dword[esi],0 |
||
1119 | jne @f |
||
5008 | IgorA | 1120 | jmp .tag_unknown ;тег не опознан (в группе не найден тег) |
5007 | IgorA | 1121 | @@: |
4994 | IgorA | 1122 | bt edx,0 |
1123 | jc @f |
||
1124 | ror bx,8 |
||
1125 | @@: |
||
1126 | cmp word[eax],bx |
||
1127 | je .found |
||
1128 | inc esi |
||
1129 | @@: |
||
1130 | inc esi |
||
1131 | cmp byte[esi],0 |
||
1132 | jne @b |
||
1133 | inc esi |
||
1134 | jmp .next_tag |
||
1135 | .found: |
||
1136 | |||
5008 | IgorA | 1137 | ;копируем строку с названием тега |
4994 | IgorA | 1138 | add esi,2 |
1139 | stdcall str_n_cat,edi,esi,[t_max] |
||
1140 | |||
5009 | IgorA | 1141 | jmp .start_read |
4995 | IgorA | 1142 | .tag_unknown: |
5008 | IgorA | 1143 | ;если тег не найден ставим его код вместо названия |
1144 | movzx ebx,word[eax] |
||
5009 | IgorA | 1145 | bt edx,0 |
1146 | jnc @f |
||
1147 | ror bx,8 |
||
1148 | @@: |
||
5008 | IgorA | 1149 | stdcall hex_in_str, edi, ebx,4 |
1150 | mov byte[edi+4],0 |
||
5009 | IgorA | 1151 | .start_read: |
4995 | IgorA | 1152 | |
4994 | IgorA | 1153 | ;читаем информацию в теге |
5008 | IgorA | 1154 | mov bx,tag_format_ui1b |
1155 | bt edx,0 |
||
1156 | jnc @f |
||
1157 | ror bx,8 |
||
1158 | @@: |
||
1159 | cmp word[eax+2],bx |
||
1160 | jne .tag_01 |
||
1161 | stdcall str_n_cat,edi,txt_dp,[t_max] |
||
1162 | call get_tag_data_size |
||
5009 | IgorA | 1163 | cmp ebx,4 |
1164 | jg .over4b_01 |
||
5008 | IgorA | 1165 | cmp ebx,1 |
5009 | IgorA | 1166 | je @f |
1167 | or edx,2 ;array data |
||
1168 | mov ecx,dword[eax+8] |
||
1169 | mov dh,bl |
||
1170 | @@: |
||
1171 | ;если 1 одно байтовое число |
||
5008 | IgorA | 1172 | movzx ebx,byte[eax+8] |
1173 | stdcall str_len,edi |
||
1174 | add edi,eax |
||
1175 | mov eax,ebx |
||
5010 | IgorA | 1176 | stdcall convert_int_to_str, [t_max] |
5009 | IgorA | 1177 | bt edx,1 |
1178 | jnc .end_f |
||
1179 | @@: |
||
1180 | ;если от 2 до 4 одно байтовых чисел |
||
1181 | dec dh |
||
1182 | cmp dh,0 |
||
1183 | je .end_f |
||
1184 | shr ecx,8 |
||
1185 | stdcall str_n_cat,edi,txt_zap,[t_max] |
||
1186 | stdcall str_len,edi |
||
1187 | add edi,eax |
||
1188 | movzx eax,cl |
||
5010 | IgorA | 1189 | stdcall convert_int_to_str, [t_max] |
5009 | IgorA | 1190 | jmp @b |
5008 | IgorA | 1191 | .over4b_01: |
1192 | ;... |
||
1193 | jmp .end_f |
||
1194 | .tag_01: |
||
1195 | |||
4994 | IgorA | 1196 | mov bx,tag_format_text |
1197 | bt edx,0 |
||
1198 | jnc @f |
||
1199 | ror bx,8 |
||
1200 | @@: |
||
1201 | cmp word[eax+2],bx |
||
1202 | jne .tag_02 |
||
1203 | stdcall str_n_cat,edi,txt_dp,[t_max] |
||
4995 | IgorA | 1204 | call get_tag_data_size ;проверяем длинну строки |
4994 | IgorA | 1205 | cmp ebx,4 |
1206 | jg @f |
||
1207 | ;если строка помещается в 4 символа |
||
1208 | mov esi,eax |
||
1209 | add esi,8 |
||
1210 | stdcall str_n_cat,edi,esi,[t_max] |
||
1211 | jmp .end_f |
||
1212 | ;если строка не помещается в 4 символа |
||
1213 | @@: |
||
1214 | mov esi,dword[eax+8] |
||
1215 | bt edx,0 |
||
1216 | jnc @f |
||
1217 | ror si,8 |
||
1218 | ror esi,16 |
||
1219 | ror si,8 |
||
1220 | @@: |
||
5007 | IgorA | 1221 | mov eax,[app1] |
1222 | mov eax,[eax+4] |
||
1223 | add esi,eax |
||
4994 | IgorA | 1224 | stdcall str_n_cat,edi,esi,[t_max] |
4995 | IgorA | 1225 | jmp .end_f |
4994 | IgorA | 1226 | .tag_02: |
1227 | |||
4995 | IgorA | 1228 | mov bx,tag_format_ui2b |
1229 | bt edx,0 |
||
1230 | jnc @f |
||
1231 | ror bx,8 |
||
1232 | @@: |
||
1233 | cmp word[eax+2],bx |
||
1234 | jne .tag_03 |
||
1235 | stdcall str_n_cat,edi,txt_dp,[t_max] |
||
1236 | call get_tag_data_size |
||
5009 | IgorA | 1237 | cmp ebx,2 |
4995 | IgorA | 1238 | jg .over4b_03 |
5009 | IgorA | 1239 | jne @f |
1240 | ;если два 2 байтовых числа |
||
1241 | or edx,2 ;array data |
||
1242 | movzx ecx,word[eax+10] |
||
1243 | bt edx,0 |
||
1244 | jnc @f |
||
1245 | ror cx,8 |
||
1246 | @@: |
||
4995 | IgorA | 1247 | ;если одно 2 байтовое число |
1248 | movzx ebx,word[eax+8] |
||
1249 | bt edx,0 |
||
1250 | jnc @f |
||
1251 | ror bx,8 |
||
1252 | @@: |
||
1253 | stdcall str_len,edi |
||
1254 | add edi,eax |
||
1255 | mov eax,ebx |
||
5010 | IgorA | 1256 | stdcall convert_int_to_str, [t_max] |
5009 | IgorA | 1257 | bt edx,1 ;array ? |
1258 | jnc .end_f |
||
1259 | ;добавляем 2-е число |
||
1260 | stdcall str_n_cat,edi,txt_zap,[t_max] |
||
1261 | stdcall str_len,edi |
||
1262 | add edi,eax |
||
1263 | mov eax,ecx |
||
5010 | IgorA | 1264 | stdcall convert_int_to_str, [t_max] |
1265 | jmp .end_f |
||
4995 | IgorA | 1266 | .over4b_03: |
5010 | IgorA | 1267 | mov ecx,[t_max] |
1268 | mov esi,dword[eax+8] |
||
1269 | bt edx,0 |
||
1270 | jnc @f |
||
1271 | ror si,8 |
||
1272 | ror esi,16 |
||
1273 | ror si,8 |
||
1274 | @@: |
||
1275 | mov eax,[app1] |
||
1276 | mov eax,[eax+4] |
||
1277 | add esi,eax |
||
1278 | |||
1279 | ;берем число |
||
1280 | .array_03: |
||
1281 | stdcall str_len,edi |
||
1282 | cmp ecx,eax |
||
1283 | jle .end_f ;если не хватило строки |
||
1284 | add edi,eax |
||
1285 | sub ecx,eax |
||
1286 | movzx eax,word[esi] |
||
1287 | bt edx,0 |
||
1288 | jnc @f |
||
1289 | ror ax,8 |
||
1290 | @@: |
||
1291 | stdcall convert_int_to_str,ecx |
||
1292 | |||
1293 | dec ebx |
||
1294 | cmp ebx,0 |
||
1295 | je .end_f |
||
1296 | |||
1297 | ;добавляем запятую |
||
1298 | stdcall str_n_cat,edi,txt_zap,ecx |
||
1299 | add esi,2 |
||
1300 | jmp .array_03 |
||
4995 | IgorA | 1301 | .tag_03: |
1302 | |||
1303 | mov bx,tag_format_ui4b |
||
1304 | bt edx,0 |
||
1305 | jnc @f |
||
1306 | ror bx,8 |
||
1307 | @@: |
||
1308 | cmp word[eax+2],bx |
||
1309 | jne .tag_04 |
||
1310 | stdcall str_n_cat,edi,txt_dp,[t_max] |
||
1311 | call get_tag_data_size |
||
1312 | cmp ebx,1 |
||
1313 | jg .over4b_04 |
||
1314 | ;если одно 4 байтовое число |
||
1315 | mov ebx,dword[eax+8] |
||
1316 | bt edx,0 |
||
1317 | jnc @f |
||
1318 | ror bx,8 |
||
1319 | ror ebx,16 |
||
1320 | ror bx,8 |
||
1321 | @@: |
||
1322 | stdcall str_len,edi |
||
1323 | add edi,eax |
||
1324 | mov eax,ebx |
||
5010 | IgorA | 1325 | stdcall convert_int_to_str, [t_max] |
4995 | IgorA | 1326 | .over4b_04: |
1327 | ;... |
||
1328 | jmp .end_f |
||
1329 | .tag_04: |
||
1330 | |||
1331 | mov bx,tag_format_urb |
||
1332 | bt edx,0 |
||
1333 | jnc @f |
||
1334 | ror bx,8 |
||
1335 | @@: |
||
1336 | cmp word[eax+2],bx |
||
1337 | jne .tag_05 |
||
1338 | stdcall str_n_cat,edi,txt_dp,[t_max] |
||
1339 | ;call get_tag_data_size |
||
1340 | ;cmp ebx,1 |
||
1341 | ;jg .over4b_05 |
||
1342 | mov ebx,dword[eax+8] |
||
1343 | bt edx,0 |
||
1344 | jnc @f |
||
1345 | ror bx,8 |
||
1346 | ror ebx,16 |
||
1347 | ror bx,8 |
||
1348 | @@: |
||
1349 | stdcall str_len,edi |
||
1350 | add edi,eax |
||
5007 | IgorA | 1351 | mov eax,[app1] |
1352 | mov eax,[eax+4] |
||
1353 | add ebx,eax |
||
4995 | IgorA | 1354 | mov eax,[ebx] |
1355 | bt edx,0 |
||
1356 | jnc @f |
||
1357 | ror ax,8 |
||
1358 | ror eax,16 |
||
1359 | ror ax,8 |
||
1360 | @@: |
||
5010 | IgorA | 1361 | stdcall convert_int_to_str, [t_max] ;ставим 1-е число |
4995 | IgorA | 1362 | stdcall str_n_cat,edi,txt_div,[t_max] ;ставим знак деления |
1363 | stdcall str_len,edi |
||
1364 | add edi,eax |
||
1365 | mov eax,[ebx+4] |
||
1366 | bt edx,0 |
||
1367 | jnc @f |
||
1368 | ror ax,8 |
||
1369 | ror eax,16 |
||
1370 | ror ax,8 |
||
1371 | @@: |
||
5010 | IgorA | 1372 | stdcall convert_int_to_str, [t_max] ;ставим 2-е число |
4995 | IgorA | 1373 | ;.over4b_05: |
1374 | ;... |
||
5007 | IgorA | 1375 | jmp .end_f |
4995 | IgorA | 1376 | .tag_05: |
1377 | |||
5007 | IgorA | 1378 | mov bx,tag_format_si2b |
1379 | bt edx,0 |
||
1380 | jnc @f |
||
1381 | ror bx,8 |
||
1382 | @@: |
||
1383 | cmp word[eax+2],bx |
||
1384 | jne .tag_08 |
||
1385 | stdcall str_n_cat,edi,txt_dp,[t_max] |
||
1386 | call get_tag_data_size |
||
5010 | IgorA | 1387 | cmp ebx,2 |
5007 | IgorA | 1388 | jg .over4b_08 |
5010 | IgorA | 1389 | jne @f |
1390 | ;если два 2 байтовых числа |
||
1391 | or edx,2 ;array data |
||
1392 | movzx ecx,word[eax+10] |
||
1393 | bt edx,0 |
||
1394 | jnc @f |
||
1395 | ror cx,8 |
||
1396 | @@: |
||
5007 | IgorA | 1397 | ;если одно 2 байтовое число |
1398 | movzx ebx,word[eax+8] |
||
1399 | bt edx,0 |
||
1400 | jnc @f |
||
1401 | ror bx,8 |
||
1402 | @@: |
||
1403 | stdcall str_len,edi |
||
1404 | add edi,eax |
||
1405 | bt bx,15 |
||
1406 | jnc @f |
||
1407 | mov byte[edi],'-' |
||
1408 | inc edi |
||
1409 | neg bx |
||
1410 | inc bx |
||
1411 | @@: |
||
1412 | mov eax,ebx |
||
5010 | IgorA | 1413 | stdcall convert_int_to_str, [t_max] |
1414 | bt edx,1 ;array ? |
||
1415 | jnc .end_f |
||
1416 | ;добавляем 2-е число |
||
1417 | stdcall str_n_cat,edi,txt_zap,[t_max] |
||
1418 | stdcall str_len,edi |
||
1419 | add edi,eax |
||
1420 | bt bx,15 |
||
1421 | jnc @f |
||
1422 | mov byte[edi],'-' |
||
1423 | inc edi |
||
1424 | neg bx |
||
1425 | inc bx |
||
1426 | @@: |
||
1427 | mov eax,ecx |
||
1428 | stdcall convert_int_to_str, [t_max] |
||
1429 | jmp .end_f |
||
5007 | IgorA | 1430 | .over4b_08: |
5010 | IgorA | 1431 | mov ecx,[t_max] |
1432 | mov esi,dword[eax+8] |
||
1433 | bt edx,0 |
||
1434 | jnc @f |
||
1435 | ror si,8 |
||
1436 | ror esi,16 |
||
1437 | ror si,8 |
||
1438 | @@: |
||
1439 | mov eax,[app1] |
||
1440 | mov eax,[eax+4] |
||
1441 | add esi,eax |
||
1442 | |||
1443 | ;берем число |
||
1444 | .array_08: |
||
1445 | stdcall str_len,edi |
||
1446 | cmp ecx,eax |
||
1447 | jle .end_f ;если не хватило строки |
||
1448 | add edi,eax |
||
1449 | sub ecx,eax |
||
1450 | movzx eax,word[esi] |
||
1451 | bt edx,0 |
||
1452 | jnc @f |
||
1453 | ror ax,8 |
||
1454 | @@: |
||
1455 | ;смотрим на знак +|- |
||
1456 | bt ax,15 |
||
1457 | jnc @f |
||
1458 | mov byte[edi],'-' |
||
1459 | inc edi |
||
1460 | neg ax |
||
1461 | inc ax |
||
1462 | @@: |
||
1463 | stdcall convert_int_to_str,ecx |
||
1464 | |||
1465 | dec ebx |
||
1466 | cmp ebx,0 |
||
1467 | je .end_f |
||
1468 | |||
1469 | ;добавляем запятую |
||
1470 | stdcall str_n_cat,edi,txt_zap,ecx |
||
1471 | add esi,2 |
||
1472 | jmp .array_08 |
||
5007 | IgorA | 1473 | .tag_08: |
1474 | |||
1475 | mov bx,tag_format_si4b |
||
1476 | bt edx,0 |
||
1477 | jnc @f |
||
1478 | ror bx,8 |
||
1479 | @@: |
||
1480 | cmp word[eax+2],bx |
||
1481 | jne .tag_09 |
||
1482 | stdcall str_n_cat,edi,txt_dp,[t_max] |
||
1483 | call get_tag_data_size |
||
1484 | cmp ebx,1 |
||
1485 | jg .over4b_09 |
||
1486 | ;если одно 4 байтовое число |
||
1487 | mov ebx,dword[eax+8] |
||
1488 | bt edx,0 |
||
1489 | jnc @f |
||
1490 | ror bx,8 |
||
1491 | ror ebx,16 |
||
1492 | ror bx,8 |
||
1493 | @@: |
||
1494 | stdcall str_len,edi |
||
1495 | add edi,eax |
||
1496 | bt ebx,31 |
||
1497 | jnc @f |
||
1498 | mov byte[edi],'-' |
||
1499 | inc edi |
||
1500 | neg ebx |
||
1501 | inc ebx |
||
1502 | @@: |
||
1503 | mov eax,ebx |
||
5010 | IgorA | 1504 | stdcall convert_int_to_str, [t_max] |
5007 | IgorA | 1505 | .over4b_09: |
1506 | ;... |
||
1507 | jmp .end_f |
||
1508 | .tag_09: |
||
1509 | |||
4994 | IgorA | 1510 | .end_f: |
1511 | ret |
||
1512 | endp |
||
1513 | |||
4995 | IgorA | 1514 | ;input: |
1515 | ; eax - tag pointer |
||
1516 | ; edx - 1 if 'MM', 0 if 'II' |
||
1517 | ;output: |
||
1518 | ; ebx - data size |
||
4994 | IgorA | 1519 | align 4 |
4995 | IgorA | 1520 | get_tag_data_size: |
1521 | mov ebx,dword[eax+4] |
||
1522 | bt edx,0 |
||
1523 | jnc @f |
||
1524 | ror bx,8 |
||
1525 | ror ebx,16 |
||
1526 | ror bx,8 |
||
1527 | @@: |
||
4994 | IgorA | 1528 | ret |
1529 | |||
1530 | align 4 |
||
1531 | proc str_n_cat uses eax ecx edi esi, str1:dword, str2:dword, n:dword |
||
1532 | mov esi,dword[str2] |
||
1533 | mov ecx,dword[n] |
||
1534 | mov edi,dword[str1] |
||
1535 | stdcall str_len,edi |
||
1536 | add edi,eax |
||
1537 | cld |
||
1538 | repne movsb |
||
1539 | mov byte[edi],0 |
||
1540 | ret |
||
1541 | endp |
||
1542 | |||
1543 | ;output: |
||
1544 | ; eax = strlen |
||
1545 | align 4 |
||
1546 | proc str_len, str1:dword |
||
1547 | mov eax,[str1] |
||
1548 | @@: |
||
1549 | cmp byte[eax],0 |
||
1550 | je @f |
||
1551 | inc eax |
||
1552 | jmp @b |
||
1553 | @@: |
||
1554 | sub eax,[str1] |
||
1555 | ret |
||
1556 | endp |
||
1557 | |||
5008 | IgorA | 1558 | align 4 |
1559 | proc hex_in_str, buf:dword,val:dword,zif:dword |
||
1560 | pushad |
||
1561 | mov edi,dword[buf] |
||
1562 | mov ecx,dword[zif] |
||
1563 | add edi,ecx |
||
1564 | dec edi |
||
1565 | mov ebx,dword[val] |
||
1566 | |||
1567 | .cycle: |
||
1568 | mov al,bl |
||
1569 | and al,0xf |
||
1570 | cmp al,10 |
||
1571 | jl @f |
||
1572 | add al,'a'-'0'-10 |
||
1573 | @@: |
||
1574 | add al,'0' |
||
1575 | mov byte[edi],al |
||
1576 | dec edi |
||
1577 | shr ebx,4 |
||
1578 | loop .cycle |
||
1579 | |||
1580 | popad |
||
1581 | ret |
||
1582 | endp |
||
1583 | |||
4995 | IgorA | 1584 | ;input: |
5010 | IgorA | 1585 | ; eax - число |
1586 | ; edi - буфер для строки |
||
1587 | ; len - длинна буфера |
||
4995 | IgorA | 1588 | ;output: |
1589 | align 4 |
||
5010 | IgorA | 1590 | proc convert_int_to_str, len:dword |
1591 | pushad |
||
1592 | mov esi,[len] |
||
1593 | add esi,edi |
||
1594 | dec esi |
||
1595 | call .str |
||
1596 | popad |
||
4995 | IgorA | 1597 | ret |
5010 | IgorA | 1598 | endp |
4995 | IgorA | 1599 | |
1600 | align 4 |
||
1601 | .str: |
||
1602 | mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число |
||
5010 | IgorA | 1603 | ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной |
1604 | cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax |
||
4995 | IgorA | 1605 | jb @f |
5010 | IgorA | 1606 | xor edx,edx ;очистить edx |
1607 | div ecx ;разделить - остаток в edx |
||
1608 | push edx ;положить в стек |
||
1609 | ;dec edi ;смещение необходимое для записи с конца строки |
||
4995 | IgorA | 1610 | call .str ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx |
1611 | pop eax |
||
1612 | @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) |
||
5010 | IgorA | 1613 | cmp edi,esi |
1614 | jge @f |
||
1615 | or al,0x30 ;данная команда короче чем две выше |
||
1616 | stosb ;записать элемент из регистра al в ячеку памяти es:edi |
||
1617 | mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор |
||
1618 | @@: |
||
1619 | ret ;пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться |
||
4995 | IgorA | 1620 | |
1621 | |||
1622 | |||
4994 | IgorA | 1623 | align 16 |
1624 | EXPORTS: |
||
1625 | dd sz_exif_get_app1, exif_get_app1 |
||
1626 | dd sz_exif_get_app1_tag, exif_get_app1_tag |
||
5002 | IgorA | 1627 | dd sz_exif_get_app1_child, exif_get_app1_child |
5009 | IgorA | 1628 | dd sz_exif_get_app2, exif_get_app2 |
4994 | IgorA | 1629 | dd 0,0 |
1630 | sz_exif_get_app1 db 'exif_get_app1',0 |
||
1631 | sz_exif_get_app1_tag db 'exif_get_app1_tag',0 |
||
5002 | IgorA | 1632 | sz_exif_get_app1_child db 'exif_get_app1_child',0 |
5009 | IgorA | 1633 | sz_exif_get_app2 db 'exif_get_app2',01 |