From fa60bd19a16595b147477d49215f2aefde5b0d5b Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Sat, 17 Mar 2007 19:15:58 +0000 Subject: Avoid a possible floating-point exception when starting stream playback. CVS patchset: 8707 CVS date: 2007/03/17 19:15:58 --- ChangeLog | 1 + src/input/net_buf_ctrl.c | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index da289f22e..25c465617 100644 --- a/ChangeLog +++ b/ChangeLog @@ -32,6 +32,7 @@ xine-lib (1.1.5) (Unreleased) support altogether and one to choose the path where to look for the codecs by default (it can, and probably should) be different from the Win32 codecs path. + * Avoid a possible floating-point exception when starting stream playback. xine-lib (1.1.4) * Mark string-type configuration items according to whether they're plain diff --git a/src/input/net_buf_ctrl.c b/src/input/net_buf_ctrl.c index 75743a070..86514cdea 100644 --- a/src/input/net_buf_ctrl.c +++ b/src/input/net_buf_ctrl.c @@ -149,7 +149,7 @@ static void nbc_compute_fifo_length(nbc_t *this, fifo_buffer_t *fifo, buf_element_t *buf, int action) { - int fifo_free, fifo_fill; + int fifo_free, fifo_fill, fifo_div; int64_t video_br, audio_br, diff; int has_video, has_audio; @@ -160,10 +160,13 @@ static void nbc_compute_fifo_length(nbc_t *this, fifo_free = fifo->buffer_pool_num_free; fifo_fill = fifo->fifo_size; + fifo_div = fifo_fill + fifo_free - 1; + if (fifo_div == 0) + fifo_div = 1; /* avoid a possible divide-by-zero */ if (fifo == this->video_fifo) { this->video_fifo_free = fifo_free; - this->video_fifo_fill = (100 * fifo_fill) / (fifo_fill + fifo_free - 1); + this->video_fifo_fill = (100 * fifo_fill) / fifo_div; this->video_fifo_size = fifo->fifo_data_size; if (buf->pts && (this->video_in_disc == 0)) { @@ -196,7 +199,7 @@ static void nbc_compute_fifo_length(nbc_t *this, } else { this->audio_fifo_free = fifo_free; - this->audio_fifo_fill = (100 * fifo_fill) / (fifo_fill + fifo_free - 1); + this->audio_fifo_fill = (100 * fifo_fill) / fifo_div; this->audio_fifo_size = fifo->fifo_data_size; if (buf->pts && (this->audio_in_disc == 0)) { -- cgit v1.2.3