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 authored and mmahadevan108 committed Sep 28, 2024
1 parent 9174cb7 commit 1596ee0
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 = RESOLUTIONS_MAX;
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 == ARRAY_SIZE(fmts); i++) {
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;
}
}
if (res == RESOLUTIONS_MAX) {
LOG_ERR("Image format not supported");
return -ENOTSUP;
}

/* 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 1596ee0

Please sign in to comment.