diff options
| author | Dennis Real <github@tildepipe.org> | 2012-03-24 14:41:15 +0100 | 
|---|---|---|
| committer | Dennis Real <github@tildepipe.org> | 2012-03-24 14:41:15 +0100 | 
| commit | 10b7b1e3e10ba650b240a742947cb6850bbadd23 (patch) | |
| tree | 801dbba31979dfea932f54a5d8d5187d7e325b80 | |
| parent | 3c284dc81dcb26249114b7ecf32ed0000f492b8b (diff) | |
Support for Canon Exif makernote tags
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | src/exif.c | 23 | ||||
| -rw-r--r-- | src/exif_canon.c | 61 | ||||
| -rw-r--r-- | src/exif_canon.h | 33 | ||||
| -rw-r--r-- | src/exif_cfg.h | 20 | ||||
| -rw-r--r-- | src/exif_nikon.c | 23 | 
6 files changed, 143 insertions, 20 deletions
| @@ -3,4 +3,5 @@  /src/*.inc  /src/feh  /man/*.1 -*~
\ No newline at end of file +*~ +core @@ -34,6 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  #include "options.h"  #include "debug.h"  #include "exif.h" +#include "exif_canon.h"  #include "exif_nikon.h"  #include "exif_cfg.h" @@ -239,7 +240,7 @@ ExifData * exif_get_data(char *path) -/* get exif data in readable form */ +/* get all exif data in readable form */  void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize)  {    ExifEntry *entry = NULL; @@ -272,14 +273,12 @@ void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize)        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)             )          { -          /* this is a nikon camera */ -            /* show nikon makernote exif tags. list must be defined in exif_cfg.h  */            i=0;            while ( (Exif_makernote_nikon_tag_list[i] != EXIF_NIKON_MAKERNOTE_END) && (i < USHRT_MAX) ) @@ -290,7 +289,21 @@ void exif_get_info(ExifData * ed, char *buffer, unsigned int maxsize)            }          } - +        else if ( (strcmp(buf, "Canon") == 0) ) +        { +          /* show canon makernote exif tags. list must be defined in exif_cfg.h  */ +          i=0; +          while ( (Exif_makernote_canon_tag_list[i] != EXIF_CANON_MAKERNOTE_END) && (i < USHRT_MAX) ) +          { +            exc_get_mnote_canon_tags(ed, Exif_makernote_canon_tag_list[i],  +                                     buffer + strlen(buffer), maxsize - strlen(buffer)); +            i++;  +          } +         +        } +        else +        { +        }        }      } diff --git a/src/exif_canon.c b/src/exif_canon.c new file mode 100644 index 0000000..8801899 --- /dev/null +++ b/src/exif_canon.c @@ -0,0 +1,61 @@ +/* exif_canon.c + +Copyright (C) 2012      Dennis Real. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies of the Software and its documentation and acknowledgment shall be +given in the documentation and software packages that this Software was +used. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#ifdef HAVE_LIBEXIF + +#include <stdio.h> +#include <libexif/exif-data.h> + +#include "feh.h" +#include "debug.h" +#include "exif.h" +#include "exif_canon.h" + + + +/* 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) +{ +  /* char buf[EXIF_STD_BUF_LEN]; + +  buf[0] = '\0'; +  exif_get_tag(ed, EXIF_IFD_EXIF, EXIF_TAG_FLASH, buf, sizeof(buf)); +  exif_trim_spaces(buf); */ + +  switch(tag) +  { +    default: +    { +      /* normal makernote tags without special treatment */ +      exif_get_mnote_tag(ed, tag, buffer, maxsize); +    } +    break; +  } + + +  return; +} + +#endif diff --git a/src/exif_canon.h b/src/exif_canon.h new file mode 100644 index 0000000..d8682c3 --- /dev/null +++ b/src/exif_canon.h @@ -0,0 +1,33 @@ +/* exif_canon.h + +Copyright (C) 2012      Dennis Real. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies of the Software and its documentation and acknowledgment shall be +given in the documentation and software packages that this Software was +used. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#ifndef EXIF_CANON_H +#define EXIF_CANON_H + +#include <libexif/exif-data.h> + +extern void exc_get_mnote_canon_tags(ExifData *ed, unsigned int tag, char * buffer, unsigned int maxsize); + +#endif diff --git a/src/exif_cfg.h b/src/exif_cfg.h index 390c1ad..31acc50 100644 --- a/src/exif_cfg.h +++ b/src/exif_cfg.h @@ -30,7 +30,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  typedef struct  { -  ExifIfd ifd; /* section */ +  ExifIfd ifd;  /* section */    ExifTag tag;  /* tag */  } t_EXIF_INFO; @@ -59,6 +59,9 @@ const t_EXIF_INFO Exif_tag_list [] =  }; + +/* Nikon */ +  #define EXIF_NIKON_MAKERNOTE_END 0  /* end marker: if 0 used as a tag we must find something else */  /* show these nikon makernote tags */ @@ -78,4 +81,19 @@ const unsigned int Exif_makernote_nikon_tag_list [] =    EXIF_NIKON_MAKERNOTE_END   /* end marker */  }; + + +/* Canon */ +#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 [] = +{ +  8,  /* Image Number */ +  9,  /* Owner Name */ +   +  EXIF_CANON_MAKERNOTE_END   /* end marker */ +}; + +  #endif diff --git a/src/exif_nikon.c b/src/exif_nikon.c index 753a8bf..f4a8eea 100644 --- a/src/exif_nikon.c +++ b/src/exif_nikon.c @@ -26,7 +26,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  #ifdef HAVE_LIBEXIF  #include <stdio.h> -#include <string.h>  #include <libexif/exif-data.h>  #include "feh.h" @@ -174,7 +173,7 @@ static void exn_get_mnote_nikon_34(ExifData *ed, char * buffer, unsigned int max    buf[0] = '\0';    exif_get_mnote_tag(ed, 34, buf, sizeof(buf)); -  sscanf(buf, "(null): %u", &data); +  sscanf(buf, "(null): %u", &data); 	/* not directly supported by libexif yet */    switch(data)    { @@ -215,8 +214,7 @@ static void exn_get_mnote_nikon_34(ExifData *ed, char * buffer, unsigned int max    } -  snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "Active D-Lightning: %s\n",  -           answer); +  snprintf(buffer, maxsize, "Active D-Lightning: %s\n", answer);  } @@ -244,8 +242,7 @@ static void exn_get_mnote_nikon_168(ExifData *ed, char * buffer, unsigned int ma            )       )    { -    snprintf(buffer + strlen(buffer), maxsize - strlen(buffer), "NikonFlashControlMode: %s\n",  -             EXN_NikonFlashControlModeValues[exn_fcm]); +    snprintf(buffer, maxsize, "NikonFlashControlMode: %s\n", EXN_NikonFlashControlModeValues[exn_fcm]);    }  } @@ -283,7 +280,7 @@ static void exn_get_mnote_nikon_183(ExifData *ed, char * buffer, unsigned int ma      if ( (contrastdetectaf != 0) && (afareamode < EXN_AF_AREA_MODE_C_MAX) )      {        /* Contrast AF (live view) */ -      snprintf(buffer + strlen(buffer), maxsize - strlen(buffer),  +      snprintf(buffer, maxsize,                  "ContrastDetectAF: %s; AFAreaMode: %s\n",                  EXN_NikonContrastDetectAF[contrastdetectaf],                 EXN_NikonAFAreaModeContr[afareamode]); @@ -295,7 +292,7 @@ static void exn_get_mnote_nikon_183(ExifData *ed, char * buffer, unsigned int ma        buf[0] = '\0';        exn_get_prim_af_pt(phasedetectaf, primaryafpoint, buf, EXIF_STD_BUF_LEN); -      snprintf(buffer + strlen(buffer), maxsize - strlen(buffer),  +      snprintf(buffer, maxsize,                  "PhaseDetectAF: %s; AreaMode: %s; PrimaryAFPoint: %s\n",                  EXN_NikonPhaseDetectAF[phasedetectaf],                 EXN_NikonAFAreaModePhase[afareamode], @@ -328,7 +325,7 @@ void exn_get_mnote_nikon_tags(ExifData *ed, unsigned int tag, char * buffer, uns        if ( !(strcmp("Flash: Flash did not fire\n", buf) == 0) )        {          /* show extended flash info only if flash was fired */ -        exif_get_mnote_tag(ed, tag, buffer + strlen(buffer), maxsize - strlen(buffer)); +        exif_get_mnote_tag(ed, tag, buffer, maxsize);        }      }      break; @@ -336,7 +333,7 @@ void exn_get_mnote_nikon_tags(ExifData *ed, unsigned int tag, char * buffer, uns      case 34:      {        /* ActiveD-Lighting */ -      exn_get_mnote_nikon_34(ed, buffer + strlen(buffer), maxsize - strlen(buffer));       +      exn_get_mnote_nikon_34(ed, buffer, maxsize);      }      break; @@ -346,7 +343,7 @@ void exn_get_mnote_nikon_tags(ExifData *ed, unsigned int tag, char * buffer, uns        if ( !(strcmp("Flash: Flash did not fire\n", buf) == 0) )        {          /* show extended flash info only if flash was fired */ -        exn_get_mnote_nikon_168(ed, buffer + strlen(buffer), maxsize - strlen(buffer)); +        exn_get_mnote_nikon_168(ed, buffer, maxsize);        }      }      break; @@ -354,14 +351,14 @@ void exn_get_mnote_nikon_tags(ExifData *ed, unsigned int tag, char * buffer, uns      case 183:      {        /* AFInfo 2 */ -      exn_get_mnote_nikon_183(ed, buffer + strlen(buffer), maxsize - strlen(buffer)); +      exn_get_mnote_nikon_183(ed, buffer, maxsize);      }      break;      default:      {        /* normal makernote tags without special treatment */ -      exif_get_mnote_tag(ed, tag, buffer + strlen(buffer), maxsize - strlen(buffer)); +      exif_get_mnote_tag(ed, tag, buffer, maxsize);      }      break;    } | 
