exif 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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__ */