Add GPSAltitude and GPSAltitudeRef EXIF tag.

Change-Id: I29fec625f3d3c796caf8ca6197eb3f4e77f08270
diff --git a/gpsinfo.c b/gpsinfo.c
index a0ebaea..7eef6ba 100644
--- a/gpsinfo.c
+++ b/gpsinfo.c
@@ -26,7 +26,7 @@
     { 0x03, "GPSLongitudeRef", FMT_STRING, 2},
     { 0x04, "GPSLongitude", FMT_URATIONAL, 3},
     { 0x05, "GPSAltitudeRef", FMT_BYTE, 1},
-    { 0x06, "GPSAltitude", FMT_SRATIONAL, 1},
+    { 0x06, "GPSAltitude", FMT_URATIONAL, 1},
     { 0x07, "GPSTimeStamp", FMT_SRATIONAL, 3},
     { 0x08, "GPSSatellites", FMT_STRING, -1},
     { 0x09, "GPSStatus", FMT_STRING, 2},
@@ -247,11 +247,14 @@
 
             case TAG_GPS_ALT_REF:
                 ImageInfo.GpsAlt[0] = (char)(ValuePtr[0] ? '-' : ' ');
+                ImageInfo.GpsAltRef = (char)ValuePtr[0];
                 break;
 
             case TAG_GPS_ALT:
                 sprintf(ImageInfo.GpsAlt + 1, "%.2fm", 
                     ConvertAnyFormat(ValuePtr, Format));
+                ImageInfo.GpsAltRaw.num = Get32u(ValuePtr);
+                ImageInfo.GpsAltRaw.denom = Get32u(4+(char *)ValuePtr);
                 break;
 
             case TAG_GPS_TIMESTAMP:
diff --git a/jhead.h b/jhead.h
index 60c2706..59130cf 100644
--- a/jhead.h
+++ b/jhead.h
@@ -120,6 +120,8 @@
     char GpsLongRaw[31];
     char GpsLongRef[2];
     char GpsAlt[20];
+    rat_t GpsAltRaw;
+    char GpsAltRef;
     // gps-datestamp is 11 bytes ascii in EXIF 2.2
     char GpsDateStamp[11];
     char GpsTimeStamp[11];
diff --git a/main.c b/main.c
index 1b1eabd..aed33f4 100644
--- a/main.c
+++ b/main.c
@@ -663,7 +663,8 @@
             if (bufLen == 0) return NULL;
         }
         if (ImageInfo.GpsAlt[0]) {
-            bufLen = addKeyValueString(&buf, bufLen, "GPSAltitude", ImageInfo.GpsAlt);
+            bufLen = addKeyValueRational(&buf, bufLen, "GPSAltitude", ImageInfo.GpsAltRaw);
+            bufLen = addKeyValueInt(&buf, bufLen, "GPSAltitudeRef", ImageInfo.GpsAltRef);
             if (bufLen == 0) return NULL;
         }
         if (ImageInfo.GpsDateStamp[0]) {