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
get_seconds (const GstRTSPTime * t)
{
gint num, denom;
/* don't do direct multiply with GST_SECOND to avoid rounding
* errors */
gst_util_double_to_fraction (t->seconds, &num, &denom);
return gst_util_uint64_scale_int (GST_SECOND, num, denom);
if (t->seconds < G_MAXINT) {
gint num, denom;
/* Don't do direct multiply with GST_SECOND to avoid rounding
* errors.
* 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