Add set/get_framerate().

This commit is contained in:
iabdalkader 2021-01-17 21:23:17 +02:00
parent 730efc65aa
commit b72aea3bc0
4 changed files with 43 additions and 0 deletions

View File

@ -248,6 +248,20 @@ static mp_obj_t py_sensor_get_framesize() {
return mp_obj_new_int(sensor.framesize);
}
static mp_obj_t py_sensor_set_framerate(mp_obj_t framerate) {
if (sensor_set_framerate(mp_obj_get_int(framerate)) != 0) {
mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Failed to set framerate!"));
}
return mp_const_none;
}
static mp_obj_t py_sensor_get_framerate() {
if (sensor.framerate == 0) {
mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Frame rate not set yet!"));
}
return mp_obj_new_int(sensor.framerate);
}
static mp_obj_t py_sensor_set_windowing(mp_obj_t roi_obj)
{
int x, y, w, h;
@ -755,6 +769,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_pixformat_obj, py_sensor_se
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_sensor_get_pixformat_obj, py_sensor_get_pixformat);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_framesize_obj, py_sensor_set_framesize);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_sensor_get_framesize_obj, py_sensor_get_framesize);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_framerate_obj, py_sensor_set_framerate);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_sensor_get_framerate_obj, py_sensor_get_framerate);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_windowing_obj, py_sensor_set_windowing);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_sensor_get_windowing_obj, py_sensor_get_windowing);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_gainceiling_obj, py_sensor_set_gainceiling);
@ -893,6 +909,8 @@ STATIC const mp_map_elem_t globals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_pixformat), (mp_obj_t)&py_sensor_get_pixformat_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_framesize), (mp_obj_t)&py_sensor_set_framesize_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_framesize), (mp_obj_t)&py_sensor_get_framesize_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_framerate), (mp_obj_t)&py_sensor_set_framerate_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_framerate), (mp_obj_t)&py_sensor_get_framerate_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_windowing), (mp_obj_t)&py_sensor_set_windowing_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_windowing), (mp_obj_t)&py_sensor_get_windowing_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_gainceiling), (mp_obj_t)&py_sensor_set_gainceiling_obj },

View File

@ -260,6 +260,8 @@ Q(set_pixformat)
Q(get_pixformat)
Q(set_framesize)
Q(get_framesize)
Q(set_framerate)
Q(get_framerate)
Q(set_vsync_output)
Q(set_windowing)
Q(get_windowing)

View File

@ -481,6 +481,7 @@ int sensor_reset()
sensor.sde = 0;
sensor.pixformat = 0;
sensor.framesize = 0;
sensor.framerate = 0;
sensor.gainceiling = 0;
sensor.hmirror = false;
sensor.vflip = false;
@ -658,6 +659,23 @@ int sensor_set_framesize(framesize_t framesize)
return 0;
}
int sensor_set_framerate(int framerate)
{
if (sensor.framerate == framerate) {
// No change
return 0;
}
// Call the sensor specific function
if (sensor.set_framerate == NULL
|| sensor.set_framerate(&sensor, framerate) != 0) {
// Operation not supported
return -1;
}
return 0;
}
int sensor_set_windowing(int x, int y, int w, int h)
{
// py_sensor_set_windowing ensures this the window is at least 8x8

View File

@ -158,6 +158,7 @@ typedef struct _sensor {
sde_t sde; // Special digital effects
pixformat_t pixformat; // Pixel format
framesize_t framesize; // Frame size
int framerate; // Frame rate
gainceiling_t gainceiling; // AGC gainceiling
bool hmirror; // Horizontal Mirror
bool vflip; // Vertical Flip
@ -174,6 +175,7 @@ typedef struct _sensor {
int (*write_reg) (sensor_t *sensor, uint16_t reg_addr, uint16_t reg_data);
int (*set_pixformat) (sensor_t *sensor, pixformat_t pixformat);
int (*set_framesize) (sensor_t *sensor, framesize_t framesize);
int (*set_framerate) (sensor_t *sensor, int framerate);
int (*set_contrast) (sensor_t *sensor, int level);
int (*set_brightness) (sensor_t *sensor, int level);
int (*set_saturation) (sensor_t *sensor, int level);
@ -230,6 +232,9 @@ int sensor_set_pixformat(pixformat_t pixformat);
// Set the sensor frame size.
int sensor_set_framesize(framesize_t framesize);
// Set the sensor frame rate.
int sensor_set_framerate(int framerate);
// Set window size.
int sensor_set_windowing(int x, int y, int w, int h);