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_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__
|
||||
|
||||
@ -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));
|
||||
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: {
|
||||
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);
|
||||
|
||||
@ -46,9 +46,6 @@ static mp_obj_t py_sensor_snapshot(uint n_args, const mp_obj_t *args, mp_map_t *
|
||||
// Snapshot image
|
||||
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) {
|
||||
nlr_raise(mp_obj_new_exception_msg(&mp_type_RuntimeError, "Sensor Timeout!!"));
|
||||
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_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_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_UXGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_UXGA)}, /* 1600x1200 */
|
||||
|
||||
|
||||
@ -195,6 +195,7 @@ Q(QQVGA2)
|
||||
Q(WVGA)
|
||||
Q(WVGA2)
|
||||
Q(SVGA)
|
||||
Q(XGA)
|
||||
Q(SXGA)
|
||||
Q(UXGA)
|
||||
|
||||
|
||||
@ -62,6 +62,7 @@ const int resolution[][2] = {
|
||||
{720, 480 }, /* WVGA */
|
||||
{752, 480 }, /* WVGA2 */
|
||||
{800, 600 }, /* SVGA */
|
||||
{1024, 768 }, /* XGA */
|
||||
{1280, 1024}, /* SXGA */
|
||||
{1600, 1200}, /* UXGA */
|
||||
};
|
||||
@ -996,7 +997,13 @@ int sensor_snapshot(sensor_t *sensor, image_t *image, streaming_cb_t streaming_c
|
||||
break;
|
||||
case PIXFORMAT_JPEG:
|
||||
// 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;
|
||||
default:
|
||||
break;
|
||||
|
||||
@ -68,6 +68,7 @@ typedef enum {
|
||||
FRAMESIZE_WVGA, // 720x480
|
||||
FRAMESIZE_WVGA2, // 752x480
|
||||
FRAMESIZE_SVGA, // 800x600
|
||||
FRAMESIZE_XGA, // 1024x768
|
||||
FRAMESIZE_SXGA, // 1280x1024
|
||||
FRAMESIZE_UXGA, // 1600x1200
|
||||
} framesize_t;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user