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:
sophgo-forum-service
2024-07-20 21:36:58 +08:00
committed by carbon
parent c57b1410f0
commit 62573a835f
122 changed files with 937 additions and 6572 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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__ */

View File

@ -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 */

View File

@ -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 u8ImgMode; /* Current image mode of sensor */
CVI_U8 u8Hdr; /* CVI_TRUE: HDR enbale */
WDR_MODE_E enWDRMode;
WDR_MODE_E enWDRMode; /* Current wdr mode of sensor */
ISP_SNS_SYNC_INFO_S astSyncInfo[2]; /* [0]: Sensor reg info of cur-frame; [1]: Sensor reg info of pre-frame ; */
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 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,
@ -60,15 +60,15 @@ typedef enum _ISP_SNS_L2S_MODE_E {
} 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 {
@ -78,7 +78,7 @@ typedef enum _SNS_BDG_MUX_MODE_E {
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;

View File

@ -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

View File

@ -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 "########################################################################################################"

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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
lib32

View File

@ -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)

View 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)

View File

@ -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;
}

View File

@ -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.
*

View File

@ -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)

View File

@ -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__ */

View File

@ -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__ */

View File

@ -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__ */

View File

@ -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

View File

@ -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);
}

View File

@ -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;
}

View 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)

View File

@ -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)\"

View File

@ -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

View 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)

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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)

View 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)

View File

@ -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__ */

View File

@ -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_ */

View File

@ -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_

View File

@ -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__ */

View File

@ -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_ */

View File

@ -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_

View File

@ -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_

View File

@ -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

View File

@ -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_ */

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 ------*/

View File

@ -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();

View File

@ -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:

View File

@ -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;
}

View File

@ -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);

View File

@ -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");
}

View File

@ -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 $@)

View File

@ -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");
}

View File

@ -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)

View File

@ -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