Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a113a075 authored by Oscar Rydhe's avatar Oscar Rydhe Committed by Wu-cheng Li
Browse files

Improved conversion accuracy of exif geotag data

Changed degrees and minutes of geotag data into double to avoid
data loss during cast.

Also improved error handling if geotag data can't be parsed.

bug:3381761
Change-Id: I864843c7fc699fe81e6acba801fe46d10a01925b
parent 4c541b13
Loading
Loading
Loading
Loading
+19 −13
Original line number Original line Diff line number Diff line
@@ -299,12 +299,16 @@ public class ExifInterface {
        String lngRef = mAttributes.get(ExifInterface.TAG_GPS_LONGITUDE_REF);
        String lngRef = mAttributes.get(ExifInterface.TAG_GPS_LONGITUDE_REF);


        if (latValue != null && latRef != null && lngValue != null && lngRef != null) {
        if (latValue != null && latRef != null && lngValue != null && lngRef != null) {
            try {
                output[0] = convertRationalLatLonToFloat(latValue, latRef);
                output[0] = convertRationalLatLonToFloat(latValue, latRef);
                output[1] = convertRationalLatLonToFloat(lngValue, lngRef);
                output[1] = convertRationalLatLonToFloat(lngValue, lngRef);
                return true;
                return true;
        } else {
            } catch (IllegalArgumentException e) {
            return false;
                // if values are not parseable
            }
        }
        }

        return false;
    }
    }


    /**
    /**
@@ -373,12 +377,12 @@ public class ExifInterface {


            String [] pair;
            String [] pair;
            pair = parts[0].split("/");
            pair = parts[0].split("/");
            int degrees = (int) (Float.parseFloat(pair[0].trim())
            double degrees = Double.parseDouble(pair[0].trim())
                    / Float.parseFloat(pair[1].trim()));
                    / Double.parseDouble(pair[1].trim());


            pair = parts[1].split("/");
            pair = parts[1].split("/");
            int minutes = (int) ((Float.parseFloat(pair[0].trim())
            double minutes = Double.parseDouble(pair[0].trim())
                    / Float.parseFloat(pair[1].trim())));
                    / Double.parseDouble(pair[1].trim());


            pair = parts[2].split("/");
            pair = parts[2].split("/");
            double seconds = Double.parseDouble(pair[0].trim())
            double seconds = Double.parseDouble(pair[0].trim())
@@ -389,10 +393,12 @@ public class ExifInterface {
                return (float) -result;
                return (float) -result;
            }
            }
            return (float) result;
            return (float) result;
        } catch (RuntimeException ex) {
        } catch (NumberFormatException e) {
            // if for whatever reason we can't parse the lat long then return
            // Some of the nubmers are not valid
            // null
            throw new IllegalArgumentException();
            return 0f;
        } catch (ArrayIndexOutOfBoundsException e) {
            // Some of the rational does not follow the correct format
            throw new IllegalArgumentException();
        }
        }
    }
    }