exif 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cfc6778c57933986114267b125c79dcc46e21ef1
4
- data.tar.gz: 34fb03f95acd3955bbdca79d97ddeff8ae0029ea
3
+ metadata.gz: 33f58a4ce4cca70c469d9d6df0ec65a5ba2709ac
4
+ data.tar.gz: 4cb22e01351311cc90cca4280e72030d4cefbddd
5
5
  SHA512:
6
- metadata.gz: f93647cdb95d30d49575efc2117f92cd6cef714f2d02c6f3beaa385db034eb4fc93ac3e2cc60859e349c0d00aa665341101ca2a1530f185c716f2aa67532324f
7
- data.tar.gz: 04a4b02e1f799d1c41301582d55c9d68f0d6afb0056caf08bb6427e808e55eaa1460e42f64d06ed6fbf2e0d043b4c15438a108ce53d17218927c1e661ddbf941
6
+ metadata.gz: 82bb019a423559815f06793736aef8fc6bea78f8cdff7e602ef555087f66cf436d240f5842caad8951e5a9b43eaba16bb2be8bcfd2b53fbb8337e77bbf9d0b77
7
+ data.tar.gz: 826aa853744d59ec237eeca0c4fc7c57f60f596abf236110d82e4a6aabb6838dbc86e65913a3772d7e5a1121b049ddf5c2bba030aa3863c158ec42c42977769c
@@ -1,40 +1,191 @@
1
1
  #include "data.h"
2
- #include "libjpeg/jpeg-data.h"
3
2
  #include "ruby.h"
4
3
 
5
4
  #include <libexif/exif-data.h>
6
5
  #include <libexif/exif-loader.h>
7
- #include <time.h>
8
6
  #include <stdint.h>
7
+ #include <time.h>
9
8
 
10
9
  extern VALUE rb_mExif, rb_eNotReadble, rb_eIFDNotFound;
11
- extern const char* exif_entry_to_ivar(ExifEntry* entry);
10
+ extern const char *exif_entry_to_ivar(ExifEntry *entry);
12
11
 
13
12
  VALUE rb_cExifData;
14
- static const char* ifd_name_mapping[] = {"ifd0", "ifd1", "exif", "gps", "interoperability"};
15
- static const char* attr_readers[] = {"ifds", "aperture_value", "artist", "battery_level", "bits_per_sample", "brightness_value", "cfa_pattern", "cfa_repeat_pattern_dim", "color_space", "components_configuration", "compressed_bits_per_pixel", "compression", "contrast", "copyright", "custom_rendered", "date_time", "date_time_digitized", "date_time_original", "device_setting_description", "digital_zoom_ratio", "document_name", "exif_ifd_pointer", "exif_version", "exposure_bias_value", "exposure_index", "exposure_mode", "exposure_program", "exposure_time", "file_source", "fill_order", "flash", "flash_energy", "flash_pix_version", "fnumber", "focal_length", "focal_length_in_35mm_film", "focal_plane_resolution_unit", "focal_plane_x_resolution", "focal_plane_y_resolution", "gain_control", "gamma", "gps_altitude", "gps_altitude_ref", "gps_area_information", "gps_date_stamp", "gps_dest_bearing", "gps_dest_bearing_ref", "gps_dest_distance", "gps_dest_distance_ref", "gps_dest_latitude", "gps_dest_latitude_ref", "gps_dest_longitude", "gps_dest_longitude_ref", "gps_differential", "gps_dop", "gps_img_direction", "gps_img_direction_ref", "gps_info_ifd_pointer", "gps_latitude", "gps_latitude_ref", "gps_longitude", "gps_longitude_ref", "gps_map_datum", "gps_measure_mode", "gps_processing_method", "gps_satellites", "gps_speed", "gps_speed_ref", "gps_status", "gps_time_stamp", "gps_track", "gps_track_ref", "gps_version_id", "image_description", "image_length", "image_resources", "image_unique_id", "image_width", "inter_color_profile", "interoperability_ifd_pointer", "interoperability_index", "interoperability_version", "iptc_naa", "iso_speed_ratings", "jpeg_interchange_format", "jpeg_interchange_format_length", "jpeg_proc", "light_source", "make", "maker_note", "max_aperture_value", "metering_mode", "model", "new_cfa_pattern", "new_subfile_type", "oecf", "orientation", "padding", "photometric_interpretation", "pixel_x_dimension", "pixel_y_dimension", "planar_configuration", "primary_chromaticities", "print_image_matching", "reference_black_white", "related_image_file_format", "related_image_length", "related_image_width", "related_sound_file", "resolution_unit", "rows_per_strip", "samples_per_pixel", "saturation", "scene_capture_type", "scene_type", "sensing_method", "sharpness", "shutter_speed_value", "software", "spatial_frequency_response", "spectral_sensitivity", "strip_byte_counts", "strip_offsets", "sub_ifds", "sub_sec_time", "sub_sec_time_digitized", "sub_sec_time_original", "subject_area", "subject_distance", "subject_distance_range", "subject_location", "tiff_ep_standard_id", "time_zone_offset", "transfer_function", "transfer_range", "user_comment", "white_balance", "white_point", "x_resolution", "xml_packet", "xp_author", "xp_comment", "xp_keywords", "xp_subject", "xp_title", "y_resolution", "ycbcr_coefficients", "ycbcr_positioning", "ycbcr_sub_sampling"};
13
+ static const char *ifd_name_mapping[] = {"ifd0", "ifd1", "exif", "gps",
14
+ "interoperability"};
15
+ static const char *attr_readers[] = {"ifds",
16
+ "aperture_value",
17
+ "artist",
18
+ "battery_level",
19
+ "bits_per_sample",
20
+ "brightness_value",
21
+ "cfa_pattern",
22
+ "cfa_repeat_pattern_dim",
23
+ "color_space",
24
+ "components_configuration",
25
+ "compressed_bits_per_pixel",
26
+ "compression",
27
+ "contrast",
28
+ "copyright",
29
+ "custom_rendered",
30
+ "date_time",
31
+ "date_time_digitized",
32
+ "date_time_original",
33
+ "device_setting_description",
34
+ "digital_zoom_ratio",
35
+ "document_name",
36
+ "exif_ifd_pointer",
37
+ "exif_version",
38
+ "exposure_bias_value",
39
+ "exposure_index",
40
+ "exposure_mode",
41
+ "exposure_program",
42
+ "exposure_time",
43
+ "file_source",
44
+ "fill_order",
45
+ "flash",
46
+ "flash_energy",
47
+ "flash_pix_version",
48
+ "fnumber",
49
+ "focal_length",
50
+ "focal_length_in_35mm_film",
51
+ "focal_plane_resolution_unit",
52
+ "focal_plane_x_resolution",
53
+ "focal_plane_y_resolution",
54
+ "gain_control",
55
+ "gamma",
56
+ "gps_altitude",
57
+ "gps_altitude_ref",
58
+ "gps_area_information",
59
+ "gps_date_stamp",
60
+ "gps_dest_bearing",
61
+ "gps_dest_bearing_ref",
62
+ "gps_dest_distance",
63
+ "gps_dest_distance_ref",
64
+ "gps_dest_latitude",
65
+ "gps_dest_latitude_ref",
66
+ "gps_dest_longitude",
67
+ "gps_dest_longitude_ref",
68
+ "gps_differential",
69
+ "gps_dop",
70
+ "gps_img_direction",
71
+ "gps_img_direction_ref",
72
+ "gps_info_ifd_pointer",
73
+ "gps_latitude",
74
+ "gps_latitude_ref",
75
+ "gps_longitude",
76
+ "gps_longitude_ref",
77
+ "gps_map_datum",
78
+ "gps_measure_mode",
79
+ "gps_processing_method",
80
+ "gps_satellites",
81
+ "gps_speed",
82
+ "gps_speed_ref",
83
+ "gps_status",
84
+ "gps_time_stamp",
85
+ "gps_track",
86
+ "gps_track_ref",
87
+ "gps_version_id",
88
+ "image_description",
89
+ "image_length",
90
+ "image_resources",
91
+ "image_unique_id",
92
+ "image_width",
93
+ "inter_color_profile",
94
+ "interoperability_ifd_pointer",
95
+ "interoperability_index",
96
+ "interoperability_version",
97
+ "iptc_naa",
98
+ "iso_speed_ratings",
99
+ "jpeg_interchange_format",
100
+ "jpeg_interchange_format_length",
101
+ "jpeg_proc",
102
+ "light_source",
103
+ "make",
104
+ "maker_note",
105
+ "max_aperture_value",
106
+ "metering_mode",
107
+ "model",
108
+ "new_cfa_pattern",
109
+ "new_subfile_type",
110
+ "oecf",
111
+ "orientation",
112
+ "padding",
113
+ "photometric_interpretation",
114
+ "pixel_x_dimension",
115
+ "pixel_y_dimension",
116
+ "planar_configuration",
117
+ "primary_chromaticities",
118
+ "print_image_matching",
119
+ "reference_black_white",
120
+ "related_image_file_format",
121
+ "related_image_length",
122
+ "related_image_width",
123
+ "related_sound_file",
124
+ "resolution_unit",
125
+ "rows_per_strip",
126
+ "samples_per_pixel",
127
+ "saturation",
128
+ "scene_capture_type",
129
+ "scene_type",
130
+ "sensing_method",
131
+ "sharpness",
132
+ "shutter_speed_value",
133
+ "software",
134
+ "spatial_frequency_response",
135
+ "spectral_sensitivity",
136
+ "strip_byte_counts",
137
+ "strip_offsets",
138
+ "sub_ifds",
139
+ "sub_sec_time",
140
+ "sub_sec_time_digitized",
141
+ "sub_sec_time_original",
142
+ "subject_area",
143
+ "subject_distance",
144
+ "subject_distance_range",
145
+ "subject_location",
146
+ "tiff_ep_standard_id",
147
+ "time_zone_offset",
148
+ "transfer_function",
149
+ "transfer_range",
150
+ "user_comment",
151
+ "white_balance",
152
+ "white_point",
153
+ "x_resolution",
154
+ "xml_packet",
155
+ "xp_author",
156
+ "xp_comment",
157
+ "xp_keywords",
158
+ "xp_subject",
159
+ "xp_title",
160
+ "y_resolution",
161
+ "ycbcr_coefficients",
162
+ "ycbcr_positioning",
163
+ "ycbcr_sub_sampling"};
16
164
 
