diff --git a/ChangeLog b/ChangeLog index e86d85e9d7..38bf2d22e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2005-08-29 Andy Wingo + * ext/vorbis/vorbisdec.c (vorbis_dec_convert, vorbis_dec_push) + (vorbis_handle_data_packet): Fix some int overflow errors. + * ext/ogg/gstoggdemux.c (gst_ogg_demux_init): Init total_time to -1. (gst_ogg_demux_perform_seek): Clamp segment_stop only if it's diff --git a/ext/vorbis/vorbisdec.c b/ext/vorbis/vorbisdec.c index 95a4197fc7..1ca2fa4b73 100644 --- a/ext/vorbis/vorbisdec.c +++ b/ext/vorbis/vorbisdec.c @@ -234,7 +234,8 @@ vorbis_dec_convert (GstPad * pad, *dest_value = src_value * sizeof (float) * dec->vi.channels; break; case GST_FORMAT_TIME: - *dest_value = src_value * GST_SECOND / dec->vi.rate; + *dest_value = + gst_util_uint64_scale (src_value, GST_SECOND, dec->vi.rate); break; default: res = FALSE; @@ -246,8 +247,8 @@ vorbis_dec_convert (GstPad * pad, *dest_value = src_value / (sizeof (float) * dec->vi.channels); break; case GST_FORMAT_TIME: - *dest_value = src_value * GST_SECOND / - (dec->vi.rate * sizeof (float) * dec->vi.channels); + *dest_value = gst_util_uint64_scale (src_value, GST_SECOND, + dec->vi.rate * sizeof (float) * dec->vi.channels); break; default: res = FALSE; @@ -711,7 +712,8 @@ vorbis_dec_push (GstVorbisDec * dec, GstBuffer * buf) GST_BUFFER_SIZE (buffer) / (sizeof (float) * dec->vi.channels); GST_BUFFER_OFFSET (buffer) = outoffset; - GST_BUFFER_TIMESTAMP (buffer) = outoffset * GST_SECOND / dec->vi.rate;; + GST_BUFFER_TIMESTAMP (buffer) = + gst_util_uint64_scale (outoffset, GST_SECOND, dec->vi.rate); GST_DEBUG_OBJECT (dec, "patch buffer %" G_GUINT64_FORMAT " offset %" G_GUINT64_FORMAT, size, outoffset); size--; @@ -764,7 +766,8 @@ vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet) GST_BUFFER_OFFSET (out) = vd->granulepos; if (vd->granulepos != -1) { GST_BUFFER_OFFSET_END (out) = vd->granulepos + sample_count; - GST_BUFFER_TIMESTAMP (out) = vd->granulepos * GST_SECOND / vd->vi.rate; + GST_BUFFER_TIMESTAMP (out) = + gst_util_uint64_scale (vd->granulepos, GST_SECOND, vd->vi.rate); } else { GST_BUFFER_TIMESTAMP (out) = -1; }