camera: Update camera module

This commit is contained in:
Kamil Tomaszewski 2020-09-14 12:55:53 +02:00
parent a25e3c2858
commit ce7ee58e92
4 changed files with 30 additions and 22 deletions

View File

@ -42,18 +42,28 @@ typedef struct {
STATIC camera_dev_t camera_dev = {"/dev/video", -1};
typedef struct {
uint16_t width;
uint16_t height;
} image_size_t;
STATIC const image_size_t image_size_table[] = {
{ VIDEO_HSIZE_QVGA, VIDEO_VSIZE_QVGA },
{ VIDEO_HSIZE_VGA, VIDEO_VSIZE_VGA },
{ VIDEO_HSIZE_HD, VIDEO_VSIZE_HD },
{ VIDEO_HSIZE_QUADVGA, VIDEO_VSIZE_QUADVGA },
{ VIDEO_HSIZE_FULLHD, VIDEO_VSIZE_FULLHD },
{ VIDEO_HSIZE_3M, VIDEO_VSIZE_3M },
{ VIDEO_HSIZE_5M, VIDEO_VSIZE_5M },
};
static bool camera_check_width_and_height(uint16_t width, uint16_t height) {
if ((width == VIDEO_HSIZE_QVGA && height == VIDEO_VSIZE_QVGA) ||
(width == VIDEO_HSIZE_VGA && height == VIDEO_VSIZE_VGA) ||
(width == VIDEO_HSIZE_HD && height == VIDEO_VSIZE_HD) ||
(width == VIDEO_HSIZE_QUADVGA && height == VIDEO_VSIZE_QUADVGA) ||
(width == VIDEO_HSIZE_FULLHD && height == VIDEO_VSIZE_FULLHD) ||
(width == VIDEO_HSIZE_3M && height == VIDEO_VSIZE_3M) ||
(width == VIDEO_HSIZE_5M && height == VIDEO_VSIZE_5M)) {
return true;
} else {
return false;
for (int i = 0; i < MP_ARRAY_SIZE(image_size_table); i++) {
if (image_size_table[i].width == width && image_size_table[i].height == height) {
return true;
}
}
return false;
}
static bool camera_check_buffer_length(uint16_t width, uint16_t height, camera_imageformat_t format, size_t length) {
@ -61,18 +71,14 @@ static bool camera_check_buffer_length(uint16_t width, uint16_t height, camera_i
// In SPRESENSE SDK, JPEG compression quality=80 by default.
// In such setting, the maximum actual measured size of JPEG image
// is about width * height * 2 / 9.
return length >= (size_t)(width * height * 2 / 9) ? true : false;
return length >= (size_t)(width * height * 2 / 9);
} else {
return false;
}
}
static bool camera_check_format(camera_imageformat_t format) {
if (format == IMAGEFORMAT_JPG) {
return true;
} else {
return false;
}
return format == IMAGEFORMAT_JPG;
}
static void camera_set_format(enum v4l2_buf_type type, uint32_t pixformat, uint16_t width, uint16_t height) {

View File

@ -46,7 +46,7 @@
#include "common-hal/pwmio/PWMOut.h"
#include "common-hal/busio/UART.h"
#define HEAP_SIZE (1000 * 1024)
#define SPRESENSE_MEM_ALIGN (32)
uint32_t* heap;
uint32_t heap_size;
@ -57,8 +57,10 @@ safe_mode_t port_init(void) {
// Wait until RTC is available
while (g_rtc_enabled == false);
heap = memalign(32, HEAP_SIZE);
heap_size = HEAP_SIZE / sizeof(uint32_t);
heap = memalign(SPRESENSE_MEM_ALIGN, 128 * 1024);
uint32_t size = CONFIG_RAM_START + CONFIG_RAM_SIZE - (uint32_t)heap - 2 * SPRESENSE_MEM_ALIGN;
heap = realloc(heap, size);
heap_size = size / sizeof(uint32_t);
if (board_requests_safe_mode()) {
return USER_SAFE_MODE;

View File

@ -52,7 +52,7 @@
//|
//| buffer = bytearray(512 * 1024)
//| file = open("/sd/image.jpg","wb")
//| size = cam.take_picture()
//| size = cam.take_picture(buffer, camera.ImageFormat.JPG)
//| file.write(buffer, size)
//| file.close()"""
//|
@ -99,7 +99,7 @@ STATIC void check_for_deinit(camera_obj_t *self) {
//| def take_picture(self, buf: WriteableBuffer, format: ImageFormat) -> int:
//| """Take picture and save to ``buf`` in the given ``format``
//|
//| :return: the size of the picture taken
//| :return: the number of bytes written into buf
//| :rtype: int"""
//| ...
//|

View File

@ -39,7 +39,7 @@ STATIC const mp_rom_map_elem_t camera_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_Camera), MP_ROM_PTR(&camera_type) },
// Enum-like Classes.
{ MP_ROM_QSTR(MP_QSTR_ImageSize), MP_ROM_PTR(&camera_imageformat_type) },
{ MP_ROM_QSTR(MP_QSTR_ImageFormat), MP_ROM_PTR(&camera_imageformat_type) },
};
STATIC MP_DEFINE_CONST_DICT(camera_module_globals, camera_module_globals_table);