Skip to content

Commit 4a71055

Browse files
committed
drivers: video: sw_generator: fix div by zero on very low framerate
When the FPS value stored in data->frame_rate is zero, a division by zero occurs. Fix it by clamping the frame rate between min and max values. Signed-off-by: Josuah Demangeon <me@josuah.net>
1 parent 2883408 commit 4a71055

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

drivers/video/video_sw_generator.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ LOG_MODULE_REGISTER(video_sw_generator, CONFIG_VIDEO_LOG_LEVEL);
2828
* format. 60 fps is therefore chosen as a common value in practice.
2929
*/
3030
#define MAX_FRAME_RATE 60
31+
#define MIN_FRAME_RATE 1
3132

3233
struct sw_ctrls {
3334
struct video_ctrl hflip;
@@ -379,13 +380,12 @@ static int video_sw_generator_set_frmival(const struct device *dev, struct video
379380
{
380381
struct video_sw_generator_data *data = dev->data;
381382

382-
if (frmival->denominator && frmival->numerator) {
383-
data->frame_rate = MIN(DIV_ROUND_CLOSEST(frmival->denominator, frmival->numerator),
384-
MAX_FRAME_RATE);
385-
} else {
383+
if (frmival->denominator == 0 && frmival->numerator == 0) {
386384
return -EINVAL;
387385
}
388386

387+
data->frame_rate = CLAMP(DIV_ROUND_CLOSEST(frmival->denominator, frmival->numerator),
388+
MIN_FRAME_RATE, MAX_FRAME_RATE);
389389
frmival->numerator = 1;
390390
frmival->denominator = data->frame_rate;
391391

0 commit comments

Comments
 (0)