exiftag: Increase serialized geo precision
authorPaulo Neves <pneves@airborneprojects.com>
Sat, 11 Jun 2016 15:11:30 +0000 (17:11 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 13 Jun 2016 06:29:52 +0000 (09:29 +0300)
commit5dd720e064f6740fcf41afd706d10afe21048f12
tree9ec37df7bb213a96df91313785d49ba718c2a144
parentd423406e0ac87b365f120e6ebe08801bbb1cfe58
exiftag: Increase serialized geo precision

The serialization of double typed geographical
coordinates to DMS system supported by the exif
standards was previously truncated without need.

The previous code truncated the seconds part of
the coordinate to a fraction with denominator
equal to 1 causing a bug on the deserialization
when the test for the coordinate to be serialized
was more precise.

This patch applies a 10E6 multiplier to the numerator
equal to the denominator of the rational number.

Eg. Latitude = 89.5688643 Serialization

DMS Old code = 89/1 deg, 34/1 min, 7/1 sec
DMS New code = 89/1 deg, 34/1 min, 79114800UL/10000000UL

Deserialization

DMS Old code = 89.5686111111
DMS New code = 89.5688643

The new test tries to serialize a higher precision
coordinate.

The types of the coordinates are also guint32 instead
of gint like previously. guint32 is the type of the
fraction components in the exif.

https://bugzilla.gnome.org/show_bug.cgi?id=767537
gst-libs/gst/tag/gstexiftag.c
tests/check/libs/tag.c