mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Merge pull request #1187 from kwagyeman/kwabena/jpeg_speedup_2
Keep JPEG core on during script execution
This commit is contained in:
commit
586a1440d7
@ -21,7 +21,9 @@
|
|||||||
|
|
||||||
void imlib_init_all()
|
void imlib_init_all()
|
||||||
{
|
{
|
||||||
// Nothing for now.
|
#if (OMV_HARDWARE_JPEG == 1)
|
||||||
|
imlib_jpeg_compress_init();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void imlib_deinit_all()
|
void imlib_deinit_all()
|
||||||
@ -29,6 +31,9 @@ void imlib_deinit_all()
|
|||||||
#ifdef IMLIB_ENABLE_DMA2D
|
#ifdef IMLIB_ENABLE_DMA2D
|
||||||
imlib_draw_row_deinit_all();
|
imlib_draw_row_deinit_all();
|
||||||
#endif
|
#endif
|
||||||
|
#if (OMV_HARDWARE_JPEG == 1)
|
||||||
|
imlib_jpeg_compress_deinit();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////
|
/////////////////
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
#include "fmath.h"
|
#include "fmath.h"
|
||||||
#include "collections.h"
|
#include "collections.h"
|
||||||
#include "imlib_config.h"
|
#include "imlib_config.h"
|
||||||
|
#include "omv_boardconfig.h"
|
||||||
|
|
||||||
#define IM_LOG2_2(x) (((x) & 0x2ULL) ? ( 2 ) : 1) // NO ({ ... }) !
|
#define IM_LOG2_2(x) (((x) & 0x2ULL) ? ( 2 ) : 1) // NO ({ ... }) !
|
||||||
#define IM_LOG2_4(x) (((x) & 0xCULL) ? ( 2 + IM_LOG2_2((x) >> 2)) : IM_LOG2_2(x)) // NO ({ ... }) !
|
#define IM_LOG2_4(x) (((x) & 0xCULL) ? ( 2 + IM_LOG2_2((x) >> 2)) : IM_LOG2_2(x)) // NO ({ ... }) !
|
||||||
@ -1070,6 +1071,10 @@ bool bmp_read_geometry(FIL *fp, image_t *img, const char *path, bmp_read_setting
|
|||||||
void bmp_read_pixels(FIL *fp, image_t *img, int n_lines, bmp_read_settings_t *rs);
|
void bmp_read_pixels(FIL *fp, image_t *img, int n_lines, bmp_read_settings_t *rs);
|
||||||
void bmp_read(image_t *img, const char *path);
|
void bmp_read(image_t *img, const char *path);
|
||||||
void bmp_write_subimg(image_t *img, const char *path, rectangle_t *r);
|
void bmp_write_subimg(image_t *img, const char *path, rectangle_t *r);
|
||||||
|
#if (OMV_HARDWARE_JPEG == 1)
|
||||||
|
void imlib_jpeg_compress_init();
|
||||||
|
void imlib_jpeg_compress_deinit();
|
||||||
|
#endif
|
||||||
bool jpeg_compress(image_t *src, image_t *dst, int quality, bool realloc);
|
bool jpeg_compress(image_t *src, image_t *dst, int quality, bool realloc);
|
||||||
int jpeg_clean_trailing_bytes(int bpp, uint8_t *data);
|
int jpeg_clean_trailing_bytes(int bpp, uint8_t *data);
|
||||||
void jpeg_read_geometry(FIL *fp, image_t *img, const char *path, jpg_read_settings_t *rs);
|
void jpeg_read_geometry(FIL *fp, image_t *img, const char *path, jpg_read_settings_t *rs);
|
||||||
|
|||||||
@ -180,7 +180,9 @@ typedef struct _jpeg_enc {
|
|||||||
};
|
};
|
||||||
} jpeg_enc_t;
|
} jpeg_enc_t;
|
||||||
|
|
||||||
static uint8_t mcubuf[512];
|
static JPEG_HandleTypeDef JPEG_Handle = {.Instance = JPEG};
|
||||||
|
static JPEG_ConfTypeDef JPEG_Config = {};
|
||||||
|
static uint8_t mcubuf[192];
|
||||||
static jpeg_enc_t jpeg_enc;
|
static jpeg_enc_t jpeg_enc;
|
||||||
|
|
||||||
static uint8_t *get_mcu()
|
static uint8_t *get_mcu()
|
||||||
@ -316,11 +318,6 @@ bool jpeg_compress(image_t *src, image_t *dst, int quality, bool realloc)
|
|||||||
mp_uint_t start = mp_hal_ticks_ms();
|
mp_uint_t start = mp_hal_ticks_ms();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Init the HAL JPEG driver
|
|
||||||
JPEG_HandleTypeDef JPEG_Handle = {0};
|
|
||||||
JPEG_Handle.Instance = JPEG;
|
|
||||||
HAL_JPEG_Init(&JPEG_Handle);
|
|
||||||
|
|
||||||
uint32_t pad_w = src->w;
|
uint32_t pad_w = src->w;
|
||||||
if (pad_w % 8 != 0) {
|
if (pad_w % 8 != 0) {
|
||||||
pad_w += (8 - (pad_w % 8));
|
pad_w += (8 - (pad_w % 8));
|
||||||
@ -344,23 +341,23 @@ bool jpeg_compress(image_t *src, image_t *dst, int quality, bool realloc)
|
|||||||
JPEG_Info.ImageQuality = quality;
|
JPEG_Info.ImageQuality = quality;
|
||||||
|
|
||||||
switch (src->bpp) {
|
switch (src->bpp) {
|
||||||
case 0:
|
case IMAGE_BPP_BINARY:
|
||||||
case 1:
|
case IMAGE_BPP_GRAYSCALE:
|
||||||
jpeg_enc.mcu_size = JPEG_444_GS_MCU_SIZE;
|
jpeg_enc.mcu_size = JPEG_444_GS_MCU_SIZE;
|
||||||
JPEG_Info.ColorSpace = JPEG_GRAYSCALE_COLORSPACE;
|
JPEG_Info.ColorSpace = JPEG_GRAYSCALE_COLORSPACE;
|
||||||
JPEG_Info.ChromaSubsampling = JPEG_444_SUBSAMPLING;
|
JPEG_Info.ChromaSubsampling = JPEG_444_SUBSAMPLING;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case IMAGE_BPP_RGB565:
|
||||||
case 3:
|
case IMAGE_BPP_BAYER:
|
||||||
jpeg_enc.mcu_size = JPEG_444_YCBCR_MCU_SIZE;
|
jpeg_enc.mcu_size = JPEG_444_YCBCR_MCU_SIZE;
|
||||||
JPEG_Info.ColorSpace = JPEG_YCBCR_COLORSPACE;
|
JPEG_Info.ColorSpace = JPEG_YCBCR_COLORSPACE;
|
||||||
JPEG_Info.ChromaSubsampling = JPEG_444_SUBSAMPLING;
|
JPEG_Info.ChromaSubsampling = JPEG_444_SUBSAMPLING;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HAL_JPEG_ConfigEncoding(&JPEG_Handle, &JPEG_Info) != HAL_OK) {
|
if (memcmp(&JPEG_Config, &JPEG_Info, sizeof(JPEG_ConfTypeDef))) {
|
||||||
// Initialization error
|
HAL_JPEG_ConfigEncoding(&JPEG_Handle, &JPEG_Info);
|
||||||
return true;
|
memcpy(&JPEG_Config, &JPEG_Info, sizeof(JPEG_ConfTypeDef));
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: output buffer size is stored in dst->bpp
|
// NOTE: output buffer size is stored in dst->bpp
|
||||||
@ -381,11 +378,21 @@ bool jpeg_compress(image_t *src, image_t *dst, int quality, bool realloc)
|
|||||||
printf("time: %u ms\n", mp_hal_ticks_ms() - start);
|
printf("time: %u ms\n", mp_hal_ticks_ms() - start);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
HAL_JPEG_DeInit(&JPEG_Handle);
|
|
||||||
|
|
||||||
return jpeg_enc.overflow;
|
return jpeg_enc.overflow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void imlib_jpeg_compress_init()
|
||||||
|
{
|
||||||
|
HAL_JPEG_Init(&JPEG_Handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
void imlib_jpeg_compress_deinit()
|
||||||
|
{
|
||||||
|
memset(&JPEG_Config, 0, sizeof(JPEG_ConfTypeDef));
|
||||||
|
HAL_JPEG_Abort(&JPEG_Handle);
|
||||||
|
HAL_JPEG_DeInit(&JPEG_Handle);
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// Software JPEG implementation.
|
// Software JPEG implementation.
|
||||||
#define FIX_0_382683433 ((int32_t) 98)
|
#define FIX_0_382683433 ((int32_t) 98)
|
||||||
|
|||||||
@ -117,11 +117,6 @@ void HAL_MspInit(void)
|
|||||||
__GPIOK_CLK_ENABLE();
|
__GPIOK_CLK_ENABLE();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (OMV_HARDWARE_JPEG)
|
|
||||||
/* Enable JPEG clock */
|
|
||||||
__HAL_RCC_JPEG_CLK_ENABLE();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Enable DMA clocks */
|
/* Enable DMA clocks */
|
||||||
__DMA1_CLK_ENABLE();
|
__DMA1_CLK_ENABLE();
|
||||||
__DMA2_CLK_ENABLE();
|
__DMA2_CLK_ENABLE();
|
||||||
@ -131,11 +126,6 @@ void HAL_MspInit(void)
|
|||||||
__HAL_RCC_MDMA_CLK_ENABLE();
|
__HAL_RCC_MDMA_CLK_ENABLE();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OMV_HARDWARE_JPEG)
|
|
||||||
// Enable JPEG clock
|
|
||||||
__HAL_RCC_JPGDECEN_CLK_ENABLE();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(DCMI_RESET_PIN) || defined(DCMI_PWDN_PIN) || defined(DCMI_FSYNC_PIN)
|
#if defined(DCMI_RESET_PIN) || defined(DCMI_PWDN_PIN) || defined(DCMI_FSYNC_PIN)
|
||||||
/* Configure DCMI GPIO */
|
/* Configure DCMI GPIO */
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
@ -400,6 +390,20 @@ void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef *hdma2d)
|
|||||||
__HAL_RCC_DMA2D_CLK_DISABLE();
|
__HAL_RCC_DMA2D_CLK_DISABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (OMV_HARDWARE_JPEG == 1)
|
||||||
|
void HAL_JPEG_MspInit(JPEG_HandleTypeDef *hjpeg)
|
||||||
|
{
|
||||||
|
__HAL_RCC_JPEG_CLK_ENABLE();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HAL_JPEG_MspDeInit(JPEG_HandleTypeDef *hjpeg)
|
||||||
|
{
|
||||||
|
__HAL_RCC_JPEG_FORCE_RESET();
|
||||||
|
__HAL_RCC_JPEG_RELEASE_RESET();
|
||||||
|
__HAL_RCC_JPEG_CLK_DISABLE();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(OMV_LCD_CONTROLLER) && (!defined(OMV_DSI_CONTROLLER))
|
#if defined(OMV_LCD_CONTROLLER) && (!defined(OMV_DSI_CONTROLLER))
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GPIO_TypeDef *port;
|
GPIO_TypeDef *port;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user