17
- static VALUE new(VALUE self, VALUE input);
165
+ static VALUE new (VALUE self, VALUE input);
18
166
  static VALUE dump(VALUE self);
19
167
  static VALUE brackets(VALUE self, VALUE ifd_symbol);
20
168
  static void each_content(ExifContent *ec, void *user_data);
21
169
  static void each_entry(ExifEntry *, void *user_data);
22
170
  static VALUE exif_entry_to_rb_value(ExifEntry *);
171
+ static VALUE rational_to_num(ExifRational rational);
172
+ static VALUE srational_to_num(ExifSRational srational);
23
173
 
24
- void init_data(){
174
+ void init_data() {
25
175
  int length;
26
176
 
27
177
  rb_cExifData = rb_define_class_under(rb_mExif, "Data", rb_cObject);
28
- length = sizeof(attr_readers) / sizeof(char*);
29
- for(int i = 0; i < length; ++i) rb_define_attr(rb_cExifData, attr_readers[i], 1, 0);
178
+ length = sizeof(attr_readers) / sizeof(char *);
179
+ for (int i = 0; i < length; ++i)
180
+ rb_define_attr(rb_cExifData, attr_readers[i], 1, 0);
30
181
  rb_define_alias(rb_cExifData, "to_h", "ifds");
31
182
  rb_define_singleton_method(rb_cExifData, "new", new, 1);
32
183
  rb_define_method(rb_cExifData, "dump", dump, 0);
33
184
  rb_define_method(rb_cExifData, "[]", brackets, 1);
34
185
  }
35
186
 
36
- VALUE new(VALUE self, VALUE input){
37
- ExifData* ed;
187
+ VALUE new (VALUE self, VALUE input) {
188
+ ExifData *ed;
38
189
  VALUE read_data;
39
190
 
40
191
  switch (TYPE(input)) {
@@ -45,15 +196,17 @@ VALUE new(VALUE self, VALUE input){
45
196
  read_data = rb_funcall(input, rb_intern("read"), 0);
46
197
  break;
47
198
  default:
48
- rb_raise(rb_eTypeError, "wrong argument type %s (expected String or IO)", rb_obj_classname(input));
199
+ rb_raise(rb_eTypeError, "wrong argument type %s (expected String or IO)",
200
+ rb_obj_classname(input));
49
201
  }
50
202
 
51
- ExifLoader *loader = exif_loader_new();
52
- exif_loader_write(loader, (unsigned char*)RSTRING_PTR(read_data), RSTRING_LEN(read_data));
53
- ed = exif_loader_get_data(loader);
54
- exif_loader_unref (loader);
55
- if(!ed) rb_raise(rb_eNotReadble, "File not readable or no EXIF data in file.");
56
-
203
+ ExifLoader *loader = exif_loader_new();
204
+ exif_loader_write(loader, (unsigned char *)RSTRING_PTR(read_data),
205
+ RSTRING_LEN(read_data));
206
+ ed = exif_loader_get_data(loader);
207
+ exif_loader_unref(loader);
208
+ if (!ed)
209
+ rb_raise(rb_eNotReadble, "File not readable or no EXIF data in file.");
57
210
 
58
211
  VALUE rb_data = Data_Wrap_Struct(self, NULL, exif_data_free, ed);
59
212
  rb_iv_set(rb_data, "@ifds", rb_hash_new());
@@ -61,138 +214,135 @@ VALUE new(VALUE self, VALUE input){
61
214
  return rb_data;
62
215
  }
63
216
 
64
- static VALUE dump(VALUE self){
217
+ static VALUE dump(VALUE self) {
65
218
  ExifData *ed;
66
219
  Data_Get_Struct(self, ExifData, ed);
67
220
  exif_data_dump(ed);
68
221
  return Qnil;
69
222
  }
70
223
 
71
- static VALUE brackets(VALUE self, VALUE ifd_symbol){
224
+ static VALUE brackets(VALUE self, VALUE ifd_symbol) {
72
225
  return rb_hash_aref(rb_iv_get(self, "@ifds"), ifd_symbol);
73
226
  }
74
227
 
75
- static void each_content(ExifContent *ec, void *self_ptr){
228
+ static void each_content(ExifContent *ec, void *self_ptr) {
76
229
  VALUE *self;
77
230
  ExifIfd ifd;
78
231
 
79
232
  ifd = exif_content_get_ifd(ec);
80
- if(ifd == EXIF_IFD_COUNT) rb_raise(rb_eIFDNotFound, "Con't get IFD.");
81
- rb_hash_aset(rb_iv_get(*(VALUE*)self_ptr, "@ifds"), ID2SYM(rb_intern(ifd_name_mapping[ifd])), rb_hash_new());
233
+ if (ifd == EXIF_IFD_COUNT)
234
+ rb_raise(rb_eIFDNotFound, "Con't get IFD.");
235
+ rb_hash_aset(rb_iv_get(*(VALUE *)self_ptr, "@ifds"),
236
+ ID2SYM(rb_intern(ifd_name_mapping[ifd])), rb_hash_new());
82
237
  exif_content_foreach_entry(ec, each_entry, self_ptr);
83
238
  }
84
239
 
85
- static void each_entry(ExifEntry *entry, void *self_ptr){
240
+ static void each_entry(ExifEntry *entry, void *self_ptr) {
86
241
  VALUE value;
87
242
  const char *ivar_name;
88
243
 
89
244
  ivar_name = exif_entry_to_ivar(entry);
90
245
  value = exif_entry_to_rb_value(entry);
91
- rb_hash_aset(
92
- rb_hash_aref(
93
- rb_iv_get(*(VALUE*)self_ptr, "@ifds"),
94
- ID2SYM(rb_intern(ifd_name_mapping[exif_entry_get_ifd(entry)]))
95
- ),
96
- ID2SYM(rb_intern(ivar_name + 1)),
97
- value
98
- );
99
- if(TYPE(rb_ivar_defined(*(VALUE*)self_ptr, rb_intern(ivar_name))) == T_FALSE){
100
- rb_iv_set(*(VALUE*)self_ptr, ivar_name, value);
246
+ rb_hash_aset(rb_hash_aref(rb_iv_get(*(VALUE *)self_ptr, "@ifds"),
247
+ ID2SYM(rb_intern(
248
+ ifd_name_mapping[exif_entry_get_ifd(entry)]))),
249
+ ID2SYM(rb_intern(ivar_name + 1)), value);
250
+ if (TYPE(rb_ivar_defined(*(VALUE *)self_ptr, rb_intern(ivar_name))) ==
251
+ T_FALSE) {
252
+ rb_iv_set(*(VALUE *)self_ptr, ivar_name, value);
101
253
  }
102
254
  }
103
255
 
104
- static VALUE exif_entry_to_rb_value(ExifEntry *entry){
105
- ExifData *data;
256
+ #define TYPECAST(value1, value2) \
257
+ do { \
258
+ if (entry->components > 1) { \
259
+ ret = rb_ary_new2(entry->components); \
260
+ for (i = 0; i < entry->components; i++) \
261
+ rb_ary_push(ret, value1); \
262
+ } else \
263
+ ret = value2; \
264
+ } while (0)
265
+
266
+ #define TYPECAST_BYTE(c_to_rb, type) \
267
+ TYPECAST(c_to_rb((type)entry->data[i]), c_to_rb((type)entry->data[0]))
268
+
269
+ #define TYPECAST_EXIF(c_to_rb, exif_get) \
270
+ TYPECAST(c_to_rb(exif_get_##exif_get(entry->data + i * size, order)), \
271
+ c_to_rb(exif_get_##exif_get(entry->data, order)))
272
+
273
+ static VALUE exif_entry_to_rb_value(ExifEntry *entry) {
274
+ ExifData *data;
106
275
  ExifByteOrder order;
107
276
  ExifRational rational;
108
277
  ExifSRational srational;
109
278
  VALUE ret;
110
279
  size_t len, i;
111
280
  unsigned char size;
112
- struct tm tm = {};
113
281
 
114
282
  data = entry->parent->parent;
115
283
  order = exif_data_get_byte_order(data);
116
284
  ret = Qnil;
117
285
  size = exif_format_get_size(entry->format);
118
286
 
119
- switch(entry->format){
287
+ switch (entry->format) {
120
288
  case EXIF_FORMAT_UNDEFINED:
121
- ret = rb_str_new((const char*)entry->data, entry->size);
289
+ ret = rb_str_new((const char *)entry->data, entry->size);
122
290
  break;
123
291
  case EXIF_FORMAT_BYTE:
124
- if(entry->components > 1){
125
- ret = rb_ary_new2(entry->components);
126
- for (i = 0; i < entry->components; i++)
127
- rb_ary_push(ret, INT2FIX((uint8_t)entry->data[i]));
128
- }else ret = INT2FIX((uint8_t)entry->data[0]);
292
+ TYPECAST_BYTE(INT2FIX, uint8_t);
129
293
  case EXIF_FORMAT_SBYTE:
130
- if(entry->components > 1){
131
- ret = rb_ary_new2(entry->components);
132
- for (i = 0; i < entry->components; i++)
133
- rb_ary_push(ret, INT2FIX((int8_t)entry->data[i]));
134
- }else ret = INT2FIX((int8_t)entry->data[0]);
294
+ TYPECAST_BYTE(INT2FIX, int8_t);
135
295
  break;
136
296
  case EXIF_FORMAT_SHORT:
137
- if(entry->components > 1){
138
- ret = rb_ary_new2(entry->components);
139
- for(i = 0; i < entry->components; i++)
140
- rb_ary_push(ret, INT2FIX(exif_get_short(entry->data + i*size, order)));
141
- }else ret = INT2FIX(exif_get_short(entry->data, order));
297
+ TYPECAST_EXIF(INT2FIX, short);
142
298
  break;
143
299
  case EXIF_FORMAT_SSHORT:
144
- if(entry->components > 1){
145
- ret = rb_ary_new2(entry->components);
146
- for(i = 0; i < entry->components; i++)
147
- rb_ary_push(ret, INT2FIX(exif_get_sshort(entry->data + i*size, order)));
148
- }else ret = INT2FIX(exif_get_sshort(entry->data, order));
300
+ TYPECAST_EXIF(INT2FIX, sshort);
149
301
  break;
150
302
  case EXIF_FORMAT_LONG:
151
- if(entry->components > 1){
152
- ret = rb_ary_new2(entry->components);
153
- for(i = 0; i < entry->components; i++)
154
- rb_ary_push(ret, ULONG2NUM(exif_get_long(entry->data + i*size, order)));
155
- }else ret = ULONG2NUM(exif_get_long(entry->data, order));
303
+ TYPECAST_EXIF(ULONG2NUM, long);
156
304
  break;
157
305
  case EXIF_FORMAT_SLONG:
158
- if(entry->components > 1){
159
- ret = rb_ary_new2(entry->components);
160
- for(i = 0; i < entry->components; i++)
161
- rb_ary_push(ret, LONG2NUM(exif_get_slong(entry->data + i*size, order)));
162
- }else ret = LONG2NUM(exif_get_slong(entry->data, order));
306
+ TYPECAST_EXIF(LONG2NUM, slong);
163
307
  break;
164
308
  case EXIF_FORMAT_ASCII:
165
309
  ret = rb_str_new2((const char *)entry->data);
166
310
  break;
167
311
  case EXIF_FORMAT_RATIONAL:
168
- if(entry->components > 1){
169
- ret = rb_ary_new2(entry->components);
170
- for(i = 0; i < entry->components; i++){
171
- rational = exif_get_rational(entry->data + i * size, order);
172
- rb_ary_push(ret, rb_rational_new(ULONG2NUM(rational.numerator), ULONG2NUM(rational.denominator)));
173
- }
174
- } else {
175
- rational = exif_get_rational(entry->data, order);
176
- ret = rb_rational_new(ULONG2NUM(rational.numerator), ULONG2NUM(rational.denominator));
177
- }
312
+ TYPECAST_EXIF(rational_to_num, rational);
178
313
  break;
179
314
  case EXIF_FORMAT_SRATIONAL:
180
- if(entry->components > 1){
181
- ret = rb_ary_new2(entry->components);
182
- for(int i = 0; i < entry->components; i++){
183
- srational = exif_get_srational(entry->data + i * size, order);
184
- rb_ary_push(ret, rb_rational_new(LONG2FIX(srational.numerator), LONG2FIX(srational.denominator)));
185
- }
186
- } else {
187
- srational = exif_get_srational(entry->data, order);
188
- ret = rb_rational_new(LONG2FIX(srational.numerator), LONG2FIX(srational.denominator));
189
- }
315
+ TYPECAST_EXIF(srational_to_num, srational);
190
316
  break;
191
317
  case EXIF_FORMAT_DOUBLE:
192
318
  case EXIF_FORMAT_FLOAT:
193
- ret = rb_float_new(*(double*)entry->data);
319
+ ret = rb_float_new(*(double *)entry->data);
194
320
  break;
195
321
  }
196
322
 
197
323
  return ret;
198
324
  }
325
+
326
+ #undef TYPECAST
327
+ #undef TYPECAST_BYTE
328
+ #undef TYPECAST_EXIF
329
+
330
+ VALUE rational_to_num(ExifRational rational) {
331
+ if (rational.numerator == 0 && rational.denominator == 0)
332
+ return DBL2NUM(NAN);
333
+ else if (rational.denominator == 0)
334
+ return DBL2NUM(INFINITY);
335
+ else
336
+ return rb_rational_new(ULONG2NUM(rational.numerator),
337
+ ULONG2NUM(rational.denominator));
338
+ }
339
+
340
+ VALUE srational_to_num(ExifSRational srational) {
341
+ if (srational.numerator == 0 && srational.denominator == 0)
342
+ return DBL2NUM(NAN);
343
+ else if (srational.denominator == 0)
344
+ return DBL2NUM(srational.numerator > 0 ? INFINITY : -INFINITY);
345
+ else
346
+ return rb_rational_new(LONG2NUM(srational.numerator),
347
+ LONG2NUM(srational.denominator));
348
+ }
@@ -1,15 +1,16 @@
1
- #include "ruby.h"
2
1
  #include "data.h"
2
+ #include "ruby.h"
3
3
 
4
4
  VALUE rb_mExif, rb_eError, rb_eNotReadble, rb_eIFDNotFound, rb_eUnknownDataType;
5
5
 
6
- void Init_exif(void){
6
+ void Init_exif(void) {
7
7
  rb_mExif = rb_define_module("Exif");
8
8
 
9
9
  rb_eError = rb_define_class_under(rb_mExif, "Error", rb_eStandardError);
10
10
  rb_eNotReadble = rb_define_class_under(rb_mExif, "NotReadble", rb_eError);
11
11
  rb_eIFDNotFound = rb_define_class_under(rb_mExif, "IFDNotFound", rb_eError);
12
- rb_eUnknownDataType = rb_define_class_under(rb_mExif, "UnknownDataType", rb_eError);
12
+ rb_eUnknownDataType =
13
+ rb_define_class_under(rb_mExif, "UnknownDataType", rb_eError);
13
14
 
14
15
  init_data();
15
16
  }
@@ -1,15 +1,16 @@
1
1
  #include <libexif/exif-entry.h>
2
2
 
3
- const char* exif_entry_to_ivar(ExifEntry* ee){
3
+ const char *exif_entry_to_ivar(ExifEntry *ee) {
4
4
  ExifIfd ifd;
5
5
  ExifTag tag;
6
6
 
7
7
  ifd = exif_entry_get_ifd(ee);
8
8
  tag = ee->tag;
9
9
 
10
- switch((int)tag){
10
+ switch ((int)tag) {
11
11
  case EXIF_TAG_INTEROPERABILITY_INDEX: /* EXIF_TAG_GPS_LATITUDE_REF */
12
- return ifd == EXIF_IFD_GPS ? "@gps_latitude_ref" : "@interoperability_index";
12
+ return ifd == EXIF_IFD_GPS ? "@gps_latitude_ref"
13
+ : "@interoperability_index";
13
14
  break;
14
15
  case EXIF_TAG_INTEROPERABILITY_VERSION: /* EXIF_TAG_GPS_LATITUDE */
15
16
  return ifd == EXIF_IFD_GPS ? "@gps_latitude" : "@interoperability_version";
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Exif
4
- VERSION = '2.0.0'
4
+ VERSION = '2.0.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exif
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jian Weihang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-12 00:00:00.000000000 Z
11
+ date: 2017-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -78,10 +78,6 @@ files:
78
78
  - ext/exif/exif.c
79
79
  - ext/exif/exif_entry_to_ivar.c
80
80
  - ext/exif/extconf.rb
81
- - ext/exif/libjpeg/jpeg-data.c
82
- - ext/exif/libjpeg/jpeg-data.h
83
- - ext/exif/libjpeg/jpeg-marker.c
84
- - ext/exif/libjpeg/jpeg-marker.h
85
81
  - lib/exif.rb
86
82
  - lib/exif/version.rb
87
83
  homepage: https://github.com/tonytonyjan/exif
@@ -1,490 +0,0 @@
1
- /* jpeg-data.c
2
- *
3
- * Copyright � 2001 Lutz M�ller <lutz@users.sourceforge.net>
4
- *
5
- * This library is free software; you can redistribute it and/or
6
- * modify it under the terms of the GNU Lesser General Public
7
- * License as published by the Free Software Foundation; either
8
- * version 2 of the License, or (at your option) any later version.
9
- *
10
- * This library is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- * Lesser General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Lesser General Public
16
- * License along with this library; if not, write to the
17
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18
- * Boston, MA 02110-1301 USA.
19
- */
20
-
21
- #include "config.h"
22
- #include "jpeg-data.h"
23
-
24
- #include <stdlib.h>
25
- #include <stdio.h>
26
- #include <string.h>
27
-
28
- /* This refers to the exif-i18n.h file from the "exif" package and is
29
- * NOT to be confused with the libexif/i18n.h file.
30
- */
31
- #include "exif/exif-i18n.h"
32
-
33
- /* realloc that cleans up on memory failure and returns to caller */
34
- #define CLEANUP_REALLOC(p,s) { \
35
- unsigned char *cleanup_ptr = realloc((p),(s)); \
36
- if (!cleanup_ptr) { free(p); (p) = NULL; return; } \
37
- (p) = cleanup_ptr; \
38
- }
39
-
40
- struct _JPEGDataPrivate
41
- {
42
- unsigned int ref_count;
43
-
44
- ExifLog *log;
45
- };
46
-
47
- JPEGData *
48
- jpeg_data_new (void)
49
- {
50
- JPEGData *data;
51
-
52
- data = malloc (sizeof (JPEGData));
53
- if (!data)
54
- return (NULL);
55
- memset (data, 0, sizeof (JPEGData));
56
- data->priv = malloc (sizeof (JPEGDataPrivate));
57
- if (!data->priv) {
58
- free (data);
59
- return (NULL);
60
- }
61
- memset (data->priv, 0, sizeof (JPEGDataPrivate));
62
- data->priv->ref_count = 1;
63
-
64
- return (data);
65
- }
66
-
67
- void
68
- jpeg_data_append_section (JPEGData *data)
69
- {
70
- JPEGSection *s;
71
-
72
- if (!data) return;
73
-
74
- if (!data->count)
75
- s = malloc (sizeof (JPEGSection));
76
- else
77
- s = realloc (data->sections,
78
- sizeof (JPEGSection) * (data->count + 1));
79
- if (!s) {
80
- EXIF_LOG_NO_MEMORY (data->priv->log, "jpeg-data",
81
- sizeof (JPEGSection) * (data->count + 1));
82
- return;
83
- }
84
- memset(s + data->count, 0, sizeof (JPEGSection));
85
- data->sections = s;
86
- data->count++;
87
- }
88
-
89
- /*! jpeg_data_save_file returns 1 on success, 0 on failure */
90
- int
91
- jpeg_data_save_file (JPEGData *data, const char *path)
92
- {
93
- FILE *f;
94
- unsigned char *d = NULL;
95
- unsigned int size = 0, written;
96
-
97
- jpeg_data_save_data (data, &d, &size);
98
- if (!d)
99
- return 0;
100
-
101
- remove (path);
102
- f = fopen (path, "wb");
103
- if (!f) {
104
- free (d);
105
- return 0;
106
- }
107
- written = fwrite (d, 1, size, f);
108
- fclose (f);
109
- free (d);
110
- if (written == size) {
111
- return 1;
112
- }
113
- remove(path);
114
- return 0;
115
- }
116
-
117
- void
118
- jpeg_data_save_data (JPEGData *data, unsigned char **d, unsigned int *ds)
119
- {
120
- unsigned int i, eds = 0;
121
- JPEGSection s;
122
- unsigned char *ed = NULL;
123
-
124
- if (!data)
125
- return;
126
- if (!d)
127
- return;
128
- if (!ds)
129
- return;
130
-
131
- for (*ds = i = 0; i < data->count; i++) {
132
- s = data->sections[i];
133
-
134
- /* Write the marker */
135
- CLEANUP_REALLOC (*d, sizeof (char) * (*ds + 2));
136
- (*d)[*ds + 0] = 0xff;
137
- (*d)[*ds + 1] = s.marker;
138
- *ds += 2;
139
-
140
- switch (s.marker) {
141
- case JPEG_MARKER_SOI:
142
- case JPEG_MARKER_EOI:
143
- break;
144
- case JPEG_MARKER_APP1:
145
- exif_data_save_data (s.content.app1, &ed, &eds);
146
- if (!ed) break;
147
- CLEANUP_REALLOC (*d, sizeof (char) * (*ds + 2));
148
- (*d)[*ds + 0] = (eds + 2) >> 8;
149
- (*d)[*ds + 1] = (eds + 2) >> 0;
150
- *ds += 2;
151
- CLEANUP_REALLOC (*d, sizeof (char) * (*ds + eds));
152
- memcpy (*d + *ds, ed, eds);
153
- *ds += eds;
154
- free (ed);
155
- break;
156
- default:
157
- CLEANUP_REALLOC (*d, sizeof (char) *
158
- (*ds + s.content.generic.size + 2));
159
- (*d)[*ds + 0] = (s.content.generic.size + 2) >> 8;
160
- (*d)[*ds + 1] = (s.content.generic.size + 2) >> 0;
161
- *ds += 2;
162
- memcpy (*d + *ds, s.content.generic.data,
163
- s.content.generic.size);
164
- *ds += s.content.generic.size;
165
-
166
- /* In case of SOS, we need to write the data. */
167
- if (s.marker == JPEG_MARKER_SOS) {
168
- CLEANUP_REALLOC (*d, *ds + data->size);
169
- memcpy (*d + *ds, data->data, data->size);
170
- *ds += data->size;
171
- }
172
- break;
173
- }
174
- }
175
- }
176
-
177
- JPEGData *
178
- jpeg_data_new_from_data (const unsigned char *d,
179
- unsigned int size)
180
- {
181
- JPEGData *data;
182
-
183
- data = jpeg_data_new ();
184
- jpeg_data_load_data (data, d, size);
185
- return (data);
186
- }
187
-
188
- void
189
- jpeg_data_load_data (JPEGData *data, const unsigned char *d,
190
- unsigned int size)
191
- {
192
- unsigned int i, o, len;
193
- JPEGSection *s;
194
- JPEGMarker marker;
195
-
196
- if (!data) return;
197
- if (!d) return;
198
-
199
- for (o = 0; o < size;) {
200
-
201
- /*
202
- * JPEG sections start with 0xff. The first byte that is
203
- * not 0xff is a marker (hopefully).
204
- */
205
- for (i = 0; i < MIN(7, size - o); i++)
206
- if (d[o + i] != 0xff)
207
- break;
208
- if ((i >= size - o) || !JPEG_IS_MARKER (d[o + i])) {
209
- exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "jpeg-data",
210
- _("Data does not follow JPEG specification."));
211
- return;
212
- }
213
- marker = d[o + i];
214
-
215
- /* Append this section */
216
- jpeg_data_append_section (data);
217
- if (!data->count) return;
218
- s = &data->sections[data->count - 1];
219
- s->marker = marker;
220
- o += i + 1;
221
-
222
- switch (s->marker) {
223
- case JPEG_MARKER_SOI:
224
- case JPEG_MARKER_EOI:
225
- break;
226
- default:
227
-
228
- /* Read the length of the section */
229
- if (2 > size - o) { o = size; break; }
230
- len = ((d[o] << 8) | d[o + 1]) - 2;
231
- if (len > size) { o = size; break; }
232
- o += 2;
233
- if (len > size - o) { o = size; break; }
234
-
235
- switch (s->marker) {
236
- case JPEG_MARKER_APP1:
237
- s->content.app1 = exif_data_new_from_data (
238
- d + o - 4, len + 4);
239
- break;
240
- default:
241
- s->content.generic.data =
242
- malloc (sizeof (char) * len);
243
- if (!s->content.generic.data) {
244
- EXIF_LOG_NO_MEMORY (data->priv->log, "jpeg-data", sizeof (char) * len);
245
- return;
246
- }
247
- s->content.generic.size = len;
248
- memcpy (s->content.generic.data, &d[o], len);
249
-
250
- /* In case of SOS, image data will follow. */
251
- if (s->marker == JPEG_MARKER_SOS) {
252
- data->size = size - o - len;
253
- if (data->size >= 2) {
254
- /* -2 means 'take all but the last 2 bytes which are
255
- hoped to be JPEG_MARKER_EOI */
256
- data->size -= 2;
257
- if (d[o + len + data->size] != 0xFF) {
258
- /* A truncated file (i.e. w/o JPEG_MARKER_EOI at the end).
259
- Instead of trying to use the last two bytes as marker,
260
- touching memory beyond allocated memory and posssibly saving
261
- back screwed file, we rather take the rest of the file. */
262
- data->size += 2;
263
- }
264
- }
265
- data->data = malloc (
266
- sizeof (char) * data->size);
267
- if (!data->data) {
268
- EXIF_LOG_NO_MEMORY (data->priv->log, "jpeg-data", sizeof (char) * data->size);
269
- data->size = 0;
270
- return;
271
- }
272
- memcpy (data->data, d + o + len,
273
- data->size);
274
- o += data->size;
275
- }
276
- break;
277
- }
278
- o += len;
279
- break;
280
- }
281
- }
282
- }
283
-
284
- JPEGData *
285
- jpeg_data_new_from_file (const char *path)
286
- {
287
- JPEGData *data;
288
-
289
- data = jpeg_data_new ();
290
- jpeg_data_load_file (data, path);
291
- return (data);
292
- }
293
-
294
- void
295
- jpeg_data_load_file (JPEGData *data, const char *path)
296
- {
297
- FILE *f;
298
- unsigned char *d;
299
- unsigned int size;
300
-
301
- if (!data) return;
302
- if (!path) return;
303
-
304
- f = fopen (path, "rb");
305
- if (!f) {
306
- exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "jpeg-data",
307
- _("Path '%s' invalid."), path);
308
- return;
309
- }
310
-
311
- /* For now, we read the data into memory. Patches welcome... */
312
- fseek (f, 0, SEEK_END);
313
- size = ftell (f);
314
- fseek (f, 0, SEEK_SET);
315
- d = malloc (size);
316
- if (!d) {
317
- EXIF_LOG_NO_MEMORY (data->priv->log, "jpeg-data", size);
318
- fclose (f);
319
- return;
320
- }
321
- if (fread (d, 1, size, f) != size) {
322
- free (d);
323
- fclose (f);
324
- exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "jpeg-data",
325
- _("Could not read '%s'."), path);
326
- return;
327
- }
328
- fclose (f);
329
-
330
- jpeg_data_load_data (data, d, size);
331
- free (d);
332
- }
333
-
334
- void
335
- jpeg_data_ref (JPEGData *data)
336
- {
337
- if (!data)
338
- return;
339
-
340
- data->priv->ref_count++;
341
- }
342
-
343
- void
344
- jpeg_data_unref (JPEGData *data)
345
- {
346
- if (!data)
347
- return;
348
-
349
- if (data->priv) {
350
- data->priv->ref_count--;
351
- if (!data->priv->ref_count)
352
- jpeg_data_free (data);
353
- }
354
- }
355
-
356
- void
357
- jpeg_data_free (JPEGData *data)
358
- {
359
- unsigned int i;
360
- JPEGSection s;
361
-
362
- if (!data)
363
- return;
364
-
365
- if (data->count) {
366
- for (i = 0; i < data->count; i++) {
367
- s = data->sections[i];
368
- switch (s.marker) {
369
- case JPEG_MARKER_SOI:
370
- case JPEG_MARKER_EOI:
371
- break;
372
- case JPEG_MARKER_APP1:
373
- exif_data_unref (s.content.app1);
374
- break;
375
- default:
376
- free (s.content.generic.data);
377
- break;
378
- }
379
- }
380
- free (data->sections);
381
- }
382
-
383
- if (data->data)
384
- free (data->data);
385
-
386
- if (data->priv) {
387
- if (data->priv->log) {
388
- exif_log_unref (data->priv->log);
389
- data->priv->log = NULL;
390
- }
391
- free (data->priv);
392
- }
393
-
394
- free (data);
395
- }
396
-
397
- void
398
- jpeg_data_dump (JPEGData *data)
399
- {
400
- unsigned int i;
401
- JPEGContent content;
402
- JPEGMarker marker;
403
-
404
- if (!data)
405
- return;
406
-
407
- printf ("Dumping JPEG data (%i bytes of data)...\n", data->size);
408
- for (i = 0; i < data->count; i++) {
409
- marker = data->sections[i].marker;
410
- content = data->sections[i].content;
411
- printf ("Section %i (marker 0x%x - %s):\n", i, marker,
412
- jpeg_marker_get_name (marker));
413
- printf (" Description: %s\n",
414
- jpeg_marker_get_description (marker));
415
- switch (marker) {
416
- case JPEG_MARKER_SOI:
417
- case JPEG_MARKER_EOI:
418
- break;
419
- case JPEG_MARKER_APP1:
420
- exif_data_dump (content.app1);
421
- break;
422
- default:
423
- printf (" Size: %i\n", content.generic.size);
424
- printf (" Unknown content.\n");
425
- break;
426
- }
427
- }
428
- }
429
-
430
- static JPEGSection *
431
- jpeg_data_get_section (JPEGData *data, JPEGMarker marker)
432
- {
433
- unsigned int i;
434
-
435
- if (!data)
436
- return (NULL);
437
-
438
- for (i = 0; i < data->count; i++)
439
- if (data->sections[i].marker == marker)
440
- return (&data->sections[i]);
441
- return (NULL);
442
- }
443
-
444
- ExifData *
445
- jpeg_data_get_exif_data (JPEGData *data)
446
- {
447
- JPEGSection *section;
448
-
449
- if (!data)
450
- return NULL;
451
-
452
- section = jpeg_data_get_section (data, JPEG_MARKER_APP1);
453
- if (section) {
454
- exif_data_ref (section->content.app1);
455
- return (section->content.app1);
456
- }
457
-
458
- return (NULL);
459
- }
460
-
461
- void
462
- jpeg_data_set_exif_data (JPEGData *data, ExifData *exif_data)
463
- {
464
- JPEGSection *section;
465
-
466
- if (!data) return;
467
-
468
- section = jpeg_data_get_section (data, JPEG_MARKER_APP1);
469
- if (!section) {
470
- jpeg_data_append_section (data);
471
- if (data->count < 2) return;
472
- memmove (&data->sections[2], &data->sections[1],
473
- sizeof (JPEGSection) * (data->count - 2));
474
- section = &data->sections[1];
475
- } else {
476
- exif_data_unref (section->content.app1);
477
- }
478
- section->marker = JPEG_MARKER_APP1;
479
- section->content.app1 = exif_data;
480
- exif_data_ref (exif_data);
481
- }
482
-
483
- void
484
- jpeg_data_log (JPEGData *data, ExifLog *log)
485
- {
486
- if (!data || !data->priv) return;
487
- if (data->priv->log) exif_log_unref (data->priv->log);
488
- data->priv->log = log;
489
- exif_log_ref (log);
490
- }
@@ -1,92 +0,0 @@
1
- /* jpeg-data.h
2
- *
3
- * Copyright � 2001 Lutz M�ller <lutz@users.sourceforge.net>
4
- *
5
- * This library is free software; you can redistribute it and/or
6
- * modify it under the terms of the GNU Lesser General Public
7
- * License as published by the Free Software Foundation; either
8
- * version 2 of the License, or (at your option) any later version.
9
- *
10
- * This library is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- * Lesser General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Lesser General Public
16
- * License along with this library; if not, write to the
17
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18
- * Boston, MA 02110-1301 USA.
19
- */
20
-
21
- #ifndef __JPEG_DATA_H__
22
- #define __JPEG_DATA_H__
23
-
24
- #include "libjpeg/jpeg-marker.h"
25
-
26
- #include <libexif/exif-data.h>
27
- #include <libexif/exif-log.h>
28
-
29
- typedef ExifData * JPEGContentAPP1;
30
-
31
- typedef struct _JPEGContentGeneric JPEGContentGeneric;
32
- struct _JPEGContentGeneric
33
- {
34
- unsigned char *data;
35
- unsigned int size;
36
- };
37
-
38
- typedef union _JPEGContent JPEGContent;
39
- union _JPEGContent
40
- {
41
- JPEGContentGeneric generic;
42
- JPEGContentAPP1 app1;
43
- };
44
-
45
- typedef struct _JPEGSection JPEGSection;
46
- struct _JPEGSection
47
- {
48
- JPEGMarker marker;
49
- JPEGContent content;
50
- };
51
-
52
- typedef struct _JPEGData JPEGData;
53
- typedef struct _JPEGDataPrivate JPEGDataPrivate;
54
-
55
- struct _JPEGData
56
- {
57
- JPEGSection *sections;
58
- unsigned int count;
59
-
60
- unsigned char *data;
61
- unsigned int size;
62
-
63
- JPEGDataPrivate *priv;
64
- };
65
-
66
- JPEGData *jpeg_data_new (void);
67
- JPEGData *jpeg_data_new_from_file (const char *path);
68
- JPEGData *jpeg_data_new_from_data (const unsigned char *data,
69
- unsigned int size);
70
-
71
- void jpeg_data_ref (JPEGData *data);
72
- void jpeg_data_unref (JPEGData *data);
73
- void jpeg_data_free (JPEGData *data);
74
-
75
- void jpeg_data_load_data (JPEGData *data, const unsigned char *d,
76
- unsigned int size);
77
- void jpeg_data_save_data (JPEGData *data, unsigned char **d,
78
- unsigned int *size);
79
-
80
- void jpeg_data_load_file (JPEGData *data, const char *path);
81
- int jpeg_data_save_file (JPEGData *data, const char *path);
82
-
83
- void jpeg_data_set_exif_data (JPEGData *data, ExifData *exif_data);
84
- ExifData *jpeg_data_get_exif_data (JPEGData *data);
85
-
86
- void jpeg_data_dump (JPEGData *data);
87
-
88
- void jpeg_data_append_section (JPEGData *data);
89
-
90
- void jpeg_data_log (JPEGData *data, ExifLog *log);
91
-
92
- #endif /* __JPEG_DATA_H__ */
@@ -1,122 +0,0 @@
1
- /* jpeg-marker.c
2
- *
3
- * Copyright � 2001-2008 Lutz M�ller <lutz@users.sourceforge.net>
4
- *
5
- * This library is free software; you can redistribute it and/or
6
- * modify it under the terms of the GNU Lesser General Public
7
- * License as published by the Free Software Foundation; either
8
- * version 2 of the License, or (at your option) any later version.
9
- *
10
- * This library is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- * Lesser General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Lesser General Public
16
- * License along with this library; if not, write to the
17
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18
- * Boston, MA 02110-1301 USA.
19
- */
20
- #include "config.h"
21
- #include "jpeg-marker.h"
22
-
23
- #include <stdlib.h>
24
-
25
- static const struct {
26
- JPEGMarker marker;
27
- const char *name;
28
- const char *description;
29
- } JPEGMarkerTable[] = {
30
- {JPEG_MARKER_SOF0, "SOF0", "Encoding (baseline)"},
31
- {JPEG_MARKER_SOF1, "SOF1", "Encoding (extended sequential)"},
32
- {JPEG_MARKER_SOF2, "SOF2", "Encoding (progressive)"},
33
- {JPEG_MARKER_SOF3, "SOF3", "Encoding (lossless)"},
34
- {JPEG_MARKER_SOF5, "SOF5", "Encoding (differential sequential)"},
35
- {JPEG_MARKER_SOF6, "SOF6", "Encoding (differential progressive)"},
36
- {JPEG_MARKER_SOF7, "SOF7", "Encoding (differential lossless)"},
37
- {JPEG_MARKER_SOF9, "SOF9",
38
- "Encoding (extended sequential, arithmetic)"},
39
- {JPEG_MARKER_SOF10, "SOF10", "Encoding (progressive, arithmetic)"},
40
- {JPEG_MARKER_SOF11, "SOF11", "Encoding (lossless, arithmetic)"},
41
- {JPEG_MARKER_SOF13, "SOF13",
42
- "Encoding (differential sequential, arithmetic)"},
43
- {JPEG_MARKER_SOF14, "SOF14",
44
- "Encoding (differential progressive, arithmetic)"},
45
- {JPEG_MARKER_SOF15, "SOF15",
46
- "Encoding (differential lossless, arithmetic)"},
47
- {JPEG_MARKER_SOI, "SOI", "Start of image"},
48
- {JPEG_MARKER_EOI, "EOI", "End of image"},
49
- {JPEG_MARKER_SOS, "SOS", "Start of scan"},
50
- {JPEG_MARKER_COM, "COM", "Comment"},
51
- {JPEG_MARKER_DHT, "DHT", "Define Huffman table"},
52
- {JPEG_MARKER_JPG, "JPG", "Extension"},
53
- {JPEG_MARKER_DAC, "DAC", "Define arithmetic coding conditioning"},
54
- {JPEG_MARKER_RST1, "RST1", "Restart 1"},
55
- {JPEG_MARKER_RST2, "RST2", "Restart 2"},
56
- {JPEG_MARKER_RST3, "RST3", "Restart 3"},
57
- {JPEG_MARKER_RST4, "RST4", "Restart 4"},
58
- {JPEG_MARKER_RST5, "RST5", "Restart 5"},
59
- {JPEG_MARKER_RST6, "RST6", "Restart 6"},
60
- {JPEG_MARKER_RST7, "RST7", "Restart 7"},
61
- {JPEG_MARKER_DQT, "DQT", "Define quantization table"},
62
- {JPEG_MARKER_DNL, "DNL", "Define number of lines"},
63
- {JPEG_MARKER_DRI, "DRI", "Define restart interval"},
64
- {JPEG_MARKER_DHP, "DHP", "Define hierarchical progression"},
65
- {JPEG_MARKER_EXP, "EXP", "Expand reference component"},
66
- {JPEG_MARKER_APP0, "APP0", "Application segment 0"},
67
- {JPEG_MARKER_APP1, "APP1", "Application segment 1"},
68
- {JPEG_MARKER_APP2, "APP2", "Application segment 2"},
69
- {JPEG_MARKER_APP3, "APP3", "Application segment 3"},
70
- {JPEG_MARKER_APP4, "APP4", "Application segment 4"},
71
- {JPEG_MARKER_APP5, "APP5", "Application segment 5"},
72
- {JPEG_MARKER_APP6, "APP6", "Application segment 6"},
73
- {JPEG_MARKER_APP7, "APP7", "Application segment 7"},
74
- {JPEG_MARKER_APP8, "APP8", "Application segment 8"},
75
- {JPEG_MARKER_APP9, "APP9", "Application segment 9"},
76
- {JPEG_MARKER_APP10, "APP10", "Application segment 10"},
77
- {JPEG_MARKER_APP11, "APP11", "Application segment 11"},
78
- {JPEG_MARKER_APP12, "APP12", "Application segment 12"},
79
- {JPEG_MARKER_APP13, "APP13", "Application segment 13"},
80
- {JPEG_MARKER_APP14, "APP14", "Application segment 14"},
81
- {JPEG_MARKER_APP15, "APP15", "Application segment 15"},
82
- {JPEG_MARKER_JPG0, "JPG0", "Extension 0"},
83
- {JPEG_MARKER_JPG1, "JPG1", "Extension 1"},
84
- {JPEG_MARKER_JPG2, "JPG2", "Extension 2"},
85
- {JPEG_MARKER_JPG3, "JPG3", "Extension 3"},
86
- {JPEG_MARKER_JPG4, "JPG4", "Extension 4"},
87
- {JPEG_MARKER_JPG5, "JPG5", "Extension 5"},
88
- {JPEG_MARKER_JPG6, "JPG6", "Extension 6"},
89
- {JPEG_MARKER_JPG7, "JPG7", "Extension 7"},
90
- {JPEG_MARKER_JPG8, "JPG8", "Extension 8"},
91
- {JPEG_MARKER_JPG9, "JPG9", "Extension 9"},
92
- {JPEG_MARKER_JPG10, "JPG10", "Extension 10"},
93
- {JPEG_MARKER_JPG11, "JPG11", "Extension 11"},
94
- {JPEG_MARKER_JPG12, "JPG12", "Extension 12"},
95
- {JPEG_MARKER_JPG13, "JPG13", "Extension 13"},
96
- {0, NULL, NULL}
97
- };
98
-
99
- const char *
100
- jpeg_marker_get_name (JPEGMarker marker)
101
- {
102
- unsigned int i;
103
-
104
- for (i = 0; JPEGMarkerTable[i].name; i++)
105
- if (JPEGMarkerTable[i].marker == marker)
106
- break;
107
-
108
- return (JPEGMarkerTable[i].name);
109
- }
110
-
111
- const char *
112
- jpeg_marker_get_description (JPEGMarker marker)
113
- {
114
- unsigned int i;
115
-
116
- for (i = 0; JPEGMarkerTable[i].description; i++)
117
- if (JPEGMarkerTable[i].marker == marker)
118
- break;
119
-
120
- return (JPEGMarkerTable[i].description);
121
- }
122
-
@@ -1,103 +0,0 @@
1
- /* jpeg-marker.h
2
- *
3
- * Copyright � 2001 Lutz M�ller <lutz@users.sourceforge.net>
4
- *
5
- * This library is free software; you can redistribute it and/or
6
- * modify it under the terms of the GNU Lesser General Public
7
- * License as published by the Free Software Foundation; either
8
- * version 2 of the License, or (at your option) any later version.
9
- *
10
- * This library is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- * Lesser General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU Lesser General Public
16
- * License along with this library; if not, write to the
17
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18
- * Boston, MA 02110-1301 USA.
19
- */
20
- #ifndef __JPEG_MARKER_H__
21
- #define __JPEG_MARKER_H__
22
-
23
- #ifdef __cplusplus
24
- extern "C" {
25
- #endif /* __cplusplus */
26
-
27
- typedef enum {
28
- JPEG_MARKER_SOF0 = 0xc0,
29
- JPEG_MARKER_SOF1 = 0xc1,
30
- JPEG_MARKER_SOF2 = 0xc2,
31
- JPEG_MARKER_SOF3 = 0xc3,
32
- JPEG_MARKER_DHT = 0xc4,
33
- JPEG_MARKER_SOF5 = 0xc5,
34
- JPEG_MARKER_SOF6 = 0xc6,
35
- JPEG_MARKER_SOF7 = 0xc7,
36
- JPEG_MARKER_JPG = 0xc8,
37
- JPEG_MARKER_SOF9 = 0xc9,
38
- JPEG_MARKER_SOF10 = 0xca,
39
- JPEG_MARKER_SOF11 = 0xcb,
40
- JPEG_MARKER_DAC = 0xcc,
41
- JPEG_MARKER_SOF13 = 0xcd,
42
- JPEG_MARKER_SOF14 = 0xce,
43
- JPEG_MARKER_SOF15 = 0xcf,
44
- JPEG_MARKER_RST0 = 0xd0,
45
- JPEG_MARKER_RST1 = 0xd1,
46
- JPEG_MARKER_RST2 = 0xd2,
47
- JPEG_MARKER_RST3 = 0xd3,
48
- JPEG_MARKER_RST4 = 0xd4,
49
- JPEG_MARKER_RST5 = 0xd5,
50
- JPEG_MARKER_RST6 = 0xd6,
51
- JPEG_MARKER_RST7 = 0xd7,
52
- JPEG_MARKER_SOI = 0xd8,
53
- JPEG_MARKER_EOI = 0xd9,
54
- JPEG_MARKER_SOS = 0xda,
55
- JPEG_MARKER_DQT = 0xdb,
56
- JPEG_MARKER_DNL = 0xdc,
57
- JPEG_MARKER_DRI = 0xdd,
58
- JPEG_MARKER_DHP = 0xde,
59
- JPEG_MARKER_EXP = 0xdf,
60
- JPEG_MARKER_APP0 = 0xe0,
61
- JPEG_MARKER_APP1 = 0xe1,
62
- JPEG_MARKER_APP2 = 0xe2,
63
- JPEG_MARKER_APP3 = 0xe3,
64
- JPEG_MARKER_APP4 = 0xe4,
65
- JPEG_MARKER_APP5 = 0xe5,
66
- JPEG_MARKER_APP6 = 0xe6,
67
- JPEG_MARKER_APP7 = 0xe7,
68
- JPEG_MARKER_APP8 = 0xe8,
69
- JPEG_MARKER_APP9 = 0xe9,
70
- JPEG_MARKER_APP10 = 0xea,
71
- JPEG_MARKER_APP11 = 0xeb,
72
- JPEG_MARKER_APP12 = 0xec,
73
- JPEG_MARKER_APP13 = 0xed,
74
- JPEG_MARKER_APP14 = 0xee,
75
- JPEG_MARKER_APP15 = 0xef,
76
- JPEG_MARKER_JPG0 = 0xf0,
77
- JPEG_MARKER_JPG1 = 0xf1,
78
- JPEG_MARKER_JPG2 = 0xf2,
79
- JPEG_MARKER_JPG3 = 0xf3,
80
- JPEG_MARKER_JPG4 = 0xf4,
81
- JPEG_MARKER_JPG5 = 0xf5,
82
- JPEG_MARKER_JPG6 = 0xf6,
83
- JPEG_MARKER_JPG7 = 0xf7,
84
- JPEG_MARKER_JPG8 = 0xf8,
85
- JPEG_MARKER_JPG9 = 0xf9,
86
- JPEG_MARKER_JPG10 = 0xfa,
87
- JPEG_MARKER_JPG11 = 0xfb,
88
- JPEG_MARKER_JPG12 = 0xfc,
89
- JPEG_MARKER_JPG13 = 0xfd,
90
- JPEG_MARKER_COM = 0xfe
91
- } JPEGMarker;
92
-
93
- #define JPEG_IS_MARKER(m) (((m) >= JPEG_MARKER_SOF0) && \
94
- ((m) <= JPEG_MARKER_COM))
95
-
96
- const char *jpeg_marker_get_name (JPEGMarker marker);
97
- const char *jpeg_marker_get_description (JPEGMarker marker);
98
-
99
- #ifdef __cplusplus
100
- }
101
- #endif /* __cplusplus */
102
-
103
- #endif /* __JPEG_MARKER_H__ */