diff options
author | Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> | 2012-01-06 10:39:07 +0000 |
---|---|---|
committer | Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> | 2012-01-06 10:54:11 +0000 |
commit | 1c25aab906041c1aa9bd38db3c9c958ad65a2c05 (patch) | |
tree | 05af5073dcabc20d4017515f95087e3c7da56a44 | |
parent | 53735eaa72c4dd1c9714a9fed58ea13738969189 (diff) | |
download | gstreamer-plugins-bad-1c25aab906041c1aa9bd38db3c9c958ad65a2c05.tar.gz |
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.c | 20 |
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); |