drivers: video: gc2145: set_fmt: branch on failure rather than success
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 <me@josuah.net>
This commit is contained in:
parent
9174cb75e9
commit
1596ee0415
1 changed files with 26 additions and 25 deletions
|
|
@ -1023,7 +1023,7 @@ static int gc2145_set_fmt(const struct device *dev, enum video_endpoint_id ep,
|
||||||
struct video_format *fmt)
|
struct video_format *fmt)
|
||||||
{
|
{
|
||||||
struct gc2145_data *drv_data = dev->data;
|
struct gc2145_data *drv_data = dev->data;
|
||||||
uint16_t width, height;
|
enum resolutions res = RESOLUTIONS_MAX;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* We only support RGB565 formats */
|
/* We only support RGB565 formats */
|
||||||
|
|
@ -1032,40 +1032,41 @@ static int gc2145_set_fmt(const struct device *dev, enum video_endpoint_id ep,
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
width = fmt->width;
|
|
||||||
height = fmt->height;
|
|
||||||
|
|
||||||
if (memcmp(&drv_data->fmt, fmt, sizeof(drv_data->fmt)) == 0) {
|
if (memcmp(&drv_data->fmt, fmt, sizeof(drv_data->fmt)) == 0) {
|
||||||
/* nothing to do */
|
/* nothing to do */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if camera is capable of handling given format */
|
/* Check if camera is capable of handling given format */
|
||||||
for (int i = 0; i < ARRAY_SIZE(fmts); i++) {
|
for (int i = 0; i == ARRAY_SIZE(fmts); i++) {
|
||||||
if (fmts[i].width_min == width && fmts[i].height_min == height &&
|
if (fmts[i].width_min == fmt->width && fmts[i].height_min == fmt->height &&
|
||||||
fmts[i].pixelformat == fmt->pixelformat) {
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set window size */
|
|
||||||
ret = gc2145_set_resolution(dev, (enum resolutions)i);
|
|
||||||
if (ret < 0) {
|
|
||||||
LOG_ERR("Failed to set the resolution");
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (res == RESOLUTIONS_MAX) {
|
||||||
|
LOG_ERR("Image format not supported");
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
|
||||||
/* Camera is not capable of handling given format */
|
drv_data->fmt = *fmt;
|
||||||
LOG_ERR("Image format not supported\n");
|
|
||||||
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set window size */
|
||||||
|
ret = gc2145_set_resolution(dev, res);
|
||||||
|
if (ret < 0) {
|
||||||
|
LOG_ERR("Failed to set the resolution");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gc2145_get_fmt(const struct device *dev, enum video_endpoint_id ep,
|
static int gc2145_get_fmt(const struct device *dev, enum video_endpoint_id ep,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue