Skip to content

Commit 37a4701

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 78f4c4c commit 37a4701

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;
@@ -387,13 +388,12 @@ static int video_sw_generator_set_frmival(const struct device *dev, struct video
387388
{
388389
struct video_sw_generator_data *data = dev->data;
389390

390-
if (frmival->denominator && frmival->numerator) {
391-
data->frame_rate = MIN(DIV_ROUND_CLOSEST(frmival->denominator, frmival->numerator),
392-
MAX_FRAME_RATE);
393-
} else {
391+
if (frmival->denominator == 0 || frmival->numerator == 0) {
394392
return -EINVAL;
395393
}
396394

395+
data->frame_rate = CLAMP(DIV_ROUND_CLOSEST(frmival->denominator, frmival->numerator),
396+
MIN_FRAME_RATE, MAX_FRAME_RATE);
397397
frmival->numerator = 1;
398398
frmival->denominator = data->frame_rate;
399399

0 commit comments

Comments
 (0)