diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2008-04-26 11:26:13 +0200 |
---|---|---|
committer | Hans Verkuil <hverkuil@xs4all.nl> | 2008-04-26 11:26:13 +0200 |
commit | 66773b1cebc2702ec62f0e2129629926aa7fbc2a (patch) | |
tree | 3b141b00e4be90c8381bf3e553d7dfd31b80c38d /linux/drivers/media/video | |
parent | ee599427c89af564445f16589d0eebe41bcfabbe (diff) | |
download | mediapointer-dvb-s2-66773b1cebc2702ec62f0e2129629926aa7fbc2a.tar.gz mediapointer-dvb-s2-66773b1cebc2702ec62f0e2129629926aa7fbc2a.tar.bz2 |
ivtv: fix oops when itv->speed == 0 and VIDEO_CMD_PLAY is called.
From: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Diffstat (limited to 'linux/drivers/media/video')
-rw-r--r-- | linux/drivers/media/video/ivtv/ivtv-ioctl.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/linux/drivers/media/video/ivtv/ivtv-ioctl.c b/linux/drivers/media/video/ivtv/ivtv-ioctl.c index 16aa28237..9de530d02 100644 --- a/linux/drivers/media/video/ivtv/ivtv-ioctl.c +++ b/linux/drivers/media/video/ivtv/ivtv-ioctl.c @@ -243,20 +243,31 @@ static int ivtv_validate_speed(int cur_speed, int new_speed) int fact = new_speed < 0 ? -1 : 1; int s; - if (new_speed < 0) new_speed = -new_speed; - if (cur_speed < 0) cur_speed = -cur_speed; + if (cur_speed == 0) + cur_speed = 1000; + if (new_speed < 0) + new_speed = -new_speed; + if (cur_speed < 0) + cur_speed = -cur_speed; if (cur_speed <= new_speed) { - if (new_speed > 1500) return fact * 2000; - if (new_speed > 1000) return fact * 1500; + if (new_speed > 1500) + return fact * 2000; + if (new_speed > 1000) + return fact * 1500; } else { - if (new_speed >= 2000) return fact * 2000; - if (new_speed >= 1500) return fact * 1500; - if (new_speed >= 1000) return fact * 1000; - } - if (new_speed == 0) return 1000; - if (new_speed == 1 || new_speed == 1000) return fact * new_speed; + if (new_speed >= 2000) + return fact * 2000; + if (new_speed >= 1500) + return fact * 1500; + if (new_speed >= 1000) + return fact * 1000; + } + if (new_speed == 0) + return 1000; + if (new_speed == 1 || new_speed == 1000) + return fact * new_speed; s = new_speed; new_speed = 1000 / new_speed; |