summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavidemux.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2002-09-23 20:05:04 +0000
committerWim Taymans <wim.taymans@gmail.com>2002-09-23 20:05:04 +0000
commitef399ccaf4b021dc30ca037c3a18e444ac209e24 (patch)
treea7fb0c6296843516ef2aa817097fec81f2ad4a9a /gst/avi/gstavidemux.c
parente8d014fc2a43449b269de6ec5d876f9af65904e4 (diff)
Fix various overflow cases, this should fix seeking on very large files.
Original commit message from CVS: Fix various overflow cases, this should fix seeking on very large files.
Diffstat (limited to 'gst/avi/gstavidemux.c')
-rw-r--r--gst/avi/gstavidemux.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 2fa56786..6b2a8ffb 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -839,19 +839,10 @@ gst_avi_demux_src_convert (GstPad *pad, GstFormat src_format, gint64 src_value,
}
break;
case GST_FORMAT_BYTES:
- switch (*dest_format) {
- case GST_FORMAT_TIME:
- *dest_value = src_value * GST_SECOND * stream->strh.scale / stream->strh.rate;
- break;
- default:
- res = FALSE;
- break;
- }
- break;
case GST_FORMAT_UNITS:
switch (*dest_format) {
case GST_FORMAT_TIME:
- *dest_value = src_value * GST_SECOND * stream->strh.scale / stream->strh.rate;
+ *dest_value = ((((gfloat)src_value) * stream->strh.scale) / stream->strh.rate) * GST_SECOND;
break;
default:
res = FALSE;
@@ -892,7 +883,7 @@ gst_avi_demux_handle_src_query (GstPad *pad, GstPadQueryType type,
*format = GST_FORMAT_TIME;
/* fall through */
case GST_FORMAT_TIME:
- *value = GST_SECOND * stream->strh.scale * stream->strh.length / stream->strh.rate;
+ *value = (((gfloat)stream->strh.scale) * stream->strh.length / stream->strh.rate) * GST_SECOND;
break;
case GST_FORMAT_BYTES:
if (stream->strh.type == GST_RIFF_FCC_auds) {
@@ -921,10 +912,10 @@ gst_avi_demux_handle_src_query (GstPad *pad, GstPadQueryType type,
/* fall through */
case GST_FORMAT_TIME:
if (stream->strh.samplesize) {
- *value = stream->current_byte * GST_SECOND * stream->strh.scale / stream->strh.rate;
+ *value = (((gfloat)stream->current_byte) * stream->strh.scale / stream->strh.rate) * GST_SECOND;
}
else {
- *value = stream->current_frame * GST_SECOND * stream->strh.scale / stream->strh.rate;
+ *value = (((gfloat)stream->current_frame) * stream->strh.scale / stream->strh.rate) * GST_SECOND;
}
break;
case GST_FORMAT_BYTES: