rtsprange: Avoid going through fractions for large numbers

If the number of seconds exceeds 2^31, then it will be truncated if the
conversion is done using fractions, so multiply it directly.
This commit is contained in:
Olivier Crête 2013-02-22 13:20:21 -05:00 committed by Wim Taymans
parent 203c27b42b
commit 3cfec4de73

View file

@ -439,11 +439,17 @@ gst_rtsp_range_free (GstRTSPTimeRange * range)
static GstClockTime static GstClockTime
get_seconds (const GstRTSPTime * t) get_seconds (const GstRTSPTime * t)
{ {
gint num, denom; if (t->seconds < G_MAXINT) {
/* don't do direct multiply with GST_SECOND to avoid rounding gint num, denom;
* errors */ /* Don't do direct multiply with GST_SECOND to avoid rounding
gst_util_double_to_fraction (t->seconds, &num, &denom); * errors.
return gst_util_uint64_scale_int (GST_SECOND, num, denom); * This only works for "small" numbers, because num is limited to 32-bit
*/
gst_util_double_to_fraction (t->seconds, &num, &denom);
return gst_util_uint64_scale_int (GST_SECOND, num, denom);
} else {
return t->seconds * GST_SECOND;
}
} }
static GstClockTime static GstClockTime