Skip to content

Commit 4f34458

Browse files
josuahkartben
authored andcommitted
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 5687dc8 commit 4f34458

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;
@@ -389,13 +390,12 @@ static int video_sw_generator_set_frmival(const struct device *dev, struct video
389390
{
390391
struct video_sw_generator_data *data = dev->data;
391392

392-
if (frmival->denominator && frmival->numerator) {
393-
data->frame_rate = MIN(DIV_ROUND_CLOSEST(frmival->denominator, frmival->numerator),
394-
MAX_FRAME_RATE);
395-
} else {
393+
if (frmival->denominator == 0 || frmival->numerator == 0) {
396394
return -EINVAL;
397395
}
398396

397+
data->frame_rate = CLAMP(DIV_ROUND_CLOSEST(frmival->denominator, frmival->numerator),
398+
MIN_FRAME_RATE, MAX_FRAME_RATE);
399399
frmival->numerator = 1;
400400
frmival->denominator = data->frame_rate;
401401

0 commit comments

Comments
 (0)