mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Merge pull request #554 from kwagyeman/kwabena/ov2640_fixes
OV2640/JPEG mode fixes
This commit is contained in:
commit
f392b270cc
876
src/omv/ov2640.c
876
src/omv/ov2640.c
File diff suppressed because it is too large
Load Diff
@ -208,4 +208,36 @@
|
|||||||
#define REG32_SVGA 0x09
|
#define REG32_SVGA 0x09
|
||||||
#define REG32_CIF 0x00
|
#define REG32_CIF 0x00
|
||||||
|
|
||||||
|
#define VAL_SET(x, mask, rshift, lshift) ((((x) >> rshift) & mask) << lshift)
|
||||||
|
|
||||||
|
#define CTRLI_V_DIV_SET(x) VAL_SET(x, 0x3, 0, 3)
|
||||||
|
#define CTRLI_H_DIV_SET(x) VAL_SET(x, 0x3, 0, 0)
|
||||||
|
|
||||||
|
#define SIZEL_HSIZE8_11_SET(x) VAL_SET(x, 0x1, 11, 6)
|
||||||
|
#define SIZEL_HSIZE8_SET(x) VAL_SET(x, 0x7, 0, 3)
|
||||||
|
#define SIZEL_VSIZE8_SET(x) VAL_SET(x, 0x7, 0, 0)
|
||||||
|
|
||||||
|
#define HSIZE8_SET(x) VAL_SET(x, 0xFF, 3, 0)
|
||||||
|
#define VSIZE8_SET(x) VAL_SET(x, 0xFF, 3, 0)
|
||||||
|
|
||||||
|
#define HSIZE_SET(x) VAL_SET(x, 0xFF, 2, 0)
|
||||||
|
#define VSIZE_SET(x) VAL_SET(x, 0xFF, 2, 0)
|
||||||
|
|
||||||
|
#define XOFFL_SET(x) VAL_SET(x, 0xFF, 0, 0)
|
||||||
|
#define YOFFL_SET(x) VAL_SET(x, 0xFF, 0, 0)
|
||||||
|
|
||||||
|
#define VHYX_VSIZE_SET(x) VAL_SET(x, 0x1, (8+2), 7)
|
||||||
|
#define VHYX_HSIZE_SET(x) VAL_SET(x, 0x1, (8+2), 3)
|
||||||
|
#define VHYX_YOFF_SET(x) VAL_SET(x, 0x3, 8, 4)
|
||||||
|
#define VHYX_XOFF_SET(x) VAL_SET(x, 0x3, 8, 0)
|
||||||
|
|
||||||
|
#define TEST_HSIZE_SET(x) VAL_SET(x, 0x1, (9+2), 7)
|
||||||
|
|
||||||
|
#define ZMOW_OUTW_SET(x) VAL_SET(x, 0xFF, 2, 0)
|
||||||
|
#define ZMOH_OUTH_SET(x) VAL_SET(x, 0xFF, 2, 0)
|
||||||
|
|
||||||
|
#define ZMHH_ZSPEED_SET(x) VAL_SET(x, 0x0F, 0, 4)
|
||||||
|
#define ZMHH_OUTH_SET(x) VAL_SET(x, 0x1, (8+2), 2)
|
||||||
|
#define ZMHH_OUTW_SET(x) VAL_SET(x, 0x3, (8+2), 0)
|
||||||
|
|
||||||
#endif //__REG_REGS_H__
|
#endif //__REG_REGS_H__
|
||||||
|
|||||||
@ -275,6 +275,12 @@ static void py_image_print(const mp_print_t *print, mp_obj_t self_in, mp_print_k
|
|||||||
(self->_cobj.w * self->_cobj.h) * sizeof(uint16_t));
|
(self->_cobj.w * self->_cobj.h) * sizeof(uint16_t));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case IMAGE_BPP_BAYER: {
|
||||||
|
mp_printf(print, "{\"w\":%d, \"h\":%d, \"type\"=\"bayer\", \"size\":%d}",
|
||||||
|
self->_cobj.w, self->_cobj.h,
|
||||||
|
(self->_cobj.w * self->_cobj.h) * sizeof(uint8_t));
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
if((self->_cobj.data[0] == 0xFE) && (self->_cobj.data[self->_cobj.bpp-1] == 0xFE)) { // for ide
|
if((self->_cobj.data[0] == 0xFE) && (self->_cobj.data[self->_cobj.bpp-1] == 0xFE)) { // for ide
|
||||||
print->print_strn(print->data, (const char *) self->_cobj.data, self->_cobj.bpp);
|
print->print_strn(print->data, (const char *) self->_cobj.data, self->_cobj.bpp);
|
||||||
|
|||||||
@ -46,9 +46,6 @@ static mp_obj_t py_sensor_snapshot(uint n_args, const mp_obj_t *args, mp_map_t *
|
|||||||
// Snapshot image
|
// Snapshot image
|
||||||
mp_obj_t image = py_image(0, 0, 0, 0);
|
mp_obj_t image = py_image(0, 0, 0, 0);
|
||||||
|
|
||||||
// Sanity checks
|
|
||||||
PY_ASSERT_TRUE_MSG((sensor.pixformat != PIXFORMAT_JPEG), "Operation not supported on JPEG");
|
|
||||||
|
|
||||||
if (sensor.snapshot(&sensor, (image_t*) py_image_cobj(image), NULL)==-1) {
|
if (sensor.snapshot(&sensor, (image_t*) py_image_cobj(image), NULL)==-1) {
|
||||||
nlr_raise(mp_obj_new_exception_msg(&mp_type_RuntimeError, "Sensor Timeout!!"));
|
nlr_raise(mp_obj_new_exception_msg(&mp_type_RuntimeError, "Sensor Timeout!!"));
|
||||||
return mp_const_false;
|
return mp_const_false;
|
||||||
@ -683,6 +680,7 @@ STATIC const mp_map_elem_t globals_dict_table[] = {
|
|||||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_WVGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_WVGA)}, /* 720x480 */
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_WVGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_WVGA)}, /* 720x480 */
|
||||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_WVGA2), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_WVGA2)}, /* 752x480 */
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_WVGA2), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_WVGA2)}, /* 752x480 */
|
||||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_SVGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_SVGA)}, /* 800x600 */
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_SVGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_SVGA)}, /* 800x600 */
|
||||||
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_XGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_XGA)}, /* 1024x768 */
|
||||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_SXGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_SXGA)}, /* 1280x1024 */
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_SXGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_SXGA)}, /* 1280x1024 */
|
||||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_UXGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_UXGA)}, /* 1600x1200 */
|
{ MP_OBJ_NEW_QSTR(MP_QSTR_UXGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_UXGA)}, /* 1600x1200 */
|
||||||
|
|
||||||
|
|||||||
@ -195,6 +195,7 @@ Q(QQVGA2)
|
|||||||
Q(WVGA)
|
Q(WVGA)
|
||||||
Q(WVGA2)
|
Q(WVGA2)
|
||||||
Q(SVGA)
|
Q(SVGA)
|
||||||
|
Q(XGA)
|
||||||
Q(SXGA)
|
Q(SXGA)
|
||||||
Q(UXGA)
|
Q(UXGA)
|
||||||
|
|
||||||
|
|||||||
@ -62,6 +62,7 @@ const int resolution[][2] = {
|
|||||||
{720, 480 }, /* WVGA */
|
{720, 480 }, /* WVGA */
|
||||||
{752, 480 }, /* WVGA2 */
|
{752, 480 }, /* WVGA2 */
|
||||||
{800, 600 }, /* SVGA */
|
{800, 600 }, /* SVGA */
|
||||||
|
{1024, 768 }, /* XGA */
|
||||||
{1280, 1024}, /* SXGA */
|
{1280, 1024}, /* SXGA */
|
||||||
{1600, 1200}, /* UXGA */
|
{1600, 1200}, /* UXGA */
|
||||||
};
|
};
|
||||||
@ -996,7 +997,13 @@ int sensor_snapshot(sensor_t *sensor, image_t *image, streaming_cb_t streaming_c
|
|||||||
break;
|
break;
|
||||||
case PIXFORMAT_JPEG:
|
case PIXFORMAT_JPEG:
|
||||||
// Read the number of data items transferred
|
// Read the number of data items transferred
|
||||||
MAIN_FB()->bpp = (MAX_XFER_SIZE - __HAL_DMA_GET_COUNTER(&DMAHandle))*4;
|
MAIN_FB()->bpp = ((MAX_XFER_SIZE/4) - __HAL_DMA_GET_COUNTER(&DMAHandle))*4;
|
||||||
|
// Remove trailing zeros...
|
||||||
|
if (MAIN_FB()->bpp) {
|
||||||
|
while (!MAIN_FB()->pixels[MAIN_FB()->bpp - 1]) {
|
||||||
|
MAIN_FB()->bpp -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -68,6 +68,7 @@ typedef enum {
|
|||||||
FRAMESIZE_WVGA, // 720x480
|
FRAMESIZE_WVGA, // 720x480
|
||||||
FRAMESIZE_WVGA2, // 752x480
|
FRAMESIZE_WVGA2, // 752x480
|
||||||
FRAMESIZE_SVGA, // 800x600
|
FRAMESIZE_SVGA, // 800x600
|
||||||
|
FRAMESIZE_XGA, // 1024x768
|
||||||
FRAMESIZE_SXGA, // 1280x1024
|
FRAMESIZE_SXGA, // 1280x1024
|
||||||
FRAMESIZE_UXGA, // 1600x1200
|
FRAMESIZE_UXGA, // 1600x1200
|
||||||
} framesize_t;
|
} framesize_t;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user