• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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