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/tp2863_tp2803/sample_test_tp2863_tp2803
|
||||
sample/sample_panel/sample_panel
|
||||
sample/sample_panel/lt9611/lt9611
|
||||
|
||||
modules/venc/vc/jpeg/driver/bm_jpg_test
|
||||
modules/venc/vc/jpeg/driver/bmjpuapi/bmjpegdec
|
||||
|
||||
@ -50,9 +50,12 @@ endif
|
||||
## INCLUDE PATH ##
|
||||
COMMON_INC = $(MW_PATH)/sample/common/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
|
||||
OSDC_INC = $(MW_PATH)/modules/osdc/include
|
||||
BIN_INC = $(MW_PATH)/modules/bin/include
|
||||
|
||||
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
|
||||
*/
|
||||
CVI_S32 CVI_AUD_SYS_UnBind(const MMF_CHN_S *pstSrcChn, const MMF_CHN_S *pstDestChn);
|
||||
|
||||
/* 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);
|
||||
|
||||
/**
|
||||
* @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.
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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.
|
||||
* @param AoDevId the number of output device
|
||||
|
||||
@ -79,14 +79,21 @@ extern "C" {
|
||||
#define DNVQE_DRC_EXPANDER_COMPRESS 0x4
|
||||
#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 CHECK_AI_DEVID_VALID(x) \
|
||||
((((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) \
|
||||
((((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) \
|
||||
((((x) > (AENC_MAX_CHN_NUM-1))) ? 1:0)
|
||||
#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_BUF_FULL 0xA0000011
|
||||
#define CVI_ERR_AI_VQE_FILE_UNEXIST 0xA0000012
|
||||
/*invalid card ID*/
|
||||
#define CVI_ERR_AI_INVALID_CARDID 0xA100013
|
||||
|
||||
/* invalid device ID */
|
||||
#define CVI_ERR_AO_INVALID_DEVID 0xA1000001
|
||||
/* invalid channel ID */
|
||||
@ -628,6 +638,8 @@ extern ST_AudioUnitTestCfg stAudTestCfg;
|
||||
#define CVI_ERR_AO_BUSY 0xA100000E
|
||||
/* vqe err */
|
||||
#define CVI_ERR_AO_VQE_ERR 0xA100000F
|
||||
/*invalid card ID*/
|
||||
#define CVI_ERR_AO_INVALID_CARDID 0xA100010
|
||||
|
||||
|
||||
#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 USE_USER_SEN_DRIVER 1
|
||||
|
||||
|
||||
typedef struct _ISP_CMOS_SENSOR_IMAGE_MODE_S {
|
||||
CVI_U16 u16Width;
|
||||
CVI_U16 u16Height;
|
||||
@ -52,15 +51,22 @@ typedef struct _ISP_CMOS_DEFAULT_S {
|
||||
} ISP_CMOS_DEFAULT_S;
|
||||
|
||||
typedef struct _ISP_SENSOR_EXP_FUNC_S {
|
||||
/* Callback for init sensor IIC and register. */
|
||||
CVI_VOID (*pfn_cmos_sensor_init)(VI_PIPE ViPipe);
|
||||
/* Callback for exit sensor. */
|
||||
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);
|
||||
/* Callback for set sensor image mode. */
|
||||
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);
|
||||
|
||||
/* 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);
|
||||
/* Callback for get sensor blc level. */
|
||||
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);
|
||||
|
||||
/* 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 _SNS_ATTR_S {
|
||||
CVI_U16 u16Min;
|
||||
CVI_U16 u16Max;
|
||||
CVI_U16 u16Def;
|
||||
CVI_U16 u16Step;
|
||||
CVI_U16 u16Min; /* Current MIN exposure of sensor */
|
||||
CVI_U16 u16Max; /* Current MAX exposure of sensor */
|
||||
CVI_U16 u16Def; /* Current default setting exposure of sensor */
|
||||
CVI_U16 u16Step; /* Current exposure step of sensor */
|
||||
} SNS_ATTR_S;
|
||||
|
||||
typedef struct _SNS_ATTR_LARGE_S {
|
||||
CVI_U32 u32Min;
|
||||
CVI_U32 u32Max;
|
||||
CVI_U32 u32Def;
|
||||
CVI_U32 u32Step;
|
||||
CVI_U32 u32Min; /* Current MIN gain of sensor */
|
||||
CVI_U32 u32Max; /* Current MAX gain of sensor */
|
||||
CVI_U32 u32Def; /* Current default setting gain of sensor */
|
||||
CVI_U32 u32Step; /* Current gain step of sensor */
|
||||
} SNS_ATTR_LARGE_S;
|
||||
|
||||
typedef struct _ISP_SNS_STATE_S {
|
||||
CVI_BOOL bInit; /* CVI_TRUE: Sensor init */
|
||||
CVI_BOOL bSyncInit; /* CVI_TRUE: Sync Reg init */
|
||||
CVI_U8 u8ImgMode;
|
||||
CVI_U8 u8Hdr; /* CVI_TRUE: HDR enbale */
|
||||
WDR_MODE_E enWDRMode;
|
||||
CVI_BOOL bInit; /* CVI_TRUE: Sensor init */
|
||||
CVI_BOOL bSyncInit; /* CVI_TRUE: Sync Reg init */
|
||||
CVI_U8 u8ImgMode; /* Current image mode of sensor */
|
||||
CVI_U8 u8Hdr; /* CVI_TRUE: HDR enbale */
|
||||
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 u32FLStd; /* FullLines std */
|
||||
CVI_U32 au32WDRIntTime[4];
|
||||
CVI_U32 au32FL[2]; /* [0]: FullLines of cur-frame; [1]: Pre FullLines of pre-frame */
|
||||
CVI_U32 u32FLStd; /* FullLines std */
|
||||
CVI_U32 au32WDRIntTime[4]; /* Number of exposure lines under WDR */
|
||||
} 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_MIRROR = 1,
|
||||
ISP_SNS_FLIP = 2,
|
||||
@ -56,29 +56,29 @@ typedef enum _ISP_SNS_MIRRORFLIP_TYPE_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_FIX, /* sensor l2s distance is fixed. */
|
||||
SNS_L2S_MODE_FIX, /* sensor l2s distance is fixed. */
|
||||
} ISP_SNS_INTTIME_MODE_E;
|
||||
|
||||
typedef struct _MCLK_ATTR_S {
|
||||
CVI_U8 u8Mclk;
|
||||
CVI_BOOL bMclkEn;
|
||||
CVI_U8 u8Mclk; /* Select which mclk the Sensor uses. */
|
||||
CVI_BOOL bMclkEn; /* Select whether the Sensor uses the current mclk. */
|
||||
} MCLK_ATTR_S;
|
||||
|
||||
typedef struct _RX_INIT_ATTR_S {
|
||||
CVI_U32 MipiDev;
|
||||
CVI_S16 as16LaneId[5];
|
||||
CVI_S8 as8PNSwap[5];
|
||||
MCLK_ATTR_S stMclkAttr;
|
||||
CVI_U32 MipiDev; /* Select which MAC the Sensor uses. */
|
||||
CVI_S16 as16LaneId[5]; /* Select MIPI lane sequence the Sensor uses. */
|
||||
CVI_S8 as8PNSwap[5]; /* Select whether MIPI lane swap the Sensor uses. */
|
||||
MCLK_ATTR_S stMclkAttr; /* Set MCLK information. */
|
||||
} RX_INIT_ATTR_S;
|
||||
|
||||
typedef enum _SNS_BDG_MUX_MODE_E {
|
||||
SNS_BDG_MUX_NONE = 0, /* sensor bridge mux is disabled */
|
||||
SNS_BDG_MUX_2, /* sensor bridge mux 2 input */
|
||||
SNS_BDG_MUX_3, /* sensor bridge mux 3 input */
|
||||
SNS_BDG_MUX_4, /* sensor bridge mux 4 input */
|
||||
SNS_BDG_MUX_2, /* sensor bridge mux 2 input */
|
||||
SNS_BDG_MUX_3, /* sensor bridge mux 3 input */
|
||||
SNS_BDG_MUX_4, /* sensor bridge mux 4 input */
|
||||
} 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 u32AGain;
|
||||
CVI_U32 u32DGain;
|
||||
@ -97,7 +97,7 @@ typedef struct _ISP_INIT_ATTR_S {
|
||||
SNS_BDG_MUX_MODE_E enSnsBdgMuxMode;
|
||||
} 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 (*pfnUnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *, ALG_LIB_S *);
|
||||
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 stSnsBF2253L_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_SLAVE1_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_Slave_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 stSnsGc4653_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_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 stSnsOs04c10_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 stSnsImx347_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 stSnsTP2825_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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
// 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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -5,7 +5,7 @@ endif
|
||||
|
||||
.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:
|
||||
@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
|
||||
|
||||
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
|
||||
OBJS = $(SRCS:.c=.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) {
|
||||
free(src_1st_list);
|
||||
free(src_2nd_list);
|
||||
free(cfg);
|
||||
free(rgn_attr);
|
||||
free(cfg->DstRgnMeshInfo);
|
||||
free(cfg->SrcRgnMeshInfo);
|
||||
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->SrcRgnMeshInfo);
|
||||
free(rgn_attr->SrcRgnMeshInfoExt);
|
||||
free(cfg);
|
||||
free(rgn_attr);
|
||||
|
||||
CVI_TRACE_GDC(CVI_DBG_ERR, " fail to alloc mesh\n");
|
||||
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_2nd_list);
|
||||
free(cfg);
|
||||
free(rgn_attr);
|
||||
free(cfg->DstRgnMeshInfo);
|
||||
free(cfg->SrcRgnMeshInfo);
|
||||
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->SrcRgnMeshInfo);
|
||||
free(rgn_attr->SrcRgnMeshInfoExt);
|
||||
free(cfg);
|
||||
free(rgn_attr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -21,9 +21,38 @@ extern __attribute__((weak)) void *__dso_handle;
|
||||
#endif
|
||||
#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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* @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,
|
||||
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,
|
||||
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.
|
||||
*
|
||||
|
||||
@ -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_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 += -DMMF_VERSION=\"$(shell git describe --always)\"
|
||||
|
||||
@ -23,14 +23,6 @@ endif
|
||||
|
||||
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*
|
||||
|
||||
.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 vi_dbg_th_info_s {
|
||||
CVI_U8 th_enable;
|
||||
CVI_U8 dbg_th_disable;
|
||||
pthread_t vi_dbg_thread;
|
||||
};
|
||||
struct vi_dbg_th_info_s gViDbgTH;
|
||||
@ -143,9 +143,9 @@ static CVI_VOID *vi_dbg_handler(CVI_VOID *data)
|
||||
|
||||
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_SET(fd, &rfds);
|
||||
|
||||
@ -161,7 +161,7 @@ static CVI_VOID *vi_dbg_handler(CVI_VOID *data)
|
||||
}
|
||||
|
||||
//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/cvitek/vi_dbg");
|
||||
}
|
||||
@ -1348,6 +1348,40 @@ CVI_S32 CVI_VI_GetPipeCrop(VI_PIPE ViPipe, CROP_INFO_S *pstCropInfo)
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
{
|
||||
if (!gViDbgTH.dbg_th_disable) {
|
||||
struct sched_param param;
|
||||
pthread_attr_t attr;
|
||||
|
||||
@ -1519,7 +1553,7 @@ CVI_S32 CVI_VI_DisableChn(VI_PIPE ViPipe, VI_CHN ViChn)
|
||||
}
|
||||
|
||||
if (all_chn_disabled) {
|
||||
gViDbgTH.th_enable = CVI_FALSE;
|
||||
gViDbgTH.dbg_th_disable = CVI_TRUE;
|
||||
|
||||
s32Ret = vi_sdk_disable_chn(fd, ViPipe, ViChn);
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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))
|
||||
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)
|
||||
DEPS = $(SRCS:.c=.d)
|
||||
TARGET_A = $(MW_LIB)/libvpu.a
|
||||
TARGET_SO = $(MW_LIB)/libvpu.so
|
||||
TARGET_A = $(MW_LIB)/libvo.a
|
||||
TARGET_SO = $(MW_LIB)/libvo.so
|
||||
|
||||
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
|
||||
Version: 2.0
|
||||
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
|
||||
|
||||
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
|
||||
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
|
||||
endif
|
||||
ifeq ($(USE_SYS_GLOBAL_LOG), yes)
|
||||
LDLIBS += -lvpu -lsys
|
||||
LDLIBS += -lvi -lvo -lvpss -lrgn -lgdc -lsys
|
||||
endif
|
||||
|
||||
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
|
||||
|
||||
EXTRA_CFLAGS += -DCLI_DEBUG_SUPPORT
|
||||
EXTRA_LDFLAGS += -lcli
|
||||
|
||||
ifeq ($(MULTI_PROCESS_SUPPORT_AUDIO), yes)
|
||||
DEFINES += -DRPC_MULTI_PROCESS
|
||||
DEFINES += -DRPC_MULTI_PROCESS_AUDIO
|
||||
|
||||
@ -26,7 +26,7 @@ TARGET = cvi_mp3player
|
||||
EXTRA_CFLAGS = $(INCS)
|
||||
EXTRA_LDFLAGS += -lcvi_audio
|
||||
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)
|
||||
LIB_DEP := $(MW_LIB)/libmad.a
|
||||
|
||||
@ -292,6 +292,7 @@ CVI_S32 _update_Aenc_setting(AIO_ATTR_S *pstAioAttr,
|
||||
{
|
||||
|
||||
CVI_S32 s32Ret;
|
||||
SMP_AUD_UNUSED_REF(bVqe);
|
||||
|
||||
s32Ret = _update_aenc_params(pstAencAttr, pstAioAttr, enType);
|
||||
if (s32Ret != CVI_SUCCESS) {
|
||||
@ -312,8 +313,7 @@ CVI_S32 _update_Aenc_setting(AIO_ATTR_S *pstAioAttr,
|
||||
__LINE__,
|
||||
pstAencAac->enSmpRate);
|
||||
|
||||
pstAencAac->enSoundMode = bVqe ? AUDIO_SOUND_MODE_MONO :
|
||||
pstAioAttr->enSoundmode;
|
||||
pstAencAac->enSoundMode = pstAioAttr->enSoundmode;
|
||||
pstAencAac->enTransType = gs_enAacTransType;
|
||||
pstAencAac->s16BandWidth = 0;
|
||||
pstAencAttr->pValue = pstAencAac;
|
||||
|
||||
@ -24,7 +24,7 @@ DEFINES += -DCVIAUDIO_STATIC
|
||||
DEFINES += -DSUPPORT_EXTERNAL_AAC
|
||||
|
||||
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 += -laacdec2
|
||||
LIBS += -laacsbrdec2
|
||||
|
||||
@ -25,7 +25,7 @@ DEFINES += -DCVIAUDIO_STATIC
|
||||
DEFINES += -DSUPPORT_EXTERNAL_AAC
|
||||
|
||||
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 += -laacdec2
|
||||
LIBS += -laacsbrdec2
|
||||
|
||||
@ -17,6 +17,10 @@ ifeq ($(CONFIG_SENSOR_CVSENS_CV2003), y)
|
||||
KBUILD_DEFINES += -DSENSOR_CVSENS_CV2003
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SENSOR_CVSENS_CV2003_1L), y)
|
||||
KBUILD_DEFINES += -DSENSOR_CVSENS_CV2003_1L
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SENSOR_CVSENS_CV2003_1L_SLAVE), y)
|
||||
KBUILD_DEFINES += -DSENSOR_CVSENS_CV2003_1L_SLAVE
|
||||
endif
|
||||
@ -89,6 +93,10 @@ ifeq ($(CONFIG_SENSOR_GCORE_GC2145), y)
|
||||
KBUILD_DEFINES += -DSENSOR_GCORE_GC2145
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SENSOR_GCORE_GC2385_1L), y)
|
||||
KBUILD_DEFINES += -DSENSOR_GCORE_GC2385_1L
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SENSOR_GCORE_GC4023), y)
|
||||
KBUILD_DEFINES += -DSENSOR_GCORE_GC4023
|
||||
endif
|
||||
@ -125,6 +133,10 @@ ifeq ($(CONFIG_SENSOR_OV_OS02K10_SLAVE), y)
|
||||
KBUILD_DEFINES += -DSENSOR_OV_OS02K10_SLAVE
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SENSOR_OV_OS02N10_1L), y)
|
||||
KBUILD_DEFINES += -DSENSOR_OV_OS02N10_1L
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SENSOR_OV_OS04A10), y)
|
||||
KBUILD_DEFINES += -DSENSOR_OV_OS04A10
|
||||
endif
|
||||
@ -433,6 +445,10 @@ ifeq ($(CONFIG_SENSOR_SONY_IMX385), y)
|
||||
KBUILD_DEFINES += -DSENSOR_SONY_IMX385
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SENSOR_SONY_IMX675), y)
|
||||
KBUILD_DEFINES += -DSENSOR_SONY_IMX675
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SENSOR_TECHPOINT_TP2850), y)
|
||||
KBUILD_DEFINES += -DSENSOR_TECHPOINT_TP2850
|
||||
endif
|
||||
|
||||
@ -154,6 +154,7 @@ typedef enum _PIC_SIZE_E {
|
||||
PIC_2304x1296,
|
||||
PIC_2048x1536,
|
||||
PIC_2560x1600,
|
||||
PIC_2560x1944,
|
||||
PIC_2592x1520,
|
||||
PIC_2592x1536,
|
||||
PIC_2592x1944,
|
||||
@ -185,6 +186,7 @@ typedef enum _SAMPLE_SNS_TYPE_E {
|
||||
CHIPUP_XS9922B_MODE_720P_2CH_8BIT,
|
||||
CHIPUP_XS9922B_MODE_720P_3CH_8BIT,
|
||||
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_SLAVE1_MIPI_2M_1080P_30FPS_10BIT,
|
||||
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_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC2145_MIPI_2M_12FPS_8BIT,
|
||||
GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC4023_MIPI_4M_30FPS_10BIT,
|
||||
GCORE_GC4653_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,
|
||||
OV_OS02D10_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_OS04A10_MIPI_4M_1440P_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_IMX347_MIPI_4M_60FPS_12BIT,
|
||||
SONY_IMX385_MIPI_2M_30FPS_12BIT,
|
||||
SONY_IMX675_MIPI_5M_30FPS_12BIT,
|
||||
TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT,
|
||||
TECHPOINT_TP2850_MIPI_4M_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_1600P_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_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||
/* ------ WDR 2TO1 END ------*/
|
||||
|
||||
@ -66,17 +66,17 @@ CVI_S32 SAMPLE_PLAT_SYS_INIT(SIZE_S stSize)
|
||||
#if !defined(DDR_64MB_SIZE)
|
||||
stVbConf.astCommPool[0].u32BlkCnt = 8;
|
||||
#else
|
||||
stVbConf.astCommPool[0].u32BlkCnt = 2;
|
||||
stVbConf.astCommPool[0].u32BlkCnt = 3;
|
||||
#endif
|
||||
stVbConf.astCommPool[0].enRemapMode = VB_REMAP_MODE_CACHED;
|
||||
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);
|
||||
if (s32Ret != CVI_SUCCESS) {
|
||||
CVI_TRACE_LOG(CVI_DBG_ERR, "system init failed with %#x\n", s32Ret);
|
||||
goto error;
|
||||
}
|
||||
|
||||
return s32Ret;
|
||||
error:
|
||||
_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_3CH_8BIT",
|
||||
"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_SLAVE1_MIPI_2M_1080P_30FPS_10BIT",
|
||||
"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_SLAVE_MIPI_2M_30FPS_10BIT",
|
||||
"GCORE_GC2145_MIPI_2M_12FPS_8BIT",
|
||||
"GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT",
|
||||
"GCORE_GC4023_MIPI_4M_30FPS_10BIT",
|
||||
"GCORE_GC4653_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",
|
||||
"OV_OS02D10_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_OS04A10_MIPI_4M_1440P_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_IMX347_MIPI_4M_60FPS_12BIT",
|
||||
"SONY_IMX385_MIPI_2M_30FPS_12BIT",
|
||||
"SONY_IMX675_MIPI_5M_30FPS_12BIT",
|
||||
"TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT",
|
||||
"TECHPOINT_TP2850_MIPI_4M_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_1600P_30FPS_10BIT_WDR2TO1",
|
||||
"SONY_IMX335_MIPI_5M_30FPS_10BIT_WDR2TO1",
|
||||
"SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1",
|
||||
/* ------ WDR 2TO1 END ------*/
|
||||
};
|
||||
|
||||
@ -302,6 +307,7 @@ CVI_CHAR *SAMPLE_COMM_SNS_GetSnsrTypeName(void)
|
||||
* PIC_2048x1536:
|
||||
* PIC_2592x1520:
|
||||
* PIC_2560x1600:
|
||||
* PIC_2560x1944:
|
||||
* PIC_2592x1944:
|
||||
* PIC_2592x1536:
|
||||
* PIC_2688x1520:
|
||||
@ -360,6 +366,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetSize(SAMPLE_SNS_TYPE_E enMode, PIC_SIZE_E *penSize)
|
||||
break;
|
||||
case GCORE_GC02M1_MIPI_2M_30FPS_10BIT:
|
||||
case GCORE_GC2145_MIPI_2M_12FPS_8BIT:
|
||||
case GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT:
|
||||
case BYD_BF2253L_MIPI_1200P_30FPS_10BIT:
|
||||
*penSize = PIC_1600x1200;
|
||||
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 OV_OS02D10_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_OV5647_MIPI_2M_30FPS_10BIT:
|
||||
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_LT7911_2M_60FPS_8BIT:
|
||||
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_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
||||
*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:
|
||||
*penSize = PIC_2560x1600;
|
||||
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_WDR2TO1:
|
||||
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;
|
||||
break;
|
||||
|
||||
case PIC_2560x1944:
|
||||
pstSize->u32Width = 2560;
|
||||
pstSize->u32Height = 1944;
|
||||
break;
|
||||
|
||||
case PIC_2592x1944:
|
||||
pstSize->u32Width = 2592;
|
||||
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_IMX385_MIPI_2M_30FPS_12BIT:
|
||||
case SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1:
|
||||
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||
case SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1:
|
||||
// GalaxyCore
|
||||
case GCORE_GC02M1_MIPI_2M_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:
|
||||
// cvsens
|
||||
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_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
||||
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
|
||||
case BRIGATES_BG0808_MIPI_2M_30FPS_10BIT:
|
||||
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_SC4336P_MIPI_4M_30FPS_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
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@ -1039,6 +1072,7 @@ CVI_S32 SAMPLE_COMM_SNS_GetIspAttrBySns(SAMPLE_SNS_TYPE_E enSnsType, ISP_PUB_ATT
|
||||
// FPS
|
||||
switch (enSnsType) {
|
||||
case CVSENS_CV4001_MIPI_4M_1440P_15FPS_WDR2TO1:
|
||||
case OV_OS02N10_1L_MIPI_2M_15FPS_10BIT:
|
||||
pstPubAttr->f32FrameRate = 15;
|
||||
break;
|
||||
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_SLAVE2_MIPI_1M_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 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_SLAVE1_MIPI_2M_1080P_30FPS_10BIT:
|
||||
case SOI_F53_MIPI_2M_30FPS_10BIT:
|
||||
case SOI_F352_MIPI_2M_30FPS_10BIT:
|
||||
case SOI_F352_MIPI_2M_30FPS_10BIT_WDR2TO1:
|
||||
case SOI_K306_MIPI_4M_25FPS_10BIT:
|
||||
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||
pstPubAttr->f32FrameRate = 30;
|
||||
break;
|
||||
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_3CH_8BIT:
|
||||
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_2M_25FPS_8BIT:
|
||||
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_IMX385_MIPI_2M_30FPS_12BIT:
|
||||
case SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1:
|
||||
case SONY_IMX675_MIPI_5M_30FPS_12BIT:
|
||||
case SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1:
|
||||
// GalaxyCore
|
||||
case GCORE_GC02M1_MIPI_2M_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_GC4023_MIPI_4M_30FPS_10BIT:
|
||||
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_1L_SLAVE_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:
|
||||
return &stSnsCV2003_Obj;
|
||||
#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)
|
||||
case CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT:
|
||||
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:
|
||||
return &stSnsGc2145_Obj;
|
||||
#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)
|
||||
case GCORE_GC4023_MIPI_4M_30FPS_10BIT:
|
||||
return &stSnsGc4023_Obj;
|
||||
@ -1364,6 +1413,11 @@ CVI_VOID *SAMPLE_COMM_SNS_GetSnsObj(SAMPLE_SNS_TYPE_E enSnsType)
|
||||
pSnsObj = &stSnsOs02d10_Slave_Obj;
|
||||
break;
|
||||
#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)
|
||||
case OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT:
|
||||
pSnsObj = &stSnsOs02k10_Slave_Obj;
|
||||
@ -1819,6 +1873,12 @@ CVI_VOID *SAMPLE_COMM_SNS_GetSnsObj(SAMPLE_SNS_TYPE_E enSnsType)
|
||||
pSnsObj = &stSnsImx385_Obj;
|
||||
break;
|
||||
#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)
|
||||
case TECHPOINT_TP2850_MIPI_2M_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;
|
||||
}
|
||||
|
||||
CVI_U8 buffer[stVbCalConfig.u32MainYSize];
|
||||
CVI_U8 *buffer = (CVI_U8 *)malloc(stVbCalConfig.u32MainYSize * sizeof(CVI_U8));
|
||||
CVI_U32 offset = 0;
|
||||
|
||||
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]);
|
||||
}
|
||||
|
||||
free(buffer);
|
||||
fclose(fp);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -635,6 +635,13 @@ RETRY_GET_FRAME:
|
||||
&stVFrame,
|
||||
pstVdecThreadParam->s32MilliSec);
|
||||
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",
|
||||
pstVFrame->u64PTS, pstVFrame->u32TimeRef);
|
||||
|
||||
|
||||
@ -1145,7 +1145,10 @@ CVI_S32 SAMPLE_COMM_VI_DefaultConfig(CVI_VOID)
|
||||
};
|
||||
|
||||
// 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");
|
||||
}
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ $(SDIR)/%.o: $(SDIR)/%.c
|
||||
@$(CC) $(DEPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
|
||||
@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)
|
||||
@echo -e $(BLUE)[LINK]$(END)[$(notdir $(CXX))] $(notdir $@)
|
||||
|
||||
|
||||
@ -52,7 +52,10 @@ static int sys_vi_init(void)
|
||||
CVI_LOG_SetLevelConf(&log_conf);
|
||||
|
||||
// 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");
|
||||
}
|
||||
|
||||
|
||||
@ -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