Skip to content

Commit

Permalink
drivers: video: gc2145: set_fmt: branch on failure rather than success
Browse files Browse the repository at this point in the history
This aims to make the code more linear by having the for loop
validates the input format rather than search for a match.

Signed-off-by: Josuah Demangeon <[email protected]>
  • Loading branch information
josuah committed Sep 22, 2024
1 parent c325ac7 commit 08e7097
Showing 1 changed file with 24 additions and 23 deletions.
47 changes: 24 additions & 23 deletions drivers/video/gc2145.c
Original file line number Diff line number Diff line change
Expand Up @@ -1023,7 +1023,7 @@ static int gc2145_set_fmt(const struct device *dev, enum video_endpoint_id ep,
struct video_format *fmt)
{
struct gc2145_data *drv_data = dev->data;
uint16_t width, height;
enum resolutions res;
int ret;

/* We only support RGB565 formats */
Expand All @@ -1032,40 +1032,41 @@ static int gc2145_set_fmt(const struct device *dev, enum video_endpoint_id ep,
return -ENOTSUP;
}

width = fmt->width;
height = fmt->height;

if (memcmp(&drv_data->fmt, fmt, sizeof(drv_data->fmt)) == 0) {
/* nothing to do */
return 0;
}

/* Check if camera is capable of handling given format */
for (int i = 0; i < ARRAY_SIZE(fmts); i++) {
if (fmts[i].width_min == width && fmts[i].height_min == height &&
for (int i = 0;; i++) {
if (i == ARRAY_SIZE(fmts)) {
LOG_ERR("Image format not supported\n");
return -ENOTSUP;
}
if (fmts[i].width_min == fmt->width && fmts[i].height_min == fmt->height &&
fmts[i].pixelformat == fmt->pixelformat) {
drv_data->fmt = *fmt;
res = (enum resolutions)i;
break;
}
}

/* Set output format */
ret = gc2145_set_output_format(dev, fmt->pixelformat);
if (ret < 0) {
LOG_ERR("Failed to set the output format");
return ret;
}
drv_data->fmt = *fmt;

/* Set window size */
ret = gc2145_set_resolution(dev, (enum resolutions)i);
if (ret < 0) {
LOG_ERR("Failed to set the resolution");
}
/* Set output format */
ret = gc2145_set_output_format(dev, fmt->pixelformat);
if (ret < 0) {
LOG_ERR("Failed to set the output format");
return ret;
}

return ret;
}
/* Set window size */
ret = gc2145_set_resolution(dev, res);
if (ret < 0) {
LOG_ERR("Failed to set the resolution");
return ret;
}

/* Camera is not capable of handling given format */
LOG_ERR("Image format not supported\n");
return -ENOTSUP;
return 0;
}

static int gc2145_get_fmt(const struct device *dev, enum video_endpoint_id ep,
Expand Down

0 comments on commit 08e7097

Please sign in to comment.