163static double exifDouble(ExifEntry *entry, ExifByteOrder byte_order) {
164 switch (entry->format) {
165 case EXIF_FORMAT_BYTE: {
166 return double(entry->data[0]);
168 case EXIF_FORMAT_SHORT: {
169 return double(exif_get_short(entry->data, byte_order));
171 case EXIF_FORMAT_LONG: {
172 return double(exif_get_long(entry->data, byte_order));
174 case EXIF_FORMAT_RATIONAL: {
175 ExifRational r = exif_get_rational(entry->data, byte_order);
176 return double(r.numerator) / double(r.denominator);
178 case EXIF_FORMAT_SBYTE: {
179 return double(*(
signed char *)entry->data);
181 case EXIF_FORMAT_SSHORT: {
182 return double(exif_get_sshort(entry->data, byte_order));
184 case EXIF_FORMAT_SLONG: {
185 return double(exif_get_slong(entry->data, byte_order));
187 case EXIF_FORMAT_SRATIONAL: {
188 ExifSRational r = exif_get_srational(entry->data, byte_order);
189 return double(r.numerator) / double(r.denominator);
191 case EXIF_FORMAT_FLOAT: {
192 return double((
reinterpret_cast<float *
>(entry->data))[0]);
194 case EXIF_FORMAT_DOUBLE: {
195 return (
reinterpret_cast<double *
>(entry->data))[0];