middleware: weekly rls 2024.07.20
-e90961, fix aac+vqe "reamain data not process AEC" bug. -3c08de, split module vpu into vi vo vpss rgn gdc. -b5d998, (ive): add comment to api. -166849, mw support arm32. Change-Id: Ied488d392da9eed2e3a94e1244eeee540c389372
This commit is contained in:
committed by
carbon
parent
c57b1410f0
commit
62573a835f
1
middleware/v2/.gitignore
vendored
1
middleware/v2/.gitignore
vendored
@ -36,6 +36,7 @@ sample/scene_auto/sample_scene_auto
|
|||||||
sample/sensor_test/sensor_test
|
sample/sensor_test/sensor_test
|
||||||
sample/tp2863_tp2803/sample_test_tp2863_tp2803
|
sample/tp2863_tp2803/sample_test_tp2863_tp2803
|
||||||
sample/sample_panel/sample_panel
|
sample/sample_panel/sample_panel
|
||||||
|
sample/sample_panel/lt9611/lt9611
|
||||||
|
|
||||||
modules/venc/vc/jpeg/driver/bm_jpg_test
|
modules/venc/vc/jpeg/driver/bm_jpg_test
|
||||||
modules/venc/vc/jpeg/driver/bmjpuapi/bmjpegdec
|
modules/venc/vc/jpeg/driver/bmjpuapi/bmjpegdec
|
||||||
|
|||||||
@ -50,9 +50,12 @@ endif
|
|||||||
## INCLUDE PATH ##
|
## INCLUDE PATH ##
|
||||||
COMMON_INC = $(MW_PATH)/sample/common/include
|
COMMON_INC = $(MW_PATH)/sample/common/include
|
||||||
SYS_INC = $(MW_PATH)/modules/sys/include
|
SYS_INC = $(MW_PATH)/modules/sys/include
|
||||||
VPU_INC = $(MW_PATH)/modules/vpu/include
|
VI_INC = $(MW_PATH)/modules/vi/include
|
||||||
|
VPSS_INC = $(MW_PATH)/modules/vpss/include
|
||||||
|
VO_INC = $(MW_PATH)/modules/vo/include
|
||||||
|
GDC_INC = $(MW_PATH)/modules/gdc/include
|
||||||
|
RGN_INC = $(MW_PATH)/modules/rgn/include
|
||||||
AUD_INC = $(MW_PATH)/modules/audio/include
|
AUD_INC = $(MW_PATH)/modules/audio/include
|
||||||
OSDC_INC = $(MW_PATH)/modules/osdc/include
|
|
||||||
BIN_INC = $(MW_PATH)/modules/bin/include
|
BIN_INC = $(MW_PATH)/modules/bin/include
|
||||||
|
|
||||||
MODULES_DIR = $(shell if [ -d $(MW_PATH)/modules ]; then echo "exist"; else echo "noexist"; fi)
|
MODULES_DIR = $(shell if [ -d $(MW_PATH)/modules ]; then echo "exist"; else echo "noexist"; fi)
|
||||||
|
|||||||
@ -65,6 +65,7 @@ CVI_S32 CVI_AUD_SYS_Bind(const MMF_CHN_S *pstSrcChn, const MMF_CHN_S *pstDestCh
|
|||||||
* @return CVI_S32 Return CVI_SUCCESS if succeed
|
* @return CVI_S32 Return CVI_SUCCESS if succeed
|
||||||
*/
|
*/
|
||||||
CVI_S32 CVI_AUD_SYS_UnBind(const MMF_CHN_S *pstSrcChn, const MMF_CHN_S *pstDestChn);
|
CVI_S32 CVI_AUD_SYS_UnBind(const MMF_CHN_S *pstSrcChn, const MMF_CHN_S *pstDestChn);
|
||||||
|
|
||||||
/* AI function api. */
|
/* AI function api. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -83,6 +84,22 @@ CVI_S32 CVI_AI_SetPubAttr(AUDIO_DEV AiDevId, const AIO_ATTR_S *pstAttr);
|
|||||||
*/
|
*/
|
||||||
CVI_S32 CVI_AI_GetPubAttr(AUDIO_DEV AiDevId, AIO_ATTR_S *pstAttr);
|
CVI_S32 CVI_AI_GetPubAttr(AUDIO_DEV AiDevId, AIO_ATTR_S *pstAttr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the sound_card to audio
|
||||||
|
* @param AiDevId the number of audio device
|
||||||
|
* @param AiCardId the number of audio sound card
|
||||||
|
*/
|
||||||
|
CVI_S32 CVI_AI_SetCard(AUDIO_DEV AiDevId, CVI_S32 AiCardId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the reference sound_card to audio
|
||||||
|
* @param AiDevId the number of audio device
|
||||||
|
* @param AiCardId the number of audio sound card
|
||||||
|
*/
|
||||||
|
#ifdef SUPPORT_PDM_AEC
|
||||||
|
CVI_S32 CVI_AI_SetRefCard(AUDIO_DEV AiDevId, CVI_S32 AiCardId);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Create and initial ai device.
|
* @brief Create and initial ai device.
|
||||||
* @param AiDevId the number of audio device
|
* @param AiDevId the number of audio device
|
||||||
@ -312,6 +329,13 @@ CVI_S32 CVI_AO_GetPubAttr(AUDIO_DEV AoDevId, AIO_ATTR_S *pstAttr);
|
|||||||
|
|
||||||
CVI_S32 CVI_AO_ClrPubAttr(AUDIO_DEV AoDevId);
|
CVI_S32 CVI_AO_ClrPubAttr(AUDIO_DEV AoDevId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the sound_card to audio
|
||||||
|
* @param AoDevId the number of audio device
|
||||||
|
* @param AoCardId the number of audio sound card
|
||||||
|
*/
|
||||||
|
CVI_S32 CVI_AO_SetCard(AUDIO_DEV AoDevId, CVI_S32 AoCardId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Create and initial ao device.
|
* @brief Create and initial ao device.
|
||||||
* @param AoDevId the number of output device
|
* @param AoDevId the number of output device
|
||||||
|
|||||||
@ -79,14 +79,21 @@ extern "C" {
|
|||||||
#define DNVQE_DRC_EXPANDER_COMPRESS 0x4
|
#define DNVQE_DRC_EXPANDER_COMPRESS 0x4
|
||||||
#define DNVQE_DRC_LIMITER 0x8
|
#define DNVQE_DRC_LIMITER 0x8
|
||||||
|
|
||||||
#define CVI_MAX_AI_DEVICE_ID_NUM 3
|
|
||||||
#define CVI_MAX_AO_DEVICE_ID_NUM 3
|
#define CVI_MAX_AI_DEVICE_ID_NUM 5
|
||||||
|
#define CVI_MAX_AI_CARD_ID_NUM 5
|
||||||
|
#define CVI_MAX_AO_DEVICE_ID_NUM 5
|
||||||
|
#define CVI_MAX_AO_CARD_ID_NUM 5
|
||||||
/* define macro */
|
/* define macro */
|
||||||
|
|
||||||
#define CHECK_AI_DEVID_VALID(x) \
|
#define CHECK_AI_DEVID_VALID(x) \
|
||||||
((((x) > (CVI_MAX_AI_DEVICE_ID_NUM-1))) ? 1:0)
|
((((x) > (CVI_MAX_AI_DEVICE_ID_NUM-1))) ? 1:0)
|
||||||
|
#define CHECK_AI_CARD_VALID(x) \
|
||||||
|
((((x) > (CVI_MAX_AI_CARD_ID_NUM-1))) ? 1:0)
|
||||||
#define CHECK_AO_DEVID_VALID(x) \
|
#define CHECK_AO_DEVID_VALID(x) \
|
||||||
((((x) > (CVI_MAX_AO_DEVICE_ID_NUM-1))) ? 1:0)
|
((((x) > (CVI_MAX_AO_DEVICE_ID_NUM-1))) ? 1:0)
|
||||||
|
#define CHECK_AO_CARD_VALID(x) \
|
||||||
|
((((x) > (CVI_MAX_AO_CARD_ID_NUM-1))) ? 1:0)
|
||||||
#define CHECK_AENC_DEVID_VALID(x) \
|
#define CHECK_AENC_DEVID_VALID(x) \
|
||||||
((((x) > (AENC_MAX_CHN_NUM-1))) ? 1:0)
|
((((x) > (AENC_MAX_CHN_NUM-1))) ? 1:0)
|
||||||
#define CHECK_ADEC_DEVID_VALID(x) \
|
#define CHECK_ADEC_DEVID_VALID(x) \
|
||||||
@ -598,6 +605,9 @@ extern ST_AudioUnitTestCfg stAudTestCfg;
|
|||||||
#define CVI_ERR_AI_VQE_ERR 0xA0000010
|
#define CVI_ERR_AI_VQE_ERR 0xA0000010
|
||||||
#define CVI_ERR_AI_VQE_BUF_FULL 0xA0000011
|
#define CVI_ERR_AI_VQE_BUF_FULL 0xA0000011
|
||||||
#define CVI_ERR_AI_VQE_FILE_UNEXIST 0xA0000012
|
#define CVI_ERR_AI_VQE_FILE_UNEXIST 0xA0000012
|
||||||
|
/*invalid card ID*/
|
||||||
|
#define CVI_ERR_AI_INVALID_CARDID 0xA100013
|
||||||
|
|
||||||
/* invalid device ID */
|
/* invalid device ID */
|
||||||
#define CVI_ERR_AO_INVALID_DEVID 0xA1000001
|
#define CVI_ERR_AO_INVALID_DEVID 0xA1000001
|
||||||
/* invalid channel ID */
|
/* invalid channel ID */
|
||||||
@ -628,6 +638,8 @@ extern ST_AudioUnitTestCfg stAudTestCfg;
|
|||||||
#define CVI_ERR_AO_BUSY 0xA100000E
|
#define CVI_ERR_AO_BUSY 0xA100000E
|
||||||
/* vqe err */
|
/* vqe err */
|
||||||
#define CVI_ERR_AO_VQE_ERR 0xA100000F
|
#define CVI_ERR_AO_VQE_ERR 0xA100000F
|
||||||
|
/*invalid card ID*/
|
||||||
|
#define CVI_ERR_AO_INVALID_CARDID 0xA100010
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@ -1,96 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
|
|
||||||
*
|
|
||||||
* File Name: include/cvi_comm_vpss.h
|
|
||||||
* Description:
|
|
||||||
* The common data type defination for VPSS module.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CVI_COMM_OSDC_H__
|
|
||||||
#define __CVI_COMM_OSDC_H__
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#if __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
typedef enum _OSDC_OSD_FORMAT_E {
|
|
||||||
OSD_ARGB8888 = 0,
|
|
||||||
OSD_ARGB4444 = 4,
|
|
||||||
OSD_ARGB1555 = 5,
|
|
||||||
OSD_LUT8 = 8,
|
|
||||||
OSD_LUT4 = 10,
|
|
||||||
NUM_OF_FORMAT
|
|
||||||
} OSDC_OSD_FORMAT_E;
|
|
||||||
|
|
||||||
typedef enum _OSDC_DRAW_OBJ_TYPE_E {
|
|
||||||
RECT = 0,
|
|
||||||
STROKE_RECT,
|
|
||||||
BIT_MAP,
|
|
||||||
LINE,
|
|
||||||
CMPR_BIT_MAP,
|
|
||||||
NUM_OF_DRAW_OBJ
|
|
||||||
} OSDC_DRAW_OBJ_TYPE_E;
|
|
||||||
|
|
||||||
typedef struct _OSDC_Canvas_Attr_S {
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
OSDC_OSD_FORMAT_E format;
|
|
||||||
uint32_t bg_color_code;
|
|
||||||
} OSDC_Canvas_Attr_S;
|
|
||||||
|
|
||||||
typedef struct _OSDC_RECT_ATTR_S {
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
int thickness;
|
|
||||||
} OSDC_RECT_ATTR_S;
|
|
||||||
|
|
||||||
typedef struct _OSDC_POINT_ATTR_S {
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
} OSDC_POINT_ATTR_S;
|
|
||||||
|
|
||||||
typedef struct _OSDC_LINE_ATTR_S {
|
|
||||||
float _mx; // slope of two end-point vector
|
|
||||||
float _bx[2];
|
|
||||||
float _by[2];
|
|
||||||
float _ex[2];
|
|
||||||
float _ey[2];
|
|
||||||
float ts_h; // thickness proj. on horizontal slice
|
|
||||||
} OSDC_LINE_ATTR_S;
|
|
||||||
|
|
||||||
typedef struct _OSDC_BITMAP_ATTR_S {
|
|
||||||
OSDC_RECT_ATTR_S rect;
|
|
||||||
union {
|
|
||||||
uint32_t stride;
|
|
||||||
uint32_t bs_offset;
|
|
||||||
};
|
|
||||||
} OSDC_BITMAP_ATTR_S;
|
|
||||||
|
|
||||||
typedef union _OSDC_COLOR_S {
|
|
||||||
uint32_t code;
|
|
||||||
uint8_t *buf;
|
|
||||||
} OSDC_COLOR_S;
|
|
||||||
|
|
||||||
typedef struct _OSDC_DRAW_OBJ_S {
|
|
||||||
OSDC_DRAW_OBJ_TYPE_E type;
|
|
||||||
union {
|
|
||||||
OSDC_RECT_ATTR_S rect;
|
|
||||||
OSDC_LINE_ATTR_S line;
|
|
||||||
OSDC_BITMAP_ATTR_S bitmap;
|
|
||||||
};
|
|
||||||
OSDC_COLOR_S color;
|
|
||||||
int _max_y;
|
|
||||||
int _min_y;
|
|
||||||
} OSDC_DRAW_OBJ_S;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#if __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
#endif /* __CVI_COMM_OSDC_H__ */
|
|
||||||
@ -26,7 +26,6 @@ extern "C" {
|
|||||||
#define NOISE_PROFILE_ISO_NUM 16
|
#define NOISE_PROFILE_ISO_NUM 16
|
||||||
#define USE_USER_SEN_DRIVER 1
|
#define USE_USER_SEN_DRIVER 1
|
||||||
|
|
||||||
|
|
||||||
typedef struct _ISP_CMOS_SENSOR_IMAGE_MODE_S {
|
typedef struct _ISP_CMOS_SENSOR_IMAGE_MODE_S {
|
||||||
CVI_U16 u16Width;
|
CVI_U16 u16Width;
|
||||||
CVI_U16 u16Height;
|
CVI_U16 u16Height;
|
||||||
@ -52,15 +51,22 @@ typedef struct _ISP_CMOS_DEFAULT_S {
|
|||||||
} ISP_CMOS_DEFAULT_S;
|
} ISP_CMOS_DEFAULT_S;
|
||||||
|
|
||||||
typedef struct _ISP_SENSOR_EXP_FUNC_S {
|
typedef struct _ISP_SENSOR_EXP_FUNC_S {
|
||||||
|
/* Callback for init sensor IIC and register. */
|
||||||
CVI_VOID (*pfn_cmos_sensor_init)(VI_PIPE ViPipe);
|
CVI_VOID (*pfn_cmos_sensor_init)(VI_PIPE ViPipe);
|
||||||
|
/* Callback for exit sensor. */
|
||||||
CVI_VOID (*pfn_cmos_sensor_exit)(VI_PIPE ViPipe);
|
CVI_VOID (*pfn_cmos_sensor_exit)(VI_PIPE ViPipe);
|
||||||
|
/* Callback for init sensor image mode. */
|
||||||
CVI_VOID (*pfn_cmos_sensor_global_init)(VI_PIPE ViPipe);
|
CVI_VOID (*pfn_cmos_sensor_global_init)(VI_PIPE ViPipe);
|
||||||
|
/* Callback for set sensor image mode. */
|
||||||
CVI_S32 (*pfn_cmos_set_image_mode)(VI_PIPE ViPipe, ISP_CMOS_SENSOR_IMAGE_MODE_S *pstSensorImageMode);
|
CVI_S32 (*pfn_cmos_set_image_mode)(VI_PIPE ViPipe, ISP_CMOS_SENSOR_IMAGE_MODE_S *pstSensorImageMode);
|
||||||
|
/* Callback for set sensor wdr mode. */
|
||||||
CVI_S32 (*pfn_cmos_set_wdr_mode)(VI_PIPE ViPipe, CVI_U8 u8Mode);
|
CVI_S32 (*pfn_cmos_set_wdr_mode)(VI_PIPE ViPipe, CVI_U8 u8Mode);
|
||||||
|
|
||||||
/* the algs get data which is associated with sensor, except 3a */
|
/* the algs get data which is associated with sensor, except 3a */
|
||||||
CVI_S32 (*pfn_cmos_get_isp_default)(VI_PIPE ViPipe, ISP_CMOS_DEFAULT_S *pstDef);
|
CVI_S32 (*pfn_cmos_get_isp_default)(VI_PIPE ViPipe, ISP_CMOS_DEFAULT_S *pstDef);
|
||||||
|
/* Callback for get sensor blc level. */
|
||||||
CVI_S32 (*pfn_cmos_get_isp_black_level)(VI_PIPE ViPipe, ISP_CMOS_BLACK_LEVEL_S *pstBlackLevel);
|
CVI_S32 (*pfn_cmos_get_isp_black_level)(VI_PIPE ViPipe, ISP_CMOS_BLACK_LEVEL_S *pstBlackLevel);
|
||||||
|
/* Callback for get current sensor register info. */
|
||||||
CVI_S32 (*pfn_cmos_get_sns_reg_info)(VI_PIPE ViPipe, ISP_SNS_SYNC_INFO_S *pstSnsRegsInfo);
|
CVI_S32 (*pfn_cmos_get_sns_reg_info)(VI_PIPE ViPipe, ISP_SNS_SYNC_INFO_S *pstSnsRegsInfo);
|
||||||
|
|
||||||
/* the function of sensor set pixel detect */
|
/* the function of sensor set pixel detect */
|
||||||
|
|||||||
@ -19,34 +19,34 @@ typedef struct combo_dev_attr_s SNS_COMBO_DEV_ATTR_S;
|
|||||||
typedef struct mclk_pll_s SNS_MCLK_ATTR_S;
|
typedef struct mclk_pll_s SNS_MCLK_ATTR_S;
|
||||||
|
|
||||||
typedef struct _SNS_ATTR_S {
|
typedef struct _SNS_ATTR_S {
|
||||||
CVI_U16 u16Min;
|
CVI_U16 u16Min; /* Current MIN exposure of sensor */
|
||||||
CVI_U16 u16Max;
|
CVI_U16 u16Max; /* Current MAX exposure of sensor */
|
||||||
CVI_U16 u16Def;
|
CVI_U16 u16Def; /* Current default setting exposure of sensor */
|
||||||
CVI_U16 u16Step;
|
CVI_U16 u16Step; /* Current exposure step of sensor */
|
||||||
} SNS_ATTR_S;
|
} SNS_ATTR_S;
|
||||||
|
|
||||||
typedef struct _SNS_ATTR_LARGE_S {
|
typedef struct _SNS_ATTR_LARGE_S {
|
||||||
CVI_U32 u32Min;
|
CVI_U32 u32Min; /* Current MIN gain of sensor */
|
||||||
CVI_U32 u32Max;
|
CVI_U32 u32Max; /* Current MAX gain of sensor */
|
||||||
CVI_U32 u32Def;
|
CVI_U32 u32Def; /* Current default setting gain of sensor */
|
||||||
CVI_U32 u32Step;
|
CVI_U32 u32Step; /* Current gain step of sensor */
|
||||||
} SNS_ATTR_LARGE_S;
|
} SNS_ATTR_LARGE_S;
|
||||||
|
|
||||||
typedef struct _ISP_SNS_STATE_S {
|
typedef struct _ISP_SNS_STATE_S {
|
||||||
CVI_BOOL bInit; /* CVI_TRUE: Sensor init */
|
CVI_BOOL bInit; /* CVI_TRUE: Sensor init */
|
||||||
CVI_BOOL bSyncInit; /* CVI_TRUE: Sync Reg init */
|
CVI_BOOL bSyncInit; /* CVI_TRUE: Sync Reg init */
|
||||||
CVI_U8 u8ImgMode;
|
CVI_U8 u8ImgMode; /* Current image mode of sensor */
|
||||||
CVI_U8 u8Hdr; /* CVI_TRUE: HDR enbale */
|
CVI_U8 u8Hdr; /* CVI_TRUE: HDR enbale */
|
||||||
WDR_MODE_E enWDRMode;
|
WDR_MODE_E enWDRMode; /* Current wdr mode of sensor */
|
||||||
|
|
||||||
ISP_SNS_SYNC_INFO_S astSyncInfo[2]; /* [0]: Sensor reg info of cur-frame; [1]: Sensor reg info of pre-frame ; */
|
ISP_SNS_SYNC_INFO_S astSyncInfo[2]; /* [0]: Sensor reg info of cur-frame; [1]: Sensor reg info of pre-frame ; */
|
||||||
|
|
||||||
CVI_U32 au32FL[2]; /* [0]: FullLines of cur-frame; [1]: Pre FullLines of pre-frame */
|
CVI_U32 au32FL[2]; /* [0]: FullLines of cur-frame; [1]: Pre FullLines of pre-frame */
|
||||||
CVI_U32 u32FLStd; /* FullLines std */
|
CVI_U32 u32FLStd; /* FullLines std */
|
||||||
CVI_U32 au32WDRIntTime[4];
|
CVI_U32 au32WDRIntTime[4]; /* Number of exposure lines under WDR */
|
||||||
} ISP_SNS_STATE_S;
|
} ISP_SNS_STATE_S;
|
||||||
|
|
||||||
typedef enum _ISP_SNS_MIRRORFLIP_TYPE_E {
|
typedef enum _ISP_SNS_MIRRORFLIP_TYPE_E { /* Flip mirror function of sensor */
|
||||||
ISP_SNS_NORMAL = 0,
|
ISP_SNS_NORMAL = 0,
|
||||||
ISP_SNS_MIRROR = 1,
|
ISP_SNS_MIRROR = 1,
|
||||||
ISP_SNS_FLIP = 2,
|
ISP_SNS_FLIP = 2,
|
||||||
@ -56,29 +56,29 @@ typedef enum _ISP_SNS_MIRRORFLIP_TYPE_E {
|
|||||||
|
|
||||||
typedef enum _ISP_SNS_L2S_MODE_E {
|
typedef enum _ISP_SNS_L2S_MODE_E {
|
||||||
SNS_L2S_MODE_AUTO = 0, /* sensor l2s distance varies by the inttime of sef. */
|
SNS_L2S_MODE_AUTO = 0, /* sensor l2s distance varies by the inttime of sef. */
|
||||||
SNS_L2S_MODE_FIX, /* sensor l2s distance is fixed. */
|
SNS_L2S_MODE_FIX, /* sensor l2s distance is fixed. */
|
||||||
} ISP_SNS_INTTIME_MODE_E;
|
} ISP_SNS_INTTIME_MODE_E;
|
||||||
|
|
||||||
typedef struct _MCLK_ATTR_S {
|
typedef struct _MCLK_ATTR_S {
|
||||||
CVI_U8 u8Mclk;
|
CVI_U8 u8Mclk; /* Select which mclk the Sensor uses. */
|
||||||
CVI_BOOL bMclkEn;
|
CVI_BOOL bMclkEn; /* Select whether the Sensor uses the current mclk. */
|
||||||
} MCLK_ATTR_S;
|
} MCLK_ATTR_S;
|
||||||
|
|
||||||
typedef struct _RX_INIT_ATTR_S {
|
typedef struct _RX_INIT_ATTR_S {
|
||||||
CVI_U32 MipiDev;
|
CVI_U32 MipiDev; /* Select which MAC the Sensor uses. */
|
||||||
CVI_S16 as16LaneId[5];
|
CVI_S16 as16LaneId[5]; /* Select MIPI lane sequence the Sensor uses. */
|
||||||
CVI_S8 as8PNSwap[5];
|
CVI_S8 as8PNSwap[5]; /* Select whether MIPI lane swap the Sensor uses. */
|
||||||
MCLK_ATTR_S stMclkAttr;
|
MCLK_ATTR_S stMclkAttr; /* Set MCLK information. */
|
||||||
} RX_INIT_ATTR_S;
|
} RX_INIT_ATTR_S;
|
||||||
|
|
||||||
typedef enum _SNS_BDG_MUX_MODE_E {
|
typedef enum _SNS_BDG_MUX_MODE_E {
|
||||||
SNS_BDG_MUX_NONE = 0, /* sensor bridge mux is disabled */
|
SNS_BDG_MUX_NONE = 0, /* sensor bridge mux is disabled */
|
||||||
SNS_BDG_MUX_2, /* sensor bridge mux 2 input */
|
SNS_BDG_MUX_2, /* sensor bridge mux 2 input */
|
||||||
SNS_BDG_MUX_3, /* sensor bridge mux 3 input */
|
SNS_BDG_MUX_3, /* sensor bridge mux 3 input */
|
||||||
SNS_BDG_MUX_4, /* sensor bridge mux 4 input */
|
SNS_BDG_MUX_4, /* sensor bridge mux 4 input */
|
||||||
} SNS_BDG_MUX_MODE_E;
|
} SNS_BDG_MUX_MODE_E;
|
||||||
|
|
||||||
typedef struct _ISP_INIT_ATTR_S {
|
typedef struct _ISP_INIT_ATTR_S { /* Sensor exp ctrl info */
|
||||||
CVI_U32 u32ExpTime;
|
CVI_U32 u32ExpTime;
|
||||||
CVI_U32 u32AGain;
|
CVI_U32 u32AGain;
|
||||||
CVI_U32 u32DGain;
|
CVI_U32 u32DGain;
|
||||||
@ -97,7 +97,7 @@ typedef struct _ISP_INIT_ATTR_S {
|
|||||||
SNS_BDG_MUX_MODE_E enSnsBdgMuxMode;
|
SNS_BDG_MUX_MODE_E enSnsBdgMuxMode;
|
||||||
} ISP_INIT_ATTR_S;
|
} ISP_INIT_ATTR_S;
|
||||||
|
|
||||||
typedef struct _ISP_SNS_OBJ_S {
|
typedef struct _ISP_SNS_OBJ_S { /* Sensor callback object struct */
|
||||||
CVI_S32 (*pfnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *, ALG_LIB_S *);
|
CVI_S32 (*pfnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *, ALG_LIB_S *);
|
||||||
CVI_S32 (*pfnUnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *, ALG_LIB_S *);
|
CVI_S32 (*pfnUnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *, ALG_LIB_S *);
|
||||||
CVI_S32 (*pfnSetBusInfo)(VI_PIPE ViPipe, ISP_SNS_COMMBUS_U unSNSBusInfo);
|
CVI_S32 (*pfnSetBusInfo)(VI_PIPE ViPipe, ISP_SNS_COMMBUS_U unSNSBusInfo);
|
||||||
@ -119,6 +119,7 @@ typedef struct _ISP_SNS_OBJ_S {
|
|||||||
extern ISP_SNS_OBJ_S stSnsBG0808_Obj;
|
extern ISP_SNS_OBJ_S stSnsBG0808_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsBF2253L_Obj;
|
extern ISP_SNS_OBJ_S stSnsBF2253L_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsCV2003_Obj;
|
extern ISP_SNS_OBJ_S stSnsCV2003_Obj;
|
||||||
|
extern ISP_SNS_OBJ_S stSnsCV2003_1L_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsCV2003_1L_SLAVE_Obj;
|
extern ISP_SNS_OBJ_S stSnsCV2003_1L_SLAVE_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsCV2003_1L_SLAVE1_Obj;
|
extern ISP_SNS_OBJ_S stSnsCV2003_1L_SLAVE1_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsCV4001_Obj;
|
extern ISP_SNS_OBJ_S stSnsCV4001_Obj;
|
||||||
@ -137,6 +138,7 @@ extern ISP_SNS_OBJ_S stSnsGc2083_Obj;
|
|||||||
extern ISP_SNS_OBJ_S stSnsGc2093_Obj;
|
extern ISP_SNS_OBJ_S stSnsGc2093_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsGc2093_Slave_Obj;
|
extern ISP_SNS_OBJ_S stSnsGc2093_Slave_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsGc2145_Obj;
|
extern ISP_SNS_OBJ_S stSnsGc2145_Obj;
|
||||||
|
extern ISP_SNS_OBJ_S stSnsGc2385_1L_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsGc4023_Obj;
|
extern ISP_SNS_OBJ_S stSnsGc4023_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsGc4653_Obj;
|
extern ISP_SNS_OBJ_S stSnsGc4653_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsGc4653_Slave_Obj;
|
extern ISP_SNS_OBJ_S stSnsGc4653_Slave_Obj;
|
||||||
@ -147,6 +149,7 @@ extern ISP_SNS_OBJ_S stSnsN6_Obj;
|
|||||||
extern ISP_SNS_OBJ_S stSnsOs02d10_Obj;
|
extern ISP_SNS_OBJ_S stSnsOs02d10_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsOs02d10_Slave_Obj;
|
extern ISP_SNS_OBJ_S stSnsOs02d10_Slave_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsOs02k10_Slave_Obj;
|
extern ISP_SNS_OBJ_S stSnsOs02k10_Slave_Obj;
|
||||||
|
extern ISP_SNS_OBJ_S stSnsOs02n10_1l_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsOs04a10_Obj;
|
extern ISP_SNS_OBJ_S stSnsOs04a10_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsOs04c10_Obj;
|
extern ISP_SNS_OBJ_S stSnsOs04c10_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsOs04c10_Slave_Obj;
|
extern ISP_SNS_OBJ_S stSnsOs04c10_Slave_Obj;
|
||||||
@ -224,6 +227,7 @@ extern ISP_SNS_OBJ_S stSnsImx334_Obj;
|
|||||||
extern ISP_SNS_OBJ_S stSnsImx335_Obj;
|
extern ISP_SNS_OBJ_S stSnsImx335_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsImx347_Obj;
|
extern ISP_SNS_OBJ_S stSnsImx347_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsImx385_Obj;
|
extern ISP_SNS_OBJ_S stSnsImx385_Obj;
|
||||||
|
extern ISP_SNS_OBJ_S stSnsImx675_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsTP2850_Obj;
|
extern ISP_SNS_OBJ_S stSnsTP2850_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsTP2825_Obj;
|
extern ISP_SNS_OBJ_S stSnsTP2825_Obj;
|
||||||
extern ISP_SNS_OBJ_S stSnsTP2863_Obj;
|
extern ISP_SNS_OBJ_S stSnsTP2863_Obj;
|
||||||
|
|||||||
@ -579,16 +579,93 @@ CVI_S32 CVI_VI_RegPmCallBack(VI_DEV ViDev, VI_PM_OPS_S *pstPmOps, void *pvData);
|
|||||||
CVI_S32 CVI_VI_UnRegPmCallBack(VI_DEV ViDev);
|
CVI_S32 CVI_VI_UnRegPmCallBack(VI_DEV ViDev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated
|
* @brief Function to trig frame_vld.
|
||||||
|
*
|
||||||
|
* @param ViPipe(In), Pipe ID.
|
||||||
|
* @param u8AHDSignal(In), Is need trig(0/1).
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
*/
|
*/
|
||||||
CVI_S32 CVI_VI_Trig_AHD(VI_PIPE ViPipe, CVI_U8 u8AHDSignal);
|
CVI_S32 CVI_VI_Trig_AHD(VI_PIPE ViPipe, CVI_U8 u8AHDSignal);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set bind dev to pipe.
|
||||||
|
*
|
||||||
|
* @param ViDev(In), Device ID.
|
||||||
|
* @param pstDevBindPipe(In), Bind info.
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_VI_SetDevBindPipe(VI_DEV ViDev, const VI_DEV_BIND_PIPE_S *pstDevBindPipe);
|
CVI_S32 CVI_VI_SetDevBindPipe(VI_DEV ViDev, const VI_DEV_BIND_PIPE_S *pstDevBindPipe);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get bind dev to pipe.
|
||||||
|
*
|
||||||
|
* @param ViDev(In), Device ID.
|
||||||
|
* @param pstDevBindPipe(Out), Bind info.
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_VI_GetDevBindPipe(VI_DEV ViDev, VI_DEV_BIND_PIPE_S *pstDevBindPipe);
|
CVI_S32 CVI_VI_GetDevBindPipe(VI_DEV ViDev, VI_DEV_BIND_PIPE_S *pstDevBindPipe);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set chn info to fish_eye.
|
||||||
|
*
|
||||||
|
* @param ViPipe(In), Pipe ID.
|
||||||
|
* @param ViChn(In), Channel ID.
|
||||||
|
* @param pstFishEyeAttr(In), Fisheye info.
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_VI_SetExtChnFisheye(VI_PIPE ViPipe, VI_CHN ViChn, const FISHEYE_ATTR_S *pstFishEyeAttr);
|
CVI_S32 CVI_VI_SetExtChnFisheye(VI_PIPE ViPipe, VI_CHN ViChn, const FISHEYE_ATTR_S *pstFishEyeAttr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get chn info to fish_eye.
|
||||||
|
*
|
||||||
|
* @param ViPipe(In), Pipe ID.
|
||||||
|
* @param ViChn(In), Channel ID.
|
||||||
|
* @param pstFishEyeAttr(Out), Fisheye info.
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_VI_GetExtChnFisheye(VI_PIPE ViPipe, VI_CHN ViChn, FISHEYE_ATTR_S *pstFishEyeAttr);
|
CVI_S32 CVI_VI_GetExtChnFisheye(VI_PIPE ViPipe, VI_CHN ViChn, FISHEYE_ATTR_S *pstFishEyeAttr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set chn info to ldc or fisheye.
|
||||||
|
*
|
||||||
|
* @param ViPipe(In), Pipe ID.
|
||||||
|
* @param ViChn(In), Channel ID.
|
||||||
|
* @param pstExtChnAttr(In), Ext chn info.
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_VI_SetExtChnAttr(VI_PIPE ViPipe, VI_CHN ViChn, const VI_EXT_CHN_ATTR_S *pstExtChnAttr);
|
CVI_S32 CVI_VI_SetExtChnAttr(VI_PIPE ViPipe, VI_CHN ViChn, const VI_EXT_CHN_ATTR_S *pstExtChnAttr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get chn info to ldc or fisheye.
|
||||||
|
*
|
||||||
|
* @param ViPipe(In), Pipe ID.
|
||||||
|
* @param ViChn(In), Channel ID.
|
||||||
|
* @param pstExtChnAttr(Out), Ext chn info.
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_VI_GetExtChnAttr(VI_PIPE ViPipe, VI_CHN ViChn, VI_EXT_CHN_ATTR_S *pstExtChnAttr);
|
CVI_S32 CVI_VI_GetExtChnAttr(VI_PIPE ViPipe, VI_CHN ViChn, VI_EXT_CHN_ATTR_S *pstExtChnAttr);
|
||||||
// for fpga test
|
|
||||||
|
/**
|
||||||
|
* @brief Next, only one frame of function control is received, used by sleep and wake up the scene.
|
||||||
|
*
|
||||||
|
* @param flag(In), Control for single frame(1/0).
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
|
CVI_S32 CVI_VI_SINGEL_FRAME_ENABLE(bool flag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Single function test, for fpga, customers don't need it.
|
||||||
|
*
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 _CVI_VI_CFG_CTRL_TEST(void);
|
CVI_S32 _CVI_VI_CFG_CTRL_TEST(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@ -5,7 +5,7 @@ endif
|
|||||||
|
|
||||||
.PHONY: all clean $(MODULES)
|
.PHONY: all clean $(MODULES)
|
||||||
|
|
||||||
MODULES = sys bin vpu audio mipi_tx venc vdec misc ive osdc isp
|
MODULES = sys bin vi vo vpss rgn gdc audio mipi_tx venc vdec misc ive isp
|
||||||
|
|
||||||
all:
|
all:
|
||||||
@echo "########################################################################################################"
|
@echo "########################################################################################################"
|
||||||
|
|||||||
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_RES1.a
Normal file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_RES1.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_RES1.so
Executable file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_RES1.so
Executable file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_VoiceEngine.a
Normal file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_VoiceEngine.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_VoiceEngine.so
Executable file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_VoiceEngine.so
Executable file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_audio.a
Normal file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_audio.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_audio.so
Executable file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_audio.so
Executable file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_dnvqe.a
Normal file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_dnvqe.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_dnvqe.so
Executable file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_dnvqe.so
Executable file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_ssp.a
Normal file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_ssp.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_ssp.so
Executable file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_ssp.so
Executable file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_ssp2.a
Normal file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_ssp2.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_ssp2.so
Executable file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_ssp2.so
Executable file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_vqe.a
Normal file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_vqe.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_vqe.so
Executable file
BIN
middleware/v2/modules/audio/cv181x/32bit/libcvi_vqe.so
Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1
middleware/v2/modules/audio/prebuilt/32bit
Symbolic link
1
middleware/v2/modules/audio/prebuilt/32bit
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
lib32
|
||||||
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaaccomm2.a
Normal file
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaaccomm2.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaaccomm2.so
Executable file
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaaccomm2.so
Executable file
Binary file not shown.
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacdec2.a
Normal file
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacdec2.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacdec2.so
Executable file
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacdec2.so
Executable file
Binary file not shown.
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacenc2.a
Normal file
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacenc2.a
Normal file
Binary file not shown.
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacenc2.so
Executable file
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacenc2.so
Executable file
Binary file not shown.
Binary file not shown.
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacsbrdec2.so
Executable file
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacsbrdec2.so
Executable file
Binary file not shown.
Binary file not shown.
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacsbrenc2.so
Executable file
BIN
middleware/v2/modules/audio/prebuilt/lib32/fdk_aac/libaacsbrenc2.so
Executable file
Binary file not shown.
Binary file not shown.
BIN
middleware/v2/modules/audio/prebuilt/lib32/tinyalsa_lib/libtinyalsa.so
Executable file
BIN
middleware/v2/modules/audio/prebuilt/lib32/tinyalsa_lib/libtinyalsa.so
Executable file
Binary file not shown.
@ -19,7 +19,7 @@ $(error UNKNOWN chip architecture - $(CHIP_ARCH))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
SRCS_ASM = $(wildcard $(SDIR)/*.S)
|
SRCS_ASM = $(wildcard $(SDIR)/*.S)
|
||||||
INCS = -I$(MW_INC) -I$(KERNEL_INC) -I$(SYS_INC) -I$(VPU_INC) -I$(ISP_INC) -Iinclude
|
INCS = -I$(MW_INC) -I$(KERNEL_INC) -I$(SYS_INC) -I$(VPSS_INC) -I$(ISP_INC) -Iinclude
|
||||||
INCS += -I$(SYS_INC) -I$(OSS_MODULE_INCLUDE_PATH)/cvi_json-c -I$(ISP_BIN_DIR) -I$(OSS_MODULE_INCLUDE_PATH)/cvi_miniz
|
INCS += -I$(SYS_INC) -I$(OSS_MODULE_INCLUDE_PATH)/cvi_json-c -I$(ISP_BIN_DIR) -I$(OSS_MODULE_INCLUDE_PATH)/cvi_miniz
|
||||||
OBJS = $(SRCS:.c=.o)
|
OBJS = $(SRCS:.c=.o)
|
||||||
OBJS_ASM = $(SRCS_ASM:.S=.o)
|
OBJS_ASM = $(SRCS_ASM:.S=.o)
|
||||||
|
|||||||
54
middleware/v2/modules/gdc/Makefile
Normal file
54
middleware/v2/modules/gdc/Makefile
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
SHELL = /bin/bash
|
||||||
|
ifeq ($(PARAM_FILE), )
|
||||||
|
PARAM_FILE:=../../Makefile.param
|
||||||
|
include $(PARAM_FILE)
|
||||||
|
endif
|
||||||
|
|
||||||
|
SDIR = $(PWD)/src
|
||||||
|
SRCS = $(wildcard $(SDIR)/*.c)
|
||||||
|
ifeq ($(CHIP_ARCH), $(filter $(CHIP_ARCH), CV180X CV181X CV182X MARS PHOBOS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/cvi_gdc.c, $(SRCS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/gdc_mesh.c, $(SRCS))
|
||||||
|
else
|
||||||
|
SRCS := $(filter-out $(SDIR)/cvi_gdc_1822.c, $(SRCS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/gdc_mesh_1822.c, $(SRCS))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CHIP_ARCH), $(filter $(CHIP_ARCH), CV180X PHOBOS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/cvi_vo.c, $(SRCS))
|
||||||
|
endif
|
||||||
|
|
||||||
|
INCS = -I$(MW_INC) -I$(ISP_INC) -I$(SYS_INC) -I$(BIN_INC)\
|
||||||
|
-I$(KERNEL_INC) -I./include -I$(VI_INC) -I$(VPSS_INC) -I$(GDC_INC) -I$(RGN_INC)
|
||||||
|
|
||||||
|
OBJS = $(SRCS:.c=.o)
|
||||||
|
DEPS = $(SRCS:.c=.d)
|
||||||
|
TARGET_A = $(MW_LIB)/libgdc.a
|
||||||
|
TARGET_SO = $(MW_LIB)/libgdc.so
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = $(INCS)
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY : clean all
|
||||||
|
all : $(TARGET_A) $(TARGET_SO)
|
||||||
|
|
||||||
|
$(SDIR)/gdc_mesh_1822.o: $(SDIR)/gdc_mesh_1822.c
|
||||||
|
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -O3 -c $< -o $@
|
||||||
|
@echo [$(notdir $(CC))] $(notdir $@)
|
||||||
|
|
||||||
|
$(SDIR)/%.o: $(SDIR)/%.c
|
||||||
|
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@
|
||||||
|
@echo [$(notdir $(CC))] $(notdir $@)
|
||||||
|
|
||||||
|
$(TARGET_A): $(OBJS)
|
||||||
|
@$(AR) $(ARFLAGS) $(TARGET_A) $(OBJS)
|
||||||
|
@echo -e $(YELLOW)[LINK]$(END)[$(notdir $(AR))] $(notdir $(TARGET_A))
|
||||||
|
|
||||||
|
$(TARGET_SO): $(OBJS)
|
||||||
|
@$(LD) $(LDFLAGS) -o $(TARGET_SO) --start-group $(OBJS) --end-group
|
||||||
|
@echo -e $(GREEN)[LINK]$(END)[$(notdir $(LD))] $(notdir $(TARGET_SO))
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f $(OBJS) $(DEPS) $(TARGET_A) $(TARGET_SO)
|
||||||
|
|
||||||
|
-include $(DEPS)
|
||||||
@ -1496,8 +1496,6 @@ CVI_S32 mesh_gen_ldc(SIZE_S in_size, SIZE_S out_size,
|
|||||||
!rgn_attr->SrcRgnMeshInfoExt) {
|
!rgn_attr->SrcRgnMeshInfoExt) {
|
||||||
free(src_1st_list);
|
free(src_1st_list);
|
||||||
free(src_2nd_list);
|
free(src_2nd_list);
|
||||||
free(cfg);
|
|
||||||
free(rgn_attr);
|
|
||||||
free(cfg->DstRgnMeshInfo);
|
free(cfg->DstRgnMeshInfo);
|
||||||
free(cfg->SrcRgnMeshInfo);
|
free(cfg->SrcRgnMeshInfo);
|
||||||
free(cfg->DstRgnMeshInfoExt);
|
free(cfg->DstRgnMeshInfoExt);
|
||||||
@ -1512,6 +1510,8 @@ CVI_S32 mesh_gen_ldc(SIZE_S in_size, SIZE_S out_size,
|
|||||||
free(rgn_attr->DstRgnMeshInfoExt);
|
free(rgn_attr->DstRgnMeshInfoExt);
|
||||||
free(rgn_attr->SrcRgnMeshInfo);
|
free(rgn_attr->SrcRgnMeshInfo);
|
||||||
free(rgn_attr->SrcRgnMeshInfoExt);
|
free(rgn_attr->SrcRgnMeshInfoExt);
|
||||||
|
free(cfg);
|
||||||
|
free(rgn_attr);
|
||||||
|
|
||||||
CVI_TRACE_GDC(CVI_DBG_ERR, " fail to alloc mesh\n");
|
CVI_TRACE_GDC(CVI_DBG_ERR, " fail to alloc mesh\n");
|
||||||
return CVI_ERR_GDC_NOMEM;
|
return CVI_ERR_GDC_NOMEM;
|
||||||
@ -1701,8 +1701,6 @@ CVI_S32 mesh_gen_ldc(SIZE_S in_size, SIZE_S out_size,
|
|||||||
|
|
||||||
free(src_1st_list);
|
free(src_1st_list);
|
||||||
free(src_2nd_list);
|
free(src_2nd_list);
|
||||||
free(cfg);
|
|
||||||
free(rgn_attr);
|
|
||||||
free(cfg->DstRgnMeshInfo);
|
free(cfg->DstRgnMeshInfo);
|
||||||
free(cfg->SrcRgnMeshInfo);
|
free(cfg->SrcRgnMeshInfo);
|
||||||
free(cfg->DstRgnMeshInfoExt);
|
free(cfg->DstRgnMeshInfoExt);
|
||||||
@ -1717,6 +1715,8 @@ CVI_S32 mesh_gen_ldc(SIZE_S in_size, SIZE_S out_size,
|
|||||||
free(rgn_attr->DstRgnMeshInfoExt);
|
free(rgn_attr->DstRgnMeshInfoExt);
|
||||||
free(rgn_attr->SrcRgnMeshInfo);
|
free(rgn_attr->SrcRgnMeshInfo);
|
||||||
free(rgn_attr->SrcRgnMeshInfoExt);
|
free(rgn_attr->SrcRgnMeshInfoExt);
|
||||||
|
free(cfg);
|
||||||
|
free(rgn_attr);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,9 +21,38 @@ extern __attribute__((weak)) void *__dso_handle;
|
|||||||
#endif
|
#endif
|
||||||
#endif /* End of #ifdef __cplusplus */
|
#endif /* End of #ifdef __cplusplus */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Compare Ive Image.
|
||||||
|
* @param pstImage1 Ive Image1.
|
||||||
|
* @param pstImage2 Ive Image2.
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_IVE_CompareIveImage(IVE_IMAGE_S *pstImage1, IVE_IMAGE_S *pstImage2);
|
CVI_S32 CVI_IVE_CompareIveImage(IVE_IMAGE_S *pstImage1, IVE_IMAGE_S *pstImage2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Compare Ive Memrory.
|
||||||
|
* @param pstMem1 Ive Memrory1.
|
||||||
|
* @param pstMem2 Ive Memrory2.
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_IVE_CompareIveMem(IVE_MEM_INFO_S *pstMem1, IVE_MEM_INFO_S *pstMem2);
|
CVI_S32 CVI_IVE_CompareIveMem(IVE_MEM_INFO_S *pstMem1, IVE_MEM_INFO_S *pstMem2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Compare Ive Data.
|
||||||
|
* @param pstData1 Ive Data1.
|
||||||
|
* @param pstData2 Ive Data2.
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_IVE_CompareIveData(IVE_DATA_S *pstData1, IVE_DATA_S *pstData2);
|
CVI_S32 CVI_IVE_CompareIveData(IVE_DATA_S *pstData1, IVE_DATA_S *pstData2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Compare Ive SAD Image.
|
||||||
|
* @param pstImage1 Ive Image1.
|
||||||
|
* @param pstImage2 Ive Image1.
|
||||||
|
* @param mode SAD case out mode.
|
||||||
|
* @param isDMAhalf DMAhalf flag.
|
||||||
|
* @return CVI_S32 Return CVI_SUCCESS if succeed.
|
||||||
|
*/
|
||||||
CVI_S32 CVI_IVE_CompareSADImage(IVE_IMAGE_S *pstImage1, IVE_IMAGE_S *pstImage2,
|
CVI_S32 CVI_IVE_CompareSADImage(IVE_IMAGE_S *pstImage1, IVE_IMAGE_S *pstImage2,
|
||||||
IVE_SAD_MODE_E mode, CVI_BOOL isDMAhalf);
|
IVE_SAD_MODE_E mode, CVI_BOOL isDMAhalf);
|
||||||
|
|
||||||
@ -778,20 +807,6 @@ CVI_S32 CVI_IVE_OrdStatFilter(IVE_HANDLE pIveHandle, IVE_SRC_IMAGE_S *pstSrc,
|
|||||||
IVE_ORD_STAT_FILTER_CTRL_S *pstCtrl,
|
IVE_ORD_STAT_FILTER_CTRL_S *pstCtrl,
|
||||||
CVI_BOOL bInstant);
|
CVI_BOOL bInstant);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief CannyEdge one input image and output the result.
|
|
||||||
*
|
|
||||||
* @param pIveHandle Ive instance handler.
|
|
||||||
* @param pstSrc Input image.
|
|
||||||
* @param pstEdge Output result.
|
|
||||||
* @param pstCtrl CannyHysEdge parameter
|
|
||||||
* @param bInstant Dummy variable.
|
|
||||||
* @return CVI_S32 CVI_S32 Return CVI_SUCCESS if succeed.
|
|
||||||
*/
|
|
||||||
//CVI_S32 CVI_IVE_CannyEdge(IVE_HANDLE pIveHandle, IVE_SRC_IMAGE_S *pstSrc,
|
|
||||||
// IVE_DST_IMAGE_S *pstEdge,
|
|
||||||
// IVE_CANNY_HYS_EDGE_CTRL_S *pstCtrl, CVI_BOOL bInstant);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CannyEdge one input image and output the result.
|
* @brief CannyEdge one input image and output the result.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,65 +0,0 @@
|
|||||||
SHELL = /bin/bash
|
|
||||||
ifeq ($(PARAM_FILE), )
|
|
||||||
PARAM_FILE:=../../Makefile.param
|
|
||||||
include $(PARAM_FILE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
SDIR = $(PWD)/src
|
|
||||||
CSRCS := $(wildcard $(SDIR)/*.c)
|
|
||||||
COBJS = $(CSRCS:.c=.o)
|
|
||||||
CDEPS = $(CSRCS:.c=.d)
|
|
||||||
CXXSRCS := $(wildcard $(SDIR)/*.cpp)
|
|
||||||
CXXOBJS = $(CXXSRCS:.cpp=.o)
|
|
||||||
CXXDEPS = $(CXXSRCS:.cpp=.d)
|
|
||||||
|
|
||||||
TARGET_A = $(MW_LIB)/libosdc.a
|
|
||||||
TARGET_SO = $(MW_LIB)/libosdc.so
|
|
||||||
|
|
||||||
INCS = -I$(MW_INC) -I$(KERNEL_INC) -I$(OSDC_INC)
|
|
||||||
|
|
||||||
EXTRA_CFLAGS = $(INCS) -fpack-struct=8
|
|
||||||
EXTRA_CFLAGS += -DMMF_VERSION=\"$(shell git describe --always)\"
|
|
||||||
EXTRA_CFLAGS += -DSDK_VER=\"$(SDK_VER)\"
|
|
||||||
ifeq ($(SDK_VER), 32bit)
|
|
||||||
EXTRA_CFLAGS += -D_FILE_OFFSET_BITS=64
|
|
||||||
|
|
||||||
endif
|
|
||||||
EXTRA_CXXFLAGS = $(INCS) -fpack-struct=8
|
|
||||||
EXTRA_CXXFLAGS += -DMMF_VERSION=\"$(shell git describe --always)\"
|
|
||||||
EXTRA_CXXFLAGS += -DSDK_VER=\"$(SDK_VER)\"
|
|
||||||
ifeq ($(SDK_VER), 32bit)
|
|
||||||
EXTRA_CXXFLAGS += -D_FILE_OFFSET_BITS=64
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY : clean all
|
|
||||||
all : prepare $(TARGET_A) $(TARGET_SO)
|
|
||||||
|
|
||||||
prepare:
|
|
||||||
cp include/cmpr_canvas.h $(MW_INC)
|
|
||||||
cp include/cvi_osdc.h $(MW_INC)
|
|
||||||
cp include/osd_cmpr.h $(MW_INC)
|
|
||||||
|
|
||||||
$(SDIR)/%.o: $(SDIR)/%.c
|
|
||||||
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
|
|
||||||
@echo [$(notdir $(CC))] $(notdir $@)
|
|
||||||
|
|
||||||
$(SDIR)/%.o: $(SDIR)/%.cpp
|
|
||||||
@$(CXX) $(DEPFLAGS) $(CXXFLAGS) $(EXTRA_CXXFLAGS) -o $@ -c $<
|
|
||||||
@echo [$(notdir $(CC))] $(notdir $@)
|
|
||||||
|
|
||||||
$(TARGET_A): $(COBJS) $(CXXOBJS)
|
|
||||||
@$(AR) $(ARFLAGS) $(TARGET_A) $(COBJS) $(CXXOBJS)
|
|
||||||
@echo -e $(YELLOW)[LINK]$(END)[$(notdir $(AR))] $(notdir $(TARGET_A))
|
|
||||||
@echo "$$AR_MRI" | $(AR) -M
|
|
||||||
|
|
||||||
$(TARGET_SO): $(OBJS) $(CXXOBJS)
|
|
||||||
@$(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) -o $(TARGET_SO) --start-group $(COBJS) $(CXXOBJS) $(LIBS) --end-group
|
|
||||||
@echo -e $(GREEN)[LINK]$(END)[$(notdir $(LD))] $(notdir $(TARGET_SO))
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@rm -f $(COBJS) $(CXXOBJS) $(CDEPS) $(CXXDEPS) $(TARGET_A) $(TARGET_SO)
|
|
||||||
@rm -f $(MW_INC)/cmpr_canvas.h
|
|
||||||
@rm -f $(MW_INC)/cvi_osdc.h
|
|
||||||
@rm -f $(MW_INC)/osd_cmpr.h
|
|
||||||
|
|
||||||
-include $(DEPS)
|
|
||||||
@ -1,164 +0,0 @@
|
|||||||
#ifndef __CMPR_CANVAS__
|
|
||||||
#define __CMPR_CANVAS__
|
|
||||||
|
|
||||||
#include <float.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include "osd_cmpr.h"
|
|
||||||
|
|
||||||
#define BUF_GUARD_SIZE (1 << 12)
|
|
||||||
#define OSDEC_RL_BD (6)
|
|
||||||
#define OSDEC_PAL_BD (3)
|
|
||||||
#define OSDEC_MAX_RL (1 << OSDEC_RL_BD)
|
|
||||||
|
|
||||||
#define MIN_THICKNESS (1)
|
|
||||||
#define MAX_THICKNESS (32)
|
|
||||||
|
|
||||||
#define BG_COLOR_CODE (2)
|
|
||||||
#define CMPR_CANVAS_DBG (0)
|
|
||||||
|
|
||||||
enum DRAW_OBJ_TYPE {
|
|
||||||
RECT = 0,
|
|
||||||
STROKE_RECT,
|
|
||||||
BIT_MAP,
|
|
||||||
LINE,
|
|
||||||
CMPR_BIT_MAP,
|
|
||||||
NUM_OF_DRAW_OBJ
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
OSD_FORMAT format;
|
|
||||||
uint32_t bg_color_code;
|
|
||||||
} Canvas_Attr;
|
|
||||||
|
|
||||||
typedef union _COLOR {
|
|
||||||
uint32_t code;
|
|
||||||
uint8_t *buf;
|
|
||||||
} COLOR;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int x0; // start position
|
|
||||||
int x1; // end position
|
|
||||||
uint16_t obj_id;
|
|
||||||
} OBJ_SLICE;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
bool is_const;
|
|
||||||
bool is_cmpr;
|
|
||||||
uint16_t width;
|
|
||||||
union {
|
|
||||||
uint32_t stride;
|
|
||||||
uint16_t *bs_len;
|
|
||||||
};
|
|
||||||
COLOR color;
|
|
||||||
uint16_t id;
|
|
||||||
} SEGMENT;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
int thickness;
|
|
||||||
} RECT_ATTR;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
RECT_ATTR rect;
|
|
||||||
union {
|
|
||||||
uint32_t stride;
|
|
||||||
uint32_t bs_offset;
|
|
||||||
};
|
|
||||||
} BITMAP_ATTR;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
float _mx; // slope of two end-point vector
|
|
||||||
float _bx[2];
|
|
||||||
float _by[2];
|
|
||||||
float _ex[2];
|
|
||||||
float _ey[2];
|
|
||||||
float ts_h; // thickness proj. on horizontal slice
|
|
||||||
} LINE_ATTR;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
DRAW_OBJ_TYPE type;
|
|
||||||
union {
|
|
||||||
RECT_ATTR rect;
|
|
||||||
LINE_ATTR line;
|
|
||||||
BITMAP_ATTR bitmap;
|
|
||||||
};
|
|
||||||
COLOR color;
|
|
||||||
int _max_y;
|
|
||||||
int _min_y;
|
|
||||||
} DRAW_OBJ;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
OSDCmpr_Ctrl osdCmpr_ctrl;
|
|
||||||
StreamBuffer bitstream;
|
|
||||||
RGBA last_color;
|
|
||||||
int rl_cnt;
|
|
||||||
MODE_TYPE md;
|
|
||||||
CODE code;
|
|
||||||
} Cmpr_Canvas_Ctrl;
|
|
||||||
|
|
||||||
uint32_t est_cmpr_canvas_size(Canvas_Attr *canvas, DRAW_OBJ *objs, uint32_t obj_num);
|
|
||||||
|
|
||||||
int draw_cmpr_canvas(Canvas_Attr *canvas, DRAW_OBJ *objs, uint32_t obj_num,
|
|
||||||
uint8_t *obuf, int buf_size, uint32_t *p_osize);
|
|
||||||
|
|
||||||
void set_rect_obj_attr(DRAW_OBJ *obj, Canvas_Attr *canvas, uint32_t color_code,
|
|
||||||
int pt_x, int pt_y, int width, int height,
|
|
||||||
bool is_filled, int thickness);
|
|
||||||
void set_bitmap_obj_attr(DRAW_OBJ *obj_attr, Canvas_Attr *canvas, uint8_t *buf,
|
|
||||||
int pt_x, int pt_y, int width, int height,
|
|
||||||
bool is_cmpr);
|
|
||||||
void set_line_obj_attr(DRAW_OBJ *obj, Canvas_Attr *canvas, uint32_t color_code,
|
|
||||||
int pt_x0, int pt_y0, int pt_x1, int pt_y1,
|
|
||||||
int thickness);
|
|
||||||
int cmpr_bitmap(Canvas_Attr *canvas, uint8_t *ibuf, uint8_t *obuf, int width,
|
|
||||||
int height, int buf_size, uint32_t *p_osize);
|
|
||||||
|
|
||||||
#if (CMPR_CANVAS_DBG)
|
|
||||||
int draw_canvas_raw_buffer(Canvas_Attr &canvas, vector<DRAW_OBJ> obj_vec,
|
|
||||||
uint8_t *obuf);
|
|
||||||
int draw_canvas_raw_buffer2(Canvas_Attr &canvas, vector<DRAW_OBJ> obj_vec,
|
|
||||||
uint8_t *obuf);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//==============================================================================================
|
|
||||||
//CVI interface
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint32_t CVI_OSDC_est_cmpr_canvas_size(Canvas_Attr *canvas, DRAW_OBJ *objs, uint32_t obj_num);
|
|
||||||
|
|
||||||
int CVI_OSDC_draw_cmpr_canvas(Canvas_Attr *canvas, DRAW_OBJ *objs, uint32_t obj_num,
|
|
||||||
uint8_t *obuf, uint32_t buf_size, uint32_t *p_osize);
|
|
||||||
|
|
||||||
void CVI_OSDC_set_rect_obj_attr(Canvas_Attr *canvas, DRAW_OBJ *obj, uint32_t color_code,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_filled, int thickness);
|
|
||||||
|
|
||||||
void CVI_OSDC_set_bitmap_obj_attr(Canvas_Attr *canvas, DRAW_OBJ *obj_attr, uint8_t *buf,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_cmpr);
|
|
||||||
|
|
||||||
void CVI_OSDC_set_line_obj_attr(Canvas_Attr *canvas, DRAW_OBJ *obj, uint32_t color_code,
|
|
||||||
int pt_x0, int pt_y0, int pt_x1, int pt_y1, int thickness);
|
|
||||||
|
|
||||||
int CVI_OSDC_cmpr_bitmap(Canvas_Attr *canvas, uint8_t *ibuf, uint8_t *obuf, int width, int height,
|
|
||||||
int buf_size, uint32_t *p_osize);
|
|
||||||
|
|
||||||
#if (CMPR_CANVAS_DBG)
|
|
||||||
int CVI_OSDC_draw_canvas_raw_buffer(Canvas_Attr &canvas, vector<DRAW_OBJ> obj_vec, uint8_t *obuf);
|
|
||||||
int CVI_OSDC_draw_canvas_raw_buffer2(Canvas_Attr &canvas, vector<DRAW_OBJ> obj_vec, uint8_t *obuf);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __CMPR_CANVAS__ */
|
|
||||||
@ -1,62 +0,0 @@
|
|||||||
#ifndef __CVI_OSDC_H__
|
|
||||||
#define __CVI_OSDC_H__
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <cvi_comm_osdc.h>
|
|
||||||
|
|
||||||
uint32_t CVI_OSDC_EstCmprCanvasSize(OSDC_Canvas_Attr_S * canvas, OSDC_DRAW_OBJ_S * objs, uint32_t obj_num);
|
|
||||||
|
|
||||||
int CVI_OSDC_DrawCmprCanvas(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *objs, uint32_t obj_num,
|
|
||||||
uint8_t *obuf, uint32_t buf_size, uint32_t *p_osize);
|
|
||||||
|
|
||||||
void CVI_OSDC_SetRectObjAttr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_filled, int thickness);
|
|
||||||
|
|
||||||
void CVI_OSDC_SetRectObjAttrEx(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
OSDC_RECT_ATTR_S *rects, int num, bool is_filled);
|
|
||||||
|
|
||||||
void CVI_OSDC_SetBitmapObjAttr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj_attr, uint8_t *buf,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_cmpr);
|
|
||||||
|
|
||||||
void CVI_OSDC_SetLineObjAttr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
int pt_x0, int pt_y0, int pt_x1, int pt_y1, int thickness);
|
|
||||||
|
|
||||||
void CVI_OSDC_SetLineObjAttrEx(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
OSDC_POINT_ATTR_S *points, int num, int thickness);
|
|
||||||
|
|
||||||
int CVI_OSDC_CmprBitmap(OSDC_Canvas_Attr_S *canvas, uint8_t *ibuf, uint8_t *obuf, int width, int height,
|
|
||||||
int buf_size, uint32_t *p_osize);
|
|
||||||
|
|
||||||
extern uint32_t CVI_OSDC_est_cmpr_canvas_size(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *objs, uint32_t obj_num);
|
|
||||||
|
|
||||||
extern int CVI_OSDC_draw_cmpr_canvas(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *objs, uint32_t obj_num,
|
|
||||||
uint8_t *obuf, uint32_t buf_size, uint32_t *p_osize);
|
|
||||||
|
|
||||||
extern void CVI_OSDC_set_rect_obj_attr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_filled, int thickness);
|
|
||||||
|
|
||||||
extern void CVI_OSDC_set_bitmap_obj_attr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj_attr, uint8_t *buf,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_cmpr);
|
|
||||||
|
|
||||||
extern void CVI_OSDC_set_line_obj_attr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
int pt_x0, int pt_y0, int pt_x1, int pt_y1, int thickness);
|
|
||||||
|
|
||||||
extern int CVI_OSDC_cmpr_bitmap(OSDC_Canvas_Attr_S *canvas, uint8_t *ibuf, uint8_t *obuf, int width, int height,
|
|
||||||
int buf_size, uint32_t *p_osize);
|
|
||||||
#if (CMPR_CANVAS_DBG)
|
|
||||||
int CVI_OSDC_draw_canvas_raw_buffer(OSDC_Canvas_Attr_S &canvas, vector<DRAW_OBJ> obj_vec, uint8_t *obuf);
|
|
||||||
int CVI_OSDC_draw_canvas_raw_buffer2(OSDC_Canvas_Attr_S &canvas, vector<DRAW_OBJ> obj_vec, uint8_t *obuf);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*__CVI_OSDC_H__ */
|
|
||||||
@ -1,140 +0,0 @@
|
|||||||
#ifndef __OSD_CMPR_H__
|
|
||||||
#define __OSD_CMPR_H__
|
|
||||||
#include <cstdlib>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <vector>
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
// DataType-free color field copy
|
|
||||||
#define CPY_C(in, out) \
|
|
||||||
{ \
|
|
||||||
out.r = in.r; \
|
|
||||||
out.g = in.g; \
|
|
||||||
out.b = in.b; \
|
|
||||||
out.a = in.a; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define HDR_SZ (8)
|
|
||||||
|
|
||||||
enum OSD_FORMAT {
|
|
||||||
OSD_ARGB8888 = 0,
|
|
||||||
OSD_ARGB4444 = 4,
|
|
||||||
OSD_ARGB1555 = 5,
|
|
||||||
OSD_LUT8 = 8,
|
|
||||||
OSD_LUT4 = 10,
|
|
||||||
NUM_OF_FORMAT
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int img_width;
|
|
||||||
int img_height;
|
|
||||||
bool palette_mode_en;
|
|
||||||
bool zeroize_by_alpha;
|
|
||||||
int rgb_trunc_bit;
|
|
||||||
int alpha_trunc_bit;
|
|
||||||
int run_len_bd;
|
|
||||||
int palette_idx_bd;
|
|
||||||
OSD_FORMAT osd_format;
|
|
||||||
bool hdr_en;
|
|
||||||
} OSDCmpr_Cfg;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t *stream; // stream buffer pointer
|
|
||||||
int bit_pos; // current pointer (in bit)
|
|
||||||
int buf_size; // in byte
|
|
||||||
int status;
|
|
||||||
} StreamBuffer;
|
|
||||||
|
|
||||||
void init_stream(StreamBuffer *bs, const uint8_t *buf, int buf_size,
|
|
||||||
bool read_only);
|
|
||||||
void write_stream(StreamBuffer *bs, uint8_t *src, int bit_len);
|
|
||||||
void parse_stream(StreamBuffer *bs, uint8_t *dest, int bit_len, bool read_only);
|
|
||||||
void move_stream_ptr(StreamBuffer *bs, int bit_len);
|
|
||||||
|
|
||||||
uint8_t get_bit_val(uint8_t *buf, int byte_idx, int bit_idx);
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
struct {
|
|
||||||
uint8_t g;
|
|
||||||
uint8_t b;
|
|
||||||
uint8_t r;
|
|
||||||
uint8_t a;
|
|
||||||
};
|
|
||||||
uint32_t code;
|
|
||||||
} RGBA;
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
struct {
|
|
||||||
uint16_t g : 4;
|
|
||||||
uint16_t b : 4;
|
|
||||||
uint16_t r : 4;
|
|
||||||
uint16_t a : 4;
|
|
||||||
};
|
|
||||||
uint16_t code;
|
|
||||||
} ARGB4444;
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
struct {
|
|
||||||
uint16_t g : 5;
|
|
||||||
uint16_t b : 5;
|
|
||||||
uint16_t r : 5;
|
|
||||||
uint16_t a : 1;
|
|
||||||
};
|
|
||||||
uint16_t code;
|
|
||||||
} ARGB1555;
|
|
||||||
|
|
||||||
union CODE {
|
|
||||||
RGBA color;
|
|
||||||
int palette_idx;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum MODE_TYPE { Literal = 0, Palette, Literal_RL, Palette_RL, NUM_OF_MODE };
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int reg_image_width;
|
|
||||||
int reg_image_height;
|
|
||||||
bool reg_zeroize_by_alpha;
|
|
||||||
int reg_rgb_trunc_bit;
|
|
||||||
int reg_alpha_trunc_bit;
|
|
||||||
bool reg_palette_mode_en;
|
|
||||||
int reg_run_len_bd;
|
|
||||||
int reg_palette_idx_bd;
|
|
||||||
OSD_FORMAT reg_osd_format;
|
|
||||||
int pel_sz;
|
|
||||||
vector<RGBA> palette_cache;
|
|
||||||
int bs_buf_size;
|
|
||||||
uint8_t *bsbuf; // intermediate bitstream buffer
|
|
||||||
} OSDCmpr_Ctrl;
|
|
||||||
|
|
||||||
RGBA get_color(uint8_t *ptr, OSD_FORMAT format = OSD_ARGB8888);
|
|
||||||
void set_color(uint8_t *ptr, RGBA color, OSD_FORMAT format = OSD_ARGB8888);
|
|
||||||
|
|
||||||
void osd_cmpr_frame_init(OSDCmpr_Ctrl *p_ctrl);
|
|
||||||
int osd_cmpr_enc_one_frame(uint8_t *ibuf, uint8_t *obs, OSDCmpr_Ctrl *p_ctrl);
|
|
||||||
void osd_cmpr_dec_one_frame(uint8_t *bsbuf, size_t bs_size, uint8_t *obuf,
|
|
||||||
OSDCmpr_Ctrl *p_ctrl);
|
|
||||||
void osd_cmpr_enc_header(uint8_t *hdrbuf, OSDCmpr_Ctrl *p_ctrl);
|
|
||||||
void osd_cmpr_dec_header(uint8_t *hdrbuf, OSDCmpr_Ctrl *p_ctrl);
|
|
||||||
|
|
||||||
void osd_cmpr_setup(OSDCmpr_Ctrl *p_ctrl, OSDCmpr_Cfg *p_cfg);
|
|
||||||
void osd_cmpr_enc_const_pixel(RGBA cur_c, RGBA &last_c, int &rl_cnt,
|
|
||||||
MODE_TYPE &md, CODE &code, int &length,
|
|
||||||
bool is_force_new_run, int max_run_len,
|
|
||||||
OSDCmpr_Ctrl *p_ctrl, StreamBuffer *bitstream);
|
|
||||||
void osd_cmpr_enc_followed_run(RGBA cur_c, int &rl_cnt, MODE_TYPE &md,
|
|
||||||
CODE &code, int &length, int max_run_len,
|
|
||||||
OSDCmpr_Ctrl *p_ctrl, StreamBuffer *bitstream);
|
|
||||||
|
|
||||||
size_t osd_cmpr_get_pixel_sz(OSD_FORMAT format);
|
|
||||||
size_t osd_cmpr_get_bs_buf_max_sz(int pel_num, int pel_sz);
|
|
||||||
size_t osd_cmpr_get_header_sz(void);
|
|
||||||
|
|
||||||
void osd_cmpr_debug_frame_compare(OSDCmpr_Ctrl *p_ctrl, uint8_t *buf0,
|
|
||||||
uint8_t *buf1);
|
|
||||||
|
|
||||||
void palette_cache_init(vector<RGBA> &cache);
|
|
||||||
int palette_cache_lookup_color(vector<RGBA> &cache, RGBA color);
|
|
||||||
void palette_cache_lru_update(vector<RGBA> &cache, int index);
|
|
||||||
void palette_cache_push_color(vector<RGBA> &cache, RGBA color);
|
|
||||||
#endif /* __OSD_CMPR_H__ */
|
|
||||||
@ -1,740 +0,0 @@
|
|||||||
#include "cmpr_canvas.h"
|
|
||||||
|
|
||||||
static bool is_in_range(int x, int begin, int end)
|
|
||||||
{
|
|
||||||
return (x >= begin && x < end);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T> T clip(const T &n, const T &lower, const T &upper)
|
|
||||||
{
|
|
||||||
return std::max(lower, std::min(n, upper));
|
|
||||||
}
|
|
||||||
|
|
||||||
int count_repeat_pixel(uint8_t *src, int pixel_sz, int pixel_num)
|
|
||||||
{
|
|
||||||
int num = pixel_num - 1;
|
|
||||||
for (int byte_i = 0; byte_i < pixel_sz; byte_i++) {
|
|
||||||
uint8_t ref = src[byte_i];
|
|
||||||
uint8_t *cur_ptr = &src[byte_i + pixel_sz];
|
|
||||||
for (int cnt = 0; cnt < num; cnt++) {
|
|
||||||
if (ref != (*cur_ptr)) {
|
|
||||||
num = cnt;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
cur_ptr += pixel_sz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return num + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int recycle_obj_slices(vector<OBJ_SLICE> &slice_vec, int end_idx, int x)
|
|
||||||
{
|
|
||||||
auto it = slice_vec.begin();
|
|
||||||
int recycle_cnt = 0;
|
|
||||||
for (int chk_cnt = 0; chk_cnt <= end_idx; chk_cnt++) {
|
|
||||||
if (x >= (*it).x1) {
|
|
||||||
it = slice_vec.erase(it);
|
|
||||||
recycle_cnt++;
|
|
||||||
} else {
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return recycle_cnt;
|
|
||||||
}
|
|
||||||
|
|
||||||
void recycle_draw_obj(vector<DRAW_OBJ> &obj_vec, int y)
|
|
||||||
{
|
|
||||||
for (auto it = obj_vec.begin(); it != obj_vec.end();) {
|
|
||||||
if (y > (*it)._max_y) {
|
|
||||||
it = obj_vec.erase(it);
|
|
||||||
} else {
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int obj_project_on_line(vector<DRAW_OBJ> &obj_vec, vector<OBJ_SLICE> &slice_vec,
|
|
||||||
int y, int &next_y, int canvas_width)
|
|
||||||
{
|
|
||||||
for (int obj_i = 0; obj_i < (int)obj_vec.size(); obj_i++) {
|
|
||||||
DRAW_OBJ &obj_attr = obj_vec[obj_i];
|
|
||||||
if (is_in_range(y, obj_attr._min_y, obj_attr._max_y) == false) {
|
|
||||||
next_y = min(next_y, max(obj_attr._min_y, y + 1));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (obj_attr.type == RECT) {
|
|
||||||
OBJ_SLICE slice;
|
|
||||||
slice.x0 = obj_attr.rect.x;
|
|
||||||
slice.x1 = obj_attr.rect.x + obj_attr.rect.width;
|
|
||||||
slice.obj_id = obj_i;
|
|
||||||
slice_vec.push_back(slice);
|
|
||||||
next_y = min(next_y, obj_attr._max_y);
|
|
||||||
} else if (obj_attr.type == BIT_MAP ||
|
|
||||||
obj_attr.type == CMPR_BIT_MAP) {
|
|
||||||
OBJ_SLICE slice;
|
|
||||||
slice.x0 = obj_attr.bitmap.rect.x;
|
|
||||||
slice.x1 = obj_attr.bitmap.rect.x +
|
|
||||||
obj_attr.bitmap.rect.width;
|
|
||||||
slice.obj_id = obj_i;
|
|
||||||
next_y = min(next_y, obj_attr._max_y);
|
|
||||||
slice_vec.push_back(slice);
|
|
||||||
} else if (obj_attr.type == STROKE_RECT) {
|
|
||||||
int y1 = obj_attr.rect.y + obj_attr.rect.thickness;
|
|
||||||
int y2 = obj_attr.rect.y + obj_attr.rect.height -
|
|
||||||
obj_attr.rect.thickness;
|
|
||||||
if (is_in_range(y, y1, y2)) {
|
|
||||||
OBJ_SLICE slice0, slice1;
|
|
||||||
slice0.x0 = obj_attr.rect.x;
|
|
||||||
slice0.x1 = obj_attr.rect.x +
|
|
||||||
obj_attr.rect.thickness;
|
|
||||||
slice1.x1 =
|
|
||||||
obj_attr.rect.x + obj_attr.rect.width;
|
|
||||||
slice1.x0 = slice1.x1 - obj_attr.rect.thickness;
|
|
||||||
slice0.obj_id = obj_i;
|
|
||||||
slice1.obj_id = obj_i;
|
|
||||||
slice_vec.push_back(slice0);
|
|
||||||
slice_vec.push_back(slice1);
|
|
||||||
next_y = min(next_y, y2);
|
|
||||||
} else {
|
|
||||||
OBJ_SLICE slice;
|
|
||||||
slice.x0 = obj_attr.rect.x;
|
|
||||||
slice.x1 =
|
|
||||||
obj_attr.rect.x + obj_attr.rect.width;
|
|
||||||
slice.obj_id = obj_i;
|
|
||||||
slice_vec.push_back(slice);
|
|
||||||
next_y = min(
|
|
||||||
next_y,
|
|
||||||
(y > y1) ?
|
|
||||||
obj_attr.rect.y +
|
|
||||||
obj_attr.rect.height :
|
|
||||||
y1);
|
|
||||||
}
|
|
||||||
} else if (obj_attr.type == LINE) {
|
|
||||||
float pt_x0, pt_x1;
|
|
||||||
if (is_in_range(y, round(obj_attr.line._by[0]),
|
|
||||||
round(obj_attr.line._by[1]))) {
|
|
||||||
float delta_x0 = obj_attr.line._mx *
|
|
||||||
(y - obj_attr.line._by[0]);
|
|
||||||
pt_x0 = obj_attr.line._bx[0] + delta_x0;
|
|
||||||
float width = (y - obj_attr.line._by[0]) *
|
|
||||||
(obj_attr.line.ts_h /
|
|
||||||
(obj_attr.line._by[1] -
|
|
||||||
obj_attr.line._by[0]));
|
|
||||||
pt_x1 = pt_x0 - width;
|
|
||||||
} else if (is_in_range(
|
|
||||||
y, round(obj_attr.line._by[1]),
|
|
||||||
round(obj_attr.line._ey[0] + 1.))) {
|
|
||||||
float delta_x0 = obj_attr.line._mx *
|
|
||||||
(y - obj_attr.line._by[0]);
|
|
||||||
pt_x0 = obj_attr.line._bx[0] + delta_x0;
|
|
||||||
pt_x1 = pt_x0 - obj_attr.line.ts_h;
|
|
||||||
} else {
|
|
||||||
float delta_x0 = obj_attr.line._mx *
|
|
||||||
(y - obj_attr.line._by[1]);
|
|
||||||
pt_x0 = obj_attr.line._bx[1] + delta_x0;
|
|
||||||
float width = (obj_attr.line._ey[1] - y) *
|
|
||||||
(obj_attr.line.ts_h /
|
|
||||||
(obj_attr.line._ey[1] -
|
|
||||||
obj_attr.line._ey[0]));
|
|
||||||
pt_x1 = pt_x0 + width;
|
|
||||||
}
|
|
||||||
OBJ_SLICE slice;
|
|
||||||
slice.x0 = clip((int)round(min(pt_x0, pt_x1)), 0, canvas_width-1);
|
|
||||||
slice.x1 = clip((int)round(max(pt_x0, pt_x1)), 0, canvas_width-1);
|
|
||||||
slice.obj_id = obj_i;
|
|
||||||
slice_vec.push_back(slice);
|
|
||||||
next_y = y + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return slice_vec.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
void draw_cmpr_init(Cmpr_Canvas_Ctrl &ctrl, uint8_t *obuf, int buf_size,
|
|
||||||
Canvas_Attr *canvas)
|
|
||||||
{
|
|
||||||
bool trial_enc = (obuf == nullptr) || (buf_size == 0);
|
|
||||||
OSDCmpr_Ctrl *osdCmpr_ctrl = &ctrl.osdCmpr_ctrl;
|
|
||||||
//memset(osdCmpr_ctrl, 0, sizeof(OSDCmpr_Ctrl));
|
|
||||||
*osdCmpr_ctrl = {};
|
|
||||||
osdCmpr_ctrl->reg_image_width = canvas->width;
|
|
||||||
osdCmpr_ctrl->reg_image_height = canvas->height;
|
|
||||||
osdCmpr_ctrl->reg_palette_mode_en = OSDEC_PAL_BD > 0;
|
|
||||||
osdCmpr_ctrl->reg_palette_idx_bd = OSDEC_PAL_BD;
|
|
||||||
osdCmpr_ctrl->reg_run_len_bd = OSDEC_RL_BD;
|
|
||||||
osdCmpr_ctrl->reg_osd_format = canvas->format;
|
|
||||||
osdCmpr_ctrl->pel_sz = osd_cmpr_get_pixel_sz(canvas->format);
|
|
||||||
osd_cmpr_frame_init(&ctrl.osdCmpr_ctrl);
|
|
||||||
int hdr_sz;
|
|
||||||
if (trial_enc) {
|
|
||||||
buf_size = 0;
|
|
||||||
hdr_sz = 0;
|
|
||||||
} else {
|
|
||||||
osd_cmpr_enc_header(obuf, osdCmpr_ctrl);
|
|
||||||
hdr_sz = osd_cmpr_get_header_sz();
|
|
||||||
}
|
|
||||||
init_stream(&ctrl.bitstream, &obuf[hdr_sz], buf_size - hdr_sz,
|
|
||||||
trial_enc);
|
|
||||||
ctrl.md = NUM_OF_MODE; // must be invalid type to bypass the first run
|
|
||||||
ctrl.rl_cnt = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void draw_cmpr_finish(Cmpr_Canvas_Ctrl &ctrl)
|
|
||||||
{
|
|
||||||
int dummy = 0;
|
|
||||||
RGBA dummy_c;
|
|
||||||
osd_cmpr_enc_const_pixel(dummy_c, ctrl.last_color, ctrl.rl_cnt, ctrl.md,
|
|
||||||
ctrl.code, dummy, true, OSDEC_MAX_RL,
|
|
||||||
&ctrl.osdCmpr_ctrl, &ctrl.bitstream);
|
|
||||||
}
|
|
||||||
|
|
||||||
void draw_cmpr_pixel(uint8_t *color_code_ptr, int length, bool is_first_pel,
|
|
||||||
Cmpr_Canvas_Ctrl &ctrl)
|
|
||||||
{
|
|
||||||
RGBA cur_c =
|
|
||||||
get_color(color_code_ptr, ctrl.osdCmpr_ctrl.reg_osd_format);
|
|
||||||
osd_cmpr_enc_const_pixel(cur_c, ctrl.last_color, ctrl.rl_cnt, ctrl.md,
|
|
||||||
ctrl.code, length, is_first_pel, OSDEC_MAX_RL,
|
|
||||||
&ctrl.osdCmpr_ctrl, &ctrl.bitstream);
|
|
||||||
while (length > 0) {
|
|
||||||
osd_cmpr_enc_followed_run(cur_c, ctrl.rl_cnt, ctrl.md,
|
|
||||||
ctrl.code, length, OSDEC_MAX_RL,
|
|
||||||
&ctrl.osdCmpr_ctrl, &ctrl.bitstream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void draw_cmpr_canvas_line(Cmpr_Canvas_Ctrl &ctrl, vector<DRAW_OBJ> &obj_vec,
|
|
||||||
int y, int pixel_sz, vector<SEGMENT> &segment_vec)
|
|
||||||
{
|
|
||||||
for (int seg_i = 0; seg_i < (int)segment_vec.size(); seg_i++) {
|
|
||||||
SEGMENT &segment = segment_vec[seg_i];
|
|
||||||
if (segment.is_const) {
|
|
||||||
if(segment.width>0) {
|
|
||||||
draw_cmpr_pixel((uint8_t *)&segment.color.code,
|
|
||||||
segment.width, y == 0 && seg_i == 0,
|
|
||||||
ctrl);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
int rep_cnt;
|
|
||||||
uint8_t *src_ptr = segment.color.buf;
|
|
||||||
if (segment.is_cmpr) {
|
|
||||||
int pel_cnt = 0;
|
|
||||||
while (pel_cnt < segment.width) {
|
|
||||||
rep_cnt = min(src_ptr[0] + 1,
|
|
||||||
segment.width - pel_cnt);
|
|
||||||
uint8_t *cur_ptr = &src_ptr[1];
|
|
||||||
draw_cmpr_pixel(cur_ptr, rep_cnt,
|
|
||||||
y == 0 && seg_i == 0 &&
|
|
||||||
pel_cnt == 0,
|
|
||||||
ctrl);
|
|
||||||
src_ptr += (1 + pixel_sz);
|
|
||||||
pel_cnt += rep_cnt;
|
|
||||||
}
|
|
||||||
segment.color.buf += *(segment.bs_len);
|
|
||||||
obj_vec[segment.id].bitmap.bs_offset +=
|
|
||||||
*(segment.bs_len);
|
|
||||||
segment.bs_len++;
|
|
||||||
} else {
|
|
||||||
for (int pel_i = 0; pel_i < segment.width;
|
|
||||||
pel_i += rep_cnt) {
|
|
||||||
uint8_t *cur_ptr =
|
|
||||||
&src_ptr[pel_i * pixel_sz];
|
|
||||||
rep_cnt = count_repeat_pixel(
|
|
||||||
cur_ptr, pixel_sz,
|
|
||||||
segment.width - pel_i);
|
|
||||||
draw_cmpr_pixel(cur_ptr, rep_cnt,
|
|
||||||
y == 0 && seg_i == 0 &&
|
|
||||||
pel_i == 0,
|
|
||||||
ctrl);
|
|
||||||
}
|
|
||||||
segment.color.buf +=
|
|
||||||
(segment.stride * pixel_sz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void plot_segments_on_line(vector<DRAW_OBJ> &obj_vec, int width, int y,
|
|
||||||
int pixel_sz, int &next_y,
|
|
||||||
vector<SEGMENT> &segment_vec, uint32_t bg_color_code)
|
|
||||||
{
|
|
||||||
vector<OBJ_SLICE> slice_vec;
|
|
||||||
if (obj_project_on_line(obj_vec, slice_vec, y, next_y, width) == 0) {
|
|
||||||
SEGMENT bg_seg{ true, false, (uint16_t)width, 0, bg_color_code, 0 };
|
|
||||||
segment_vec.push_back(bg_seg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int step;
|
|
||||||
int next_slice_idx = -1;
|
|
||||||
for (int x = 0; x < width; x += step) {
|
|
||||||
int obj_idx = -1; // "-1": background
|
|
||||||
int x0 = x;
|
|
||||||
int x1 = width;
|
|
||||||
int slices_num = slice_vec.size();
|
|
||||||
if (next_slice_idx >= 0) {
|
|
||||||
x0 = slice_vec[next_slice_idx].x0;
|
|
||||||
x1 = slice_vec[next_slice_idx].x1;
|
|
||||||
obj_idx = next_slice_idx;
|
|
||||||
} else {
|
|
||||||
// iter all slices
|
|
||||||
for (int idx = (slices_num - 1); idx >= 0; idx--) {
|
|
||||||
if (is_in_range(x, slice_vec[idx].x0,
|
|
||||||
slice_vec[idx].x1)) {
|
|
||||||
x0 = slice_vec[idx].x0;
|
|
||||||
x1 = slice_vec[idx].x1;
|
|
||||||
obj_idx = idx;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// find end point from higher priority slices
|
|
||||||
next_slice_idx = -1;
|
|
||||||
int end_x = x1;
|
|
||||||
for (int hp_slice_i = (slices_num - 1); hp_slice_i > obj_idx;
|
|
||||||
hp_slice_i--) {
|
|
||||||
if (is_in_range(slice_vec[hp_slice_i].x0, x0, end_x)) {
|
|
||||||
end_x = slice_vec[hp_slice_i].x0;
|
|
||||||
next_slice_idx = hp_slice_i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
step = end_x - x;
|
|
||||||
|
|
||||||
SEGMENT segment{ true, false, (uint16_t)width, 0, bg_color_code, 0 };
|
|
||||||
segment.width = step;
|
|
||||||
if (obj_idx >= 0) {
|
|
||||||
DRAW_OBJ &obj = obj_vec[slice_vec[obj_idx].obj_id];
|
|
||||||
segment.is_const = (obj.type == BIT_MAP ||
|
|
||||||
obj.type == CMPR_BIT_MAP) ?
|
|
||||||
false :
|
|
||||||
true;
|
|
||||||
if (segment.is_const) {
|
|
||||||
segment.color.code = obj.color.code;
|
|
||||||
} else {
|
|
||||||
segment.is_cmpr =
|
|
||||||
(obj.type == BIT_MAP) ? false : true;
|
|
||||||
int incr_y = y - obj.bitmap.rect.y;
|
|
||||||
if (!segment.is_cmpr) {
|
|
||||||
segment.stride = obj.bitmap.stride;
|
|
||||||
segment.color.buf =
|
|
||||||
obj.color.buf +
|
|
||||||
((incr_y * segment.stride) +
|
|
||||||
(x - slice_vec[obj_idx].x0)) *
|
|
||||||
pixel_sz;
|
|
||||||
} else {
|
|
||||||
segment.color.buf =
|
|
||||||
&obj.color.buf
|
|
||||||
[obj.bitmap.bs_offset];
|
|
||||||
segment.bs_len = &(
|
|
||||||
(uint16_t *)
|
|
||||||
obj.color.buf)[incr_y];
|
|
||||||
segment.id = slice_vec[obj_idx].obj_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// slices required recycle only when current segment is not background
|
|
||||||
int recycle_cnt = recycle_obj_slices(slice_vec, obj_idx,
|
|
||||||
x + step);
|
|
||||||
// correct next slice index due to recycled slices
|
|
||||||
next_slice_idx -= recycle_cnt;
|
|
||||||
}
|
|
||||||
segment_vec.push_back(segment);
|
|
||||||
} // end of draw a part of a slice
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------- cmpr_canvas main API ----------------------
|
|
||||||
int draw_cmpr_canvas(Canvas_Attr *canvas, DRAW_OBJ *objs, uint32_t obj_num,
|
|
||||||
uint8_t *obuf, int buf_size, uint32_t* p_osize)
|
|
||||||
{
|
|
||||||
vector<DRAW_OBJ> obj_vec(objs, objs+obj_num);
|
|
||||||
Cmpr_Canvas_Ctrl ctrl;
|
|
||||||
draw_cmpr_init(ctrl, obuf, buf_size, canvas);
|
|
||||||
size_t pixel_sz = osd_cmpr_get_pixel_sz(canvas->format);
|
|
||||||
int y_step;
|
|
||||||
for (int y = 0; y < canvas->height; y += y_step) {
|
|
||||||
int next_y = canvas->height;
|
|
||||||
vector<SEGMENT> segment_vec;
|
|
||||||
plot_segments_on_line(obj_vec, canvas->width, y, pixel_sz,
|
|
||||||
next_y, segment_vec, canvas->bg_color_code);
|
|
||||||
y_step = next_y - y;
|
|
||||||
for (int line_i = 0; line_i < y_step; line_i++) {
|
|
||||||
draw_cmpr_canvas_line(ctrl, obj_vec, y + line_i,
|
|
||||||
pixel_sz, segment_vec);
|
|
||||||
}
|
|
||||||
recycle_draw_obj(obj_vec, y + y_step - 1);
|
|
||||||
}
|
|
||||||
draw_cmpr_finish(ctrl);
|
|
||||||
uint32_t stream_sz = (ctrl.bitstream.bit_pos + 7) >> 3; // in byte
|
|
||||||
//add 16 bytes per DE's suggestion
|
|
||||||
*p_osize = (((stream_sz + osd_cmpr_get_header_sz() + 15) >> 4) + 1) << 4; // 16byte align
|
|
||||||
return ctrl.bitstream.status;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (CMPR_CANVAS_DBG)
|
|
||||||
void fill_n_pixel(void *dest, int width, int code, int pixel_sz)
|
|
||||||
{
|
|
||||||
if (pixel_sz == 4) {
|
|
||||||
fill_n((uint32_t *)dest, width, code);
|
|
||||||
} else if (pixel_sz == 2) {
|
|
||||||
fill_n((uint16_t *)dest, width, (uint16_t)code);
|
|
||||||
} else {
|
|
||||||
fill_n((uint8_t *)dest, width, (uint8_t)code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int draw_canvas_raw_buffer2(Canvas_Attr &canvas, vector<DRAW_OBJ> obj_vec,
|
|
||||||
uint8_t *obuf)
|
|
||||||
{
|
|
||||||
size_t pixel_sz = osd_cmpr_get_pixel_sz(canvas.format);
|
|
||||||
//memset(obuf, 0, canvas.height*canvas.width*pixel_sz);
|
|
||||||
for (int obj_i = 0; obj_i < obj_vec.size(); obj_i++) {
|
|
||||||
DRAW_OBJ &obj_attr = obj_vec[obj_i];
|
|
||||||
if (obj_attr.type == STROKE_RECT) {
|
|
||||||
uint8_t *dest_ptr;
|
|
||||||
for (int y = obj_attr.rect.y;
|
|
||||||
y < (obj_attr.rect.y + obj_attr.rect.thickness);
|
|
||||||
y++) {
|
|
||||||
uint8_t *dest_ptr = &obuf[(y * canvas.width +
|
|
||||||
obj_attr.rect.x) *
|
|
||||||
pixel_sz];
|
|
||||||
fill_n_pixel(dest_ptr, obj_attr.rect.width,
|
|
||||||
obj_attr.color.code, pixel_sz);
|
|
||||||
}
|
|
||||||
int y2 = obj_attr.rect.y + obj_attr.rect.height -
|
|
||||||
obj_attr.rect.thickness;
|
|
||||||
for (int y = y2;
|
|
||||||
y < (obj_attr.rect.y + obj_attr.rect.height);
|
|
||||||
y++) {
|
|
||||||
uint8_t *dest_ptr = &obuf[(y * canvas.width +
|
|
||||||
obj_attr.rect.x) *
|
|
||||||
pixel_sz];
|
|
||||||
fill_n_pixel(dest_ptr, obj_attr.rect.width,
|
|
||||||
obj_attr.color.code, pixel_sz);
|
|
||||||
}
|
|
||||||
dest_ptr = &obuf[(obj_attr.rect.y * canvas.width +
|
|
||||||
obj_attr.rect.x) *
|
|
||||||
pixel_sz];
|
|
||||||
for (int y = obj_attr.rect.y;
|
|
||||||
y < (obj_attr.rect.y + obj_attr.rect.height);
|
|
||||||
y++) {
|
|
||||||
fill_n_pixel(dest_ptr, obj_attr.rect.thickness,
|
|
||||||
obj_attr.color.code, pixel_sz);
|
|
||||||
dest_ptr += (canvas.width * pixel_sz);
|
|
||||||
}
|
|
||||||
int x2 = obj_attr.rect.x + obj_attr.rect.width -
|
|
||||||
obj_attr.rect.thickness;
|
|
||||||
dest_ptr = &obuf[(obj_attr.rect.y * canvas.width + x2) *
|
|
||||||
pixel_sz];
|
|
||||||
for (int y = obj_attr.rect.y;
|
|
||||||
y < (obj_attr.rect.y + obj_attr.rect.height);
|
|
||||||
y++) {
|
|
||||||
fill_n_pixel(dest_ptr, obj_attr.rect.thickness,
|
|
||||||
obj_attr.color.code, pixel_sz);
|
|
||||||
dest_ptr += (canvas.width * pixel_sz);
|
|
||||||
}
|
|
||||||
} else if (obj_attr.type == RECT) {
|
|
||||||
uint8_t *dest_ptr =
|
|
||||||
&obuf[(obj_attr.rect.y * canvas.width +
|
|
||||||
obj_attr.rect.x) *
|
|
||||||
pixel_sz];
|
|
||||||
for (int y = 0; y < obj_attr.rect.height; y++) {
|
|
||||||
fill_n_pixel(dest_ptr, obj_attr.rect.width,
|
|
||||||
obj_attr.color.code, pixel_sz);
|
|
||||||
dest_ptr += (canvas.width * pixel_sz);
|
|
||||||
}
|
|
||||||
} else if (obj_attr.type == BIT_MAP) {
|
|
||||||
uint8_t *dest_ptr =
|
|
||||||
&obuf[(obj_attr.bitmap.rect.y * canvas.width +
|
|
||||||
obj_attr.bitmap.rect.x) *
|
|
||||||
pixel_sz];
|
|
||||||
uint8_t *src_ptr = obj_attr.color.buf;
|
|
||||||
for (int y = 0; y < obj_attr.rect.height; y++) {
|
|
||||||
memcpy(dest_ptr, src_ptr,
|
|
||||||
obj_attr.rect.width * pixel_sz);
|
|
||||||
dest_ptr += (canvas.width * pixel_sz);
|
|
||||||
src_ptr +=
|
|
||||||
(obj_attr.bitmap.rect.width * pixel_sz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void draw_canvas_raw_line(uint8_t *obuf, Canvas_Attr &canvas,
|
|
||||||
vector<DRAW_OBJ> &obj_vec, int y, int pixel_sz,
|
|
||||||
vector<SEGMENT> &segment_vec)
|
|
||||||
{
|
|
||||||
uint8_t *dest_ptr = obuf + (y * canvas.width * pixel_sz);
|
|
||||||
for (int seg_i = 0; seg_i < segment_vec.size(); seg_i++) {
|
|
||||||
SEGMENT &segment = segment_vec[seg_i];
|
|
||||||
if (segment.is_const && segment.color.code != 0) {
|
|
||||||
fill_n_pixel(dest_ptr, segment.width,
|
|
||||||
segment.color.code, pixel_sz);
|
|
||||||
} else if (!segment.is_const) {
|
|
||||||
int rep_cnt;
|
|
||||||
uint8_t *src_ptr = segment.color.buf;
|
|
||||||
if (segment.is_cmpr) {
|
|
||||||
int pel_cnt = 0;
|
|
||||||
while (pel_cnt < segment.width) {
|
|
||||||
rep_cnt = min(src_ptr[0] + 1,
|
|
||||||
segment.width - pel_cnt);
|
|
||||||
fill_n_pixel(
|
|
||||||
&dest_ptr[pel_cnt * pixel_sz],
|
|
||||||
rep_cnt,
|
|
||||||
*((uint32_t *)&src_ptr[1]),
|
|
||||||
pixel_sz);
|
|
||||||
src_ptr += (1 + pixel_sz);
|
|
||||||
pel_cnt += rep_cnt;
|
|
||||||
}
|
|
||||||
segment.color.buf += *(segment.bs_len);
|
|
||||||
obj_vec[segment.id].bitmap.bs_offset +=
|
|
||||||
*(segment.bs_len);
|
|
||||||
segment.bs_len++;
|
|
||||||
} else {
|
|
||||||
memcpy(dest_ptr, src_ptr,
|
|
||||||
segment.width * pixel_sz);
|
|
||||||
segment.color.buf +=
|
|
||||||
(segment.stride * pixel_sz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dest_ptr += (segment.width * pixel_sz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int draw_canvas_raw_buffer(Canvas_Attr &canvas, vector<DRAW_OBJ> obj_vec,
|
|
||||||
uint8_t *obuf)
|
|
||||||
{
|
|
||||||
size_t pixel_sz = osd_cmpr_get_pixel_sz(canvas.format);
|
|
||||||
memset(obuf, 0, canvas.height * canvas.width * pixel_sz);
|
|
||||||
int y_step;
|
|
||||||
for (int y = 0; y < canvas.height; y += y_step) {
|
|
||||||
int next_y = canvas.height;
|
|
||||||
vector<SEGMENT> segment_vec;
|
|
||||||
plot_segments_on_line(obj_vec, canvas.width, canvas.height, y,
|
|
||||||
pixel_sz, next_y, segment_vec, canvas->bg_color_code);
|
|
||||||
y_step = next_y - y;
|
|
||||||
for (int line_i = 0; line_i < y_step; line_i++) {
|
|
||||||
draw_canvas_raw_line(obuf, canvas, obj_vec, y + line_i,
|
|
||||||
pixel_sz, segment_vec);
|
|
||||||
}
|
|
||||||
recycle_draw_obj(obj_vec, y + y_step - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int cmpr_bitmap(Canvas_Attr *canvas, uint8_t *ibuf, uint8_t *obuf, int width,
|
|
||||||
int height, int buf_size, uint32_t* p_osize)
|
|
||||||
{
|
|
||||||
size_t pixel_sz = osd_cmpr_get_pixel_sz(canvas->format);
|
|
||||||
memset(obuf, 0, buf_size);
|
|
||||||
uint8_t *cur_ptr = ibuf;
|
|
||||||
uint16_t *meta_ptr = (uint16_t *)obuf;
|
|
||||||
size_t meta_sz = height << 1;
|
|
||||||
uint8_t *bs_ptr = &obuf[meta_sz];
|
|
||||||
size_t bs_sz_cnt = meta_sz;
|
|
||||||
int rl_pair_sz = (1 + pixel_sz);
|
|
||||||
int step;
|
|
||||||
for (int y = 0; y < height; y++) {
|
|
||||||
int line_byte_cnt = 0;
|
|
||||||
for (int x = 0; x < width; x += step) {
|
|
||||||
int cnt = count_repeat_pixel(cur_ptr, pixel_sz,
|
|
||||||
width - x);
|
|
||||||
step = cnt;
|
|
||||||
while (cnt > 0) {
|
|
||||||
int new_bs_sz_cnt = bs_sz_cnt + rl_pair_sz;
|
|
||||||
if (new_bs_sz_cnt > buf_size) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
int rl = min(cnt, 256);
|
|
||||||
*bs_ptr = (rl - 1);
|
|
||||||
memcpy(&bs_ptr[1], cur_ptr, pixel_sz);
|
|
||||||
bs_ptr += rl_pair_sz;
|
|
||||||
cnt -= rl;
|
|
||||||
bs_sz_cnt = new_bs_sz_cnt;
|
|
||||||
line_byte_cnt += rl_pair_sz;
|
|
||||||
}
|
|
||||||
cur_ptr += (step * pixel_sz);
|
|
||||||
}
|
|
||||||
meta_ptr[y] = line_byte_cnt;
|
|
||||||
}
|
|
||||||
*p_osize = bs_sz_cnt;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t est_cmpr_canvas_size(Canvas_Attr *canvas, DRAW_OBJ *objs, uint32_t obj_num)
|
|
||||||
{
|
|
||||||
uint8_t *dummy = nullptr;
|
|
||||||
uint32_t bs_sz = 0;
|
|
||||||
draw_cmpr_canvas(canvas, objs, obj_num, dummy, 0, &bs_sz);
|
|
||||||
|
|
||||||
return ((bs_sz + BUF_GUARD_SIZE) >> 4) << 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_rect_position(RECT_ATTR &rect, Canvas_Attr *canvas, int pt_x, int pt_y,
|
|
||||||
int width, int height)
|
|
||||||
{
|
|
||||||
rect.x = clip(pt_x, 0, canvas->width - 1);
|
|
||||||
rect.y = clip(pt_y, 0, canvas->height -1);
|
|
||||||
rect.width = clip(width, 0, canvas->width - rect.x);
|
|
||||||
rect.height = clip(height, 0, canvas->height - rect.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_rect_obj_attr(DRAW_OBJ *obj_attr, Canvas_Attr *canvas,
|
|
||||||
uint32_t color_code, int pt_x, int pt_y, int width,
|
|
||||||
int height, bool is_filled, int thickness)
|
|
||||||
{
|
|
||||||
obj_attr->type = (is_filled) ? RECT : STROKE_RECT;
|
|
||||||
obj_attr->color.code = color_code;
|
|
||||||
set_rect_position(obj_attr->rect, canvas, pt_x, pt_y, width, height);
|
|
||||||
thickness = clip(thickness, MIN_THICKNESS, MAX_THICKNESS);
|
|
||||||
int min_allow_thickness = max((min(obj_attr->rect.height, obj_attr->rect.width)>>1)-1, 0);
|
|
||||||
obj_attr->rect.thickness = min(min_allow_thickness, thickness);
|
|
||||||
obj_attr->_max_y = obj_attr->rect.y + obj_attr->rect.height;
|
|
||||||
obj_attr->_min_y = obj_attr->rect.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_bitmap_obj_attr(DRAW_OBJ *obj_attr, Canvas_Attr *canvas, uint8_t *buf,
|
|
||||||
int pt_x, int pt_y, int width, int height,
|
|
||||||
bool is_cmpr)
|
|
||||||
{
|
|
||||||
if (is_cmpr) {
|
|
||||||
obj_attr->type = CMPR_BIT_MAP;
|
|
||||||
obj_attr->bitmap.bs_offset = height
|
|
||||||
<< 1; // 2B metadata for each line
|
|
||||||
} else {
|
|
||||||
obj_attr->type = BIT_MAP;
|
|
||||||
obj_attr->bitmap.stride = width;
|
|
||||||
}
|
|
||||||
set_rect_position(obj_attr->bitmap.rect, canvas, pt_x, pt_y, width,
|
|
||||||
height);
|
|
||||||
obj_attr->color.buf = buf;
|
|
||||||
obj_attr->_max_y = obj_attr->bitmap.rect.y + obj_attr->bitmap.rect.height;
|
|
||||||
obj_attr->_min_y = obj_attr->bitmap.rect.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_line_obj_attr(DRAW_OBJ *obj_attr, Canvas_Attr *canvas,
|
|
||||||
uint32_t color_code, int pt_x0, int pt_y0, int pt_x1,
|
|
||||||
int pt_y1, int thickness)
|
|
||||||
{
|
|
||||||
obj_attr->color.code = color_code;
|
|
||||||
pt_x0 = clip(pt_x0, 0, canvas->width);
|
|
||||||
pt_x1 = clip(pt_x1, 0, canvas->width);
|
|
||||||
pt_y0 = clip(pt_y0, 0, canvas->height);
|
|
||||||
pt_y1 = clip(pt_y1, 0, canvas->height);
|
|
||||||
thickness = clip(thickness, MIN_THICKNESS, MAX_THICKNESS);
|
|
||||||
if (pt_x0 == pt_x1 ||
|
|
||||||
pt_y0 == pt_y1) { // horizontal line: degenerate to rect
|
|
||||||
int x = min(pt_x0, pt_x1) - (thickness >> 1);
|
|
||||||
int y = min(pt_y0, pt_y1) - (thickness >> 1);
|
|
||||||
int width = thickness +
|
|
||||||
((pt_x0 == pt_x1) ?
|
|
||||||
0 :
|
|
||||||
max(pt_x0, pt_x1) - min(pt_x0, pt_x1));
|
|
||||||
int height = thickness +
|
|
||||||
((pt_y0 == pt_y1) ?
|
|
||||||
0 :
|
|
||||||
max(pt_y0, pt_y1) - min(pt_y0, pt_y1));
|
|
||||||
set_rect_obj_attr(obj_attr, canvas, color_code, x, y, width,
|
|
||||||
height, true, thickness);
|
|
||||||
} else {
|
|
||||||
obj_attr->color.code = color_code;
|
|
||||||
obj_attr->type = LINE;
|
|
||||||
int x[2], y[2];
|
|
||||||
bool is_y_incr = (pt_y1 > pt_y0);
|
|
||||||
x[0] = (is_y_incr) ? pt_x0 : pt_x1;
|
|
||||||
y[0] = (is_y_incr) ? pt_y0 : pt_y1;
|
|
||||||
x[1] = (is_y_incr) ? pt_x1 : pt_x0;
|
|
||||||
y[1] = (is_y_incr) ? pt_y1 : pt_y0;
|
|
||||||
int dx = x[1] - x[0];
|
|
||||||
int dy = y[1] - y[0];
|
|
||||||
obj_attr->line._mx = (dy != 0) ? dx / ((float)dy) :
|
|
||||||
FLT_MAX;
|
|
||||||
float thick_offset =
|
|
||||||
0.5 * thickness / pow(dx * dx + dy * dy, 0.5);
|
|
||||||
float thick_offset_x = thick_offset * dx;
|
|
||||||
float thick_offset_y = thick_offset * dy;
|
|
||||||
for (int side_i = 0; side_i < 2; side_i++) {
|
|
||||||
obj_attr->line._bx[side_i] =
|
|
||||||
clip(x[0] + ((dx >= 0) ? thick_offset_y :
|
|
||||||
(-thick_offset_y)),
|
|
||||||
(float)0., (float)canvas->width);
|
|
||||||
obj_attr->line._by[side_i] =
|
|
||||||
clip(y[0] + ((dx >= 0) ? (-thick_offset_x) :
|
|
||||||
thick_offset_x),
|
|
||||||
(float)0., (float)canvas->height);
|
|
||||||
obj_attr->line._ex[side_i] =
|
|
||||||
clip(x[1] + ((dx >= 0) ? thick_offset_y :
|
|
||||||
(-thick_offset_y)),
|
|
||||||
(float)0., (float)canvas->width);
|
|
||||||
obj_attr->line._ey[side_i] =
|
|
||||||
clip(y[1] + ((dx >= 0) ? (-thick_offset_x) :
|
|
||||||
thick_offset_x),
|
|
||||||
(float)0., (float)canvas->height);
|
|
||||||
thick_offset_x = -thick_offset_x;
|
|
||||||
thick_offset_y = -thick_offset_y;
|
|
||||||
}
|
|
||||||
obj_attr->line.ts_h =
|
|
||||||
(obj_attr->line._bx[0] +
|
|
||||||
obj_attr->line._mx * (obj_attr->line._by[1] -
|
|
||||||
obj_attr->line._by[0])) -
|
|
||||||
obj_attr->line._bx[1];
|
|
||||||
obj_attr->_min_y =
|
|
||||||
round(min(obj_attr->line._by[0], obj_attr->line._by[1]));
|
|
||||||
obj_attr->_max_y =
|
|
||||||
round(max(obj_attr->line._ey[1], obj_attr->line._ey[1]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//==============================================================================================
|
|
||||||
//CVI interface
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint32_t CVI_OSDC_est_cmpr_canvas_size(Canvas_Attr *canvas, DRAW_OBJ *objs, uint32_t obj_num)
|
|
||||||
{
|
|
||||||
return est_cmpr_canvas_size(canvas, objs, obj_num);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CVI_OSDC_draw_cmpr_canvas(Canvas_Attr *canvas, DRAW_OBJ *objs, uint32_t obj_num,
|
|
||||||
uint8_t *obuf, uint32_t buf_size, uint32_t *p_osize)
|
|
||||||
{
|
|
||||||
return draw_cmpr_canvas(canvas, objs, obj_num, obuf, buf_size, p_osize);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVI_OSDC_set_rect_obj_attr(Canvas_Attr *canvas, DRAW_OBJ *obj, uint32_t color_code, int pt_x, int pt_y, int width,
|
|
||||||
int height, bool is_filled, int thickness)
|
|
||||||
{
|
|
||||||
set_rect_obj_attr(obj, canvas, color_code, pt_x, pt_y, width, height, is_filled, thickness);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVI_OSDC_set_bitmap_obj_attr(Canvas_Attr *canvas, DRAW_OBJ *obj_attr, uint8_t *buf,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_cmpr)
|
|
||||||
{
|
|
||||||
set_bitmap_obj_attr(obj_attr, canvas, buf, pt_x, pt_y, width, height, is_cmpr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVI_OSDC_set_line_obj_attr(Canvas_Attr *canvas, DRAW_OBJ *obj, uint32_t color_code,
|
|
||||||
int pt_x0, int pt_y0, int pt_x1, int pt_y1, int thickness)
|
|
||||||
{
|
|
||||||
set_line_obj_attr(obj, canvas, color_code, pt_x0, pt_y0, pt_x1, pt_y1, thickness);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CVI_OSDC_cmpr_bitmap(Canvas_Attr *canvas, uint8_t *ibuf, uint8_t *obuf, int width, int height,
|
|
||||||
int buf_size, uint32_t *p_osize)
|
|
||||||
{
|
|
||||||
return cmpr_bitmap(canvas, ibuf, obuf, width, height, buf_size, p_osize);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (CMPR_CANVAS_DBG)
|
|
||||||
int CVI_OSDC_draw_canvas_raw_buffer(Canvas_Attr &canvas, vector<DRAW_OBJ> obj_vec, uint8_t *obuf)
|
|
||||||
int CVI_OSDC_draw_canvas_raw_buffer2(Canvas_Attr &canvas, vector<DRAW_OBJ> obj_vec, uint8_t *obuf);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
#include <cvi_osdc.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
uint32_t CVI_OSDC_EstCmprCanvasSize(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *objs, uint32_t obj_num)
|
|
||||||
{
|
|
||||||
return CVI_OSDC_est_cmpr_canvas_size(canvas, objs, obj_num);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CVI_OSDC_DrawCmprCanvas(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *objs, uint32_t obj_num,
|
|
||||||
uint8_t *obuf, uint32_t buf_size, uint32_t *p_osize)
|
|
||||||
{
|
|
||||||
return CVI_OSDC_draw_cmpr_canvas(canvas, objs, obj_num, obuf, buf_size, p_osize);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVI_OSDC_SetRectObjAttr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_filled, int thickness)
|
|
||||||
{
|
|
||||||
CVI_OSDC_set_rect_obj_attr(canvas, obj, color_code, pt_x, pt_y, width, height, is_filled, thickness);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVI_OSDC_SetRectObjAttrEx(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
OSDC_RECT_ATTR_S *rects, int num, bool is_filled)
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < num; i++) {
|
|
||||||
CVI_OSDC_set_rect_obj_attr(canvas, obj, color_code, rects[i].x, rects[i].y,
|
|
||||||
rects[i].width, rects[i].height, is_filled, rects[i].thickness);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVI_OSDC_SetBitmapObjAttr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj_attr, uint8_t *buf,
|
|
||||||
int pt_x, int pt_y, int width, int height, bool is_cmpr)
|
|
||||||
{
|
|
||||||
CVI_OSDC_set_bitmap_obj_attr(canvas, obj_attr, buf, pt_x, pt_y, width, height, is_cmpr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVI_OSDC_SetLineObjAttr(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
int pt_x0, int pt_y0, int pt_x1, int pt_y1, int thickness)
|
|
||||||
{
|
|
||||||
CVI_OSDC_set_line_obj_attr(canvas, obj, color_code, pt_x0, pt_y0, pt_x1, pt_y1, thickness);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVI_OSDC_SetLineObjAttrEx(OSDC_Canvas_Attr_S *canvas, OSDC_DRAW_OBJ_S *obj, uint32_t color_code,
|
|
||||||
OSDC_POINT_ATTR_S *points, int num, int thickness)
|
|
||||||
{
|
|
||||||
int i = 0, j = 0, delta_x, delta_y;
|
|
||||||
OSDC_POINT_ATTR_S *tmp = malloc(sizeof(OSDC_POINT_ATTR_S) * num);
|
|
||||||
|
|
||||||
if (!tmp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
memcpy(tmp, points, sizeof(OSDC_POINT_ATTR_S) * num);
|
|
||||||
while (j++ < 5) {
|
|
||||||
for (i = 0; i < num - 1; ++i) {
|
|
||||||
delta_x = abs(tmp[i].x - tmp[i + 1].x);
|
|
||||||
delta_y = abs(tmp[i].y - tmp[i + 1].y);
|
|
||||||
if (delta_y < thickness)
|
|
||||||
tmp[i + 1].y = tmp[i].y;
|
|
||||||
if (delta_x < thickness)
|
|
||||||
tmp[i + 1].x = tmp[i].x;
|
|
||||||
}
|
|
||||||
delta_x = abs(tmp[num - 1].x - tmp[0].x);
|
|
||||||
delta_y = abs(tmp[num - 1].y - tmp[0].y);
|
|
||||||
if (delta_y < thickness)
|
|
||||||
tmp[0].y = tmp[num - 1].y;
|
|
||||||
if (delta_x < thickness)
|
|
||||||
tmp[0].x = tmp[num - 1].x;
|
|
||||||
delta_x = abs(tmp[1].x - tmp[0].x);
|
|
||||||
delta_y = abs(tmp[1].y - tmp[0].y);
|
|
||||||
if ((delta_x > thickness || delta_x == 0) &&
|
|
||||||
(delta_y > thickness || delta_y == 0))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < num - 1; ++i) {
|
|
||||||
CVI_OSDC_set_line_obj_attr(canvas, obj + i, color_code, tmp[i].x, tmp[i].y,
|
|
||||||
tmp[i + 1].x, tmp[i + 1].y, thickness);
|
|
||||||
}
|
|
||||||
|
|
||||||
CVI_OSDC_set_line_obj_attr(canvas, obj + num - 1, color_code, tmp[num - 1].x, tmp[num - 1].y,
|
|
||||||
tmp[0].x, tmp[0].y, thickness);
|
|
||||||
free(tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CVI_OSDC_CmprBitmap(OSDC_Canvas_Attr_S *canvas, uint8_t *ibuf, uint8_t *obuf, int width, int height,
|
|
||||||
int buf_size, uint32_t *p_osize)
|
|
||||||
{
|
|
||||||
return CVI_OSDC_cmpr_bitmap(canvas, ibuf, obuf, width, height, buf_size, p_osize);
|
|
||||||
}
|
|
||||||
@ -1,601 +0,0 @@
|
|||||||
#include <string.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "osd_cmpr.h"
|
|
||||||
|
|
||||||
// -- arithmetic operation --
|
|
||||||
uint8_t get_bit_val(uint8_t *buf, int byte_idx, int bit_idx)
|
|
||||||
{
|
|
||||||
return (buf[byte_idx] >> bit_idx) & 0x1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int min(int data1, int data2)
|
|
||||||
{
|
|
||||||
return (data1 <= data2) ? data1 : data2;
|
|
||||||
}
|
|
||||||
|
|
||||||
int max(int data1, int data2)
|
|
||||||
{
|
|
||||||
return (data1 >= data2) ? data1 : data2;
|
|
||||||
}
|
|
||||||
|
|
||||||
int clip(int data, int min, int max)
|
|
||||||
{
|
|
||||||
return (data > max) ? max : (data < min) ? min : data;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -- streaming operation handler --
|
|
||||||
void init_stream(StreamBuffer *bs, const uint8_t *buf, int buf_size,
|
|
||||||
bool read_only)
|
|
||||||
{
|
|
||||||
bs->bit_pos = 0;
|
|
||||||
bs->stream = (uint8_t *)buf;
|
|
||||||
bs->buf_size = buf_size;
|
|
||||||
bs->status = 1;
|
|
||||||
if (!read_only)
|
|
||||||
memset((uint8_t *)buf, 0, sizeof(uint8_t) * buf_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_multibits(uint8_t *stream, uint8_t *src, int bit_pos, int bit_len)
|
|
||||||
{
|
|
||||||
assert(bit_len <= 8);
|
|
||||||
int dest_bit_i = bit_pos & 7;
|
|
||||||
int dest_byte_i = bit_pos >> 3;
|
|
||||||
uint16_t *dest_ptr_ex = (uint16_t *)&stream[dest_byte_i];
|
|
||||||
uint16_t src_data_ex = (*src) << dest_bit_i;
|
|
||||||
(*dest_ptr_ex) = (*dest_ptr_ex) | src_data_ex;
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_stream(StreamBuffer *bs, uint8_t *src, int bit_len)
|
|
||||||
{
|
|
||||||
int next_bit_pos = bs->bit_pos + bit_len;
|
|
||||||
if (next_bit_pos < (bs->buf_size << 3)) {
|
|
||||||
while (bit_len >= 8) {
|
|
||||||
write_multibits(bs->stream, src, bs->bit_pos, 8);
|
|
||||||
bs->bit_pos += 8;
|
|
||||||
bit_len -= 8;
|
|
||||||
src++;
|
|
||||||
};
|
|
||||||
if (bit_len > 0) {
|
|
||||||
write_multibits(bs->stream, src, bs->bit_pos, bit_len);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
bs->status = -1;
|
|
||||||
}
|
|
||||||
bs->bit_pos = next_bit_pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
void move_stream_ptr(StreamBuffer *bs, int bit_len)
|
|
||||||
{
|
|
||||||
bs->bit_pos = min(bs->bit_pos + bit_len, (bs->buf_size << 3));
|
|
||||||
}
|
|
||||||
|
|
||||||
void parse_stream(StreamBuffer *bs, uint8_t *dest, int bit_len, bool read_only)
|
|
||||||
{
|
|
||||||
memset(dest, 0, sizeof(uint8_t) * (bit_len + 7) >> 3);
|
|
||||||
for (int bit = 0; bit < bit_len; bit++) {
|
|
||||||
int dest_byte_i = bit / 8;
|
|
||||||
int dest_bit_i = bit % 8;
|
|
||||||
int bs_byte_i = (bs->bit_pos + bit) / 8;
|
|
||||||
int bs_bit_i = (bs->bit_pos + bit) % 8;
|
|
||||||
dest[dest_byte_i] |=
|
|
||||||
(get_bit_val(bs->stream, bs_byte_i, bs_bit_i)
|
|
||||||
<< dest_bit_i);
|
|
||||||
}
|
|
||||||
bs->bit_pos = (read_only) ?
|
|
||||||
bs->bit_pos :
|
|
||||||
min(bs->bit_pos + bit_len, (bs->buf_size << 3));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------ ARGB format generic function ------
|
|
||||||
|
|
||||||
// tranform generic ARGB8888 into multiple pixel format
|
|
||||||
void set_color(uint8_t *ptr, RGBA color, OSD_FORMAT format)
|
|
||||||
{
|
|
||||||
if (format == OSD_ARGB8888) {
|
|
||||||
memcpy(ptr, &color, sizeof(RGBA));
|
|
||||||
} else if (format == OSD_ARGB1555) {
|
|
||||||
ARGB1555 out_c;
|
|
||||||
CPY_C(color, out_c)
|
|
||||||
memcpy(ptr, &out_c.code, sizeof(out_c.code));
|
|
||||||
} else if (format == OSD_ARGB4444) {
|
|
||||||
ARGB4444 out_c;
|
|
||||||
CPY_C(color, out_c)
|
|
||||||
memcpy(ptr, &out_c.code, sizeof(out_c.code));
|
|
||||||
} else if (format == OSD_LUT8 || format == OSD_LUT4) {
|
|
||||||
*ptr = color.a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// tranform multiple pixel format into generic ARGB8888
|
|
||||||
RGBA get_color(uint8_t *ptr, OSD_FORMAT format)
|
|
||||||
{
|
|
||||||
RGBA out_c;
|
|
||||||
out_c.code = 0;
|
|
||||||
if (format == OSD_ARGB8888) {
|
|
||||||
RGBA in_c = *((RGBA *)ptr);
|
|
||||||
CPY_C(in_c, out_c)
|
|
||||||
} else if (format == OSD_ARGB1555) {
|
|
||||||
ARGB1555 in_c = *((ARGB1555 *)ptr);
|
|
||||||
CPY_C(in_c, out_c)
|
|
||||||
} else if (format == OSD_ARGB4444) {
|
|
||||||
ARGB4444 in_c = *((ARGB4444 *)ptr);
|
|
||||||
CPY_C(in_c, out_c)
|
|
||||||
} else if (format == OSD_LUT8 || format == OSD_LUT4) {
|
|
||||||
out_c.a = *ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return out_c;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_equal_color(RGBA c0, RGBA c1)
|
|
||||||
{
|
|
||||||
return c0.code == c1.code;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------ palette_cache ------
|
|
||||||
void palette_cache_init(vector<RGBA> &cache, int cache_sz)
|
|
||||||
{
|
|
||||||
int c_incr = 256 / cache_sz;
|
|
||||||
uint8_t c = 0;
|
|
||||||
for (int idx = 0; idx < cache_sz; idx++) {
|
|
||||||
uint32_t code = (c << 24) | (c << 16) | (c << 8) | c;
|
|
||||||
RGBA color = get_color((uint8_t *)&code);
|
|
||||||
cache.push_back(color);
|
|
||||||
c = clip(c + c_incr, 0, 255);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int palette_cache_lookup_color(vector<RGBA> &cache, RGBA color)
|
|
||||||
{
|
|
||||||
for (unsigned int idx = 0; idx < cache.size(); idx++) {
|
|
||||||
if (is_equal_color(cache[idx], color)) { // hit
|
|
||||||
palette_cache_lru_update(cache, idx);
|
|
||||||
return idx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// miss
|
|
||||||
palette_cache_push_color(cache, color);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void palette_cache_lru_update(vector<RGBA> &cache, int index)
|
|
||||||
{
|
|
||||||
if (index == 0)
|
|
||||||
return;
|
|
||||||
RGBA reg_color = cache[index];
|
|
||||||
for (int idx = index; idx > 0; idx--) {
|
|
||||||
cache[idx] = cache[idx - 1];
|
|
||||||
}
|
|
||||||
cache[0] = reg_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
void palette_cache_push_color(vector<RGBA> &cache, RGBA color)
|
|
||||||
{
|
|
||||||
for (int idx = cache.size() - 1; idx > 0; idx--) {
|
|
||||||
cache[idx] = cache[idx - 1];
|
|
||||||
}
|
|
||||||
cache[0] = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------ syntax enc/dec ------
|
|
||||||
void enc_literal(StreamBuffer *bs, RGBA color, OSD_FORMAT format)
|
|
||||||
{
|
|
||||||
if (format == OSD_ARGB8888) {
|
|
||||||
write_stream(bs, (uint8_t *)(&color), sizeof(RGBA) << 3);
|
|
||||||
} else if (format == OSD_ARGB1555) {
|
|
||||||
ARGB1555 out_c;
|
|
||||||
CPY_C(color, out_c)
|
|
||||||
write_stream(bs, (uint8_t *)(&out_c.code),
|
|
||||||
sizeof(out_c.code) << 3);
|
|
||||||
} else if (format == OSD_ARGB4444) {
|
|
||||||
ARGB4444 out_c;
|
|
||||||
CPY_C(color, out_c)
|
|
||||||
write_stream(bs, (uint8_t *)(&out_c.code),
|
|
||||||
sizeof(out_c.code) << 3);
|
|
||||||
} else if (format == OSD_LUT8) {
|
|
||||||
write_stream(bs, (uint8_t *)(&color.a), 8);
|
|
||||||
} else if (format == OSD_LUT4) {
|
|
||||||
write_stream(bs, (uint8_t *)(&color.a), 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RGBA dec_literal(StreamBuffer *bs, OSD_FORMAT format)
|
|
||||||
{
|
|
||||||
RGBA color;
|
|
||||||
color.code = 0;
|
|
||||||
if (format == OSD_ARGB8888) {
|
|
||||||
parse_stream(bs, (uint8_t *)&color, sizeof(RGBA) * 8, false);
|
|
||||||
} else if (format == OSD_ARGB1555) {
|
|
||||||
ARGB1555 in_c;
|
|
||||||
parse_stream(bs, (uint8_t *)&in_c.code, sizeof(in_c.code) * 8,
|
|
||||||
false);
|
|
||||||
CPY_C(in_c, color)
|
|
||||||
} else if (format == OSD_ARGB4444) {
|
|
||||||
ARGB4444 in_c;
|
|
||||||
parse_stream(bs, (uint8_t *)&in_c.code, sizeof(in_c.code) * 8,
|
|
||||||
false);
|
|
||||||
CPY_C(in_c, color)
|
|
||||||
} else if (format == OSD_LUT8) {
|
|
||||||
parse_stream(bs, &color.a, 8, false);
|
|
||||||
} else if (format == OSD_LUT4) {
|
|
||||||
parse_stream(bs, &color.a, 4, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
void enc_run_length(StreamBuffer *bs, int run_len, int run_len_bd)
|
|
||||||
{
|
|
||||||
if (run_len > 1) {
|
|
||||||
uint8_t run_syntax = run_len - 1;
|
|
||||||
write_stream(bs, &run_syntax, run_len_bd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void enc_mode_syntax(StreamBuffer *bs, MODE_TYPE md, int run_len, CODE code,
|
|
||||||
OSDCmpr_Ctrl *p_ctrl)
|
|
||||||
{
|
|
||||||
if (p_ctrl->reg_palette_mode_en) {
|
|
||||||
uint16_t _syntax;
|
|
||||||
if (md == Palette) {
|
|
||||||
if (run_len > 1) {
|
|
||||||
_syntax = (code.palette_idx
|
|
||||||
<< (p_ctrl->reg_run_len_bd + 3)) |
|
|
||||||
((run_len - 1) << 3);
|
|
||||||
write_stream(
|
|
||||||
bs, (uint8_t *)&_syntax,
|
|
||||||
3 + p_ctrl->reg_run_len_bd +
|
|
||||||
p_ctrl->reg_palette_idx_bd);
|
|
||||||
} else {
|
|
||||||
_syntax = (code.palette_idx << 2) | 2;
|
|
||||||
write_stream(bs, (uint8_t *)&_syntax,
|
|
||||||
p_ctrl->reg_palette_idx_bd + 2);
|
|
||||||
}
|
|
||||||
} else if (md == Literal) {
|
|
||||||
if (run_len > 1) {
|
|
||||||
uint16_t _syntax = ((run_len - 1) << 3) | 4;
|
|
||||||
write_stream(bs, (uint8_t *)&_syntax,
|
|
||||||
3 + p_ctrl->reg_run_len_bd);
|
|
||||||
} else {
|
|
||||||
uint8_t lit_prefix = 1;
|
|
||||||
write_stream(bs, &lit_prefix, 1);
|
|
||||||
}
|
|
||||||
enc_literal(bs, code.color, p_ctrl->reg_osd_format);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
uint8_t prefix = (run_len > 1) ? 0 : 1;
|
|
||||||
write_stream(bs, &prefix, 1);
|
|
||||||
enc_run_length(bs, run_len, p_ctrl->reg_run_len_bd);
|
|
||||||
enc_literal(bs, code.color, p_ctrl->reg_osd_format);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MODE_TYPE dec_mode_prefix(StreamBuffer *bs, bool palette_mode_en)
|
|
||||||
{
|
|
||||||
uint8_t prefix;
|
|
||||||
if (palette_mode_en) {
|
|
||||||
parse_stream(bs, &prefix, 3, true);
|
|
||||||
if (prefix == 0) {
|
|
||||||
move_stream_ptr(bs, 3);
|
|
||||||
return Palette_RL;
|
|
||||||
} else if (prefix == 4) {
|
|
||||||
move_stream_ptr(bs, 3);
|
|
||||||
return Literal_RL;
|
|
||||||
} else if ((prefix & 0x3) == 2) {
|
|
||||||
move_stream_ptr(bs, 2);
|
|
||||||
return Palette;
|
|
||||||
}
|
|
||||||
assert((prefix & 0x1) == 1);
|
|
||||||
move_stream_ptr(bs, 1);
|
|
||||||
return Literal;
|
|
||||||
} else {
|
|
||||||
parse_stream(bs, &prefix, 1, false);
|
|
||||||
return (prefix) ? Literal : Literal_RL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CODE dec_code_syntax(StreamBuffer *bs, MODE_TYPE md, OSDCmpr_Ctrl *p_ctrl)
|
|
||||||
{
|
|
||||||
CODE retCode;
|
|
||||||
if (md == Literal || md == Literal_RL) {
|
|
||||||
retCode.color = dec_literal(bs, p_ctrl->reg_osd_format);
|
|
||||||
} else {
|
|
||||||
uint8_t pal_syntax;
|
|
||||||
parse_stream(bs, &pal_syntax, p_ctrl->reg_palette_idx_bd,
|
|
||||||
false);
|
|
||||||
retCode.palette_idx = pal_syntax;
|
|
||||||
}
|
|
||||||
|
|
||||||
return retCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
RGBA pixel_preprocess(uint8_t *ptr, OSDCmpr_Ctrl *p_ctrl)
|
|
||||||
{
|
|
||||||
RGBA color = get_color(ptr, p_ctrl->reg_osd_format);
|
|
||||||
color.b = (color.b >> p_ctrl->reg_rgb_trunc_bit)
|
|
||||||
<< p_ctrl->reg_rgb_trunc_bit;
|
|
||||||
color.g = (color.g >> p_ctrl->reg_rgb_trunc_bit)
|
|
||||||
<< p_ctrl->reg_rgb_trunc_bit;
|
|
||||||
color.r = (color.r >> p_ctrl->reg_rgb_trunc_bit)
|
|
||||||
<< p_ctrl->reg_rgb_trunc_bit;
|
|
||||||
color.a = (color.a >> p_ctrl->reg_alpha_trunc_bit)
|
|
||||||
<< p_ctrl->reg_alpha_trunc_bit;
|
|
||||||
if (p_ctrl->reg_zeroize_by_alpha && color.a == 0) {
|
|
||||||
color.code = 0;
|
|
||||||
}
|
|
||||||
set_color(ptr, color, p_ctrl->reg_osd_format);
|
|
||||||
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------- OSD cmpr main API ----------------------
|
|
||||||
int osd_cmpr_enc_one_frame(uint8_t *ibuf, uint8_t *obs, OSDCmpr_Ctrl *p_ctrl)
|
|
||||||
{
|
|
||||||
StreamBuffer bitstream;
|
|
||||||
size_t width = p_ctrl->reg_image_width,
|
|
||||||
height = p_ctrl->reg_image_height;
|
|
||||||
init_stream(&bitstream, p_ctrl->bsbuf, p_ctrl->bs_buf_size, false);
|
|
||||||
uint8_t *inPtr = ibuf;
|
|
||||||
RGBA last_color;
|
|
||||||
int rl_cnt = 1;
|
|
||||||
CODE code;
|
|
||||||
MODE_TYPE md = NUM_OF_MODE;
|
|
||||||
int max_run_len = 1 << p_ctrl->reg_run_len_bd;
|
|
||||||
for (int line_i = 0; line_i < (int)height; line_i++) {
|
|
||||||
for (int pos_x = 0; pos_x < (int)width; pos_x++) {
|
|
||||||
RGBA cur = pixel_preprocess(inPtr, p_ctrl);
|
|
||||||
if ((pos_x == 0 && line_i == 0) ||
|
|
||||||
rl_cnt >= max_run_len ||
|
|
||||||
(!is_equal_color(cur, last_color))) { // new run
|
|
||||||
if (!(pos_x == 0 && line_i == 0)) { // write out
|
|
||||||
enc_mode_syntax(&bitstream, md, rl_cnt,
|
|
||||||
code, p_ctrl);
|
|
||||||
}
|
|
||||||
// mode detection
|
|
||||||
int cache_idx =
|
|
||||||
(p_ctrl->reg_palette_mode_en) ?
|
|
||||||
palette_cache_lookup_color(
|
|
||||||
p_ctrl->palette_cache,
|
|
||||||
cur) :
|
|
||||||
-1;
|
|
||||||
if (cache_idx >= 0) { // cache hit
|
|
||||||
code.palette_idx = cache_idx;
|
|
||||||
md = Palette;
|
|
||||||
} else { // cache miss
|
|
||||||
code.color = cur;
|
|
||||||
md = Literal;
|
|
||||||
}
|
|
||||||
rl_cnt = 1;
|
|
||||||
} else { // still within a run
|
|
||||||
rl_cnt++;
|
|
||||||
}
|
|
||||||
last_color = cur;
|
|
||||||
inPtr += p_ctrl->pel_sz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
enc_mode_syntax(&bitstream, md, rl_cnt, code, p_ctrl);
|
|
||||||
int blk_bs_size = ((bitstream.bit_pos + 127) >> 7)
|
|
||||||
<< 4; // in byte, 16byte align
|
|
||||||
memcpy(obs, p_ctrl->bsbuf, blk_bs_size * sizeof(uint8_t));
|
|
||||||
|
|
||||||
return blk_bs_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void osd_cmpr_dec_one_frame(uint8_t *bsbuf, size_t bs_size, uint8_t *obuf,
|
|
||||||
OSDCmpr_Ctrl *p_ctrl)
|
|
||||||
{
|
|
||||||
StreamBuffer bitstream;
|
|
||||||
init_stream(&bitstream, bsbuf, bs_size, true);
|
|
||||||
int remain_pix_cnt = p_ctrl->reg_image_width * p_ctrl->reg_image_height;
|
|
||||||
uint8_t *outPtr = obuf;
|
|
||||||
int run_len;
|
|
||||||
RGBA color;
|
|
||||||
while (remain_pix_cnt > 0) {
|
|
||||||
MODE_TYPE md = dec_mode_prefix(&bitstream,
|
|
||||||
p_ctrl->reg_palette_mode_en);
|
|
||||||
// decode run len
|
|
||||||
if (md == Literal_RL || md == Palette_RL) {
|
|
||||||
uint8_t run_syntax = 0;
|
|
||||||
parse_stream(&bitstream, &run_syntax,
|
|
||||||
p_ctrl->reg_run_len_bd, false);
|
|
||||||
run_len = run_syntax + 1;
|
|
||||||
} else {
|
|
||||||
run_len = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
CODE code = dec_code_syntax(&bitstream, md, p_ctrl);
|
|
||||||
if (md == Literal || md == Literal_RL) {
|
|
||||||
color = code.color;
|
|
||||||
palette_cache_push_color(p_ctrl->palette_cache, color);
|
|
||||||
} else if (md == Palette || md == Palette_RL) {
|
|
||||||
color = p_ctrl->palette_cache[code.palette_idx];
|
|
||||||
palette_cache_lru_update(p_ctrl->palette_cache,
|
|
||||||
code.palette_idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
// reconstruct pixels
|
|
||||||
for (int idx = 0; idx < run_len; idx++) {
|
|
||||||
set_color(outPtr, color, p_ctrl->reg_osd_format);
|
|
||||||
outPtr += p_ctrl->pel_sz;
|
|
||||||
remain_pix_cnt--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void osd_cmpr_enc_header(uint8_t *hdrbuf, OSDCmpr_Ctrl *p_ctrl)
|
|
||||||
{
|
|
||||||
StreamBuffer bs_header;
|
|
||||||
size_t width_m1 = p_ctrl->reg_image_width - 1,
|
|
||||||
height_m1 = p_ctrl->reg_image_height - 1;
|
|
||||||
init_stream(&bs_header, hdrbuf, HDR_SZ, false);
|
|
||||||
move_stream_ptr(&bs_header, 8); // bit[0:7] version
|
|
||||||
write_stream(&bs_header, (uint8_t *)&p_ctrl->reg_osd_format,
|
|
||||||
4); // bit[8:11] osd_format
|
|
||||||
move_stream_ptr(&bs_header, 3); // bit[12:14] reserved
|
|
||||||
size_t palette_cache_size = 1 << p_ctrl->reg_palette_idx_bd;
|
|
||||||
write_stream(&bs_header, (uint8_t *)&palette_cache_size,
|
|
||||||
8); // bit[15:22] palette_cache_size
|
|
||||||
write_stream(&bs_header, (uint8_t *)&p_ctrl->reg_alpha_trunc_bit,
|
|
||||||
2); // bit[23:24] alpha truncate
|
|
||||||
move_stream_ptr(&bs_header, 2); // bit[25:26] reserved
|
|
||||||
write_stream(&bs_header, (uint8_t *)&p_ctrl->reg_rgb_trunc_bit,
|
|
||||||
2); // bit[27:28] alpha truncate
|
|
||||||
move_stream_ptr(&bs_header, 2); // bit[29:30] reserved
|
|
||||||
write_stream(&bs_header, (uint8_t *)&width_m1,
|
|
||||||
16); // bit[31:46] image_width minus 1
|
|
||||||
write_stream(&bs_header, (uint8_t *)&height_m1,
|
|
||||||
16); // bit[47:62] image_height minus 1
|
|
||||||
}
|
|
||||||
|
|
||||||
void osd_cmpr_dec_header(uint8_t *hdrbuf, OSDCmpr_Ctrl *p_ctrl)
|
|
||||||
{
|
|
||||||
StreamBuffer bs_header;
|
|
||||||
init_stream(&bs_header, hdrbuf, HDR_SZ, true);
|
|
||||||
uint8_t palette_cache_size;
|
|
||||||
uint16_t width_m1, height_m1;
|
|
||||||
p_ctrl->reg_osd_format = OSD_ARGB8888;
|
|
||||||
p_ctrl->reg_alpha_trunc_bit = 0;
|
|
||||||
p_ctrl->reg_rgb_trunc_bit = 0;
|
|
||||||
|
|
||||||
move_stream_ptr(&bs_header, 8); // bit[0:7] version
|
|
||||||
parse_stream(&bs_header, (uint8_t *)&p_ctrl->reg_osd_format, 4,
|
|
||||||
false); // bit[8:11] osd_format
|
|
||||||
move_stream_ptr(&bs_header, 3); // bit[12:14] reserved
|
|
||||||
parse_stream(&bs_header, &palette_cache_size, 8,
|
|
||||||
false); // bit[15:22] palette_cache_size
|
|
||||||
parse_stream(&bs_header, (uint8_t *)&p_ctrl->reg_alpha_trunc_bit, 2,
|
|
||||||
false); // bit[23:24] alpha truncate
|
|
||||||
move_stream_ptr(&bs_header, 2); // bit[25:26] reserved
|
|
||||||
parse_stream(&bs_header, (uint8_t *)&p_ctrl->reg_rgb_trunc_bit, 2,
|
|
||||||
false); // bit[27:28] alpha truncate
|
|
||||||
move_stream_ptr(&bs_header, 2); // bit[29:30] reserved
|
|
||||||
parse_stream(&bs_header, (uint8_t *)&width_m1, 16,
|
|
||||||
false); // bit[31:46] image_width minus 1
|
|
||||||
parse_stream(&bs_header, (uint8_t *)&height_m1, 16,
|
|
||||||
false); // bit[47:62] image_height minus 1
|
|
||||||
p_ctrl->reg_palette_mode_en = palette_cache_size > 1;
|
|
||||||
if (p_ctrl->reg_palette_mode_en) {
|
|
||||||
int palette_idx_bd = 0;
|
|
||||||
while ((1 << palette_idx_bd) < palette_cache_size) {
|
|
||||||
palette_idx_bd++;
|
|
||||||
}
|
|
||||||
p_ctrl->reg_palette_idx_bd = palette_idx_bd;
|
|
||||||
}
|
|
||||||
p_ctrl->reg_image_width = width_m1 + 1;
|
|
||||||
p_ctrl->reg_image_height = height_m1 + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void osd_cmpr_enc_followed_run(RGBA cur_c, int &rl_cnt, MODE_TYPE &md,
|
|
||||||
CODE &code, int &length, int max_run_len,
|
|
||||||
OSDCmpr_Ctrl *p_ctrl, StreamBuffer *bitstream)
|
|
||||||
{
|
|
||||||
enc_mode_syntax(bitstream, md, rl_cnt, code, p_ctrl);
|
|
||||||
rl_cnt = min(length, max_run_len);
|
|
||||||
length -= rl_cnt;
|
|
||||||
// followed run must select Palette idx 0
|
|
||||||
if (md != Palette || (md == Palette && code.palette_idx != 0)) {
|
|
||||||
if (p_ctrl->reg_palette_mode_en) {
|
|
||||||
code.palette_idx = 0;
|
|
||||||
md = Palette;
|
|
||||||
} else {
|
|
||||||
code.color = cur_c;
|
|
||||||
md = Literal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void osd_cmpr_enc_const_pixel(RGBA cur_c, RGBA &last_c, int &rl_cnt,
|
|
||||||
MODE_TYPE &md, CODE &code, int &length,
|
|
||||||
bool is_force_new_run, int max_run_len,
|
|
||||||
OSDCmpr_Ctrl *p_ctrl, StreamBuffer *bitstream)
|
|
||||||
{
|
|
||||||
if ((!is_equal_color(cur_c, last_c)) || is_force_new_run ||
|
|
||||||
(rl_cnt == max_run_len)) {
|
|
||||||
// new run
|
|
||||||
enc_mode_syntax(bitstream, md, rl_cnt, code, p_ctrl);
|
|
||||||
// mode detection
|
|
||||||
int cache_idx = (p_ctrl->reg_palette_mode_en) ?
|
|
||||||
palette_cache_lookup_color(
|
|
||||||
p_ctrl->palette_cache, cur_c) :
|
|
||||||
-1;
|
|
||||||
if (cache_idx >= 0) { // cache hit
|
|
||||||
code.palette_idx = cache_idx;
|
|
||||||
md = Palette;
|
|
||||||
} else { // cache miss
|
|
||||||
code.color = cur_c;
|
|
||||||
md = Literal;
|
|
||||||
}
|
|
||||||
rl_cnt = min(length, max_run_len);
|
|
||||||
length -= rl_cnt;
|
|
||||||
last_c = cur_c;
|
|
||||||
} else { // still within a run
|
|
||||||
int new_rl_cnt = min(rl_cnt + length, max_run_len);
|
|
||||||
length -= (new_rl_cnt - rl_cnt);
|
|
||||||
rl_cnt = new_rl_cnt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void osd_cmpr_debug_frame_compare(OSDCmpr_Ctrl *p_ctrl, uint8_t *buf0,
|
|
||||||
uint8_t *buf1)
|
|
||||||
{
|
|
||||||
int frame_pel_num = p_ctrl->reg_image_width * p_ctrl->reg_image_height;
|
|
||||||
uint8_t *ptr0 = buf0, *ptr1 = buf1;
|
|
||||||
for (int pel_i = 0; pel_i < frame_pel_num; pel_i++) {
|
|
||||||
RGBA color0 = get_color(ptr0, p_ctrl->reg_osd_format);
|
|
||||||
RGBA color1 = get_color(ptr1, p_ctrl->reg_osd_format);
|
|
||||||
if (!is_equal_color(color0, color1)) {
|
|
||||||
printf("pel idx %d %d %d\n", pel_i, color0.code,
|
|
||||||
color1.code);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ptr0 += p_ctrl->pel_sz;
|
|
||||||
ptr1 += p_ctrl->pel_sz;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void osd_cmpr_frame_init(OSDCmpr_Ctrl *p_ctrl)
|
|
||||||
{
|
|
||||||
p_ctrl->palette_cache.clear();
|
|
||||||
palette_cache_init(p_ctrl->palette_cache,
|
|
||||||
1 << p_ctrl->reg_palette_idx_bd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void osd_cmpr_setup(OSDCmpr_Ctrl *p_ctrl, OSDCmpr_Cfg *p_cfg)
|
|
||||||
{
|
|
||||||
p_ctrl->reg_image_width = p_cfg->img_width;
|
|
||||||
p_ctrl->reg_image_height = p_cfg->img_height;
|
|
||||||
p_ctrl->reg_zeroize_by_alpha = p_cfg->zeroize_by_alpha;
|
|
||||||
p_ctrl->reg_rgb_trunc_bit = p_cfg->rgb_trunc_bit;
|
|
||||||
p_ctrl->reg_alpha_trunc_bit = p_cfg->alpha_trunc_bit;
|
|
||||||
p_ctrl->reg_palette_mode_en = p_cfg->palette_mode_en;
|
|
||||||
p_ctrl->reg_run_len_bd = p_cfg->run_len_bd;
|
|
||||||
p_ctrl->reg_palette_idx_bd =
|
|
||||||
(p_cfg->palette_mode_en) ? p_cfg->palette_idx_bd : 0;
|
|
||||||
p_ctrl->reg_osd_format = p_cfg->osd_format;
|
|
||||||
p_ctrl->pel_sz = osd_cmpr_get_pixel_sz(p_cfg->osd_format);
|
|
||||||
p_ctrl->bs_buf_size = osd_cmpr_get_bs_buf_max_sz(
|
|
||||||
p_cfg->img_width * p_cfg->img_height, p_ctrl->pel_sz);
|
|
||||||
p_ctrl->bsbuf = (uint8_t *)calloc(p_ctrl->bs_buf_size, sizeof(uint8_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t osd_cmpr_get_pixel_sz(OSD_FORMAT format)
|
|
||||||
{
|
|
||||||
return (format == OSD_ARGB8888) ?
|
|
||||||
4 :
|
|
||||||
(format == OSD_ARGB1555 || format == OSD_ARGB4444) ?
|
|
||||||
2 :
|
|
||||||
1; // (OSD_LUT8, OSD_LUT4)
|
|
||||||
};
|
|
||||||
|
|
||||||
size_t osd_cmpr_get_bs_buf_max_sz(int pel_num, int pel_sz)
|
|
||||||
{
|
|
||||||
return HDR_SZ + ((((pel_num * (pel_sz * 8 + 1)) + 127) >> 7)
|
|
||||||
<< 4); // in bytes, 16byte align
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t osd_cmpr_get_header_sz()
|
|
||||||
{
|
|
||||||
return HDR_SZ;
|
|
||||||
}
|
|
||||||
36
middleware/v2/modules/rgn/Makefile
Normal file
36
middleware/v2/modules/rgn/Makefile
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
SHELL = /bin/bash
|
||||||
|
ifeq ($(PARAM_FILE), )
|
||||||
|
PARAM_FILE:=../../Makefile.param
|
||||||
|
include $(PARAM_FILE)
|
||||||
|
endif
|
||||||
|
|
||||||
|
SDIR = $(PWD)/src
|
||||||
|
SRCS = $(wildcard $(SDIR)/*.c)
|
||||||
|
INCS = -I$(MW_INC) -I$(KERNEL_INC) -I$(SYS_INC) -I$(BIN_INC) -I./include
|
||||||
|
OBJS = $(SRCS:.c=.o)
|
||||||
|
DEPS = $(SRCS:.c=.d)
|
||||||
|
TARGET_A = $(MW_LIB)/librgn.a
|
||||||
|
TARGET_SO = $(MW_LIB)/librgn.so
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = $(INCS)
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY : clean all
|
||||||
|
all : $(TARGET_A) $(TARGET_SO)
|
||||||
|
$(SDIR)/%.o: $(SDIR)/%.c
|
||||||
|
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@
|
||||||
|
@echo [$(notdir $(CC))] $(notdir $@)
|
||||||
|
|
||||||
|
$(TARGET_A): $(OBJS)
|
||||||
|
@$(AR) $(ARFLAGS) $(TARGET_A) $(OBJS)
|
||||||
|
@echo -e $(YELLOW)[LINK]$(END)[$(notdir $(AR))] $(notdir $(TARGET_A))
|
||||||
|
|
||||||
|
$(TARGET_SO): $(OBJS)
|
||||||
|
@$(LD) $(LDFLAGS) -o $(TARGET_SO) --start-group $(OBJS) --end-group
|
||||||
|
@echo -e $(GREEN)[LINK]$(END)[$(notdir $(LD))] $(notdir $(TARGET_SO))
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f $(OBJS) $(DEPS) $(TARGET_A) $(TARGET_SO)
|
||||||
|
|
||||||
|
-include $(DEPS)
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ DEPS_ASM = $(SRCS_ASM:.S=.d)
|
|||||||
TARGET_A = $(MW_LIB)/libsys.a
|
TARGET_A = $(MW_LIB)/libsys.a
|
||||||
TARGET_SO = $(MW_LIB)/libsys.so
|
TARGET_SO = $(MW_LIB)/libsys.so
|
||||||
|
|
||||||
INCS = -I$(MW_INC) -I$(KERNEL_INC) -I$(SYS_INC) -I$(VPU_INC)
|
INCS = -I$(MW_INC) -I$(KERNEL_INC) -I$(SYS_INC) -I$(VI_INC) -I$(VPSS_INC)
|
||||||
|
|
||||||
EXTRA_CFLAGS = $(INCS) -fpack-struct=8
|
EXTRA_CFLAGS = $(INCS) -fpack-struct=8
|
||||||
EXTRA_CFLAGS += -DMMF_VERSION=\"$(shell git describe --always)\"
|
EXTRA_CFLAGS += -DMMF_VERSION=\"$(shell git describe --always)\"
|
||||||
|
|||||||
@ -23,14 +23,6 @@ endif
|
|||||||
|
|
||||||
ldflags-y = -lsys
|
ldflags-y = -lsys
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(CLI_DEBUG_SUPPORT), 1)
|
|
||||||
DEFS += -DCLI_DEBUG_SUPPORT
|
|
||||||
ldflags-y += -lcli
|
|
||||||
LIB_A_FLAGS += $(MW_3RD_LIB)/libcli.a
|
|
||||||
LIB_SO_FLAGS += $(MW_3RD_LIB)/libcli.so
|
|
||||||
endif
|
|
||||||
|
|
||||||
TMP_INC = $(MW_INC)/cvi_jpg* $(MW_INC)/cvi_h265*
|
TMP_INC = $(MW_INC)/cvi_jpg* $(MW_INC)/cvi_h265*
|
||||||
|
|
||||||
.PHONY : clean all
|
.PHONY : clean all
|
||||||
|
|||||||
48
middleware/v2/modules/vi/Makefile
Normal file
48
middleware/v2/modules/vi/Makefile
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
SHELL = /bin/bash
|
||||||
|
ifeq ($(PARAM_FILE), )
|
||||||
|
PARAM_FILE:=../../Makefile.param
|
||||||
|
include $(PARAM_FILE)
|
||||||
|
endif
|
||||||
|
|
||||||
|
SDIR = $(PWD)/src
|
||||||
|
SRCS = $(wildcard $(SDIR)/*.c)
|
||||||
|
ifeq ($(CHIP_ARCH), $(filter $(CHIP_ARCH), CV180X CV181X CV182X MARS PHOBOS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/cvi_gdc.c, $(SRCS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/gdc_mesh.c, $(SRCS))
|
||||||
|
else
|
||||||
|
SRCS := $(filter-out $(SDIR)/cvi_gdc_1822.c, $(SRCS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/gdc_mesh_1822.c, $(SRCS))
|
||||||
|
endif
|
||||||
|
|
||||||
|
INCS = -I$(MW_INC) -I$(ISP_INC) -I$(SYS_INC) -I$(KERNEL_INC) -I$(BIN_INC) -I./include -I../gdc/include
|
||||||
|
|
||||||
|
OBJS = $(SRCS:.c=.o)
|
||||||
|
DEPS = $(SRCS:.c=.d)
|
||||||
|
TARGET_A = $(MW_LIB)/libvi.a
|
||||||
|
TARGET_SO = $(MW_LIB)/libvi.so
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = $(INCS)
|
||||||
|
|
||||||
|
.PHONY : clean all
|
||||||
|
all : $(TARGET_A) $(TARGET_SO)
|
||||||
|
|
||||||
|
$(SDIR)/gdc_mesh_1822.o: $(SDIR)/gdc_mesh_1822.c
|
||||||
|
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -O3 -c $< -o $@
|
||||||
|
@echo [$(notdir $(CC))] $(notdir $@)
|
||||||
|
|
||||||
|
$(SDIR)/%.o: $(SDIR)/%.c
|
||||||
|
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@
|
||||||
|
@echo [$(notdir $(CC))] $(notdir $@)
|
||||||
|
|
||||||
|
$(TARGET_A): $(OBJS)
|
||||||
|
@$(AR) $(ARFLAGS) $(TARGET_A) $(OBJS)
|
||||||
|
@echo -e $(YELLOW)[LINK]$(END)[$(notdir $(AR))] $(notdir $(TARGET_A))
|
||||||
|
|
||||||
|
$(TARGET_SO): $(OBJS)
|
||||||
|
@$(LD) $(LDFLAGS) -o $(TARGET_SO) --start-group $(OBJS) --end-group
|
||||||
|
@echo -e $(GREEN)[LINK]$(END)[$(notdir $(LD))] $(notdir $(TARGET_SO))
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f $(OBJS) $(DEPS) $(TARGET_A) $(TARGET_SO)
|
||||||
|
|
||||||
|
-include $(DEPS)
|
||||||
@ -122,7 +122,7 @@ struct cvi_gdc_mesh g_vi_mesh[VI_MAX_CHN_NUM];
|
|||||||
struct cvi_vi_ctx *gViCtx;
|
struct cvi_vi_ctx *gViCtx;
|
||||||
|
|
||||||
struct vi_dbg_th_info_s {
|
struct vi_dbg_th_info_s {
|
||||||
CVI_U8 th_enable;
|
CVI_U8 dbg_th_disable;
|
||||||
pthread_t vi_dbg_thread;
|
pthread_t vi_dbg_thread;
|
||||||
};
|
};
|
||||||
struct vi_dbg_th_info_s gViDbgTH;
|
struct vi_dbg_th_info_s gViDbgTH;
|
||||||
@ -143,9 +143,9 @@ static CVI_VOID *vi_dbg_handler(CVI_VOID *data)
|
|||||||
|
|
||||||
fd = get_vi_fd();
|
fd = get_vi_fd();
|
||||||
|
|
||||||
gViDbgTH.th_enable = CVI_TRUE;
|
// gViDbgTH.dbg_th_disable = CVI_TRUE;
|
||||||
|
|
||||||
while (gViDbgTH.th_enable) {
|
while (!gViDbgTH.dbg_th_disable) {
|
||||||
FD_ZERO(&rfds);
|
FD_ZERO(&rfds);
|
||||||
FD_SET(fd, &rfds);
|
FD_SET(fd, &rfds);
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ static CVI_VOID *vi_dbg_handler(CVI_VOID *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Cat vi_dbg/mipi_rx if error
|
//Cat vi_dbg/mipi_rx if error
|
||||||
if (FD_ISSET(fd, &rfds) && gViDbgTH.th_enable) {
|
if (FD_ISSET(fd, &rfds) && !gViDbgTH.dbg_th_disable) {
|
||||||
system("cat /proc/mipi-rx");
|
system("cat /proc/mipi-rx");
|
||||||
system("cat /proc/cvitek/vi_dbg");
|
system("cat /proc/cvitek/vi_dbg");
|
||||||
}
|
}
|
||||||
@ -1348,6 +1348,40 @@ CVI_S32 CVI_VI_GetPipeCrop(VI_PIPE ViPipe, CROP_INFO_S *pstCropInfo)
|
|||||||
return CVI_SUCCESS;
|
return CVI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CVI_S32 CVI_VI_GetRgbMapLeBuf(VI_PIPE ViPipe, void *pstMemblk)
|
||||||
|
{
|
||||||
|
CVI_S32 fd = -1;
|
||||||
|
CVI_S32 s32Ret = CVI_SUCCESS;
|
||||||
|
|
||||||
|
fd = get_vi_fd();
|
||||||
|
|
||||||
|
CHECK_VI_PIPEID_VALID(ViPipe);
|
||||||
|
CHECK_VI_NULL_PTR(pstMemblk);
|
||||||
|
if (s32Ret != CVI_SUCCESS) {
|
||||||
|
CVI_TRACE_VI(CVI_DBG_ERR, "Get SE rgb map buf fail, ViPipe:%d s32Ret:%x\n", ViPipe, s32Ret);
|
||||||
|
return s32Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vi_get_rgbmap_le_buf(fd, (struct cvi_vip_memblock *)pstMemblk);
|
||||||
|
}
|
||||||
|
|
||||||
|
CVI_S32 CVI_VI_GetRgbMapSeBuf(VI_PIPE ViPipe, void *pstMemblk)
|
||||||
|
{
|
||||||
|
CVI_S32 fd = -1;
|
||||||
|
CVI_S32 s32Ret = CVI_SUCCESS;
|
||||||
|
|
||||||
|
fd = get_vi_fd();
|
||||||
|
|
||||||
|
CHECK_VI_PIPEID_VALID(ViPipe);
|
||||||
|
CHECK_VI_NULL_PTR(pstMemblk);
|
||||||
|
if (s32Ret != CVI_SUCCESS) {
|
||||||
|
CVI_TRACE_VI(CVI_DBG_ERR, "Get SE rgb map buf fail, ViPipe:%d s32Ret:%x\n", ViPipe, s32Ret);
|
||||||
|
return s32Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vi_get_rgbmap_se_buf(fd, (struct cvi_vip_memblock *)pstMemblk);
|
||||||
|
}
|
||||||
|
|
||||||
CVI_S32 CVI_VI_AttachVbPool(VI_PIPE ViPipe, VI_CHN ViChn, VB_POOL VbPool)
|
CVI_S32 CVI_VI_AttachVbPool(VI_PIPE ViPipe, VI_CHN ViChn, VB_POOL VbPool)
|
||||||
{
|
{
|
||||||
CHECK_VI_PIPEID_VALID(ViPipe);
|
CHECK_VI_PIPEID_VALID(ViPipe);
|
||||||
@ -1466,7 +1500,7 @@ CVI_S32 CVI_VI_EnableChn(VI_PIPE ViPipe, VI_CHN ViChn)
|
|||||||
return CVI_ERR_VI_FAILED_NOT_ENABLED;
|
return CVI_ERR_VI_FAILED_NOT_ENABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
if (!gViDbgTH.dbg_th_disable) {
|
||||||
struct sched_param param;
|
struct sched_param param;
|
||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
|
|
||||||
@ -1519,7 +1553,7 @@ CVI_S32 CVI_VI_DisableChn(VI_PIPE ViPipe, VI_CHN ViChn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (all_chn_disabled) {
|
if (all_chn_disabled) {
|
||||||
gViDbgTH.th_enable = CVI_FALSE;
|
gViDbgTH.dbg_th_disable = CVI_TRUE;
|
||||||
|
|
||||||
s32Ret = vi_sdk_disable_chn(fd, ViPipe, ViChn);
|
s32Ret = vi_sdk_disable_chn(fd, ViPipe, ViChn);
|
||||||
if (s32Ret != CVI_SUCCESS) {
|
if (s32Ret != CVI_SUCCESS) {
|
||||||
@ -2179,3 +2213,30 @@ CVI_S32 CVI_VI_GetDevAttrEx(VI_DEV ViDev, VI_DEV_ATTR_EX_S *pstDevAttrEx)
|
|||||||
|
|
||||||
return CVI_SUCCESS;
|
return CVI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CVI_S32 CVI_VI_SINGEL_FRAME_ENABLE(bool flag)
|
||||||
|
{
|
||||||
|
CVI_S32 s32Ret = CVI_SUCCESS;
|
||||||
|
CVI_S32 fd = -1;
|
||||||
|
|
||||||
|
fd = get_vi_fd();
|
||||||
|
if (fd < 0) {
|
||||||
|
CVI_TRACE_VI(CVI_DBG_ERR, "get_vi_fd open failed\n");
|
||||||
|
return CVI_ERR_VI_BUSY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flag) {
|
||||||
|
gViDbgTH.dbg_th_disable = CVI_TRUE;
|
||||||
|
} else {
|
||||||
|
gViDbgTH.dbg_th_disable = CVI_FALSE;
|
||||||
|
}
|
||||||
|
s32Ret = vi_enable_singel_frame(fd, flag);
|
||||||
|
|
||||||
|
if (s32Ret != CVI_SUCCESS) {
|
||||||
|
CVI_TRACE_VI(CVI_DBG_ERR, "vi choose mode failed\n");
|
||||||
|
return CVI_ERR_VI_FAILED_NOT_ENABLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s32Ret;
|
||||||
|
}
|
||||||
@ -410,3 +410,8 @@ int vi_sdk_detach_vbpool(int fd, const struct vi_vb_pool_cfg *cfg)
|
|||||||
{
|
{
|
||||||
SDK_CTRL_SET_CFG(fd, cfg, VI_SDK_DETACH_VB_POOL, -1, -1, cfg->ViChn, -1);
|
SDK_CTRL_SET_CFG(fd, cfg, VI_SDK_DETACH_VB_POOL, -1, -1, cfg->ViChn, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vi_enable_singel_frame(int fd, CVI_BOOL flag)
|
||||||
|
{
|
||||||
|
S_CTRL_VALUE(fd, flag, VI_SINGEL_FRAME_ENABLE);
|
||||||
|
}
|
||||||
@ -14,12 +14,12 @@ else
|
|||||||
SRCS := $(filter-out $(SDIR)/gdc_mesh_1822.c, $(SRCS))
|
SRCS := $(filter-out $(SDIR)/gdc_mesh_1822.c, $(SRCS))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
INCS = -I$(MW_INC) -I$(ISP_INC) -I$(KERNEL_INC) -I$(SYS_INC) -I$(BIN_INC) -I./include
|
INCS = -I$(MW_INC) -I$(ISP_INC) -I$(KERNEL_INC) -I$(SYS_INC) -I$(BIN_INC) -I./include -I../gdc/include
|
||||||
|
|
||||||
OBJS = $(SRCS:.c=.o)
|
OBJS = $(SRCS:.c=.o)
|
||||||
DEPS = $(SRCS:.c=.d)
|
DEPS = $(SRCS:.c=.d)
|
||||||
TARGET_A = $(MW_LIB)/libvpu.a
|
TARGET_A = $(MW_LIB)/libvo.a
|
||||||
TARGET_SO = $(MW_LIB)/libvpu.so
|
TARGET_SO = $(MW_LIB)/libvo.so
|
||||||
|
|
||||||
EXTRA_CFLAGS = $(INCS)
|
EXTRA_CFLAGS = $(INCS)
|
||||||
|
|
||||||
53
middleware/v2/modules/vpss/Makefile
Normal file
53
middleware/v2/modules/vpss/Makefile
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
SHELL = /bin/bash
|
||||||
|
ifeq ($(PARAM_FILE), )
|
||||||
|
PARAM_FILE:=../../Makefile.param
|
||||||
|
include $(PARAM_FILE)
|
||||||
|
endif
|
||||||
|
|
||||||
|
SDIR = $(PWD)/src
|
||||||
|
SRCS = $(wildcard $(SDIR)/*.c)
|
||||||
|
ifeq ($(CHIP_ARCH), $(filter $(CHIP_ARCH), CV180X CV181X CV182X MARS PHOBOS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/cvi_gdc.c, $(SRCS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/gdc_mesh.c, $(SRCS))
|
||||||
|
else
|
||||||
|
SRCS := $(filter-out $(SDIR)/cvi_gdc_1822.c, $(SRCS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/gdc_mesh_1822.c, $(SRCS))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CHIP_ARCH), $(filter $(CHIP_ARCH), CV180X PHOBOS))
|
||||||
|
SRCS := $(filter-out $(SDIR)/cvi_vo.c, $(SRCS))
|
||||||
|
endif
|
||||||
|
|
||||||
|
INCS = -I$(MW_INC) -I$(ISP_INC) -I$(SYS_INC) -I$(BIN_INC) -I./include -I../gdc/include -I$(KERNEL_INC)
|
||||||
|
|
||||||
|
OBJS = $(SRCS:.c=.o)
|
||||||
|
DEPS = $(SRCS:.c=.d)
|
||||||
|
TARGET_A = $(MW_LIB)/libvpss.a
|
||||||
|
TARGET_SO = $(MW_LIB)/libvpss.so
|
||||||
|
|
||||||
|
EXTRA_CFLAGS = $(INCS)
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY : clean all
|
||||||
|
all : $(TARGET_A) $(TARGET_SO)
|
||||||
|
|
||||||
|
$(SDIR)/gdc_mesh_1822.o: $(SDIR)/gdc_mesh_1822.c
|
||||||
|
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -O3 -c $< -o $@
|
||||||
|
@echo [$(notdir $(CC))] $(notdir $@)
|
||||||
|
|
||||||
|
$(SDIR)/%.o: $(SDIR)/%.c
|
||||||
|
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@
|
||||||
|
@echo [$(notdir $(CC))] $(notdir $@)
|
||||||
|
|
||||||
|
$(TARGET_A): $(OBJS)
|
||||||
|
@$(AR) $(ARFLAGS) $(TARGET_A) $(OBJS)
|
||||||
|
@echo -e $(YELLOW)[LINK]$(END)[$(notdir $(AR))] $(notdir $(TARGET_A))
|
||||||
|
|
||||||
|
$(TARGET_SO): $(OBJS)
|
||||||
|
@$(LD) $(LDFLAGS) -o $(TARGET_SO) --start-group $(OBJS) --end-group
|
||||||
|
@echo -e $(GREEN)[LINK]$(END)[$(notdir $(LD))] $(notdir $(TARGET_SO))
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f $(OBJS) $(DEPS) $(TARGET_A) $(TARGET_SO)
|
||||||
|
|
||||||
|
-include $(DEPS)
|
||||||
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
|
|
||||||
*
|
|
||||||
* File Name: module/vpu/include/dump_register.h
|
|
||||||
* Description:
|
|
||||||
* dump hw register and lut for ISP module.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __DUMP_REGISTER_H__
|
|
||||||
#define __DUMP_REGISTER_H__
|
|
||||||
|
|
||||||
#include <linux/cvi_comm_vi.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#if __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
CVI_S32 dump_register_182x(VI_PIPE ViPipe, FILE *fp, VI_DUMP_REGISTER_TABLE_S *pstRegTbl);
|
|
||||||
CVI_S32 dump_register_183x(VI_PIPE ViPipe, FILE *fp, VI_DUMP_REGISTER_TABLE_S *pstRegTbl);
|
|
||||||
CVI_S32 dump_hw_register(VI_PIPE ViPipe, FILE *fp, VI_DUMP_REGISTER_TABLE_S *pstRegTbl);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#if __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
#endif /*__DUMP_REGISTER_H__ */
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
#ifndef MODULES_VPU_INCLUDE_GDC_CTX_H_
|
|
||||||
#define MODULES_VPU_INCLUDE_GDC_CTX_H_
|
|
||||||
|
|
||||||
#include <linux/cvi_vi_ctx.h>
|
|
||||||
#include "cvi_base.h"
|
|
||||||
|
|
||||||
extern struct cvi_gdc_mesh mesh[VPSS_MAX_GRP_NUM][VPSS_MAX_CHN_NUM];
|
|
||||||
extern struct cvi_gdc_mesh g_vi_mesh[VI_MAX_CHN_NUM];
|
|
||||||
extern struct cvi_vi_ctx *gViCtx;
|
|
||||||
|
|
||||||
#endif /* MODULES_VPU_INCLUDE_VPSS_CTX_H_ */
|
|
||||||
@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
|
|
||||||
*
|
|
||||||
* File Name: module/vpu/include/gdc_mesh.h
|
|
||||||
* Description:
|
|
||||||
* GDC's mesh generator for hw.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MODULES_VPU_INCLUDE_GDC_MESH_H_
|
|
||||||
#define MODULES_VPU_INCLUDE_GDC_MESH_H_
|
|
||||||
|
|
||||||
#define CVI_GDC_MAGIC 0xbabeface
|
|
||||||
|
|
||||||
#define CVI_GDC_MESH_SIZE_ROT 0x60000
|
|
||||||
#define CVI_GDC_MESH_SIZE_AFFINE 0x20000
|
|
||||||
#define CVI_GDC_MESH_SIZE_FISHEYE 0xB0000
|
|
||||||
|
|
||||||
enum gdc_task_type {
|
|
||||||
GDC_TASK_TYPE_ROT = 0,
|
|
||||||
GDC_TASK_TYPE_FISHEYE,
|
|
||||||
GDC_TASK_TYPE_AFFINE,
|
|
||||||
GDC_TASK_TYPE_LDC,
|
|
||||||
GDC_TASK_TYPE_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* gdc_task_param: the gdc task.
|
|
||||||
*
|
|
||||||
* stTask: define the in/out image info.
|
|
||||||
* type: the type of gdc task.
|
|
||||||
* param: the parameters for gdc task.
|
|
||||||
*/
|
|
||||||
struct gdc_task_param {
|
|
||||||
STAILQ_ENTRY(gdc_task_param) stailq;
|
|
||||||
|
|
||||||
GDC_TASK_ATTR_S stTask;
|
|
||||||
enum gdc_task_type type;
|
|
||||||
union {
|
|
||||||
ROTATION_E enRotation;
|
|
||||||
FISHEYE_ATTR_S stFishEyeAttr;
|
|
||||||
AFFINE_ATTR_S stAffineAttr;
|
|
||||||
LDC_ATTR_S stLDCAttr;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* gdc_job: the handle of gdc.
|
|
||||||
*
|
|
||||||
* ctx: the list of gdc task in the gdc job.
|
|
||||||
* mutex: used if this job is sync-io.
|
|
||||||
* cond: used if this job is sync-io.
|
|
||||||
* sync_io: CVI_GDC_EndJob() will blocked until done is this is true.
|
|
||||||
* only meaningful if internal module use gdc.
|
|
||||||
* Default true;
|
|
||||||
*/
|
|
||||||
struct gdc_job {
|
|
||||||
STAILQ_ENTRY(gdc_job) stailq;
|
|
||||||
|
|
||||||
STAILQ_HEAD(gdc_job_ctx, gdc_task_param) ctx;
|
|
||||||
pthread_cond_t cond;
|
|
||||||
CVI_BOOL sync_io;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum gdc_job_state {
|
|
||||||
GDC_JOB_SUCCESS = 0,
|
|
||||||
GDC_JOB_FAIL,
|
|
||||||
GDC_JOB_WORKING,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct gdc_job_info {
|
|
||||||
CVI_S64 hHandle;
|
|
||||||
MOD_ID_E enModId; // the module submitted gdc job
|
|
||||||
CVI_U32 u32TaskNum; // number of tasks
|
|
||||||
enum gdc_job_state eState; // job state
|
|
||||||
CVI_U32 u32InSize;
|
|
||||||
CVI_U32 u32OutSize;
|
|
||||||
CVI_U32 u32CostTime; // From job submitted to job done
|
|
||||||
CVI_U32 u32HwTime; // HW cost time
|
|
||||||
CVI_U32 u32BusyTime; // From job submitted to job commit to driver
|
|
||||||
CVI_U64 u64SubmitTime; // us
|
|
||||||
};
|
|
||||||
|
|
||||||
struct gdc_job_status {
|
|
||||||
CVI_U32 u32Success;
|
|
||||||
CVI_U32 u32Fail;
|
|
||||||
CVI_U32 u32Cancel;
|
|
||||||
CVI_U32 u32BeginNum;
|
|
||||||
CVI_U32 u32BusyNum;
|
|
||||||
CVI_U32 u32ProcingNum;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct gdc_task_status {
|
|
||||||
CVI_U32 u32Success;
|
|
||||||
CVI_U32 u32Fail;
|
|
||||||
CVI_U32 u32Cancel;
|
|
||||||
CVI_U32 u32BusyNum;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct gdc_operation_status {
|
|
||||||
CVI_U32 u32AddTaskSuc;
|
|
||||||
CVI_U32 u32AddTaskFail;
|
|
||||||
CVI_U32 u32EndSuc;
|
|
||||||
CVI_U32 u32EndFail;
|
|
||||||
CVI_U32 u32CbCnt;
|
|
||||||
};
|
|
||||||
|
|
||||||
int get_mesh_size(int *p_mesh_hor, int *p_mesh_ver);
|
|
||||||
int set_mesh_size(int mesh_hor, int mesh_ver);
|
|
||||||
void mesh_gen_get_size(SIZE_S in_size, SIZE_S out_size, CVI_U32 *mesh_id_size, CVI_U32 *mesh_tbl_size);
|
|
||||||
void mesh_gen_rotation(SIZE_S in_size, SIZE_S out_size, ROTATION_E rot, uint64_t mesh_phy_addr, void *mesh_vir_addr);
|
|
||||||
void mesh_gen_affine(SIZE_S in_size, SIZE_S out_size, const AFFINE_ATTR_S *pstAffineAttr, uint64_t mesh_phy_addr,
|
|
||||||
void *mesh_vir_addr);
|
|
||||||
void mesh_gen_fisheye(SIZE_S in_size, SIZE_S out_size, const FISHEYE_ATTR_S *pstFisheyeAttr, uint64_t mesh_phy_addr,
|
|
||||||
void *mesh_vir_addr, ROTATION_E rot);
|
|
||||||
CVI_S32 mesh_gen_ldc(SIZE_S in_size, SIZE_S out_size, const LDC_ATTR_S *pstLDCAttr,
|
|
||||||
uint64_t mesh_phy_addr, void *mesh_vir_addr, ROTATION_E rot);
|
|
||||||
|
|
||||||
// cnv
|
|
||||||
void mesh_gen_cnv(const float *pfmesh_data, SIZE_S in_size, SIZE_S out_size, const FISHEYE_ATTR_S *pstFisheyeAttr,
|
|
||||||
uint64_t mesh_phy_addr, void *mesh_vir_addr);
|
|
||||||
|
|
||||||
void get_cnv_warp_mesh_tbl(SIZE_S in_size, SIZE_S out_size, const AFFINE_ATTR_S *pstAffineAttr, uint64_t mesh_phy_addr,
|
|
||||||
void *mesh_vir_addr);
|
|
||||||
|
|
||||||
#endif // MODULES_VPU_INCLUDE_GDC_MESH_H_
|
|
||||||
@ -1,55 +0,0 @@
|
|||||||
#ifndef __GRID_INFO_H__
|
|
||||||
#define __GRID_INFO_H__
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#if __cplusplus
|
|
||||||
extern "C"{
|
|
||||||
#endif
|
|
||||||
#endif /* End of #ifdef __cplusplus */
|
|
||||||
|
|
||||||
typedef struct _MESH_DATA_ALL_S {
|
|
||||||
char grid_name[64];
|
|
||||||
bool balloc;
|
|
||||||
int num_pairs, imgw, imgh, node_index;
|
|
||||||
int *pgrid_src, *pgrid_dst;
|
|
||||||
int *pmesh_src, *pmesh_dst;
|
|
||||||
int *pnode_src, *pnode_dst;
|
|
||||||
int mesh_w; // unit: pixel
|
|
||||||
int mesh_h; // unit: pixel
|
|
||||||
int mesh_horcnt; // unit: mesh_w
|
|
||||||
int mesh_vercnt; // unit: mesh_h
|
|
||||||
int unit_rx; // unit: mesh_w
|
|
||||||
int unit_ry; // unit: mesh_h
|
|
||||||
//int unit_ex; // = rx + mesh_horcnt - 1
|
|
||||||
//int unit_ey; // = ry + mesh_vercnt - 1
|
|
||||||
int _nbr_mesh_x, _nbr_mesh_y;
|
|
||||||
bool _bhomo;
|
|
||||||
float _homography[10];
|
|
||||||
int corners[10];
|
|
||||||
float *_pmapx, *_pmapy;
|
|
||||||
} MESH_DATA_ALL_S;
|
|
||||||
|
|
||||||
#define SAFE_FREE_POINTER(ptr) \
|
|
||||||
do { \
|
|
||||||
if (ptr != NULL) { \
|
|
||||||
free(ptr); \
|
|
||||||
ptr = NULL; \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
typedef MESH_DATA_ALL_S meshdata_all;
|
|
||||||
|
|
||||||
int load_meshdata(const char *path, MESH_DATA_ALL_S *pmeshdata, const char *bindName);
|
|
||||||
|
|
||||||
int free_cur_meshdata(MESH_DATA_ALL_S *pmeshdata);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#if __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif /* End of #ifdef __cplusplus */
|
|
||||||
|
|
||||||
#endif /* __GRID_INFO_H__ */
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
#ifndef _LDC_IOCTL_H_
|
|
||||||
#define _LDC_IOCTL_H_
|
|
||||||
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
#include <linux/dwa_uapi.h>
|
|
||||||
|
|
||||||
/* Configured from user */
|
|
||||||
CVI_S32 gdc_begin_job(CVI_S32 fd, struct gdc_handle_data *cfg);
|
|
||||||
CVI_S32 gdc_end_job(CVI_S32 fd, struct gdc_handle_data *cfg);
|
|
||||||
CVI_S32 gdc_cancel_job(CVI_S32 fd, struct gdc_handle_data *cfg);
|
|
||||||
CVI_S32 gdc_add_rotation_task(CVI_S32 fd, struct gdc_task_attr *attr);
|
|
||||||
CVI_S32 gdc_add_ldc_task(CVI_S32 fd, struct gdc_task_attr *attr);
|
|
||||||
|
|
||||||
/* INTERNAL */
|
|
||||||
CVI_S32 gdc_set_chn_buf_wrap(CVI_S32 fd, const struct dwa_buf_wrap_cfg *cfg);
|
|
||||||
CVI_S32 gdc_get_chn_buf_wrap(CVI_S32 fd, struct dwa_buf_wrap_cfg *cfg);
|
|
||||||
|
|
||||||
#endif /* _LDC_IOCTL_H_ */
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
#ifndef MODULES_VPU_INCLUDE_RGN_IOCTL_H_
|
|
||||||
#define MODULES_VPU_INCLUDE_RGN_IOCTL_H_
|
|
||||||
|
|
||||||
#include <linux/rgn_uapi.h>
|
|
||||||
#include <linux/cvi_comm_region.h>
|
|
||||||
|
|
||||||
int rgn_create(int fd, int Handle, const RGN_ATTR_S *pstRegion);
|
|
||||||
int rgn_destroy(int fd, int Handle);
|
|
||||||
int rgn_get_attr(int fd, int Handle, RGN_ATTR_S *pstRegion);
|
|
||||||
int rgn_set_attr(int fd, int Handle, const RGN_ATTR_S *pstRegion);
|
|
||||||
int rgn_set_bit_map(int fd, int Handle, const BITMAP_S *pstBitmap);
|
|
||||||
int rgn_attach_to_chn(int fd, int Handle, const MMF_CHN_S *pstChn, const RGN_CHN_ATTR_S *pstChnAttr);
|
|
||||||
int rgn_detach_from_chn(int fd, int Handle, const MMF_CHN_S *pstChn);
|
|
||||||
int rgn_set_display_attr(int fd, int Handle, const MMF_CHN_S *pstChn, const RGN_CHN_ATTR_S *pstChnAttr);
|
|
||||||
int rgn_get_display_attr(int fd, int Handle, const MMF_CHN_S *pstChn, RGN_CHN_ATTR_S *pstChnAttr);
|
|
||||||
int rgn_get_canvas_info(int fd, int Handle, RGN_CANVAS_INFO_S *pstCanvasInfo);
|
|
||||||
int rgn_update_canvas(int fd, int Handle);
|
|
||||||
int rgn_invert_color(int fd, int Handle, MMF_CHN_S *pstChn, void *pu32Color);
|
|
||||||
int rgn_set_chn_palette(int fd, int Handle, const MMF_CHN_S *pstChn, RGN_PALETTE_S *pstPalette);
|
|
||||||
|
|
||||||
#endif // MODULES_VPU_INCLUDE_RGN_IOCTL_H_
|
|
||||||
@ -1,76 +0,0 @@
|
|||||||
#ifndef MODULES_VPU_INCLUDE_VI_IOCTL_H_
|
|
||||||
#define MODULES_VPU_INCLUDE_VI_IOCTL_H_
|
|
||||||
|
|
||||||
#include <linux/vi_isp.h>
|
|
||||||
#include <linux/vi_tun_cfg.h>
|
|
||||||
#include <linux/vi_uapi.h>
|
|
||||||
#include <linux/cvi_comm_vi.h>
|
|
||||||
|
|
||||||
int vi_enable_usr_pic(int fd, bool enable);
|
|
||||||
int vi_set_usr_pic(int fd, struct cvi_isp_usr_pic_cfg *cfg);
|
|
||||||
int vi_put_usr_pic(int fd, CVI_U64 phyAddr);
|
|
||||||
int vi_set_usr_pic_timing(int fd, CVI_U32 fps);
|
|
||||||
int vi_set_be_online(int fd, CVI_BOOL online);
|
|
||||||
int vi_set_online(int fd, CVI_BOOL online);
|
|
||||||
int vi_set_hdr(int fd, CVI_BOOL is_hdr_on);
|
|
||||||
int vi_set_3dnr(int fd, CVI_BOOL is_3dnr_on);
|
|
||||||
int vi_get_pipe_dump(int fd, struct cvi_vip_isp_raw_blk *memAddr);
|
|
||||||
int vi_put_pipe_dump(int fd, CVI_U32 dev_num);
|
|
||||||
int vi_set_yuv_bypass_path(int fd, struct cvi_vip_isp_yuv_param *param);
|
|
||||||
int vi_set_compress_mode(int fd, CVI_BOOL is_compress_on);
|
|
||||||
int vi_set_lvds_flow(int fd, CVI_BOOL is_lvds_flow_on);
|
|
||||||
int vi_get_ip_dump_list(int fd, struct ip_info *ip_info_list);
|
|
||||||
int vi_set_trig_preraw(int fd, CVI_U32 dev_num);
|
|
||||||
int vi_set_online2sc(int fd, struct cvi_isp_sc_online *online);
|
|
||||||
int vi_get_tun_addr(int fd, struct isp_tuning_cfg *tun_buf_info);
|
|
||||||
int vi_set_clk(int fd, CVI_BOOL clk_on);
|
|
||||||
int vi_get_dma_size(int fd, CVI_U32 *size);
|
|
||||||
int vi_set_dma_buf_info(int fd, struct cvi_vi_dma_buf_info *param);
|
|
||||||
int vi_set_enq_buf(int fd, struct vi_buffer *buf);
|
|
||||||
int vi_set_start_streaming(int fd);
|
|
||||||
int vi_set_stop_streaming(int fd);
|
|
||||||
int vi_get_rgbmap_le_buf(int fd, struct cvi_vip_memblock *buf);
|
|
||||||
int vi_get_rgbmap_se_buf(int fd, struct cvi_vip_memblock *buf);
|
|
||||||
#ifdef ARCH_CV182X
|
|
||||||
int vi_set_rgbir(int fd, CVI_BOOL is_rgbir);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined ARCH_CV181X) || (defined ARCH_CV180X)
|
|
||||||
int vi_sdk_get_dev_status(int fd, int dev, CVI_BOOL *pbStatus);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int vi_sdk_set_dev_attr(int fd, int dev, VI_DEV_ATTR_S *pstDevAttr);
|
|
||||||
int vi_sdk_get_dev_attr(int fd, int dev, VI_DEV_ATTR_S *pstDevAttr);
|
|
||||||
int vi_sdk_enable_dev(int fd, int dev);
|
|
||||||
int vi_sdk_create_pipe(int fd, int pipe, VI_PIPE_ATTR_S *pstPipeAttr);
|
|
||||||
int vi_sdk_start_pipe(int fd, int pipe);
|
|
||||||
int vi_sdk_set_chn_attr(int fd, int pipe, int chn, VI_CHN_ATTR_S *pstChnAttr);
|
|
||||||
int vi_sdk_get_chn_attr(int fd, int pipe, int chn, VI_CHN_ATTR_S *pstChnAttr);
|
|
||||||
int vi_sdk_set_pipe_attr(int fd, int pipe, VI_PIPE_ATTR_S *pstPipeAttr);
|
|
||||||
int vi_sdk_get_pipe_attr(int fd, int pipe, VI_PIPE_ATTR_S *pstPipeAttr);
|
|
||||||
int vi_sdk_get_pipe_dump_attr(int fd, int pipe, VI_DUMP_ATTR_S *pstDumpAttr);
|
|
||||||
int vi_sdk_set_pipe_dump_attr(int fd, int pipe, VI_DUMP_ATTR_S *pstDumpAttr);
|
|
||||||
int vi_sdk_enable_chn(int fd, int pipe, int chn);
|
|
||||||
int vi_sdk_disable_chn(int fd, int pipe, int chn);
|
|
||||||
int vi_sdk_set_motion_lv(int fd, struct mlv_info_s *mlv_i);
|
|
||||||
int vi_sdk_enable_dis(int fd, int pipe);
|
|
||||||
int vi_sdk_disable_dis(int fd, int pipe);
|
|
||||||
int vi_sdk_set_dis_info(int fd, struct dis_info_s *pdis_i);
|
|
||||||
int vi_sdk_set_pipe_frm_src(int fd, int pipe, VI_PIPE_FRAME_SOURCE_E *source);
|
|
||||||
int vi_sdk_send_pipe_raw(int fd, int pipe, VIDEO_FRAME_INFO_S *sVideoFrm);
|
|
||||||
int vi_sdk_set_dev_timing_attr(int fd, int dev, VI_DEV_TIMING_ATTR_S *pstDevTimingAttr);
|
|
||||||
int vi_sdk_get_chn_frame(int fd, int pipe, int chn, VIDEO_FRAME_INFO_S *pstFrameInfo, CVI_S32 s32MilliSec);
|
|
||||||
int vi_sdk_release_chn_frame(int fd, int pipe, int chn, VIDEO_FRAME_INFO_S *pstFrameInfo);
|
|
||||||
int vi_sdk_set_chn_crop(int fd, int pipe, int chn, VI_CROP_INFO_S *pstCropInfo);
|
|
||||||
int vi_sdk_get_chn_crop(int fd, int pipe, int chn, VI_CROP_INFO_S *pstCropInfo);
|
|
||||||
int vi_sdk_get_pipe_frame(int fd, int pipe, VIDEO_FRAME_INFO_S *pstFrameInfo, CVI_S32 s32MilliSec);
|
|
||||||
int vi_sdk_release_pipe_frame(int fd, int pipe, VIDEO_FRAME_INFO_S *pstFrameInfo);
|
|
||||||
int vi_sdk_start_smooth_rawdump(int fd, int pipe, struct cvi_vip_isp_smooth_raw_param *smooth_raw_param);
|
|
||||||
int vi_sdk_stop_smooth_rawdump(int fd, int pipe, struct cvi_vip_isp_smooth_raw_param *smooth_raw_param);
|
|
||||||
int vi_sdk_get_smooth_rawdump(int fd, int pipe, VIDEO_FRAME_INFO_S *pstFrameInfo, CVI_S32 s32MilliSec);
|
|
||||||
int vi_sdk_put_smooth_rawdump(int fd, int pipe, VIDEO_FRAME_INFO_S *pstFrameInfo);
|
|
||||||
int vi_sdk_set_chn_rotation(int fd, const struct vi_chn_rot_cfg *cfg);
|
|
||||||
int vi_sdk_set_chn_ldc(int fd, const struct vi_chn_ldc_cfg *cfg);
|
|
||||||
int vi_sdk_attach_vbpool(int fd, const struct vi_vb_pool_cfg *cfg);
|
|
||||||
int vi_sdk_detach_vbpool(int fd, const struct vi_vb_pool_cfg *cfg);
|
|
||||||
#endif // MODULES_VPU_INCLUDE_VI_IOCTL_H_
|
|
||||||
@ -1,61 +0,0 @@
|
|||||||
#ifndef __VO_IOCTL_H__
|
|
||||||
#define __VO_IOCTL_H__
|
|
||||||
|
|
||||||
#include <linux/cvi_comm_video.h>
|
|
||||||
#include <linux/cvi_comm_vo.h>
|
|
||||||
#include <linux/cvi_vip.h>
|
|
||||||
|
|
||||||
#include <linux/vo_uapi.h>
|
|
||||||
#include <linux/vo_disp.h>
|
|
||||||
|
|
||||||
#include "cvi_base.h"
|
|
||||||
|
|
||||||
int vo_set_pattern(int fd, enum cvi_vip_pattern pattern);
|
|
||||||
int vo_set_mode(int fd, int mode);
|
|
||||||
int vo_set_frame_bgcolor(int fd, void *rgb);
|
|
||||||
int vo_set_window_bgcolor(int fd, void *rgb);
|
|
||||||
int vo_set_intf(int fd, struct cvi_disp_intf_cfg *cfg);
|
|
||||||
int vo_enable_window_bgcolor(int fd, int enable);
|
|
||||||
int vo_set_align(int fd, int align);
|
|
||||||
int vo_set_rgn(int fd, struct cvi_rgn_cfg *cfg);
|
|
||||||
int vo_set_csc(int fd, struct cvi_csc_cfg *cfg);
|
|
||||||
int vo_set_clk(int fd, CVI_U32 clk_freq);
|
|
||||||
int vo_set_i80_sw_mode(int fd, CVI_U32 enable);
|
|
||||||
int vo_send_i80_cmd(int fd, CVI_U32 cmd);
|
|
||||||
int vo_get_videolayer_size(int fd, SIZE_S *vsize);
|
|
||||||
int vo_get_panel_status(int fd, CVI_U32 *is_init);
|
|
||||||
int vo_get_intf_type(int fd, CVI_S32 *vo_sel);
|
|
||||||
int vo_set_gamma_ctrl(int fd, VO_GAMMA_INFO_S *gamma_attr);
|
|
||||||
int vo_get_gamma_ctrl(int fd, VO_GAMMA_INFO_S *gamma_attr);
|
|
||||||
int vo_set_tgt_compose(int fd, struct vo_rect *sel);
|
|
||||||
int vo_set_tgt_crop(int fd, struct vo_rect *sel);
|
|
||||||
int vo_set_dv_timings(int fd, struct vo_dv_timings *timings);
|
|
||||||
int vo_get_dv_timings(int fd, struct vo_dv_timings *timings);
|
|
||||||
int vo_set_start_streaming(int fd);
|
|
||||||
int vo_set_stop_streaming(int fd);
|
|
||||||
int vo_enq_buf(int fd, struct vo_buffer *buf);
|
|
||||||
|
|
||||||
//vo sdk layer apis
|
|
||||||
int vo_sdk_send_frame(int fd, struct vo_snd_frm_cfg *cfg);
|
|
||||||
int vo_sdk_get_panelstatue(int fd, struct vo_panel_status_cfg *cfg);
|
|
||||||
int vo_sdk_get_pubattr(int fd, struct vo_pub_attr_cfg *cfg);
|
|
||||||
int vo_sdk_set_pubattr(int fd, struct vo_pub_attr_cfg *cfg);
|
|
||||||
int vo_sdk_get_displaybuflen(int fd, struct vo_display_buflen_cfg *cfg);
|
|
||||||
int vo_sdk_set_displaybuflen(int fd, struct vo_display_buflen_cfg *cfg);
|
|
||||||
int vo_sdk_set_videolayerattr(int fd, struct vo_video_layer_attr_cfg *cfg);
|
|
||||||
int vo_sdk_get_videolayerattr(int fd, struct vo_video_layer_attr_cfg *cfg);
|
|
||||||
int vo_sdk_enable_videolayer(int fd, struct vo_video_layer_cfg *cfg);
|
|
||||||
int vo_sdk_disable_videolayer(int fd, struct vo_video_layer_cfg *cfg);
|
|
||||||
int vo_sdk_set_chnattr(int fd, struct vo_chn_attr_cfg *cfg);
|
|
||||||
int vo_sdk_get_chnattr(int fd, struct vo_chn_attr_cfg *cfg);
|
|
||||||
int vo_sdk_enable_chn(int fd, struct vo_chn_cfg *cfg);
|
|
||||||
int vo_sdk_disable_chn(int fd, struct vo_chn_cfg *cfg);
|
|
||||||
int vo_sdk_enable(int fd, struct vo_dev_cfg *cfg);
|
|
||||||
int vo_sdk_disable(int fd, struct vo_dev_cfg *cfg);
|
|
||||||
int vo_sdk_suspend(int fd);
|
|
||||||
int vo_sdk_resume(int fd);
|
|
||||||
int vo_sdk_clearchnbuf(int fd, struct vo_clear_chn_buf_cfg *cfg);
|
|
||||||
int vo_sdk_set_chnrotation(int fd, struct vo_chn_rotation_cfg *cfg);
|
|
||||||
int vo_sdk_get_chnrotation(int fd, struct vo_chn_rotation_cfg *cfg);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@ -1,75 +0,0 @@
|
|||||||
#ifndef MODULES_VPU_INCLUDE_VPSS_IOCTL_H_
|
|
||||||
#define MODULES_VPU_INCLUDE_VPSS_IOCTL_H_
|
|
||||||
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
#include <linux/vpss_uapi.h>
|
|
||||||
|
|
||||||
/* Configured from user */
|
|
||||||
CVI_S32 vpss_create_grp(CVI_S32 fd, struct vpss_crt_grp_cfg *cfg);
|
|
||||||
CVI_S32 vpss_destroy_grp(CVI_S32 fd, VPSS_GRP VpssGrp);
|
|
||||||
CVI_S32 vpss_get_available_grp(CVI_S32 fd, VPSS_GRP *pVpssGrp);
|
|
||||||
|
|
||||||
CVI_S32 vpss_start_grp(CVI_S32 fd, struct vpss_str_grp_cfg *cfg);
|
|
||||||
CVI_S32 vpss_stop_grp(CVI_S32 fd, VPSS_GRP VpssGrp);
|
|
||||||
|
|
||||||
CVI_S32 vpss_reset_grp(CVI_S32 fd, VPSS_GRP VpssGrp);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_grp_attr(CVI_S32 fd, const struct vpss_grp_attr *cfg);
|
|
||||||
CVI_S32 vpss_get_grp_attr(CVI_S32 fd, struct vpss_grp_attr *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_grp_crop(CVI_S32 fd, const struct vpss_grp_crop_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_grp_crop(CVI_S32 fd, struct vpss_grp_crop_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_send_frame(CVI_S32 fd, struct vpss_snd_frm_cfg *cfg);
|
|
||||||
CVI_S32 vpss_send_chn_frame(CVI_S32 fd, struct vpss_chn_frm_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_chn_attr(CVI_S32 fd, struct vpss_chn_attr *attr);
|
|
||||||
CVI_S32 vpss_get_chn_attr(CVI_S32 fd, struct vpss_chn_attr *attr);
|
|
||||||
|
|
||||||
CVI_S32 vpss_enable_chn(CVI_S32 fd, struct vpss_en_chn_cfg *cfg);
|
|
||||||
CVI_S32 vpss_disable_chn(CVI_S32 fd, struct vpss_en_chn_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_chn_crop(CVI_S32 fd, const struct vpss_chn_crop_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_chn_crop(CVI_S32 fd, struct vpss_chn_crop_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_chn_rotation(CVI_S32 fd, const struct vpss_chn_rot_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_chn_rotation(CVI_S32 fd, struct vpss_chn_rot_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_show_chn(CVI_S32 fd, struct vpss_en_chn_cfg *cfg);
|
|
||||||
CVI_S32 vpss_hide_chn(CVI_S32 fd, struct vpss_en_chn_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_chn_ldc(CVI_S32 fd, const struct vpss_chn_ldc_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_chn_ldc(CVI_S32 fd, struct vpss_chn_ldc_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_get_chn_frame(CVI_S32 fd, struct vpss_chn_frm_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_release_chn_frame(CVI_S32 fd, const struct vpss_chn_frm_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_attach_vbpool(CVI_S32 fd, const struct vpss_vb_pool_cfg *cfg);
|
|
||||||
CVI_S32 vpss_detach_vbpool(CVI_S32 fd, const struct vpss_vb_pool_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_chn_align(CVI_S32 fd, const struct vpss_chn_align_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_chn_align(CVI_S32 fd, struct vpss_chn_align_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_chn_yratio(CVI_S32 fd, const struct vpss_chn_yratio_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_chn_yratio(CVI_S32 fd, struct vpss_chn_yratio_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_coef_level(CVI_S32 fd, const struct vpss_chn_coef_level_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_coef_level(CVI_S32 fd, struct vpss_chn_coef_level_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_set_chn_wrap(CVI_S32 fd, const struct vpss_chn_wrap_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_chn_wrap(CVI_S32 fd, struct vpss_chn_wrap_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_trigger_snap_frame(CVI_S32 fd, struct vpss_snap_cfg *cfg);
|
|
||||||
|
|
||||||
CVI_S32 vpss_get_proc_amp_ctrl(CVI_S32 fd, struct vpss_proc_amp_ctrl_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_proc_amp(CVI_S32 fd, struct vpss_proc_amp_cfg *cfg);
|
|
||||||
CVI_S32 vpss_get_all_proc_amp(CVI_S32 fd, struct vpss_all_proc_amp_cfg *cfg);
|
|
||||||
|
|
||||||
/* INTERNAL */
|
|
||||||
CVI_S32 vpss_set_grp_csc(CVI_S32 fd, const struct vpss_grp_csc_cfg *csc_cfg);
|
|
||||||
CVI_S32 vpss_get_binscene(CVI_S32 fd, struct vpss_scene *csc_cfg);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* MODULES_VPU_INCLUDE_VPSS_IOCTL_H_ */
|
|
||||||
@ -7,4 +7,4 @@ Name: CVITEK System lib
|
|||||||
Description: AUDIO libs
|
Description: AUDIO libs
|
||||||
Version: 2.0
|
Version: 2.0
|
||||||
Cflags: -I${includedir}/
|
Cflags: -I${includedir}/
|
||||||
Libs: -L${libdir} -ldl -lcvi_audio -lcvi_vqe -lcvi_VoiceEngine -lcvi_RES1 -L${3rd_lib_dir} -ltinyalsa -lrt -lpthread -lcvi_ssp -lcli
|
Libs: -L${libdir} -ldl -lcvi_audio -lcvi_vqe -lcvi_VoiceEngine -lcvi_RES1 -L${3rd_lib_dir} -ltinyalsa -lrt -lpthread -lcvi_ssp
|
||||||
|
|||||||
@ -3,7 +3,7 @@ includedir=${mw_dir}/include
|
|||||||
libdir=${mw_dir}/lib
|
libdir=${mw_dir}/lib
|
||||||
|
|
||||||
Name: CVITEK System lib
|
Name: CVITEK System lib
|
||||||
Description: SYS / VPU / ISP / VENC / BIN libs
|
Description: SYS / VI /VO /VPSS /RGN /GDC / ISP / VENC / BIN libs
|
||||||
Version: 2.0
|
Version: 2.0
|
||||||
Cflags: -I${includedir} -I${includedir}/isp/cv181x
|
Cflags: -I${includedir} -I${includedir}/isp/cv181x
|
||||||
Libs: -L${libdir} -lsys -lvpu -lvenc -lcvi_bin -lcvi_bin_isp -lisp -lisp_algo -lae -laf -lawb -lsns_full -latomic
|
Libs: -L${libdir} -lsys -lvi -lvo -lvpss -lrgn -lgdc -lvenc -lcvi_bin -lcvi_bin_isp -lisp -lisp_algo -lae -laf -lawb -lsns_full -latomic
|
||||||
|
|||||||
@ -137,7 +137,7 @@ ifeq ($(USE_TINYALSA), yes)
|
|||||||
LDLIBS += -ltinyalsa
|
LDLIBS += -ltinyalsa
|
||||||
endif
|
endif
|
||||||
ifeq ($(USE_SYS_GLOBAL_LOG), yes)
|
ifeq ($(USE_SYS_GLOBAL_LOG), yes)
|
||||||
LDLIBS += -lvpu -lsys
|
LDLIBS += -lvi -lvo -lvpss -lrgn -lgdc -lsys
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(SUPPORT_EXTERNAL_AAC), yes)
|
ifeq ($(SUPPORT_EXTERNAL_AAC), yes)
|
||||||
@ -160,9 +160,6 @@ EXTRA_LDFLAGS = $(LDLIBS) -lm -lpthread -ldl
|
|||||||
|
|
||||||
MP3_EXTRA_LDFLAGS = -lcvi_mp3 -lmad -lcvi_audio -lm -lpthread -ldl -lcvi_VoiceEngine -lcvi_vqe -ltinyalsa -lcvi_RES1
|
MP3_EXTRA_LDFLAGS = -lcvi_mp3 -lmad -lcvi_audio -lm -lpthread -ldl -lcvi_VoiceEngine -lcvi_vqe -ltinyalsa -lcvi_RES1
|
||||||
|
|
||||||
EXTRA_CFLAGS += -DCLI_DEBUG_SUPPORT
|
|
||||||
EXTRA_LDFLAGS += -lcli
|
|
||||||
|
|
||||||
ifeq ($(MULTI_PROCESS_SUPPORT_AUDIO), yes)
|
ifeq ($(MULTI_PROCESS_SUPPORT_AUDIO), yes)
|
||||||
DEFINES += -DRPC_MULTI_PROCESS
|
DEFINES += -DRPC_MULTI_PROCESS
|
||||||
DEFINES += -DRPC_MULTI_PROCESS_AUDIO
|
DEFINES += -DRPC_MULTI_PROCESS_AUDIO
|
||||||
|
|||||||
@ -26,7 +26,7 @@ TARGET = cvi_mp3player
|
|||||||
EXTRA_CFLAGS = $(INCS)
|
EXTRA_CFLAGS = $(INCS)
|
||||||
EXTRA_LDFLAGS += -lcvi_audio
|
EXTRA_LDFLAGS += -lcvi_audio
|
||||||
EXTRA_LDFLAGS += -lm -lpthread -ldl -lcvi_mp3 -lcvi_VoiceEngine -lmad
|
EXTRA_LDFLAGS += -lm -lpthread -ldl -lcvi_mp3 -lcvi_VoiceEngine -lmad
|
||||||
EXTRA_LDFLAGS += -lcvi_vqe -ltinyalsa -lcvi_RES1 -lcli
|
EXTRA_LDFLAGS += -lcvi_vqe -ltinyalsa -lcvi_RES1
|
||||||
|
|
||||||
ifeq ($(SAMPLE_STATIC),1)
|
ifeq ($(SAMPLE_STATIC),1)
|
||||||
LIB_DEP := $(MW_LIB)/libmad.a
|
LIB_DEP := $(MW_LIB)/libmad.a
|
||||||
|
|||||||
@ -292,6 +292,7 @@ CVI_S32 _update_Aenc_setting(AIO_ATTR_S *pstAioAttr,
|
|||||||
{
|
{
|
||||||
|
|
||||||
CVI_S32 s32Ret;
|
CVI_S32 s32Ret;
|
||||||
|
SMP_AUD_UNUSED_REF(bVqe);
|
||||||
|
|
||||||
s32Ret = _update_aenc_params(pstAencAttr, pstAioAttr, enType);
|
s32Ret = _update_aenc_params(pstAencAttr, pstAioAttr, enType);
|
||||||
if (s32Ret != CVI_SUCCESS) {
|
if (s32Ret != CVI_SUCCESS) {
|
||||||
@ -312,8 +313,7 @@ CVI_S32 _update_Aenc_setting(AIO_ATTR_S *pstAioAttr,
|
|||||||
__LINE__,
|
__LINE__,
|
||||||
pstAencAac->enSmpRate);
|
pstAencAac->enSmpRate);
|
||||||
|
|
||||||
pstAencAac->enSoundMode = bVqe ? AUDIO_SOUND_MODE_MONO :
|
pstAencAac->enSoundMode = pstAioAttr->enSoundmode;
|
||||||
pstAioAttr->enSoundmode;
|
|
||||||
pstAencAac->enTransType = gs_enAacTransType;
|
pstAencAac->enTransType = gs_enAacTransType;
|
||||||
pstAencAac->s16BandWidth = 0;
|
pstAencAac->s16BandWidth = 0;
|
||||||
pstAencAttr->pValue = pstAencAac;
|
pstAencAttr->pValue = pstAencAac;
|
||||||
|
|||||||
@ -24,7 +24,7 @@ DEFINES += -DCVIAUDIO_STATIC
|
|||||||
DEFINES += -DSUPPORT_EXTERNAL_AAC
|
DEFINES += -DSUPPORT_EXTERNAL_AAC
|
||||||
|
|
||||||
INC = -I ./ -I$(MW_INC) -I$(KERNEL_INC) -I ../../aac_sample
|
INC = -I ./ -I$(MW_INC) -I$(KERNEL_INC) -I ../../aac_sample
|
||||||
LIBS += -L$(MW_LIB) -lcvi_audio -lm -lpthread -ldl -lcvi_VoiceEngine -lcvi_vqe -ltinyalsa -lcvi_RES1 -lcli -lcvi_ssp -lsys
|
LIBS += -L$(MW_LIB) -lcvi_audio -lm -lpthread -ldl -lcvi_VoiceEngine -lcvi_vqe -ltinyalsa -lcvi_RES1 -lcvi_ssp -lsys
|
||||||
LIBS += -L$(MW_LIB)/3rd -lnanomsg
|
LIBS += -L$(MW_LIB)/3rd -lnanomsg
|
||||||
LIBS += -laacdec2
|
LIBS += -laacdec2
|
||||||
LIBS += -laacsbrdec2
|
LIBS += -laacsbrdec2
|
||||||
|
|||||||
@ -25,7 +25,7 @@ DEFINES += -DCVIAUDIO_STATIC
|
|||||||
DEFINES += -DSUPPORT_EXTERNAL_AAC
|
DEFINES += -DSUPPORT_EXTERNAL_AAC
|
||||||
|
|
||||||
INC = -I ./ -I$(MW_INC) -I$(KERNEL_INC) -I ../../aac_sample
|
INC = -I ./ -I$(MW_INC) -I$(KERNEL_INC) -I ../../aac_sample
|
||||||
LIBS += -L$(MW_LIB) -lcvi_audio -lm -lpthread -ldl -lcvi_VoiceEngine -lcvi_vqe -ltinyalsa -lcvi_RES1 -lcli -lcvi_ssp -lsys
|
LIBS += -L$(MW_LIB) -lcvi_audio -lm -lpthread -ldl -lcvi_VoiceEngine -lcvi_vqe -ltinyalsa -lcvi_RES1 -lcvi_ssp -lsys
|
||||||
LIBS += -L$(MW_LIB)/3rd -lnanomsg
|
LIBS += -L$(MW_LIB)/3rd -lnanomsg
|
||||||
LIBS += -laacdec2
|
LIBS += -laacdec2
|
||||||
LIBS += -laacsbrdec2
|
LIBS += -laacsbrdec2
|
||||||
|
|||||||
@ -17,6 +17,10 @@ ifeq ($(CONFIG_SENSOR_CVSENS_CV2003), y)
|
|||||||
KBUILD_DEFINES += -DSENSOR_CVSENS_CV2003
|
KBUILD_DEFINES += -DSENSOR_CVSENS_CV2003
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_SENSOR_CVSENS_CV2003_1L), y)
|
||||||
|
KBUILD_DEFINES += -DSENSOR_CVSENS_CV2003_1L
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_SENSOR_CVSENS_CV2003_1L_SLAVE), y)
|
ifeq ($(CONFIG_SENSOR_CVSENS_CV2003_1L_SLAVE), y)
|
||||||
KBUILD_DEFINES += -DSENSOR_CVSENS_CV2003_1L_SLAVE
|
KBUILD_DEFINES += -DSENSOR_CVSENS_CV2003_1L_SLAVE
|
||||||
endif
|
endif
|
||||||
@ -89,6 +93,10 @@ ifeq ($(CONFIG_SENSOR_GCORE_GC2145), y)
|
|||||||
KBUILD_DEFINES += -DSENSOR_GCORE_GC2145
|
KBUILD_DEFINES += -DSENSOR_GCORE_GC2145
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_SENSOR_GCORE_GC2385_1L), y)
|
||||||
|
KBUILD_DEFINES += -DSENSOR_GCORE_GC2385_1L
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_SENSOR_GCORE_GC4023), y)
|
ifeq ($(CONFIG_SENSOR_GCORE_GC4023), y)
|
||||||
KBUILD_DEFINES += -DSENSOR_GCORE_GC4023
|
KBUILD_DEFINES += -DSENSOR_GCORE_GC4023
|
||||||
endif
|
endif
|
||||||
@ -125,6 +133,10 @@ ifeq ($(CONFIG_SENSOR_OV_OS02K10_SLAVE), y)
|
|||||||
KBUILD_DEFINES += -DSENSOR_OV_OS02K10_SLAVE
|
KBUILD_DEFINES += -DSENSOR_OV_OS02K10_SLAVE
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_SENSOR_OV_OS02N10_1L), y)
|
||||||
|
KBUILD_DEFINES += -DSENSOR_OV_OS02N10_1L
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_SENSOR_OV_OS04A10), y)
|
ifeq ($(CONFIG_SENSOR_OV_OS04A10), y)
|
||||||
KBUILD_DEFINES += -DSENSOR_OV_OS04A10
|
KBUILD_DEFINES += -DSENSOR_OV_OS04A10
|
||||||
endif
|
endif
|
||||||
@ -433,6 +445,10 @@ ifeq ($(CONFIG_SENSOR_SONY_IMX385), y)
|
|||||||
KBUILD_DEFINES += -DSENSOR_SONY_IMX385
|
KBUILD_DEFINES += -DSENSOR_SONY_IMX385
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_SENSOR_SONY_IMX675), y)
|
||||||
|
KBUILD_DEFINES += -DSENSOR_SONY_IMX675
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_SENSOR_TECHPOINT_TP2850), y)
|
ifeq ($(CONFIG_SENSOR_TECHPOINT_TP2850), y)
|
||||||
KBUILD_DEFINES += -DSENSOR_TECHPOINT_TP2850
|
KBUILD_DEFINES += -DSENSOR_TECHPOINT_TP2850
|
||||||
endif
|
endif
|
||||||
|
|||||||
@ -154,6 +154,7 @@ typedef enum _PIC_SIZE_E {
|
|||||||
PIC_2304x1296,
|
PIC_2304x1296,
|
||||||
PIC_2048x1536,
|
PIC_2048x1536,
|
||||||
PIC_2560x1600,
|
PIC_2560x1600,
|
||||||
|
PIC_2560x1944,
|
||||||
PIC_2592x1520,
|
PIC_2592x1520,
|
||||||
PIC_2592x1536,
|
PIC_2592x1536,
|
||||||
PIC_2592x1944,
|
PIC_2592x1944,
|
||||||
@ -185,6 +186,7 @@ typedef enum _SAMPLE_SNS_TYPE_E {
|
|||||||
CHIPUP_XS9922B_MODE_720P_2CH_8BIT,
|
CHIPUP_XS9922B_MODE_720P_2CH_8BIT,
|
||||||
CHIPUP_XS9922B_MODE_720P_3CH_8BIT,
|
CHIPUP_XS9922B_MODE_720P_3CH_8BIT,
|
||||||
CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT,
|
CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT,
|
||||||
|
CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT,
|
||||||
CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT,
|
CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT,
|
||||||
CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT,
|
CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT,
|
||||||
CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT,
|
CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT,
|
||||||
@ -204,6 +206,7 @@ typedef enum _SAMPLE_SNS_TYPE_E {
|
|||||||
GCORE_GC2093_MIPI_2M_60FPS_10BIT,
|
GCORE_GC2093_MIPI_2M_60FPS_10BIT,
|
||||||
GCORE_GC2093_SLAVE_MIPI_2M_30FPS_10BIT,
|
GCORE_GC2093_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||||
GCORE_GC2145_MIPI_2M_12FPS_8BIT,
|
GCORE_GC2145_MIPI_2M_12FPS_8BIT,
|
||||||
|
GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT,
|
||||||
GCORE_GC4023_MIPI_4M_30FPS_10BIT,
|
GCORE_GC4023_MIPI_4M_30FPS_10BIT,
|
||||||
GCORE_GC4653_MIPI_4M_30FPS_10BIT,
|
GCORE_GC4653_MIPI_4M_30FPS_10BIT,
|
||||||
GCORE_GC4653_SLAVE_MIPI_4M_30FPS_10BIT,
|
GCORE_GC4653_SLAVE_MIPI_4M_30FPS_10BIT,
|
||||||
@ -213,6 +216,7 @@ typedef enum _SAMPLE_SNS_TYPE_E {
|
|||||||
NEXTCHIP_N6_2M_4CH_25FPS_8BIT,
|
NEXTCHIP_N6_2M_4CH_25FPS_8BIT,
|
||||||
OV_OS02D10_MIPI_2M_30FPS_10BIT,
|
OV_OS02D10_MIPI_2M_30FPS_10BIT,
|
||||||
OV_OS02D10_SLAVE_MIPI_2M_30FPS_10BIT,
|
OV_OS02D10_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||||
|
OV_OS02N10_1L_MIPI_2M_15FPS_10BIT,
|
||||||
OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT,
|
OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT,
|
||||||
OV_OS04A10_MIPI_4M_1440P_30FPS_12BIT,
|
OV_OS04A10_MIPI_4M_1440P_30FPS_12BIT,
|
||||||
OV_OS04C10_MIPI_4M_30FPS_12BIT,
|
OV_OS04C10_MIPI_4M_30FPS_12BIT,
|
||||||
@ -318,6 +322,7 @@ typedef enum _SAMPLE_SNS_TYPE_E {
|
|||||||
SONY_IMX335_MIPI_5M_60FPS_10BIT,
|
SONY_IMX335_MIPI_5M_60FPS_10BIT,
|
||||||
SONY_IMX347_MIPI_4M_60FPS_12BIT,
|
SONY_IMX347_MIPI_4M_60FPS_12BIT,
|
||||||
SONY_IMX385_MIPI_2M_30FPS_12BIT,
|
SONY_IMX385_MIPI_2M_30FPS_12BIT,
|
||||||
|
SONY_IMX675_MIPI_5M_30FPS_12BIT,
|
||||||
TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT,
|
TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT,
|
||||||
TECHPOINT_TP2850_MIPI_4M_30FPS_8BIT,
|
TECHPOINT_TP2850_MIPI_4M_30FPS_8BIT,
|
||||||
TECHPOINT_TP2825_MIPI_2M_30FPS_8BIT,
|
TECHPOINT_TP2825_MIPI_2M_30FPS_8BIT,
|
||||||
@ -377,6 +382,7 @@ typedef enum _SAMPLE_SNS_TYPE_E {
|
|||||||
SONY_IMX335_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
SONY_IMX335_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
||||||
SONY_IMX335_MIPI_4M_1600P_30FPS_10BIT_WDR2TO1,
|
SONY_IMX335_MIPI_4M_1600P_30FPS_10BIT_WDR2TO1,
|
||||||
SONY_IMX335_MIPI_5M_30FPS_10BIT_WDR2TO1,
|
SONY_IMX335_MIPI_5M_30FPS_10BIT_WDR2TO1,
|
||||||
|
SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1,
|
||||||
SONY_IMX347_MIPI_4M_30FPS_12BIT_WDR2TO1,
|
SONY_IMX347_MIPI_4M_30FPS_12BIT_WDR2TO1,
|
||||||
SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||||
/* ------ WDR 2TO1 END ------*/
|
/* ------ WDR 2TO1 END ------*/
|
||||||
|
|||||||
@ -66,17 +66,17 @@ CVI_S32 SAMPLE_PLAT_SYS_INIT(SIZE_S stSize)
|
|||||||
#if !defined(DDR_64MB_SIZE)
|
#if !defined(DDR_64MB_SIZE)
|
||||||
stVbConf.astCommPool[0].u32BlkCnt = 8;
|
stVbConf.astCommPool[0].u32BlkCnt = 8;
|
||||||
#else
|
#else
|
||||||
stVbConf.astCommPool[0].u32BlkCnt = 2;
|
stVbConf.astCommPool[0].u32BlkCnt = 3;
|
||||||
#endif
|
#endif
|
||||||
stVbConf.astCommPool[0].enRemapMode = VB_REMAP_MODE_CACHED;
|
stVbConf.astCommPool[0].enRemapMode = VB_REMAP_MODE_CACHED;
|
||||||
SAMPLE_PRT("common pool[0] BlkSize %d\n", u32BlkSize);
|
SAMPLE_PRT("common pool[0] BlkSize %d\n", u32BlkSize);
|
||||||
|
SAMPLE_PRT("common pool[0] u32BlkCnt %d\n", stVbConf.astCommPool[0].u32BlkCnt);
|
||||||
|
|
||||||
s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
|
s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
|
||||||
if (s32Ret != CVI_SUCCESS) {
|
if (s32Ret != CVI_SUCCESS) {
|
||||||
CVI_TRACE_LOG(CVI_DBG_ERR, "system init failed with %#x\n", s32Ret);
|
CVI_TRACE_LOG(CVI_DBG_ERR, "system init failed with %#x\n", s32Ret);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
return s32Ret;
|
return s32Ret;
|
||||||
error:
|
error:
|
||||||
_SAMPLE_PLAT_ERR_Exit();
|
_SAMPLE_PLAT_ERR_Exit();
|
||||||
|
|||||||
@ -90,6 +90,7 @@ static const char *snsr_type_name[SAMPLE_SNS_TYPE_BUTT] = {
|
|||||||
"CHIPUP_XS9922B_MODE_720P_2CH_8BIT",
|
"CHIPUP_XS9922B_MODE_720P_2CH_8BIT",
|
||||||
"CHIPUP_XS9922B_MODE_720P_3CH_8BIT",
|
"CHIPUP_XS9922B_MODE_720P_3CH_8BIT",
|
||||||
"CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT",
|
"CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT",
|
||||||
|
"CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT",
|
||||||
"CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT",
|
"CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT",
|
||||||
"CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT",
|
"CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT",
|
||||||
"CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT",
|
"CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT",
|
||||||
@ -109,6 +110,7 @@ static const char *snsr_type_name[SAMPLE_SNS_TYPE_BUTT] = {
|
|||||||
"GCORE_GC2093_MIPI_2M_60FPS_10BIT",
|
"GCORE_GC2093_MIPI_2M_60FPS_10BIT",
|
||||||
"GCORE_GC2093_SLAVE_MIPI_2M_30FPS_10BIT",
|
"GCORE_GC2093_SLAVE_MIPI_2M_30FPS_10BIT",
|
||||||
"GCORE_GC2145_MIPI_2M_12FPS_8BIT",
|
"GCORE_GC2145_MIPI_2M_12FPS_8BIT",
|
||||||
|
"GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT",
|
||||||
"GCORE_GC4023_MIPI_4M_30FPS_10BIT",
|
"GCORE_GC4023_MIPI_4M_30FPS_10BIT",
|
||||||
"GCORE_GC4653_MIPI_4M_30FPS_10BIT",
|
"GCORE_GC4653_MIPI_4M_30FPS_10BIT",
|
||||||
"GCORE_GC4653_SLAVE_MIPI_4M_30FPS_10BIT",
|
"GCORE_GC4653_SLAVE_MIPI_4M_30FPS_10BIT",
|
||||||
@ -118,6 +120,7 @@ static const char *snsr_type_name[SAMPLE_SNS_TYPE_BUTT] = {
|
|||||||
"NEXTCHIP_N6_2M_4CH_25FPS_8BIT",
|
"NEXTCHIP_N6_2M_4CH_25FPS_8BIT",
|
||||||
"OV_OS02D10_MIPI_2M_30FPS_10BIT",
|
"OV_OS02D10_MIPI_2M_30FPS_10BIT",
|
||||||
"OV_OS02D10_SLAVE_MIPI_2M_30FPS_10BIT",
|
"OV_OS02D10_SLAVE_MIPI_2M_30FPS_10BIT",
|
||||||
|
"OV_OS02N10_1L_MIPI_2M_15FPS_10BIT",
|
||||||
"OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT",
|
"OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT",
|
||||||
"OV_OS04A10_MIPI_4M_1440P_30FPS_12BIT",
|
"OV_OS04A10_MIPI_4M_1440P_30FPS_12BIT",
|
||||||
"OV_OS04C10_MIPI_4M_30FPS_12BIT",
|
"OV_OS04C10_MIPI_4M_30FPS_12BIT",
|
||||||
@ -223,6 +226,7 @@ static const char *snsr_type_name[SAMPLE_SNS_TYPE_BUTT] = {
|
|||||||
"SONY_IMX335_MIPI_5M_60FPS_10BIT",
|
"SONY_IMX335_MIPI_5M_60FPS_10BIT",
|
||||||
"SONY_IMX347_MIPI_4M_60FPS_12BIT",
|
"SONY_IMX347_MIPI_4M_60FPS_12BIT",
|
||||||
"SONY_IMX385_MIPI_2M_30FPS_12BIT",
|
"SONY_IMX385_MIPI_2M_30FPS_12BIT",
|
||||||
|
"SONY_IMX675_MIPI_5M_30FPS_12BIT",
|
||||||
"TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT",
|
"TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT",
|
||||||
"TECHPOINT_TP2850_MIPI_4M_30FPS_8BIT",
|
"TECHPOINT_TP2850_MIPI_4M_30FPS_8BIT",
|
||||||
"TECHPOINT_TP2825_MIPI_2M_30FPS_8BIT",
|
"TECHPOINT_TP2825_MIPI_2M_30FPS_8BIT",
|
||||||
@ -281,6 +285,7 @@ static const char *snsr_type_name[SAMPLE_SNS_TYPE_BUTT] = {
|
|||||||
"SONY_IMX335_MIPI_4M_30FPS_10BIT_WDR2TO1",
|
"SONY_IMX335_MIPI_4M_30FPS_10BIT_WDR2TO1",
|
||||||
"SONY_IMX335_MIPI_4M_1600P_30FPS_10BIT_WDR2TO1",
|
"SONY_IMX335_MIPI_4M_1600P_30FPS_10BIT_WDR2TO1",
|
||||||
"SONY_IMX335_MIPI_5M_30FPS_10BIT_WDR2TO1",
|
"SONY_IMX335_MIPI_5M_30FPS_10BIT_WDR2TO1",
|
||||||
|
"SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1",
|
||||||
/* ------ WDR 2TO1 END ------*/
|
/* ------ WDR 2TO1 END ------*/
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -302,6 +307,7 @@ CVI_CHAR *SAMPLE_COMM_SNS_GetSnsrTypeName(void)
|
|||||||
* PIC_2048x1536:
|
* PIC_2048x1536:
|
||||||
* PIC_2592x1520:
|
* PIC_2592x1520:
|
||||||
* PIC_2560x1600:
|
* PIC_2560x1600:
|
||||||
|
* PIC_2560x1944:
|
||||||
* PIC_2592x1944:
|
* PIC_2592x1944:
|
||||||
* PIC_2592x1536:
|
* PIC_2592x1536:
|
||||||
* PIC_2688x1520:
|
* PIC_2688x1520:
|
||||||
@ -360,6 +366,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetSize(SAMPLE_SNS_TYPE_E enMode, PIC_SIZE_E *penSize)
|
|||||||
break;
|
break;
|
||||||
case GCORE_GC02M1_MIPI_2M_30FPS_10BIT:
|
case GCORE_GC02M1_MIPI_2M_30FPS_10BIT:
|
||||||
case GCORE_GC2145_MIPI_2M_12FPS_8BIT:
|
case GCORE_GC2145_MIPI_2M_12FPS_8BIT:
|
||||||
|
case GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT:
|
||||||
case BYD_BF2253L_MIPI_1200P_30FPS_10BIT:
|
case BYD_BF2253L_MIPI_1200P_30FPS_10BIT:
|
||||||
*penSize = PIC_1600x1200;
|
*penSize = PIC_1600x1200;
|
||||||
break;
|
break;
|
||||||
@ -378,6 +385,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetSize(SAMPLE_SNS_TYPE_E enMode, PIC_SIZE_E *penSize)
|
|||||||
case NEXTCHIP_N6_2M_4CH_25FPS_8BIT:
|
case NEXTCHIP_N6_2M_4CH_25FPS_8BIT:
|
||||||
case OV_OS02D10_MIPI_2M_30FPS_10BIT:
|
case OV_OS02D10_MIPI_2M_30FPS_10BIT:
|
||||||
case OV_OS02D10_SLAVE_MIPI_2M_30FPS_10BIT:
|
case OV_OS02D10_SLAVE_MIPI_2M_30FPS_10BIT:
|
||||||
|
case OV_OS02N10_1L_MIPI_2M_15FPS_10BIT:
|
||||||
case OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT:
|
case OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT:
|
||||||
case OV_OV5647_MIPI_2M_30FPS_10BIT:
|
case OV_OV5647_MIPI_2M_30FPS_10BIT:
|
||||||
case PIXELPLUS_PR2020_2M_25FPS_8BIT:
|
case PIXELPLUS_PR2020_2M_25FPS_8BIT:
|
||||||
@ -440,6 +448,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetSize(SAMPLE_SNS_TYPE_E enMode, PIC_SIZE_E *penSize)
|
|||||||
case LONTIUM_LT6911_2M_60FPS_8BIT:
|
case LONTIUM_LT6911_2M_60FPS_8BIT:
|
||||||
case LONTIUM_LT7911_2M_60FPS_8BIT:
|
case LONTIUM_LT7911_2M_60FPS_8BIT:
|
||||||
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
|
case CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
*penSize = PIC_1080P;
|
*penSize = PIC_1080P;
|
||||||
@ -492,6 +501,10 @@ CVI_S32 SAMPLE_COMM_SNS_GetSize(SAMPLE_SNS_TYPE_E enMode, PIC_SIZE_E *penSize)
|
|||||||
case SONY_IMX335_MIPI_4M_1600P_30FPS_10BIT_WDR2TO1:
|
case SONY_IMX335_MIPI_4M_1600P_30FPS_10BIT_WDR2TO1:
|
||||||
*penSize = PIC_2560x1600;
|
*penSize = PIC_2560x1600;
|
||||||
break;
|
break;
|
||||||
|
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||||
|
case SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1:
|
||||||
|
*penSize = PIC_2560x1944;
|
||||||
|
break;
|
||||||
case OV_OS08A20_MIPI_5M_30FPS_10BIT:
|
case OV_OS08A20_MIPI_5M_30FPS_10BIT:
|
||||||
case OV_OS08A20_MIPI_5M_30FPS_10BIT_WDR2TO1:
|
case OV_OS08A20_MIPI_5M_30FPS_10BIT_WDR2TO1:
|
||||||
case OV_OS08A20_SLAVE_MIPI_5M_30FPS_10BIT:
|
case OV_OS08A20_SLAVE_MIPI_5M_30FPS_10BIT:
|
||||||
@ -639,6 +652,11 @@ CVI_S32 SAMPLE_COMM_SNS_GetPicSize(PIC_SIZE_E enPicSize, SIZE_S *pstSize)
|
|||||||
pstSize->u32Height = 1600;
|
pstSize->u32Height = 1600;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PIC_2560x1944:
|
||||||
|
pstSize->u32Width = 2560;
|
||||||
|
pstSize->u32Height = 1944;
|
||||||
|
break;
|
||||||
|
|
||||||
case PIC_2592x1944:
|
case PIC_2592x1944:
|
||||||
pstSize->u32Width = 2592;
|
pstSize->u32Width = 2592;
|
||||||
pstSize->u32Height = 1944;
|
pstSize->u32Height = 1944;
|
||||||
@ -900,6 +918,8 @@ CVI_S32 SAMPLE_COMM_SNS_GetDevAttr(SAMPLE_SNS_TYPE_E enSnsType, VI_DEV_ATTR_S *p
|
|||||||
case SONY_IMX347_MIPI_4M_30FPS_12BIT_WDR2TO1:
|
case SONY_IMX347_MIPI_4M_30FPS_12BIT_WDR2TO1:
|
||||||
case SONY_IMX385_MIPI_2M_30FPS_12BIT:
|
case SONY_IMX385_MIPI_2M_30FPS_12BIT:
|
||||||
case SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1:
|
case SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1:
|
||||||
|
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||||
|
case SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1:
|
||||||
// GalaxyCore
|
// GalaxyCore
|
||||||
case GCORE_GC02M1_MIPI_2M_30FPS_10BIT:
|
case GCORE_GC02M1_MIPI_2M_30FPS_10BIT:
|
||||||
case GCORE_GC1054_MIPI_1M_30FPS_10BIT:
|
case GCORE_GC1054_MIPI_1M_30FPS_10BIT:
|
||||||
@ -915,6 +935,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetDevAttr(SAMPLE_SNS_TYPE_E enSnsType, VI_DEV_ATTR_S *p
|
|||||||
case GCORE_GC4023_MIPI_4M_30FPS_10BIT:
|
case GCORE_GC4023_MIPI_4M_30FPS_10BIT:
|
||||||
// cvsens
|
// cvsens
|
||||||
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
|
case CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT:
|
case CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT:
|
||||||
@ -924,6 +945,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetDevAttr(SAMPLE_SNS_TYPE_E enSnsType, VI_DEV_ATTR_S *p
|
|||||||
// brigates
|
// brigates
|
||||||
case BRIGATES_BG0808_MIPI_2M_30FPS_10BIT:
|
case BRIGATES_BG0808_MIPI_2M_30FPS_10BIT:
|
||||||
case BRIGATES_BG0808_MIPI_2M_30FPS_10BIT_WDR2TO1:
|
case BRIGATES_BG0808_MIPI_2M_30FPS_10BIT_WDR2TO1:
|
||||||
|
case GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT:
|
||||||
case SMS_SC4336_MIPI_4M_30FPS_10BIT:
|
case SMS_SC4336_MIPI_4M_30FPS_10BIT:
|
||||||
case SMS_SC4336P_MIPI_4M_30FPS_10BIT:
|
case SMS_SC4336P_MIPI_4M_30FPS_10BIT:
|
||||||
case SOI_K306_MIPI_4M_25FPS_10BIT:
|
case SOI_K306_MIPI_4M_25FPS_10BIT:
|
||||||
@ -973,6 +995,17 @@ CVI_S32 SAMPLE_COMM_SNS_GetDevAttr(SAMPLE_SNS_TYPE_E enSnsType, VI_DEV_ATTR_S *p
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
switch (enSnsType) {
|
||||||
|
case GCORE_GC4653_MIPI_4M_30FPS_10BIT:
|
||||||
|
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||||
|
case SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1:
|
||||||
|
pstViDevAttr->disEnableSbm = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pstViDevAttr->disEnableSbm = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return CVI_SUCCESS;
|
return CVI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1039,6 +1072,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetIspAttrBySns(SAMPLE_SNS_TYPE_E enSnsType, ISP_PUB_ATT
|
|||||||
// FPS
|
// FPS
|
||||||
switch (enSnsType) {
|
switch (enSnsType) {
|
||||||
case CVSENS_CV4001_MIPI_4M_1440P_15FPS_WDR2TO1:
|
case CVSENS_CV4001_MIPI_4M_1440P_15FPS_WDR2TO1:
|
||||||
|
case OV_OS02N10_1L_MIPI_2M_15FPS_10BIT:
|
||||||
pstPubAttr->f32FrameRate = 15;
|
pstPubAttr->f32FrameRate = 15;
|
||||||
break;
|
break;
|
||||||
case SMS_SC035GS_MIPI_480P_120FPS_12BIT:
|
case SMS_SC035GS_MIPI_480P_120FPS_12BIT:
|
||||||
@ -1084,14 +1118,17 @@ CVI_S32 SAMPLE_COMM_SNS_GetIspAttrBySns(SAMPLE_SNS_TYPE_E enSnsType, ISP_PUB_ATT
|
|||||||
case GCORE_GC1084_SLAVE1_MIPI_1M_30FPS_10BIT:
|
case GCORE_GC1084_SLAVE1_MIPI_1M_30FPS_10BIT:
|
||||||
case GCORE_GC1084_SLAVE2_MIPI_1M_30FPS_10BIT:
|
case GCORE_GC1084_SLAVE2_MIPI_1M_30FPS_10BIT:
|
||||||
case GCORE_GC2083_MIPI_2M_30FPS_10BIT:
|
case GCORE_GC2083_MIPI_2M_30FPS_10BIT:
|
||||||
|
case GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT:
|
||||||
case BYD_BF2253L_MIPI_1200P_30FPS_10BIT:
|
case BYD_BF2253L_MIPI_1200P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
|
case CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case SOI_F53_MIPI_2M_30FPS_10BIT:
|
case SOI_F53_MIPI_2M_30FPS_10BIT:
|
||||||
case SOI_F352_MIPI_2M_30FPS_10BIT:
|
case SOI_F352_MIPI_2M_30FPS_10BIT:
|
||||||
case SOI_F352_MIPI_2M_30FPS_10BIT_WDR2TO1:
|
case SOI_F352_MIPI_2M_30FPS_10BIT_WDR2TO1:
|
||||||
case SOI_K306_MIPI_4M_25FPS_10BIT:
|
case SOI_K306_MIPI_4M_25FPS_10BIT:
|
||||||
|
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||||
pstPubAttr->f32FrameRate = 30;
|
pstPubAttr->f32FrameRate = 30;
|
||||||
break;
|
break;
|
||||||
case GCORE_GC2145_MIPI_2M_12FPS_8BIT:
|
case GCORE_GC2145_MIPI_2M_12FPS_8BIT:
|
||||||
@ -1114,6 +1151,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetIspAttrBySns(SAMPLE_SNS_TYPE_E enSnsType, ISP_PUB_ATT
|
|||||||
case CHIPUP_XS9922B_MODE_720P_2CH_8BIT:
|
case CHIPUP_XS9922B_MODE_720P_2CH_8BIT:
|
||||||
case CHIPUP_XS9922B_MODE_720P_3CH_8BIT:
|
case CHIPUP_XS9922B_MODE_720P_3CH_8BIT:
|
||||||
case CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT:
|
case CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT:
|
||||||
|
case SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1:
|
||||||
case TECHPOINT_TP2863_MIPI_1M_25FPS_8BIT:
|
case TECHPOINT_TP2863_MIPI_1M_25FPS_8BIT:
|
||||||
case TECHPOINT_TP2863_MIPI_2M_25FPS_8BIT:
|
case TECHPOINT_TP2863_MIPI_2M_25FPS_8BIT:
|
||||||
pstPubAttr->f32FrameRate = 25;
|
pstPubAttr->f32FrameRate = 25;
|
||||||
@ -1173,6 +1211,8 @@ CVI_S32 SAMPLE_COMM_SNS_GetIspAttrBySns(SAMPLE_SNS_TYPE_E enSnsType, ISP_PUB_ATT
|
|||||||
case SONY_IMX347_MIPI_4M_30FPS_12BIT_WDR2TO1:
|
case SONY_IMX347_MIPI_4M_30FPS_12BIT_WDR2TO1:
|
||||||
case SONY_IMX385_MIPI_2M_30FPS_12BIT:
|
case SONY_IMX385_MIPI_2M_30FPS_12BIT:
|
||||||
case SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1:
|
case SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1:
|
||||||
|
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||||
|
case SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1:
|
||||||
// GalaxyCore
|
// GalaxyCore
|
||||||
case GCORE_GC02M1_MIPI_2M_30FPS_10BIT:
|
case GCORE_GC02M1_MIPI_2M_30FPS_10BIT:
|
||||||
case GCORE_GC1054_MIPI_1M_30FPS_10BIT:
|
case GCORE_GC1054_MIPI_1M_30FPS_10BIT:
|
||||||
@ -1187,6 +1227,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetIspAttrBySns(SAMPLE_SNS_TYPE_E enSnsType, ISP_PUB_ATT
|
|||||||
case GCORE_GC2093_SLAVE_MIPI_2M_30FPS_10BIT_WDR2TO1:
|
case GCORE_GC2093_SLAVE_MIPI_2M_30FPS_10BIT_WDR2TO1:
|
||||||
case GCORE_GC4023_MIPI_4M_30FPS_10BIT:
|
case GCORE_GC4023_MIPI_4M_30FPS_10BIT:
|
||||||
case IMGDS_MIS2008_MIPI_2M_1080P_30FPS_12BIT:
|
case IMGDS_MIS2008_MIPI_2M_1080P_30FPS_12BIT:
|
||||||
|
case CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
case CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
@ -1247,6 +1288,10 @@ CVI_VOID *SAMPLE_COMM_SNS_GetSnsObj(SAMPLE_SNS_TYPE_E enSnsType)
|
|||||||
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
return &stSnsCV2003_Obj;
|
return &stSnsCV2003_Obj;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(SENSOR_CVSENS_CV2003_1L)
|
||||||
|
case CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
|
return &stSnsCV2003_1L_Obj;
|
||||||
|
#endif
|
||||||
#if defined(SENSOR_CVSENS_CV2003_1L_SLAVE)
|
#if defined(SENSOR_CVSENS_CV2003_1L_SLAVE)
|
||||||
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
||||||
return &stSnsCV2003_1L_SLAVE_Obj;
|
return &stSnsCV2003_1L_SLAVE_Obj;
|
||||||
@ -1326,6 +1371,10 @@ CVI_VOID *SAMPLE_COMM_SNS_GetSnsObj(SAMPLE_SNS_TYPE_E enSnsType)
|
|||||||
case GCORE_GC2145_MIPI_2M_12FPS_8BIT:
|
case GCORE_GC2145_MIPI_2M_12FPS_8BIT:
|
||||||
return &stSnsGc2145_Obj;
|
return &stSnsGc2145_Obj;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(SENSOR_GCORE_GC2385_1L)
|
||||||
|
case GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT:
|
||||||
|
return &stSnsGc2385_1L_Obj;
|
||||||
|
#endif
|
||||||
#if defined(SENSOR_GCORE_GC4023)
|
#if defined(SENSOR_GCORE_GC4023)
|
||||||
case GCORE_GC4023_MIPI_4M_30FPS_10BIT:
|
case GCORE_GC4023_MIPI_4M_30FPS_10BIT:
|
||||||
return &stSnsGc4023_Obj;
|
return &stSnsGc4023_Obj;
|
||||||
@ -1364,6 +1413,11 @@ CVI_VOID *SAMPLE_COMM_SNS_GetSnsObj(SAMPLE_SNS_TYPE_E enSnsType)
|
|||||||
pSnsObj = &stSnsOs02d10_Slave_Obj;
|
pSnsObj = &stSnsOs02d10_Slave_Obj;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(SENSOR_OV_OS02N10_1L)
|
||||||
|
case OV_OS02N10_1L_MIPI_2M_15FPS_10BIT:
|
||||||
|
pSnsObj = &stSnsOs02n10_1l_Obj;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#if defined(SENSOR_OV_OS02K10_SLAVE)
|
#if defined(SENSOR_OV_OS02K10_SLAVE)
|
||||||
case OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT:
|
case OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT:
|
||||||
pSnsObj = &stSnsOs02k10_Slave_Obj;
|
pSnsObj = &stSnsOs02k10_Slave_Obj;
|
||||||
@ -1819,6 +1873,12 @@ CVI_VOID *SAMPLE_COMM_SNS_GetSnsObj(SAMPLE_SNS_TYPE_E enSnsType)
|
|||||||
pSnsObj = &stSnsImx385_Obj;
|
pSnsObj = &stSnsImx385_Obj;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(SENSOR_SONY_IMX675)
|
||||||
|
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||||
|
case SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1:
|
||||||
|
pSnsObj = &stSnsImx675_Obj;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#if defined(SENSOR_TECHPOINT_TP2850)
|
#if defined(SENSOR_TECHPOINT_TP2850)
|
||||||
case TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT:
|
case TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT:
|
||||||
case TECHPOINT_TP2850_MIPI_4M_30FPS_8BIT:
|
case TECHPOINT_TP2850_MIPI_4M_30FPS_8BIT:
|
||||||
|
|||||||
@ -476,7 +476,7 @@ CVI_BOOL SAMPLE_COMM_FRAME_CompareWithFile(const CVI_CHAR *filename, VIDEO_FRAME
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CVI_U8 buffer[stVbCalConfig.u32MainYSize];
|
CVI_U8 *buffer = (CVI_U8 *)malloc(stVbCalConfig.u32MainYSize * sizeof(CVI_U8));
|
||||||
CVI_U32 offset = 0;
|
CVI_U32 offset = 0;
|
||||||
|
|
||||||
for (int i = 0; i < stVbCalConfig.plane_num; ++i) {
|
for (int i = 0; i < stVbCalConfig.plane_num; ++i) {
|
||||||
@ -513,6 +513,7 @@ CVI_BOOL SAMPLE_COMM_FRAME_CompareWithFile(const CVI_CHAR *filename, VIDEO_FRAME
|
|||||||
CVI_SYS_Munmap(pstVideoFrame->stVFrame.pu8VirAddr[i], pstVideoFrame->stVFrame.u32Length[i]);
|
CVI_SYS_Munmap(pstVideoFrame->stVFrame.pu8VirAddr[i], pstVideoFrame->stVFrame.u32Length[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(buffer);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -635,6 +635,13 @@ RETRY_GET_FRAME:
|
|||||||
&stVFrame,
|
&stVFrame,
|
||||||
pstVdecThreadParam->s32MilliSec);
|
pstVdecThreadParam->s32MilliSec);
|
||||||
if (s32Ret == CVI_SUCCESS) {
|
if (s32Ret == CVI_SUCCESS) {
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
if (stVFrame.stVFrame.pu8VirAddr[i])
|
||||||
|
CVI_SYS_IonInvalidateCache(stVFrame.stVFrame.u64PhyAddr[i],
|
||||||
|
stVFrame.stVFrame.pu8VirAddr[i],
|
||||||
|
stVFrame.stVFrame.u32Stride[i] * stVFrame.stVFrame.u32Height);
|
||||||
|
}
|
||||||
|
|
||||||
CVI_VDEC_DISP("PTS = %"PRId64", u32TimeRef = %d\n",
|
CVI_VDEC_DISP("PTS = %"PRId64", u32TimeRef = %d\n",
|
||||||
pstVFrame->u64PTS, pstVFrame->u32TimeRef);
|
pstVFrame->u64PTS, pstVFrame->u32TimeRef);
|
||||||
|
|
||||||
|
|||||||
@ -1145,7 +1145,10 @@ CVI_S32 SAMPLE_COMM_VI_DefaultConfig(CVI_VOID)
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Get config from ini if found.
|
// Get config from ini if found.
|
||||||
if (SAMPLE_COMM_VI_ParseIni(&stIniCfg)) {
|
s32Ret = SAMPLE_COMM_VI_ParseIni(&stIniCfg);
|
||||||
|
if (s32Ret != CVI_SUCCESS) {
|
||||||
|
SAMPLE_PRT("Parse fail\n");
|
||||||
|
} else {
|
||||||
SAMPLE_PRT("Parse complete\n");
|
SAMPLE_PRT("Parse complete\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -54,7 +54,7 @@ $(SDIR)/%.o: $(SDIR)/%.c
|
|||||||
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
|
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
|
||||||
@echo [$(notdir $(CC))] $(notdir $@)
|
@echo [$(notdir $(CC))] $(notdir $@)
|
||||||
|
|
||||||
$(TARGET): $(COMM_OBJ) $(OBJS) $(ISP_OBJ) $(MW_LIB)/libvpu.a $(MW_LIB)/libsys.a
|
$(TARGET): $(COMM_OBJ) $(OBJS) $(ISP_OBJ) $(MW_LIB)/libsys.a
|
||||||
@$(CXX) -o $@ -Wl,--start-group $(OBJS) $(COMM_OBJS) -lsys $(MW_LIB)/libsys.a -Wl,--end-group $(ELFFLAGS) $(EXTRA_LDFLAGS)
|
@$(CXX) -o $@ -Wl,--start-group $(OBJS) $(COMM_OBJS) -lsys $(MW_LIB)/libsys.a -Wl,--end-group $(ELFFLAGS) $(EXTRA_LDFLAGS)
|
||||||
@echo -e $(BLUE)[LINK]$(END)[$(notdir $(CXX))] $(notdir $@)
|
@echo -e $(BLUE)[LINK]$(END)[$(notdir $(CXX))] $(notdir $@)
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,10 @@ static int sys_vi_init(void)
|
|||||||
CVI_LOG_SetLevelConf(&log_conf);
|
CVI_LOG_SetLevelConf(&log_conf);
|
||||||
|
|
||||||
// Get config from ini if found.
|
// Get config from ini if found.
|
||||||
if (SAMPLE_COMM_VI_ParseIni(&stIniCfg)) {
|
s32Ret = SAMPLE_COMM_VI_ParseIni(&stIniCfg);
|
||||||
|
if (s32Ret != CVI_SUCCESS) {
|
||||||
|
SAMPLE_PRT("Parse fail\n");
|
||||||
|
} else {
|
||||||
SAMPLE_PRT("Parse complete\n");
|
SAMPLE_PRT("Parse complete\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,52 +0,0 @@
|
|||||||
SHELL = /bin/bash
|
|
||||||
ifeq ($(PARAM_FILE), )
|
|
||||||
PARAM_FILE:=../../Makefile.param
|
|
||||||
include $(PARAM_FILE)
|
|
||||||
endif
|
|
||||||
include ../sample.mk
|
|
||||||
|
|
||||||
PANEL_INC =../../component/panel/$(shell echo $(CHIP_ARCH) | tr A-Z a-z)
|
|
||||||
SDIR = $(PWD)
|
|
||||||
SRCS = $(wildcard $(SDIR)/*.c)
|
|
||||||
INCS = -I$(MW_INC) -I$(ISP_INC) -I$(KERNEL_INC) -I$(PANEL_INC) -I../common
|
|
||||||
OBJS = $(SRCS:.c=.o)
|
|
||||||
DEPS = $(SRCS:.c=.d)
|
|
||||||
|
|
||||||
TARGET = sample_dsi
|
|
||||||
ifeq ($(CONFIG_ENABLE_SDK_ASAN), y)
|
|
||||||
TARGET = sample_dsi_asan
|
|
||||||
endif
|
|
||||||
|
|
||||||
LIBS = -lvpu -lsys -lmipi_tx -lmisc
|
|
||||||
|
|
||||||
ifeq ($(MULTI_PROCESS_SUPPORT), 1)
|
|
||||||
DEFS += -DRPC_MULTI_PROCESS
|
|
||||||
LIBS += -lnanomsg
|
|
||||||
LIBS += -lvenc -lvdec -lmisc
|
|
||||||
endif
|
|
||||||
|
|
||||||
EXTRA_CFLAGS = $(INCS)
|
|
||||||
EXTRA_LDFLAGS = $(LIBS) -lm -lpthread -latomic
|
|
||||||
EXTRA_LDFLAGS += -lcvi_bin -lcvi_bin_isp $(ISP_LIB)
|
|
||||||
|
|
||||||
.PHONY : clean all lt9611 clean_lt9611
|
|
||||||
all: $(TARGET) lt9611
|
|
||||||
|
|
||||||
$(SDIR)/%.o: $(SDIR)/%.c
|
|
||||||
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
|
|
||||||
@echo [$(notdir $(CC))] $(notdir $@)
|
|
||||||
|
|
||||||
$(TARGET): $(OBJS) $(MW_LIB)/libvpu.a $(MW_LIB)/libsys.a $(MW_LIB)/libmipi_tx.a
|
|
||||||
@$(CXX) -o $@ $(OBJS) $(ELFFLAGS) $(EXTRA_LDFLAGS)
|
|
||||||
@echo -e $(BLUE)[LINK]$(END)[$(notdir $(CC))] $(notdir $@)
|
|
||||||
|
|
||||||
lt9611:
|
|
||||||
cd $(SDIR)/lt9611;make clean;make
|
|
||||||
|
|
||||||
clean: clean_lt9611
|
|
||||||
@rm -f $(OBJS) $(DEPS) $(TARGET)
|
|
||||||
|
|
||||||
clean_lt9611:
|
|
||||||
cd $(SDIR)/lt9611;make clean;
|
|
||||||
|
|
||||||
-include $(DEPS)
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
SHELL = /bin/bash
|
|
||||||
ifeq ($(PARAM_FILE), )
|
|
||||||
PARAM_FILE:=../../../Makefile.param
|
|
||||||
include $(PARAM_FILE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
SDIR = $(PWD)
|
|
||||||
SRCS = $(wildcard $(SDIR)/*.c)
|
|
||||||
INCS = -I$(KERNEL_INC) -I$(MW_INC) -I$(ISP_INC) -I../../common
|
|
||||||
OBJS = $(SRCS:.c=.o)
|
|
||||||
DEPS = $(SRCS:.c=.d)
|
|
||||||
|
|
||||||
EXTRA_CFLAGS = $(INCS)
|
|
||||||
LIBS = -lsys
|
|
||||||
EXTRA_LDFLAGS = $(LIBS) -lm -latomic -lpthread
|
|
||||||
|
|
||||||
TARGET = lt9611
|
|
||||||
|
|
||||||
.PHONY : clean all
|
|
||||||
all: $(TARGET)
|
|
||||||
|
|
||||||
$(SDIR)/%.o: $(SDIR)/%.c
|
|
||||||
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
|
|
||||||
@echo [$(notdir $(CC))] $(notdir $@)
|
|
||||||
|
|
||||||
$(TARGET): $(OBJS)
|
|
||||||
@$(CXX) -o $@ $(OBJS) $(ELFFLAGS) $(EXTRA_LDFLAGS) -static
|
|
||||||
@echo -e $(BLUE)[LINK]$(END)[$(notdir $(CC))] $(notdir $@)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@rm -f $(OBJS) $(DEPS) $(TARGET)
|
|
||||||
|
|
||||||
-include $(DEPS)
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user