Add GPSProcessingMethod tag to ExifInterface.

Change-Id: Ic5040daf33a921a5113e643f5729bc9e27f4f4c7
diff --git a/gpsinfo.c b/gpsinfo.c
index afd4b12..a300aa8 100644
--- a/gpsinfo.c
+++ b/gpsinfo.c
@@ -1,7 +1,7 @@
 //--------------------------------------------------------------------------
 // Parsing of GPS info from exif header.
 //
-// Matthias Wandel,  Dec 1999 - Dec 2002 
+// Matthias Wandel,  Dec 1999 - Dec 2002
 //--------------------------------------------------------------------------
 #include "jhead.h"
 
@@ -16,6 +16,7 @@
 #define TAG_GPS_ALT_REF    5
 #define TAG_GPS_ALT        6
 #define TAG_GPS_TIMESTAMP  7
+#define TAG_GPS_PROCESSING_METHOD 27
 #define TAG_GPS_DATESTAMP  29
 
 static TagTable_t GpsTags[]= {
@@ -52,7 +53,10 @@
     { 0x1E, "GPSDifferential", FMT_SSHORT, 1},
 };
 
+static const char ExifAsciiPrefix[] = { 0x41, 0x53, 0x43, 0x49, 0x49, 0x0, 0x0, 0x0 };
+
 #define MAX_GPS_TAG  (sizeof(GpsTags) / sizeof(TagTable_t))
+#define EXIF_ASCII_PREFIX_LEN (sizeof(ExifAsciiPrefix))
 
 // Define the line below to turn on poor man's debugging output
 #undef SUPERDEBUG
@@ -138,6 +142,7 @@
     ImageInfo.GpsAlt[0] = 0;
     bzero(ImageInfo.GpsTimeStamp, sizeof(ImageInfo.GpsTimeStamp));
     bzero(ImageInfo.GpsDateStamp, sizeof(ImageInfo.GpsDateStamp));
+    bzero(ImageInfo.GpsProcessingMethod, sizeof(ImageInfo.GpsProcessingMethod));
 
     for (de=0;de<NumDirEntries;de++){
         unsigned Tag, Format, Components;
@@ -264,6 +269,20 @@
             case TAG_GPS_DATESTAMP:
                 strncpy(ImageInfo.GpsDateStamp, (char*)ValuePtr, sizeof(ImageInfo.GpsDateStamp));
                 break;
+
+            case TAG_GPS_PROCESSING_METHOD:
+                if (ByteCount > EXIF_ASCII_PREFIX_LEN && 
+                    memcmp(ValuePtr, ExifAsciiPrefix, EXIF_ASCII_PREFIX_LEN) == 0) {
+                    int length =
+                        ByteCount < GPS_PROCESSING_METHOD_LEN + EXIF_ASCII_PREFIX_LEN ?
+                        ByteCount - EXIF_ASCII_PREFIX_LEN : GPS_PROCESSING_METHOD_LEN;
+                    memcpy(ImageInfo.GpsProcessingMethod,
+                        (char*)(ValuePtr + EXIF_ASCII_PREFIX_LEN), length);
+                    ImageInfo.GpsProcessingMethod[length] = 0;
+                } else {
+                    LOGW("Unsupported encoding for GPSProcessingMethod");
+                }
+                break;
         }
 
         if (ShowTags){
@@ -314,4 +333,4 @@
     }
 }
 
-   
+