mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Merge pull request #2015 from kwagyeman/kwabena/add_ioctl_for_fov_over_fps
sensors/gc2145: Add support for a wider FoV.
This commit is contained in:
commit
25359054e7
@ -137,6 +137,8 @@ typedef enum {
|
||||
IOCTL_GET_READOUT_WINDOW,
|
||||
IOCTL_SET_TRIGGERED_MODE,
|
||||
IOCTL_GET_TRIGGERED_MODE,
|
||||
IOCTL_SET_FOV_WIDE,
|
||||
IOCTL_GET_FOV_WIDE,
|
||||
IOCTL_TRIGGER_AUTO_FOCUS,
|
||||
IOCTL_PAUSE_AUTO_FOCUS,
|
||||
IOCTL_RESET_AUTO_FOCUS,
|
||||
|
||||
@ -692,14 +692,18 @@ static mp_obj_t py_sensor_ioctl(uint n_args, const mp_obj_t *args) {
|
||||
break;
|
||||
}
|
||||
|
||||
case IOCTL_SET_TRIGGERED_MODE: {
|
||||
case IOCTL_SET_TRIGGERED_MODE:
|
||||
case IOCTL_SET_FOV_WIDE:
|
||||
case IOCTL_SET_NIGHT_MODE: {
|
||||
if (n_args >= 2) {
|
||||
error = sensor_ioctl(request, mp_obj_get_int(args[1]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case IOCTL_GET_TRIGGERED_MODE: {
|
||||
case IOCTL_GET_TRIGGERED_MODE:
|
||||
case IOCTL_GET_FOV_WIDE:
|
||||
case IOCTL_GET_NIGHT_MODE: {
|
||||
int enabled;
|
||||
error = sensor_ioctl(request, &enabled);
|
||||
if (error == 0) {
|
||||
@ -721,22 +725,6 @@ static mp_obj_t py_sensor_ioctl(uint n_args, const mp_obj_t *args) {
|
||||
}
|
||||
#endif
|
||||
|
||||
case IOCTL_SET_NIGHT_MODE: {
|
||||
if (n_args >= 2) {
|
||||
error = sensor_ioctl(request, mp_obj_get_int(args[1]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case IOCTL_GET_NIGHT_MODE: {
|
||||
int enabled;
|
||||
error = sensor_ioctl(request, &enabled);
|
||||
if (error == 0) {
|
||||
ret_obj = mp_obj_new_bool(enabled);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case IOCTL_LEPTON_GET_WIDTH: {
|
||||
int width;
|
||||
error = sensor_ioctl(request, &width);
|
||||
@ -1102,6 +1090,8 @@ STATIC const mp_map_elem_t globals_dict_table[] = {
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_GET_READOUT_WINDOW), MP_OBJ_NEW_SMALL_INT(IOCTL_GET_READOUT_WINDOW)},
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_SET_TRIGGERED_MODE), MP_OBJ_NEW_SMALL_INT(IOCTL_SET_TRIGGERED_MODE)},
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_GET_TRIGGERED_MODE), MP_OBJ_NEW_SMALL_INT(IOCTL_GET_TRIGGERED_MODE)},
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_SET_FOV_WIDE), MP_OBJ_NEW_SMALL_INT(IOCTL_SET_FOV_WIDE)},
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_GET_FOV_WIDE), MP_OBJ_NEW_SMALL_INT(IOCTL_GET_FOV_WIDE)},
|
||||
#if (OMV_ENABLE_OV5640_AF == 1)
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_TRIGGER_AUTO_FOCUS), MP_OBJ_NEW_SMALL_INT(IOCTL_TRIGGER_AUTO_FOCUS)},
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_PAUSE_AUTO_FOCUS), MP_OBJ_NEW_SMALL_INT(IOCTL_PAUSE_AUTO_FOCUS)},
|
||||
|
||||
@ -42,6 +42,8 @@ static int16_t readout_y = 0;
|
||||
static uint16_t readout_w = ACTIVE_SENSOR_WIDTH;
|
||||
static uint16_t readout_h = ACTIVE_SENSOR_HEIGHT;
|
||||
|
||||
static bool fov_wide = false;
|
||||
|
||||
// SLAVE ADDR 0x78
|
||||
static const uint8_t default_regs[][2] = {
|
||||
{0xfe, 0xf0},
|
||||
@ -726,6 +728,8 @@ static int reset(sensor_t *sensor) {
|
||||
readout_w = ACTIVE_SENSOR_WIDTH;
|
||||
readout_h = ACTIVE_SENSOR_HEIGHT;
|
||||
|
||||
fov_wide = false;
|
||||
|
||||
// Write default registers
|
||||
for (int i = 0; default_regs[i][0]; i++) {
|
||||
ret |= omv_i2c_writeb(&sensor->i2c_bus, sensor->slv_addr, default_regs[i][0], default_regs[i][1]);
|
||||
@ -847,7 +851,7 @@ static int set_framesize(sensor_t *sensor, framesize_t framesize) {
|
||||
uint16_t ratio = fast_floorf(IM_MIN(readout_w / ((float) w), readout_h / ((float) h)));
|
||||
|
||||
// Limit the maximum amount of scaling allowed to keep the frame rate up.
|
||||
ratio = IM_MIN(ratio, 3);
|
||||
ratio = IM_MIN(ratio, (fov_wide ? 5 : 3));
|
||||
|
||||
if (!(ratio % 2)) {
|
||||
// camera outputs messed up bayer images at even ratios for some reason...
|
||||
@ -959,6 +963,14 @@ static int ioctl(sensor_t *sensor, int request, va_list ap) {
|
||||
*va_arg(ap, int *) = readout_h;
|
||||
break;
|
||||
}
|
||||
case IOCTL_SET_FOV_WIDE: {
|
||||
fov_wide = va_arg(ap, int);
|
||||
break;
|
||||
}
|
||||
case IOCTL_GET_FOV_WIDE: {
|
||||
*va_arg(ap, int *) = fov_wide;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user