diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2002-09-23 20:05:04 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2002-09-23 20:05:04 +0000 |
commit | ef399ccaf4b021dc30ca037c3a18e444ac209e24 (patch) | |
tree | a7fb0c6296843516ef2aa817097fec81f2ad4a9a | |
parent | e8d014fc2a43449b269de6ec5d876f9af65904e4 (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.
-rw-r--r-- | gst/avi/gstavidemux.c | 17 | ||||
-rw-r--r-- | gst/avi/gstavidemux.h | 2 |
2 files changed, 5 insertions, 14 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: diff --git a/gst/avi/gstavidemux.h b/gst/avi/gstavidemux.h index 8a5fc6d3..5eb03877 100644 --- a/gst/avi/gstavidemux.h +++ b/gst/avi/gstavidemux.h @@ -76,7 +76,7 @@ typedef struct guint32 av_bps; guint64 total_bytes; - gint32 total_frames; + guint32 total_frames; guint32 skip; |