From 58d84a993c343b6ad95a108060d74f405392501c Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Thu, 11 Feb 2010 19:39:04 +0100 Subject: [PATCH] qtdemux: handle signed values in 3GPP location tag --- gst/qtdemux/qtdemux.c | 7 ++++--- gst/qtdemux/qtdemux_types.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 055e8f8..ba6d4c7 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -6040,13 +6040,14 @@ qtdemux_tag_add_location (GstQTDemux * qtdemux, const char *tag, /* +1 +1 = skip null-terminator and location role byte */ offset += 1 + 1; - longitude = QT_FP32 (data + offset); + /* table in spec says unsigned, semantics say negative has meaning ... */ + longitude = QT_SFP32 (data + offset); offset += 4; - latitude = QT_FP32 (data + offset); + latitude = QT_SFP32 (data + offset); offset += 4; - altitude = QT_FP32 (data + offset); + altitude = QT_SFP32 (data + offset); /* one invalid means all are invalid */ if (longitude >= -180.0 && longitude <= 180.0 && diff --git a/gst/qtdemux/qtdemux_types.h b/gst/qtdemux/qtdemux_types.h index 8148cb9..e5c0bd6 100644 --- a/gst/qtdemux/qtdemux_types.h +++ b/gst/qtdemux/qtdemux_types.h @@ -38,6 +38,7 @@ typedef struct _QtNodeType QtNodeType; #define QT_UINT16(a) (GST_READ_UINT16_BE(a)) #define QT_UINT8(a) (GST_READ_UINT8(a)) #define QT_FP32(a) ((GST_READ_UINT32_BE(a))/65536.0) +#define QT_SFP32(a) (((gint)(GST_READ_UINT32_BE(a)))/65536.0) #define QT_FP16(a) ((GST_READ_UINT16_BE(a))/256.0) #define QT_FOURCC(a) (GST_READ_UINT32_LE(a)) #define QT_UINT64(a) ((((guint64)QT_UINT32(a))<<32)|QT_UINT32(((guint8 *)a)+4)) -- 2.7.4