mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Add jpeg copying support
This commit is contained in:
parent
ca124aa9ca
commit
28d323b71d
@ -437,6 +437,24 @@ bool image_get_mask_pixel(image_t *ptr, int x, int y);
|
|||||||
(_image->bpp == IMAGE_BPP_BAYER); \
|
(_image->bpp == IMAGE_BPP_BAYER); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#define IMAGE_IS_MUTABLE_BAYER_JPEG(image) \
|
||||||
|
({ \
|
||||||
|
__typeof__ (image) _image = (image); \
|
||||||
|
(_image->bpp == IMAGE_BPP_BINARY) || \
|
||||||
|
(_image->bpp == IMAGE_BPP_GRAYSCALE) || \
|
||||||
|
(_image->bpp == IMAGE_BPP_RGB565) || \
|
||||||
|
(_image->bpp == IMAGE_BPP_BAYER) || \
|
||||||
|
(_image->bpp >= IMAGE_BPP_JPEG); \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define IMAGE_IS_COLOR(image) \
|
||||||
|
({ \
|
||||||
|
__typeof__ (image) _image = (image); \
|
||||||
|
(_image->bpp == IMAGE_BPP_RGB565) || \
|
||||||
|
(_image->bpp == IMAGE_BPP_BAYER) || \
|
||||||
|
(_image->bpp >= IMAGE_BPP_JPEG); \
|
||||||
|
})
|
||||||
|
|
||||||
#define IMAGE_BINARY_LINE_LEN(image) (((image)->w + UINT32_T_MASK) >> UINT32_T_SHIFT)
|
#define IMAGE_BINARY_LINE_LEN(image) (((image)->w + UINT32_T_MASK) >> UINT32_T_SHIFT)
|
||||||
#define IMAGE_BINARY_LINE_LEN_BYTES(image) (IMAGE_BINARY_LINE_LEN(image) * sizeof(uint32_t))
|
#define IMAGE_BINARY_LINE_LEN_BYTES(image) (IMAGE_BINARY_LINE_LEN(image) * sizeof(uint32_t))
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,13 @@ image_t *py_helper_arg_to_image_mutable_bayer(const mp_obj_t arg)
|
|||||||
return arg_img;
|
return arg_img;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
image_t *py_helper_arg_to_image_mutable_bayer_jpeg(const mp_obj_t arg)
|
||||||
|
{
|
||||||
|
image_t *arg_img = py_image_cobj(arg);
|
||||||
|
PY_ASSERT_TRUE_MSG(IMAGE_IS_MUTABLE_BAYER_JPEG(arg_img), "Image is not mutable!");
|
||||||
|
return arg_img;
|
||||||
|
}
|
||||||
|
|
||||||
image_t *py_helper_arg_to_image_grayscale(const mp_obj_t arg)
|
image_t *py_helper_arg_to_image_grayscale(const mp_obj_t arg)
|
||||||
{
|
{
|
||||||
image_t *arg_img = py_image_cobj(arg);
|
image_t *arg_img = py_image_cobj(arg);
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
extern const mp_obj_fun_builtin_var_t py_func_unavailable_obj;
|
extern const mp_obj_fun_builtin_var_t py_func_unavailable_obj;
|
||||||
image_t *py_helper_arg_to_image_mutable(const mp_obj_t arg);
|
image_t *py_helper_arg_to_image_mutable(const mp_obj_t arg);
|
||||||
image_t *py_helper_arg_to_image_mutable_bayer(const mp_obj_t arg);
|
image_t *py_helper_arg_to_image_mutable_bayer(const mp_obj_t arg);
|
||||||
|
image_t *py_helper_arg_to_image_mutable_bayer_jpeg(const mp_obj_t arg);
|
||||||
image_t *py_helper_arg_to_image_grayscale(const mp_obj_t arg);
|
image_t *py_helper_arg_to_image_grayscale(const mp_obj_t arg);
|
||||||
image_t *py_helper_arg_to_image_color(const mp_obj_t arg);
|
image_t *py_helper_arg_to_image_color(const mp_obj_t arg);
|
||||||
image_t *py_helper_keyword_to_image_mutable(uint n_args, const mp_obj_t *args, uint arg_index,
|
image_t *py_helper_keyword_to_image_mutable(uint n_args, const mp_obj_t *args, uint arg_index,
|
||||||
|
|||||||
@ -870,7 +870,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_image_midpoint_pooled_obj, 3, py_image_midp
|
|||||||
static mp_obj_t py_image_to(int bpp, const uint16_t *default_color_palette, bool copy_to_fb,
|
static mp_obj_t py_image_to(int bpp, const uint16_t *default_color_palette, bool copy_to_fb,
|
||||||
uint n_args, const mp_obj_t *args, mp_map_t *kw_args)
|
uint n_args, const mp_obj_t *args, mp_map_t *kw_args)
|
||||||
{
|
{
|
||||||
image_t *src_img = py_helper_arg_to_image_mutable_bayer(args[0]);
|
image_t *src_img = py_helper_arg_to_image_mutable_bayer_jpeg(args[0]);
|
||||||
|
|
||||||
float arg_x_scale = 1.f;
|
float arg_x_scale = 1.f;
|
||||||
bool got_x_scale = py_helper_keyword_float_maybe(n_args, args, 1, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_x_scale), &arg_x_scale);
|
bool got_x_scale = py_helper_keyword_float_maybe(n_args, args, 1, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_x_scale), &arg_x_scale);
|
||||||
@ -963,6 +963,19 @@ static mp_obj_t py_image_to(int bpp, const uint16_t *default_color_palette, bool
|
|||||||
IMAGE_HINT_EXTRACT_RGB_CHANNEL_FIRST |
|
IMAGE_HINT_EXTRACT_RGB_CHANNEL_FIRST |
|
||||||
IMAGE_HINT_APPLY_COLOR_PALETTE_FIRST);
|
IMAGE_HINT_APPLY_COLOR_PALETTE_FIRST);
|
||||||
}
|
}
|
||||||
|
} else if (dst_img.bpp >= IMAGE_BPP_JPEG) {
|
||||||
|
if ((arg_x_scale != 1) ||
|
||||||
|
(arg_y_scale != 1) ||
|
||||||
|
(arg_roi.x != 0) ||
|
||||||
|
(arg_roi.y != 0) ||
|
||||||
|
(arg_roi.w != src_img->w) ||
|
||||||
|
(arg_roi.h != src_img->h) ||
|
||||||
|
(arg_rgb_channel != -1) ||
|
||||||
|
(arg_alpha != 256) ||
|
||||||
|
(color_palette != NULL) ||
|
||||||
|
(alpha_palette != NULL)) {
|
||||||
|
mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Only jpeg copying is supported!"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (copy) {
|
if (copy) {
|
||||||
@ -983,11 +996,17 @@ static mp_obj_t py_image_to(int bpp, const uint16_t *default_color_palette, bool
|
|||||||
dst_img.data = xalloc(image_size(&dst_img));
|
dst_img.data = xalloc(image_size(&dst_img));
|
||||||
}
|
}
|
||||||
|
|
||||||
fb_alloc_mark();
|
if (dst_img.bpp >= IMAGE_BPP_JPEG) {
|
||||||
imlib_draw_image(&dst_img, src_img, 0, 0, arg_x_scale, arg_y_scale, &arg_roi,
|
if (dst_img.data != src_img->data) {
|
||||||
arg_rgb_channel, arg_alpha, color_palette, alpha_palette,
|
memcpy(dst_img.data, src_img->data, dst_img.bpp);
|
||||||
(hint & (~IMAGE_HINT_CENTER)) | IMAGE_HINT_BLACK_BACKGROUND, NULL, NULL);
|
}
|
||||||
fb_alloc_free_till_mark();
|
} else {
|
||||||
|
fb_alloc_mark();
|
||||||
|
imlib_draw_image(&dst_img, src_img, 0, 0, arg_x_scale, arg_y_scale, &arg_roi,
|
||||||
|
arg_rgb_channel, arg_alpha, color_palette, alpha_palette,
|
||||||
|
(hint & (~IMAGE_HINT_CENTER)) | IMAGE_HINT_BLACK_BACKGROUND, NULL, NULL);
|
||||||
|
fb_alloc_free_till_mark();
|
||||||
|
}
|
||||||
|
|
||||||
if (arg_other) {
|
if (arg_other) {
|
||||||
arg_other->w = dst_img.w;
|
arg_other->w = dst_img.w;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user