summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>2012-01-06 10:39:07 +0000
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>2012-01-06 10:54:11 +0000
commit1c25aab906041c1aa9bd38db3c9c958ad65a2c05 (patch)
tree05af5073dcabc20d4017515f95087e3c7da56a44
parent53735eaa72c4dd1c9714a9fed58ea13738969189 (diff)
interlace: avoid dividing by zero on unkbown framerate
If the framerate is unknown, we cannot generate meaningful buffer timestamps/durations, so set them to _NONE instead of calculating something wrong and dividing by 0.
-rw-r--r--gst/interlace/gstinterlace.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/gst/interlace/gstinterlace.c b/gst/interlace/gstinterlace.c
index 0e86f8570..1665ed791 100644
--- a/gst/interlace/gstinterlace.c
+++ b/gst/interlace/gstinterlace.c
@@ -328,13 +328,19 @@ gst_interlace_decorate_buffer (GstInterlace * interlace, GstBuffer * buf,
int n_fields)
{
/* field duration = src_fps_d / (2 * src_fps_n) */
- GST_BUFFER_TIMESTAMP (buf) = interlace->timebase +
- gst_util_uint64_scale (GST_SECOND,
- interlace->src_fps_d * interlace->fields_since_timebase,
- interlace->src_fps_n * 2);
- GST_BUFFER_DURATION (buf) =
- gst_util_uint64_scale (GST_SECOND, interlace->src_fps_d * n_fields,
- interlace->src_fps_n * 2);
+ if (interlace->src_fps_n == 0) {
+ /* If we don't know the fps, we can't generate timestamps/durations */
+ GST_BUFFER_TIMESTAMP (buf) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_DURATION (buf) = GST_CLOCK_TIME_NONE;
+ } else {
+ GST_BUFFER_TIMESTAMP (buf) = interlace->timebase +
+ gst_util_uint64_scale (GST_SECOND,
+ interlace->src_fps_d * interlace->fields_since_timebase,
+ interlace->src_fps_n * 2);
+ GST_BUFFER_DURATION (buf) =
+ gst_util_uint64_scale (GST_SECOND, interlace->src_fps_d * n_fields,
+ interlace->src_fps_n * 2);
+ }
/* increment the buffer timestamp by duration for the next buffer */
gst_buffer_set_caps (buf, interlace->srccaps);