1 /*! \file exif-gps-ifd.c
2 * \brief Info about GPS tags
3 */
4 /*
5 * Copyright (c) 2020 Heiko Lewin <hlewin@gmx.de>
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301 USA.
21 *
22 * SPDX-License-Identifier: LGPL-2.0-or-later
23 */
24
25 #include <stddef.h>
26 #include "exif-gps-ifd.h"
27
28 static const struct ExifGPSIfdTagInfo exif_gps_ifd_tags[] = {
29
30 {EXIF_TAG_GPS_VERSION_ID, EXIF_FORMAT_BYTE, 4, 4, "\x02\x02\x00\x00"},
31 {EXIF_TAG_GPS_LATITUDE_REF, EXIF_FORMAT_ASCII, 0, 0, 0},
32 {EXIF_TAG_GPS_LATITUDE, EXIF_FORMAT_RATIONAL, 3, 0, 0},
33 {EXIF_TAG_GPS_LONGITUDE_REF, EXIF_FORMAT_ASCII, 0, 0, 0},
34 {EXIF_TAG_GPS_LONGITUDE, EXIF_FORMAT_RATIONAL, 3, 0, 0},
35 {EXIF_TAG_GPS_ALTITUDE_REF, EXIF_FORMAT_BYTE, 1, 1, "\x00"},
36 {EXIF_TAG_GPS_ALTITUDE, EXIF_FORMAT_RATIONAL, 1, 0, 0},
37 {EXIF_TAG_GPS_TIME_STAMP, EXIF_FORMAT_RATIONAL, 3, 0, 0},
38 {EXIF_TAG_GPS_SATELLITES, EXIF_FORMAT_ASCII, 0, 0, 0},
39 {EXIF_TAG_GPS_STATUS, EXIF_FORMAT_ASCII, 0, 0, 0},
40 {EXIF_TAG_GPS_MEASURE_MODE, EXIF_FORMAT_ASCII, 0, 0, 0},
41 {EXIF_TAG_GPS_DOP, EXIF_FORMAT_RATIONAL, 1, 0, 0},
42 {EXIF_TAG_GPS_SPEED_REF, EXIF_FORMAT_ASCII, 2, 2, "K\x00"},
43 {EXIF_TAG_GPS_SPEED, EXIF_FORMAT_RATIONAL, 1, 0, 0},
44 {EXIF_TAG_GPS_TRACK_REF, EXIF_FORMAT_ASCII, 2, 2, "T\x00"},
45 {EXIF_TAG_GPS_TRACK, EXIF_FORMAT_RATIONAL, 1, 0, 0},
46 {EXIF_TAG_GPS_IMG_DIRECTION_REF, EXIF_FORMAT_ASCII, 2, 2, "T\x00"},
47 {EXIF_TAG_GPS_IMG_DIRECTION, EXIF_FORMAT_RATIONAL, 1, 0, 0},
48 {EXIF_TAG_GPS_MAP_DATUM, EXIF_FORMAT_ASCII, 0, 0, 0},
49 {EXIF_TAG_GPS_DEST_LATITUDE_REF, EXIF_FORMAT_ASCII, 0, 0, 0},
50 {EXIF_TAG_GPS_DEST_LATITUDE, EXIF_FORMAT_RATIONAL, 3, 0, 0},
51 {EXIF_TAG_GPS_DEST_LONGITUDE_REF, EXIF_FORMAT_ASCII, 0, 0, 0},
52 {EXIF_TAG_GPS_DEST_LONGITUDE, EXIF_FORMAT_RATIONAL, 3, 0, 0},
53 {EXIF_TAG_GPS_DEST_BEARING_REF, EXIF_FORMAT_ASCII, 2, 2, "T\x00"},
54 {EXIF_TAG_GPS_DEST_BEARING, EXIF_FORMAT_RATIONAL, 1, 0, 0},
55 {EXIF_TAG_GPS_DEST_DISTANCE_REF, EXIF_FORMAT_ASCII, 2, 2, "K\x00"},
56 {EXIF_TAG_GPS_DEST_DISTANCE, EXIF_FORMAT_RATIONAL, 1, 0, 0},
57 {EXIF_TAG_GPS_PROCESSING_METHOD, EXIF_FORMAT_UNDEFINED, 0, 0, 0},
58 {EXIF_TAG_GPS_AREA_INFORMATION, EXIF_FORMAT_UNDEFINED, 0, 0, 0},
59 {EXIF_TAG_GPS_DATE_STAMP, EXIF_FORMAT_ASCII, 0, 0, 0},
60 {EXIF_TAG_GPS_DIFFERENTIAL, EXIF_FORMAT_SHORT, 1, 0, 0},
61 {EXIF_TAG_GPS_H_POSITIONING_ERROR, EXIF_FORMAT_RATIONAL, 1, 0, 0},
62 };
63
exif_get_gps_tag_info(ExifTag tag)64 const ExifGPSIfdTagInfo *exif_get_gps_tag_info(ExifTag tag) {
65 size_t i;
66 for (i = 0; i < sizeof(exif_gps_ifd_tags) / sizeof(ExifGPSIfdTagInfo); ++i) {
67 if (tag==exif_gps_ifd_tags[i].tag)
68 return &exif_gps_ifd_tags[i];
69 }
70 return NULL;
71 }
72
73