luckfox-pico-sdk/sysdrv/source/mcu/rt-thread/applications/common/imagelib/lib_imageprocess.h
luckfox-eng29 8f34c2760d project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between
the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door
for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more
usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp:
Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for
compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem.
sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device
tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately.
sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick
boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades.
sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for
fastboot.

Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
2024-10-14 09:47:04 +08:00

137 lines
4.0 KiB
C

/**
* Copyright (c) 2020 Rockchip Electronics Co., Ltd
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef __LIB_IMAGEPROCESS_H_
#define __LIB_IMAGEPROCESS_H_
#include <rtthread.h>
#include <stdio.h>
#include <string.h>
#define MAX_DSTIMG_WIDTH 512
#define TYPE_RGB565 0
#define TYPE_RGB888 1
#define TYPE_ARGB8888 2
#define TYPE_RGB565_565 3
#define TYPE_RGB888_565 4
#define TYPE_ARGB8888_565 5
#define RK_ROTATE_USING_DSP 1
#define RK_SCALE_USING_DSP 1
#define RK_LZW_USING_DSP 1
#define IMG_PROCESS_ID 0x50000002
#define DSP_ALGO_ROTATE_16BIT 0x40000009
#define DSP_ALGO_ROTATE_16BIT_FAST 0x4000000A
#define DSP_ALGO_ROTATE_24BIT 0x4000000B
#define DSP_ALGO_SCALE_24BIT 0x4000000C
#define DSP_ALGO_DSP_ALGO_LZW_DECOMPRESS 0x4000000D
#undef MIN
#define MIN(X, Y) ((X)<(Y)?(X):(Y))
#undef MAX
#define MAX(X, Y) ((X)>(Y)?(X):(Y))
#undef ABS
#define ABS(X) (((X) < 0) ? (-(X)) : (X))
typedef struct image_st
{
short width;
short height;
short stride;
unsigned char *pdata;
uint8_t format;
} image_st;
typedef struct rgb565pixel
{
unsigned short r: 5;
unsigned short g: 6;
unsigned short b: 5;
} rgb565pixel;
typedef struct rgb888pixel
{
unsigned char r;
unsigned char g;
unsigned char b;
} rgb888pixel;
typedef struct rotateimage_st
{
short width;
short height;
short stride;
float cx;
float cy;
unsigned char *pdata;
} rotateimage_st;
struct rk_rotate_cfg
{
struct rotateimage_st ps;
struct rotateimage_st pd;
int32_t angle;
struct rotateimage_st pbg;
short *preinfo;
};
struct rk_scale_cfg
{
struct image_st ps;
struct image_st pd;
int32_t src_type;
};
struct rk_lzw_cfg
{
uint8_t *src;
uint32_t src_len;
uint8_t *dst;
uint32_t dst_len;
};
#ifdef __cplusplus
extern "C" {
#endif
void imgScale_ARGB2RGB(struct image_st *src, struct image_st *dst);
void imgScale_RGB2RGB(struct image_st *src, struct image_st *dst);
void imgScale_565RGB2RGB(struct image_st *src, struct image_st *dst);
void imgScale_ARGB2RGB565(image_st *src, image_st *dst);
void imgScale_RGB2RGB565(struct image_st *src, struct image_st *dst);
void imgScale_565RGB2RGB565(struct image_st *src, struct image_st *dst);
void imagerotate_ARGB2RGB(struct rotateimage_st *psrc, struct rotateimage_st *pdst, float angle);
void imagerotate_ARGB2RGB565(struct rotateimage_st *psrc, struct rotateimage_st *pdst, float angle);
void imagerotate_ARGB2RGB565Fast(struct rotateimage_st *psrc, struct rotateimage_st *psrcBG, struct rotateimage_st *pdst, short *preIndex, float angle);
void SaveBmp(const char *filename, unsigned char *rgbbuf, int width, int height, int bytePerDot, int stride);
void *rk_imagelib_dsp_dev(void);
void rk_imagelib_dsp_lock(void);
void rk_imagelib_dsp_unlock(void);
int rk_imagelib_init(void);
void rk_rotate_process(struct rotateimage_st *ps, struct rotateimage_st *pd, int32_t angle);
void rk_rotate_process_16bit(struct rotateimage_st *ps, struct rotateimage_st *pd, int32_t angle);
void rk_rotate_process_16bitfast(struct rotateimage_st *ps, struct rotateimage_st *pbg, struct rotateimage_st *pd, short *preIndex, int32_t angle);
void rk_scale_process(struct image_st *ps, struct image_st *pd, int32_t type);
void rk_lzw_decompress_dsp(uint8_t *src, uint32_t src_len, uint8_t *dst, uint32_t dst_len);
void rk_image_reset(struct image_st *ps, uint8_t dotbyte);
void rk_image_copy(struct image_st *ps, struct image_st *pd, uint8_t dotbyte);
void rk_image_copy_to565(struct image_st *ps, struct image_st *pd, uint8_t dotbyte);
void rk_image_copy_to888(struct image_st *ps, struct image_st *pd, uint8_t dotbyte);
void rk_imagelib_deinit(void);
void drawLine(uint8_t *fb, float x0, float y0, float x1, float y1,
void (*plot)(uint8_t *fb, int x, int y, float c),
void (*plot_shadow)(uint8_t* fb, int x, int y, float c));
#ifdef __cplusplus
}
#endif
#endif