Loading src/exif.c +237 −228 Original line number Diff line number Diff line Loading @@ -44,10 +44,8 @@ void exif_trim_spaces(char *str) { char *end; for (end = str; *str!='\0'; str++) { if (*str != ' ') { for (end = str; *str != '\0'; str++) { if (*str != ' ') { end = str + 1; } } Loading @@ -57,25 +55,27 @@ void exif_trim_spaces(char *str) /* show given exif tag content with tag name */ void exif_get_tag(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned int maxsize) void exif_get_tag(ExifData * d, ExifIfd ifd, ExifTag tag, char *buffer, unsigned int maxsize) { char s[EXIF_MAX_DATA]; ExifEntry *entry = NULL; if ( (d != NULL) && (buffer != NULL) && (maxsize > 0) ) { if ((d != NULL) && (buffer != NULL) && (maxsize > 0)) { entry = exif_content_get_entry(d->ifd[ifd], tag); if (entry != NULL) { if (entry != NULL) { /* Get the contents of the tag in human-readable form */ exif_entry_get_value(entry, s, EXIF_MAX_DATA); /* Don't bother printing it if it's entirely blank */ exif_trim_spaces(s); if (*s != '\0') { D(("%s: %s\n", exif_tag_get_name_in_ifd(tag,ifd), s)); snprintf(buffer, (size_t)maxsize, "%s: %s\n", exif_tag_get_name_in_ifd(tag,ifd), s); if (*s != '\0') { D(("%s: %s\n", exif_tag_get_name_in_ifd(tag, ifd), s)); snprintf(buffer, (size_t) maxsize, "%s: %s\n", exif_tag_get_name_in_ifd(tag, ifd), s); } } } Loading @@ -84,25 +84,25 @@ void exif_get_tag(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned /* show given exif tag content without tag name */ void exif_get_tag_content(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned int maxsize) void exif_get_tag_content(ExifData * d, ExifIfd ifd, ExifTag tag, char *buffer, unsigned int maxsize) { char s[EXIF_MAX_DATA]; ExifEntry *entry = NULL; if ( (d != NULL) && (buffer != NULL) && (maxsize > 0) ) { if ((d != NULL) && (buffer != NULL) && (maxsize > 0)) { entry = exif_content_get_entry(d->ifd[ifd], tag); if (entry != NULL) { if (entry != NULL) { /* Get the contents of the tag in human-readable form */ exif_entry_get_value(entry, s, EXIF_MAX_DATA); /* Don't bother printing it if it's entirely blank */ exif_trim_spaces(s); if (*s != '\0') { D(("%s - %s\n", exif_tag_get_name_in_ifd(tag,ifd), s)); snprintf(buffer, (size_t)maxsize, "%s", s); if (*s != '\0') { D(("%s - %s\n", exif_tag_get_name_in_ifd(tag, ifd), s)); snprintf(buffer, (size_t) maxsize, "%s", s); } } } Loading @@ -112,43 +112,42 @@ void exif_get_tag_content(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, u /* Show the given MakerNote tag if it exists */ void exif_get_mnote_tag(ExifData *d, unsigned int tag, char* buffer, unsigned int maxsize) void exif_get_mnote_tag(ExifData * d, unsigned int tag, char *buffer, unsigned int maxsize) { ExifMnoteData *mn = NULL; int i, num; char buf[1024]; if ( (d!=NULL) && (buffer!=NULL) && (maxsize > 0) ) { if ((d != NULL) && (buffer != NULL) && (maxsize > 0)) { mn = exif_data_get_mnote_data(d); } else { } else { return; } if ( mn != NULL ) { if (mn != NULL) { num = exif_mnote_data_count(mn); /* Loop through all MakerNote tags, searching for the desired one */ for (i=0; i < num; ++i) { D(("%d/%d %d 0x%2x %s; %s\n", i, num, exif_mnote_data_get_id(mn, i), for (i = 0; i < num; ++i) { D(("%d/%d %d 0x%2x %s; %s\n", i, num, exif_mnote_data_get_id(mn, i), exif_mnote_data_get_id(mn, i), exif_mnote_data_get_name(mn, i), exif_mnote_data_get_title(mn, i))); if (exif_mnote_data_get_id(mn, i) == tag) { if (exif_mnote_data_get_value(mn, i, buf, sizeof(buf))) { if (exif_mnote_data_get_id(mn, i) == tag) { if (exif_mnote_data_get_value (mn, i, buf, sizeof(buf))) { /* Don't bother printing it if it's entirely blank */ exif_trim_spaces(buf); if (*buf != '\0') { if (*buf != '\0') { D(("%s\n", buf)); snprintf(buffer, (size_t)maxsize, "%s: %s\n", exif_mnote_data_get_title(mn, i), buf); snprintf(buffer, (size_t) maxsize, "%s: %s\n", exif_mnote_data_get_title (mn, i), buf); } } } Loading @@ -164,57 +163,52 @@ void exif_get_gps_coords(ExifData * ed, char *buffer, unsigned int maxsize) char buf[EXIF_STD_BUF_LEN]; buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE_REF, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "GPS: %s ", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE_REF, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "GPS: %s ", buf); } else { return; } buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "%s ", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "%s ", buf); } else { return; } buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE_REF, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), ", %s ", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE_REF, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), ", %s ", buf); } else { return; } buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "%s ", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "%s ", buf); } else { return; } buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_MAP_DATUM, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "(%s)\n", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_MAP_DATUM, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "(%s)\n", buf); } else { return; } Loading @@ -229,9 +223,9 @@ ExifData * exif_get_data(char *path) /* Load an ExifData object from an EXIF file */ ed = exif_data_new_from_file(path); if (ed == NULL) { D(("File not readable or no Exif data present in %s\n", path)); if (ed == NULL) { D(("File not readable or no Exif data present in %s\n", path)); } return (ed); Loading @@ -247,69 +241,84 @@ void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize) char buf[EXIF_STD_BUF_LEN]; unsigned short int i = 0; if ( (buffer == NULL) || (maxsize == 0) ) { if ((buffer == NULL) || (maxsize == 0)) { return; } else if (ed == NULL) { snprintf(buffer, (size_t)maxsize, "%s\n", "No Exif data in file."); } else if (ed == NULL) { snprintf(buffer, (size_t) maxsize, "%s\n", "No Exif data in file."); return; } else { } else { /* show normal exif tags. list must be defined in exif_cfg.h */ while ( (i < USHRT_MAX) && (Exif_tag_list[i].ifd != EXIF_IFD_COUNT) ) { exif_get_tag(ed, Exif_tag_list[i].ifd, Exif_tag_list[i].tag, buffer + strlen(buffer), maxsize - strlen(buffer)); while ((i < USHRT_MAX) && (Exif_tag_list[i].ifd != EXIF_IFD_COUNT)) { exif_get_tag(ed, Exif_tag_list[i].ifd, Exif_tag_list[i].tag, buffer + strlen(buffer), maxsize - strlen(buffer)); i++; } /* show vendor specific makernote tags */ entry = exif_content_get_entry(ed->ifd[EXIF_IFD_0], EXIF_TAG_MAKE); if (entry != NULL) { entry = exif_content_get_entry(ed->ifd[EXIF_IFD_0], EXIF_TAG_MAKE); if (entry != NULL) { if (exif_entry_get_value(entry, buf, sizeof(buf))) { if (exif_entry_get_value(entry, buf, sizeof(buf))) { exif_trim_spaces(buf); if ((strcmp(buf, "NIKON CORPORATION") == 0) || (strcmp(buf, "Nikon") == 0) || (strcmp(buf, "NIKON") == 0) ) { ) { /* show nikon makernote exif tags. list must be defined in exif_cfg.h */ i = 0; while ( (i < USHRT_MAX) && (Exif_makernote_nikon_tag_list[i] != EXIF_NIKON_MAKERNOTE_END) ) { exn_get_mnote_nikon_tags(ed, Exif_makernote_nikon_tag_list[i], buffer + strlen(buffer), maxsize - strlen(buffer)); while ((i < USHRT_MAX) && (Exif_makernote_nikon_tag_list [i] != EXIF_NIKON_MAKERNOTE_END)) { exn_get_mnote_nikon_tags (ed, Exif_makernote_nikon_tag_list [i], buffer + strlen(buffer), maxsize - strlen(buffer)); i++; } } else if ( (strcmp(buf, "Canon") == 0) ) { } else if ((strcmp(buf, "Canon") == 0)) { /* show canon makernote exif tags. list must be defined in exif_cfg.h */ i = 0; while ( (i < USHRT_MAX) && (Exif_makernote_canon_tag_list[i] != EXIF_CANON_MAKERNOTE_END) ) { exc_get_mnote_canon_tags(ed, Exif_makernote_canon_tag_list[i], buffer + strlen(buffer), maxsize - strlen(buffer)); while ((i < USHRT_MAX) && (Exif_makernote_canon_tag_list [i] != EXIF_CANON_MAKERNOTE_END)) { exc_get_mnote_canon_tags (ed, Exif_makernote_canon_tag_list [i], buffer + strlen(buffer), maxsize - strlen(buffer)); i++; } } else { } else { } } } /* show gps coordinates */ exif_get_gps_coords(ed, buffer + strlen(buffer), maxsize - strlen(buffer)); exif_get_gps_coords(ed, buffer + strlen(buffer), maxsize - strlen(buffer)); } Loading src/exif.h +11 −6 Original line number Diff line number Diff line Loading @@ -32,11 +32,16 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define EXIF_STD_BUF_LEN 128 extern void exif_trim_spaces(char *str); extern void exif_get_tag(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned int maxsize); extern void exif_get_tag_content(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned int maxsize); extern void exif_get_mnote_tag(ExifData *d, unsigned int tag, char* buffer, unsigned int maxsize); extern void exif_get_gps_coords(ExifData * ed, char *buffer, unsigned int maxsize); extern void exif_get_tag(ExifData * d, ExifIfd ifd, ExifTag tag, char *buffer, unsigned int maxsize); extern void exif_get_tag_content(ExifData * d, ExifIfd ifd, ExifTag tag, char *buffer, unsigned int maxsize); extern void exif_get_mnote_tag(ExifData * d, unsigned int tag, char *buffer, unsigned int maxsize); extern void exif_get_gps_coords(ExifData * ed, char *buffer, unsigned int maxsize); extern ExifData *exif_get_data(char *path); extern void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize); extern void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize); #endif src/exif_canon.c +15 −15 Original line number Diff line number Diff line Loading @@ -36,7 +36,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /* get interesting canon maker note tags in readable form */ void exc_get_mnote_canon_tags(ExifData *ed, unsigned int tag, char * buffer, unsigned int maxsize) void exc_get_mnote_canon_tags(ExifData * ed, unsigned int tag, char *buffer, unsigned int maxsize) { /* char buf[EXIF_STD_BUF_LEN]; Loading @@ -44,8 +45,7 @@ void exc_get_mnote_canon_tags(ExifData *ed, unsigned int tag, char * buffer, uns exif_get_tag(ed, EXIF_IFD_EXIF, EXIF_TAG_FLASH, buf, sizeof(buf)); exif_trim_spaces(buf); */ switch(tag) { switch (tag) { default: { /* normal makernote tags without special treatment */ Loading src/exif_canon.h +2 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <libexif/exif-data.h> extern void exc_get_mnote_canon_tags(ExifData *ed, unsigned int tag, char * buffer, unsigned int maxsize); extern void exc_get_mnote_canon_tags(ExifData * ed, unsigned int tag, char *buffer, unsigned int maxsize); #endif src/exif_cfg.h +48 −52 Original line number Diff line number Diff line Loading @@ -28,8 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <libexif/exif-data.h> typedef struct { typedef struct { ExifIfd ifd; /* section */ ExifTag tag; /* tag */ } t_EXIF_INFO; Loading @@ -37,8 +36,7 @@ typedef struct /* show these standard tags. section must be given first, than the tag itself */ /* definition: http://libexif.sourceforge.net/api/exif-tag_8h.html */ const t_EXIF_INFO Exif_tag_list [] = { const t_EXIF_INFO Exif_tag_list[] = { { EXIF_IFD_0, EXIF_TAG_MAKE }, { EXIF_IFD_0, EXIF_TAG_MODEL }, { EXIF_IFD_0, EXIF_TAG_IMAGE_DESCRIPTION }, Loading Loading @@ -66,8 +64,7 @@ const t_EXIF_INFO Exif_tag_list [] = #define EXIF_NIKON_MAKERNOTE_END 0 /* end marker: if 0 used as a tag we must find something else */ /* show these nikon makernote tags */ const unsigned int Exif_makernote_nikon_tag_list [] = { const unsigned int Exif_makernote_nikon_tag_list[] = { 6, 8, /* Flash Setting */ Loading @@ -94,8 +91,7 @@ const unsigned int Exif_makernote_nikon_tag_list [] = #define EXIF_CANON_MAKERNOTE_END 0xFFFF /* end marker: if this is used as a tag we must find something else */ /* show these canon makernote tags */ const unsigned int Exif_makernote_canon_tag_list [] = { const unsigned int Exif_makernote_canon_tag_list[] = { 8, /* Image Number */ 9, /* Owner Name */ Loading Loading
src/exif.c +237 −228 Original line number Diff line number Diff line Loading @@ -44,10 +44,8 @@ void exif_trim_spaces(char *str) { char *end; for (end = str; *str!='\0'; str++) { if (*str != ' ') { for (end = str; *str != '\0'; str++) { if (*str != ' ') { end = str + 1; } } Loading @@ -57,25 +55,27 @@ void exif_trim_spaces(char *str) /* show given exif tag content with tag name */ void exif_get_tag(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned int maxsize) void exif_get_tag(ExifData * d, ExifIfd ifd, ExifTag tag, char *buffer, unsigned int maxsize) { char s[EXIF_MAX_DATA]; ExifEntry *entry = NULL; if ( (d != NULL) && (buffer != NULL) && (maxsize > 0) ) { if ((d != NULL) && (buffer != NULL) && (maxsize > 0)) { entry = exif_content_get_entry(d->ifd[ifd], tag); if (entry != NULL) { if (entry != NULL) { /* Get the contents of the tag in human-readable form */ exif_entry_get_value(entry, s, EXIF_MAX_DATA); /* Don't bother printing it if it's entirely blank */ exif_trim_spaces(s); if (*s != '\0') { D(("%s: %s\n", exif_tag_get_name_in_ifd(tag,ifd), s)); snprintf(buffer, (size_t)maxsize, "%s: %s\n", exif_tag_get_name_in_ifd(tag,ifd), s); if (*s != '\0') { D(("%s: %s\n", exif_tag_get_name_in_ifd(tag, ifd), s)); snprintf(buffer, (size_t) maxsize, "%s: %s\n", exif_tag_get_name_in_ifd(tag, ifd), s); } } } Loading @@ -84,25 +84,25 @@ void exif_get_tag(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned /* show given exif tag content without tag name */ void exif_get_tag_content(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned int maxsize) void exif_get_tag_content(ExifData * d, ExifIfd ifd, ExifTag tag, char *buffer, unsigned int maxsize) { char s[EXIF_MAX_DATA]; ExifEntry *entry = NULL; if ( (d != NULL) && (buffer != NULL) && (maxsize > 0) ) { if ((d != NULL) && (buffer != NULL) && (maxsize > 0)) { entry = exif_content_get_entry(d->ifd[ifd], tag); if (entry != NULL) { if (entry != NULL) { /* Get the contents of the tag in human-readable form */ exif_entry_get_value(entry, s, EXIF_MAX_DATA); /* Don't bother printing it if it's entirely blank */ exif_trim_spaces(s); if (*s != '\0') { D(("%s - %s\n", exif_tag_get_name_in_ifd(tag,ifd), s)); snprintf(buffer, (size_t)maxsize, "%s", s); if (*s != '\0') { D(("%s - %s\n", exif_tag_get_name_in_ifd(tag, ifd), s)); snprintf(buffer, (size_t) maxsize, "%s", s); } } } Loading @@ -112,43 +112,42 @@ void exif_get_tag_content(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, u /* Show the given MakerNote tag if it exists */ void exif_get_mnote_tag(ExifData *d, unsigned int tag, char* buffer, unsigned int maxsize) void exif_get_mnote_tag(ExifData * d, unsigned int tag, char *buffer, unsigned int maxsize) { ExifMnoteData *mn = NULL; int i, num; char buf[1024]; if ( (d!=NULL) && (buffer!=NULL) && (maxsize > 0) ) { if ((d != NULL) && (buffer != NULL) && (maxsize > 0)) { mn = exif_data_get_mnote_data(d); } else { } else { return; } if ( mn != NULL ) { if (mn != NULL) { num = exif_mnote_data_count(mn); /* Loop through all MakerNote tags, searching for the desired one */ for (i=0; i < num; ++i) { D(("%d/%d %d 0x%2x %s; %s\n", i, num, exif_mnote_data_get_id(mn, i), for (i = 0; i < num; ++i) { D(("%d/%d %d 0x%2x %s; %s\n", i, num, exif_mnote_data_get_id(mn, i), exif_mnote_data_get_id(mn, i), exif_mnote_data_get_name(mn, i), exif_mnote_data_get_title(mn, i))); if (exif_mnote_data_get_id(mn, i) == tag) { if (exif_mnote_data_get_value(mn, i, buf, sizeof(buf))) { if (exif_mnote_data_get_id(mn, i) == tag) { if (exif_mnote_data_get_value (mn, i, buf, sizeof(buf))) { /* Don't bother printing it if it's entirely blank */ exif_trim_spaces(buf); if (*buf != '\0') { if (*buf != '\0') { D(("%s\n", buf)); snprintf(buffer, (size_t)maxsize, "%s: %s\n", exif_mnote_data_get_title(mn, i), buf); snprintf(buffer, (size_t) maxsize, "%s: %s\n", exif_mnote_data_get_title (mn, i), buf); } } } Loading @@ -164,57 +163,52 @@ void exif_get_gps_coords(ExifData * ed, char *buffer, unsigned int maxsize) char buf[EXIF_STD_BUF_LEN]; buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE_REF, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "GPS: %s ", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE_REF, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "GPS: %s ", buf); } else { return; } buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "%s ", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "%s ", buf); } else { return; } buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE_REF, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), ", %s ", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE_REF, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), ", %s ", buf); } else { return; } buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "%s ", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "%s ", buf); } else { return; } buf[0] = '\0'; exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_MAP_DATUM, buf, sizeof(buf)); if ( buf[0] != '\0' ) { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "(%s)\n", buf); } else { exif_get_tag_content(ed, EXIF_IFD_GPS, EXIF_TAG_GPS_MAP_DATUM, buf, sizeof(buf)); if (buf[0] != '\0') { snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "(%s)\n", buf); } else { return; } Loading @@ -229,9 +223,9 @@ ExifData * exif_get_data(char *path) /* Load an ExifData object from an EXIF file */ ed = exif_data_new_from_file(path); if (ed == NULL) { D(("File not readable or no Exif data present in %s\n", path)); if (ed == NULL) { D(("File not readable or no Exif data present in %s\n", path)); } return (ed); Loading @@ -247,69 +241,84 @@ void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize) char buf[EXIF_STD_BUF_LEN]; unsigned short int i = 0; if ( (buffer == NULL) || (maxsize == 0) ) { if ((buffer == NULL) || (maxsize == 0)) { return; } else if (ed == NULL) { snprintf(buffer, (size_t)maxsize, "%s\n", "No Exif data in file."); } else if (ed == NULL) { snprintf(buffer, (size_t) maxsize, "%s\n", "No Exif data in file."); return; } else { } else { /* show normal exif tags. list must be defined in exif_cfg.h */ while ( (i < USHRT_MAX) && (Exif_tag_list[i].ifd != EXIF_IFD_COUNT) ) { exif_get_tag(ed, Exif_tag_list[i].ifd, Exif_tag_list[i].tag, buffer + strlen(buffer), maxsize - strlen(buffer)); while ((i < USHRT_MAX) && (Exif_tag_list[i].ifd != EXIF_IFD_COUNT)) { exif_get_tag(ed, Exif_tag_list[i].ifd, Exif_tag_list[i].tag, buffer + strlen(buffer), maxsize - strlen(buffer)); i++; } /* show vendor specific makernote tags */ entry = exif_content_get_entry(ed->ifd[EXIF_IFD_0], EXIF_TAG_MAKE); if (entry != NULL) { entry = exif_content_get_entry(ed->ifd[EXIF_IFD_0], EXIF_TAG_MAKE); if (entry != NULL) { if (exif_entry_get_value(entry, buf, sizeof(buf))) { if (exif_entry_get_value(entry, buf, sizeof(buf))) { exif_trim_spaces(buf); if ((strcmp(buf, "NIKON CORPORATION") == 0) || (strcmp(buf, "Nikon") == 0) || (strcmp(buf, "NIKON") == 0) ) { ) { /* show nikon makernote exif tags. list must be defined in exif_cfg.h */ i = 0; while ( (i < USHRT_MAX) && (Exif_makernote_nikon_tag_list[i] != EXIF_NIKON_MAKERNOTE_END) ) { exn_get_mnote_nikon_tags(ed, Exif_makernote_nikon_tag_list[i], buffer + strlen(buffer), maxsize - strlen(buffer)); while ((i < USHRT_MAX) && (Exif_makernote_nikon_tag_list [i] != EXIF_NIKON_MAKERNOTE_END)) { exn_get_mnote_nikon_tags (ed, Exif_makernote_nikon_tag_list [i], buffer + strlen(buffer), maxsize - strlen(buffer)); i++; } } else if ( (strcmp(buf, "Canon") == 0) ) { } else if ((strcmp(buf, "Canon") == 0)) { /* show canon makernote exif tags. list must be defined in exif_cfg.h */ i = 0; while ( (i < USHRT_MAX) && (Exif_makernote_canon_tag_list[i] != EXIF_CANON_MAKERNOTE_END) ) { exc_get_mnote_canon_tags(ed, Exif_makernote_canon_tag_list[i], buffer + strlen(buffer), maxsize - strlen(buffer)); while ((i < USHRT_MAX) && (Exif_makernote_canon_tag_list [i] != EXIF_CANON_MAKERNOTE_END)) { exc_get_mnote_canon_tags (ed, Exif_makernote_canon_tag_list [i], buffer + strlen(buffer), maxsize - strlen(buffer)); i++; } } else { } else { } } } /* show gps coordinates */ exif_get_gps_coords(ed, buffer + strlen(buffer), maxsize - strlen(buffer)); exif_get_gps_coords(ed, buffer + strlen(buffer), maxsize - strlen(buffer)); } Loading
src/exif.h +11 −6 Original line number Diff line number Diff line Loading @@ -32,11 +32,16 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define EXIF_STD_BUF_LEN 128 extern void exif_trim_spaces(char *str); extern void exif_get_tag(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned int maxsize); extern void exif_get_tag_content(ExifData *d, ExifIfd ifd, ExifTag tag, char* buffer, unsigned int maxsize); extern void exif_get_mnote_tag(ExifData *d, unsigned int tag, char* buffer, unsigned int maxsize); extern void exif_get_gps_coords(ExifData * ed, char *buffer, unsigned int maxsize); extern void exif_get_tag(ExifData * d, ExifIfd ifd, ExifTag tag, char *buffer, unsigned int maxsize); extern void exif_get_tag_content(ExifData * d, ExifIfd ifd, ExifTag tag, char *buffer, unsigned int maxsize); extern void exif_get_mnote_tag(ExifData * d, unsigned int tag, char *buffer, unsigned int maxsize); extern void exif_get_gps_coords(ExifData * ed, char *buffer, unsigned int maxsize); extern ExifData *exif_get_data(char *path); extern void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize); extern void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize); #endif
src/exif_canon.c +15 −15 Original line number Diff line number Diff line Loading @@ -36,7 +36,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /* get interesting canon maker note tags in readable form */ void exc_get_mnote_canon_tags(ExifData *ed, unsigned int tag, char * buffer, unsigned int maxsize) void exc_get_mnote_canon_tags(ExifData * ed, unsigned int tag, char *buffer, unsigned int maxsize) { /* char buf[EXIF_STD_BUF_LEN]; Loading @@ -44,8 +45,7 @@ void exc_get_mnote_canon_tags(ExifData *ed, unsigned int tag, char * buffer, uns exif_get_tag(ed, EXIF_IFD_EXIF, EXIF_TAG_FLASH, buf, sizeof(buf)); exif_trim_spaces(buf); */ switch(tag) { switch (tag) { default: { /* normal makernote tags without special treatment */ Loading
src/exif_canon.h +2 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <libexif/exif-data.h> extern void exc_get_mnote_canon_tags(ExifData *ed, unsigned int tag, char * buffer, unsigned int maxsize); extern void exc_get_mnote_canon_tags(ExifData * ed, unsigned int tag, char *buffer, unsigned int maxsize); #endif
src/exif_cfg.h +48 −52 Original line number Diff line number Diff line Loading @@ -28,8 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <libexif/exif-data.h> typedef struct { typedef struct { ExifIfd ifd; /* section */ ExifTag tag; /* tag */ } t_EXIF_INFO; Loading @@ -37,8 +36,7 @@ typedef struct /* show these standard tags. section must be given first, than the tag itself */ /* definition: http://libexif.sourceforge.net/api/exif-tag_8h.html */ const t_EXIF_INFO Exif_tag_list [] = { const t_EXIF_INFO Exif_tag_list[] = { { EXIF_IFD_0, EXIF_TAG_MAKE }, { EXIF_IFD_0, EXIF_TAG_MODEL }, { EXIF_IFD_0, EXIF_TAG_IMAGE_DESCRIPTION }, Loading Loading @@ -66,8 +64,7 @@ const t_EXIF_INFO Exif_tag_list [] = #define EXIF_NIKON_MAKERNOTE_END 0 /* end marker: if 0 used as a tag we must find something else */ /* show these nikon makernote tags */ const unsigned int Exif_makernote_nikon_tag_list [] = { const unsigned int Exif_makernote_nikon_tag_list[] = { 6, 8, /* Flash Setting */ Loading @@ -94,8 +91,7 @@ const unsigned int Exif_makernote_nikon_tag_list [] = #define EXIF_CANON_MAKERNOTE_END 0xFFFF /* end marker: if this is used as a tag we must find something else */ /* show these canon makernote tags */ const unsigned int Exif_makernote_canon_tag_list [] = { const unsigned int Exif_makernote_canon_tag_list[] = { 8, /* Image Number */ 9, /* Owner Name */ Loading