summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--src/input/net_buf_ctrl.c9
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)) {