mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 10:41:04 +00:00
metadata: fix conversion of geo coordinates
Coordinate conversion has been verified with exiv2 and some webpages. Minutes wher totally off and seconds were not used at all.
This commit is contained in:
parent
1cf9f2d497
commit
f096d6406e
1 changed files with 17 additions and 10 deletions
|
@ -694,16 +694,16 @@ metadataparse_exif_content_foreach_entry_func (ExifEntry * entry,
|
||||||
|
|
||||||
/* DDD - degrees */
|
/* DDD - degrees */
|
||||||
value = (gdouble) rt->numerator / (gdouble) rt->denominator;
|
value = (gdouble) rt->numerator / (gdouble) rt->denominator;
|
||||||
|
GST_DEBUG ("deg: %lu / %lu", rt->numerator, rt->denominator);
|
||||||
rt++;
|
rt++;
|
||||||
|
|
||||||
/* MM - minutes and SS - seconds */
|
/* MM - minutes and SS - seconds */
|
||||||
if (rt->numerator % rt->denominator) {
|
GST_DEBUG ("min: %lu / %lu", rt->numerator, rt->denominator);
|
||||||
value += (gdouble) rt->numerator / (gdouble) rt->denominator;
|
value += (gdouble) rt->numerator / ((gdouble) rt->denominator * 60.0);
|
||||||
} else {
|
rt++;
|
||||||
value += rt->numerator / rt->denominator;
|
GST_DEBUG ("sec: %lu / %lu", rt->numerator, rt->denominator);
|
||||||
rt++;
|
value +=
|
||||||
value += rt->numerator / rt->denominator;
|
(gdouble) rt->numerator / ((gdouble) rt->denominator * 3600.0);
|
||||||
}
|
|
||||||
|
|
||||||
/* apply sign */
|
/* apply sign */
|
||||||
if (entry->tag == EXIF_TAG_GPS_LATITUDE) {
|
if (entry->tag == EXIF_TAG_GPS_LATITUDE) {
|
||||||
|
@ -1049,17 +1049,24 @@ metadatamux_exif_for_each_tag_in_list (const GstTagList * list,
|
||||||
const ExifTag ref_tag = entry->tag == EXIF_TAG_GPS_LATITUDE ?
|
const ExifTag ref_tag = entry->tag == EXIF_TAG_GPS_LATITUDE ?
|
||||||
EXIF_TAG_GPS_LATITUDE_REF : EXIF_TAG_GPS_LONGITUDE_REF;
|
EXIF_TAG_GPS_LATITUDE_REF : EXIF_TAG_GPS_LONGITUDE_REF;
|
||||||
|
|
||||||
|
/* DDD - degrees */
|
||||||
rt->numerator = (gulong) v;
|
rt->numerator = (gulong) v;
|
||||||
rt->denominator = 1;
|
rt->denominator = 1;
|
||||||
|
GST_DEBUG ("deg: %lf : %lu / %lu", v, rt->numerator, rt->denominator);
|
||||||
v -= rt->numerator;
|
v -= rt->numerator;
|
||||||
rt++;
|
rt++;
|
||||||
|
|
||||||
rt->numerator = (gulong) (0.5 + v * 100.0);
|
/* MM - minutes */
|
||||||
rt->denominator = 100;
|
rt->numerator = (gulong) (v * 60.0);
|
||||||
|
rt->denominator = 1;
|
||||||
|
GST_DEBUG ("min: %lf : %lu / %lu", v, rt->numerator, rt->denominator);
|
||||||
|
v -= ((gdouble) rt->numerator / 60.0);
|
||||||
rt++;
|
rt++;
|
||||||
|
|
||||||
rt->numerator = 0;
|
/* SS - seconds */
|
||||||
|
rt->numerator = (gulong) (0.5 + v * 3600.0);
|
||||||
rt->denominator = 1;
|
rt->denominator = 1;
|
||||||
|
GST_DEBUG ("sec: %lf : %lu / %lu", v, rt->numerator, rt->denominator);
|
||||||
|
|
||||||
if (entry->tag == EXIF_TAG_GPS_LONGITUDE) {
|
if (entry->tag == EXIF_TAG_GPS_LONGITUDE) {
|
||||||
GST_DEBUG ("longitude : %lf", value);
|
GST_DEBUG ("longitude : %lf", value);
|
||||||
|
|
Loading…
Reference in a new issue