diff --git a/.gitignore b/.gitignore index 94d70ed..c5100c6 100755 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,23 @@ # Xmake cache -.xmake/ -.vscode/ -.devenv/ -.direnv/ -Hi3516CV500_SDK/ -toolchains/ -arm-himix200-linux/ -build/ +.xmake +.vscode +.devenv +.direnv +Hi3516CV500_SDK +toolchains +arm-himix200-linux +build Rouring Rouring-Vision smart_trash_bin nnie-yolov3-demo dtof_sensor_driver +# Build Cache +*.a +*.o +*.so + # MacOS Cache .DS_Store diff --git a/.justfile b/.justfile new file mode 100644 index 0000000..641d316 --- /dev/null +++ b/.justfile @@ -0,0 +1,36 @@ +# Alias +alias a := all +alias c := clean +alias b := build + +# Default Target +default := "CatFeeder" + +config: + xmake f -v -c -y + +reload: + direnv reload + +build: + xmake b {{default}} + +rebuild: + xmake b -r {{default}} + +clean: + xmake c + +sync: + lftp -v -c 'open -e "mirror -R build/cross/arm/ /" ftp://root:@192.168.137.3/' + +ftp: + lftp ftp://root:@192.168.137.3/ + +ftp-tui: + termscp -P "" ftp://root@192.168.137.3:21:/ + +tty: + minicom -D /dev/ttyUSB0 -b 115200 + +all: build sync diff --git a/CCPP.nix b/CCPP.nix index 1188dcf..9852646 100644 --- a/CCPP.nix +++ b/CCPP.nix @@ -18,17 +18,6 @@ clang-tools ]; - # Enable languages support - # languages.cplusplus.enable = true; - # env = { - # NIX_LD_LIBRARY_PATH = with pkgs; - # lib.makeLibraryPath [ - # stdenv_32bit.cc.cc - # glibc_multi - # ]; - # NIX_LD = with pkgs; lib.fileContents "${stdenv_32bit.cc}/nix-support/dynamic-linker"; - # }; - # When enter shell, exec ... enterShell = '' export LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH diff --git a/live555.lua b/live555.lua index 953e5a7..3ae6e48 100644 --- a/live555.lua +++ b/live555.lua @@ -5,8 +5,8 @@ set_homepage("http://www.live555.com") set_urls("http://www.live555.com/liveMedia/public/live.$(version).tar.gz") add_versions("2024.11.28", "a9af16f46d2f4c7ccdbfc4b617480503d27cccb46fa5abb7dfd8a25951b44cc3") -add_configs("no_openssl", {description = "Set 1 if no OpenSSL", default = "1", values = {"0", "1"}}) -add_configs("no_std_lib", {description = "Set 1 if no C++20 STD LIB", default = "1", values = {"0", "1"}}) +add_configs("no_openssl", { description = "Set 1 if no OpenSSL", default = "1", values = { "0", "1" } }) +add_configs("no_std_lib", { description = "Set 1 if no C++20 STD LIB", default = "1", values = { "0", "1" } }) add_includedirs( "include/BasicUsageEnvironment", @@ -15,7 +15,8 @@ add_includedirs( "include/UsageEnvironment" ) -local compile_opts = "COMPILE_OPTS = $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 " +local compile_opts = +"COMPILE_OPTS = $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 " local make_scipt = [[ C = c @@ -36,7 +37,7 @@ LIBS_FOR_GUI_APPLICATION = EXE = ]] -on_load(function (package) +on_load(function(package) local no_openssl = package:config("no_openssl") or "1" local no_std_lib = package:config("no_std_lib") or "1" package:add("defines", "NO_OPENSSL=" .. no_openssl) @@ -73,7 +74,6 @@ on_install(function(package) import("package.tools.make").install(package) end) -on_test(function (package) - assert(package:has_cxxtypes("RTSPServer", {includes = "liveMedia.hh"})) +on_test(function(package) + assert(package:has_cxxtypes("RTSPServer", { includes = "liveMedia.hh" })) end) - diff --git a/src/ftpServerStart.sh b/src/ftpServerStart.sh new file mode 100755 index 0000000..e923ddb --- /dev/null +++ b/src/ftpServerStart.sh @@ -0,0 +1,3 @@ +mount /dev/mmcblk0p5 /mnt/sd +tcpsvd 0 21 ftpd -w /mnt/sd & +cd /mnt/sd diff --git a/src/main.cpp b/src/main.cpp index 8503480..5e20f7f 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,14 +13,14 @@ int main(int argc, char** argv) { zlog_category_t *log = nullptr; - // init log and check log.conf + // Init log and check log.conf result = zlog_init("log.conf"); if (result) { std::cout << "zlog init failed! Please check log.conf!\n"; return (-1); } - // get log cat for main to print + // Get log cat for main to print log = zlog_get_category("cat"); if (!log) { std::cout << "Main get log failed!\n"; @@ -36,10 +36,11 @@ int main(int argc, char** argv) { zlog_warn(log, "Can't Create log dir FOR %s", file_error.message().c_str()); } - // eb3516VideoInit(); - // eb3516VideoStart(); - eb3516Yolov3Init("./coco_yolov3_detect.wk", "./dog_bike_car_416x416.bgr"); - eb3516Yolov3Exit(); + eb3516VideoInit(); + eb3516VideoStart(); + eb3516VideoStop(); + // eb3516Yolov3Init("./coco_yolov3_detect.wk", "./dog_bike_car_416x416.bgr"); + // eb3516Yolov3Exit(); zlog_fini(); diff --git a/src/modules/isp/eb3516_video.c b/src/modules/isp/eb3516_video.c index 92bed6a..5107341 100755 --- a/src/modules/isp/eb3516_video.c +++ b/src/modules/isp/eb3516_video.c @@ -12,13 +12,13 @@ #define ALIGN_DOWN_SIZE 2 typedef struct hiSAMPLE_VPSS_CONFIG_S { - VPSS_GRP s32GrpId; - VPSS_GRP_ATTR_S stGrpAttr; - HI_BOOL abChnEnable[VPSS_MAX_PHY_CHN_NUM]; - VPSS_CHN_ATTR_S astChnAttrs[VPSS_MAX_PHY_CHN_NUM]; + VPSS_GRP s32GrpId; + VPSS_GRP_ATTR_S stGrpAttr; + HI_BOOL abChnEnable[VPSS_MAX_PHY_CHN_NUM]; + VPSS_CHN_ATTR_S astChnAttrs[VPSS_MAX_PHY_CHN_NUM]; } SAMPLE_VPSS_CONFIG_S; -static zlog_category_t* log_video = NULL; +static zlog_category_t *log_video = NULL; // Sensor Info static SAMPLE_VI_CONFIG_S g_stViConfig = {0}; @@ -39,385 +39,372 @@ static const PIC_SIZE_E g_PicSizes[3] = {PIC_1080P, PIC_720P, PIC_1080P}; static const VENC_CHN g_VencChn[3] = {0, 1, 2}; static const PAYLOAD_TYPE_E g_CodecTypes[3] = {PT_H265, PT_H264, PT_JPEG}; -static HI_S32 VPSS_GetDefChnAttr(VPSS_CHN_ATTR_S* pstVpssChnAttr, +static HI_S32 VPSS_GetDefChnAttr(VPSS_CHN_ATTR_S *pstVpssChnAttr, VPSS_CHN VpssChn, PIC_SIZE_E enPicSize) { - SIZE_S stSize; - SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize); - pstVpssChnAttr->enChnMode = VPSS_CHN_MODE_USER; - pstVpssChnAttr->u32Width = stSize.u32Width; - pstVpssChnAttr->u32Height = stSize.u32Height; - pstVpssChnAttr->enVideoFormat = VIDEO_FORMAT_LINEAR; - pstVpssChnAttr->enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420; - pstVpssChnAttr->enDynamicRange = DYNAMIC_RANGE_SDR8; - pstVpssChnAttr->enCompressMode = COMPRESS_MODE_NONE; // COMPRESS_MODE_SEG; - pstVpssChnAttr->stFrameRate.s32SrcFrameRate = -1; - pstVpssChnAttr->stFrameRate.s32DstFrameRate = -1; - pstVpssChnAttr->u32Depth = 0; - pstVpssChnAttr->bMirror = HI_FALSE; - pstVpssChnAttr->bFlip = HI_FALSE; - pstVpssChnAttr->stAspectRatio.enMode = ASPECT_RATIO_NONE; - return HI_SUCCESS; + SIZE_S stSize; + SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize); + pstVpssChnAttr->enChnMode = VPSS_CHN_MODE_USER; + pstVpssChnAttr->u32Width = stSize.u32Width; + pstVpssChnAttr->u32Height = stSize.u32Height; + pstVpssChnAttr->enVideoFormat = VIDEO_FORMAT_LINEAR; + pstVpssChnAttr->enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420; + pstVpssChnAttr->enDynamicRange = DYNAMIC_RANGE_SDR8; + pstVpssChnAttr->enCompressMode = COMPRESS_MODE_NONE; // COMPRESS_MODE_SEG; + pstVpssChnAttr->stFrameRate.s32SrcFrameRate = -1; + pstVpssChnAttr->stFrameRate.s32DstFrameRate = -1; + pstVpssChnAttr->u32Depth = 0; + pstVpssChnAttr->bMirror = HI_FALSE; + pstVpssChnAttr->bFlip = HI_FALSE; + pstVpssChnAttr->stAspectRatio.enMode = ASPECT_RATIO_NONE; + return HI_SUCCESS; } -static HI_S32 VPSS_GetParams(SAMPLE_VPSS_CONFIG_S* pstVpssConfig, - SIZE_S* pstMaxSize, HI_BOOL bSnap) { - // 设置 VPSS 组 - pstVpssConfig->s32GrpId = !bSnap ? 0 : 1; - pstVpssConfig->stGrpAttr.u32MaxW = pstMaxSize->u32Width; - pstVpssConfig->stGrpAttr.u32MaxH = pstMaxSize->u32Width; - pstVpssConfig->stGrpAttr.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420; - pstVpssConfig->stGrpAttr.enDynamicRange = DYNAMIC_RANGE_SDR8; - pstVpssConfig->stGrpAttr.stFrameRate.s32SrcFrameRate = -1; - pstVpssConfig->stGrpAttr.stFrameRate.s32DstFrameRate = -1; - pstVpssConfig->stGrpAttr.bNrEn = HI_TRUE; - pstVpssConfig->stGrpAttr.stNrAttr.enNrType = - !bSnap ? VPSS_NR_TYPE_VIDEO : VPSS_NR_TYPE_SNAP; - pstVpssConfig->stGrpAttr.stNrAttr.enCompressMode = COMPRESS_MODE_FRAME; - pstVpssConfig->stGrpAttr.stNrAttr.enNrMotionMode = NR_MOTION_MODE_NORMAL; - // 设置 VPSS 通道 - if (!bSnap) { - for (HI_S32 i = 0; i < ARRAY_LENGTH(g_Vpss0Chn); i++) { - VPSS_CHN VpssChn = g_Vpss0Chn[i]; - pstVpssConfig->abChnEnable[VpssChn] = HI_TRUE; - VPSS_GetDefChnAttr(&pstVpssConfig->astChnAttrs[VpssChn], VpssChn, - g_PicSizes[i]); - if (i == 1) { - pstVpssConfig->astChnAttrs[VpssChn].u32Depth = 2; - } - } - } else { - VPSS_CHN VpssChn = g_Vpss1Chn; - pstVpssConfig->abChnEnable[VpssChn] = HI_TRUE; - VPSS_GetDefChnAttr(&pstVpssConfig->astChnAttrs[VpssChn], VpssChn, - g_PicSizes[2]); +static HI_S32 VPSS_GetParams(SAMPLE_VPSS_CONFIG_S *pstVpssConfig, + SIZE_S *pstMaxSize, HI_BOOL bSnap) { + // 设置 VPSS 组 + pstVpssConfig->s32GrpId = !bSnap ? 0 : 1; + pstVpssConfig->stGrpAttr.u32MaxW = pstMaxSize->u32Width; + pstVpssConfig->stGrpAttr.u32MaxH = pstMaxSize->u32Width; + pstVpssConfig->stGrpAttr.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420; + pstVpssConfig->stGrpAttr.enDynamicRange = DYNAMIC_RANGE_SDR8; + pstVpssConfig->stGrpAttr.stFrameRate.s32SrcFrameRate = -1; + pstVpssConfig->stGrpAttr.stFrameRate.s32DstFrameRate = -1; + pstVpssConfig->stGrpAttr.bNrEn = HI_TRUE; + pstVpssConfig->stGrpAttr.stNrAttr.enNrType = + !bSnap ? VPSS_NR_TYPE_VIDEO : VPSS_NR_TYPE_SNAP; + pstVpssConfig->stGrpAttr.stNrAttr.enCompressMode = COMPRESS_MODE_FRAME; + pstVpssConfig->stGrpAttr.stNrAttr.enNrMotionMode = NR_MOTION_MODE_NORMAL; + // 设置 VPSS 通道 + if (!bSnap) { + for (HI_S32 i = 0; i < ARRAY_LENGTH(g_Vpss0Chn); i++) { + VPSS_CHN VpssChn = g_Vpss0Chn[i]; + pstVpssConfig->abChnEnable[VpssChn] = HI_TRUE; + VPSS_GetDefChnAttr(&pstVpssConfig->astChnAttrs[VpssChn], VpssChn, + g_PicSizes[i]); + if (i == 1) { + pstVpssConfig->astChnAttrs[VpssChn].u32Depth = 2; + } } - return HI_SUCCESS; + } else { + VPSS_CHN VpssChn = g_Vpss1Chn; + pstVpssConfig->abChnEnable[VpssChn] = HI_TRUE; + VPSS_GetDefChnAttr(&pstVpssConfig->astChnAttrs[VpssChn], VpssChn, + g_PicSizes[2]); + } + return HI_SUCCESS; } bool eb3516VideoInit(void) { - log_video = zlog_get_category("eb3516_video"); - if (!log_video) { - return false; - } + log_video = zlog_get_category("eb3516_video"); + if (!log_video) { + return false; + } - // Get Sensor(VI) Info: picture size , frame rate - SAMPLE_COMM_VI_GetSensorInfo(&g_stViConfig); - SAMPLE_COMM_VI_GetSizeBySensor( - g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, &enPicSize); - SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize); - SAMPLE_COMM_VI_GetFrameRateBySensor( - g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, &u32Framerate); + // Get Sensor(VI) Info: picture size , frame rate + SAMPLE_COMM_VI_GetSensorInfo(&g_stViConfig); + SAMPLE_COMM_VI_GetSizeBySensor(g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, + &enPicSize); + SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize); + SAMPLE_COMM_VI_GetFrameRateBySensor( + g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, &u32Framerate); - // 配置图像缓冲区 - g_stVbConfig.u32MaxPoolCnt = 2; - // 获取一帧图片 buffer 的大小 - g_stVbConfig.astCommPool[0].u64BlkSize = COMMON_GetPicBufferSize( - stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_YVU_SEMIPLANAR_422, - DATA_BITWIDTH_8, COMPRESS_MODE_SEG, DEFAULT_ALIGN); - g_stVbConfig.astCommPool[0].u32BlkCnt = VB_YUV_COUNT; - // 获取 raw buffer 的大小 - g_stVbConfig.astCommPool[1].u64BlkSize = VI_GetRawBufferSize( - stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_RGB_BAYER_16BPP, - COMPRESS_MODE_NONE, DEFAULT_ALIGN); - g_stVbConfig.astCommPool[1].u32BlkCnt = VB_RGB_COUNT; + // 配置图像缓冲区 + g_stVbConfig.u32MaxPoolCnt = 2; + // 获取一帧图片 buffer 的大小 + g_stVbConfig.astCommPool[0].u64BlkSize = COMMON_GetPicBufferSize( + stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_YVU_SEMIPLANAR_422, + DATA_BITWIDTH_8, COMPRESS_MODE_SEG, DEFAULT_ALIGN); + g_stVbConfig.astCommPool[0].u32BlkCnt = VB_YUV_COUNT; + // 获取 raw buffer 的大小 + g_stVbConfig.astCommPool[1].u64BlkSize = VI_GetRawBufferSize( + stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_RGB_BAYER_16BPP, + COMPRESS_MODE_NONE, DEFAULT_ALIGN); + g_stVbConfig.astCommPool[1].u32BlkCnt = VB_RGB_COUNT; - // 配置 VI - g_stViConfig.s32WorkingViNum = 1; - g_stViConfig.as32WorkingViId[0] = 0; - // 设置 VI 传感器信息 - g_stViConfig.astViInfo[0].stSnsInfo.MipiDev = - SAMPLE_COMM_VI_GetComboDevBySensor( - g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, 0); + // 配置 VI + g_stViConfig.s32WorkingViNum = 1; + g_stViConfig.as32WorkingViId[0] = 0; + // 设置 VI 传感器信息 + g_stViConfig.astViInfo[0].stSnsInfo.MipiDev = + SAMPLE_COMM_VI_GetComboDevBySensor( + g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, 0); - g_stViConfig.astViInfo[0].stDevInfo.ViDev = 0; - g_stViConfig.astViInfo[0].stDevInfo.enWDRMode = WDR_MODE_NONE; - // 设置 VI PIPE 信息 - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0] = 0; // video pipe - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1] = 1; // snap pipe - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[2] = -1; - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[3] = -1; - g_stViConfig.astViInfo[0].stPipeInfo.enMastPipeMode = - VI_OFFLINE_VPSS_OFFLINE; - // 设置 VI 通道信息 - g_stViConfig.astViInfo[0].stChnInfo.ViChn = 0; - g_stViConfig.astViInfo[0].stChnInfo.enPixFormat = - PIXEL_FORMAT_YVU_SEMIPLANAR_420; - g_stViConfig.astViInfo[0].stChnInfo.enDynamicRange = DYNAMIC_RANGE_SDR8; - g_stViConfig.astViInfo[0].stChnInfo.enVideoFormat = VIDEO_FORMAT_LINEAR; - g_stViConfig.astViInfo[0].stChnInfo.enCompressMode = COMPRESS_MODE_SEG; - // 设置 VI 抓拍信息 - g_stViConfig.astViInfo[0].stSnapInfo.bSnap = HI_TRUE; - g_stViConfig.astViInfo[0].stSnapInfo.bDoublePipe = HI_TRUE; - g_stViConfig.astViInfo[0].stSnapInfo.VideoPipe = 0; - g_stViConfig.astViInfo[0].stSnapInfo.SnapPipe = 1; - g_stViConfig.astViInfo[0].stSnapInfo.enVideoPipeMode = - VI_OFFLINE_VPSS_OFFLINE; - g_stViConfig.astViInfo[0].stSnapInfo.enSnapPipeMode = - VI_OFFLINE_VPSS_OFFLINE; + g_stViConfig.astViInfo[0].stDevInfo.ViDev = 0; + g_stViConfig.astViInfo[0].stDevInfo.enWDRMode = WDR_MODE_NONE; + // 设置 VI PIPE 信息 + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0] = 0; // video pipe + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1] = 1; // snap pipe + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[2] = -1; + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[3] = -1; + g_stViConfig.astViInfo[0].stPipeInfo.enMastPipeMode = VI_OFFLINE_VPSS_OFFLINE; + // 设置 VI 通道信息 + g_stViConfig.astViInfo[0].stChnInfo.ViChn = 0; + g_stViConfig.astViInfo[0].stChnInfo.enPixFormat = + PIXEL_FORMAT_YVU_SEMIPLANAR_420; + g_stViConfig.astViInfo[0].stChnInfo.enDynamicRange = DYNAMIC_RANGE_SDR8; + g_stViConfig.astViInfo[0].stChnInfo.enVideoFormat = VIDEO_FORMAT_LINEAR; + g_stViConfig.astViInfo[0].stChnInfo.enCompressMode = COMPRESS_MODE_SEG; + // 设置 VI 抓拍信息 + g_stViConfig.astViInfo[0].stSnapInfo.bSnap = HI_TRUE; + g_stViConfig.astViInfo[0].stSnapInfo.bDoublePipe = HI_TRUE; + g_stViConfig.astViInfo[0].stSnapInfo.VideoPipe = 0; + g_stViConfig.astViInfo[0].stSnapInfo.SnapPipe = 1; + g_stViConfig.astViInfo[0].stSnapInfo.enVideoPipeMode = + VI_OFFLINE_VPSS_OFFLINE; + g_stViConfig.astViInfo[0].stSnapInfo.enSnapPipeMode = VI_OFFLINE_VPSS_OFFLINE; - // 配置 VPSS - VPSS_GetParams(&g_stVpss0Config, &stSize, false); - VPSS_GetParams(&g_stVpss1Config, &stSize, true); + // 配置 VPSS + VPSS_GetParams(&g_stVpss0Config, &stSize, false); + VPSS_GetParams(&g_stVpss1Config, &stSize, true); - zlog_debug(log_video, "eb3516 Video Init Finish..."); + zlog_debug(log_video, "eb3516 Video Init Finish..."); } bool eb3516VideoStart(void) { - HI_S32 s32Ret = 0; + HI_S32 s32Ret = 0; - // 初始化 VB 和 MPI 系统 - s32Ret = SAMPLE_COMM_SYS_InitWithVbSupplement(&g_stVbConfig, - VB_SUPPLEMENT_JPEG_MASK); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "Init VB and MPI failed with %#x!\n", s32Ret); - goto EXIT_SYS_RST_CLK; - } + // 初始化 VB 和 MPI 系统 + s32Ret = SAMPLE_COMM_SYS_InitWithVbSupplement(&g_stVbConfig, + VB_SUPPLEMENT_JPEG_MASK); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "Init VB and MPI failed with %#x!\n", s32Ret); + goto EXIT_SYS_RST_CLK; + } - // 启动 VI - s32Ret = SAMPLE_COMM_VI_SetParam(&g_stViConfig); - ISP_CTRL_PARAM_S stIspCtrlParam = {0}; - memset(&stIspCtrlParam, 0, sizeof(stIspCtrlParam)); - s32Ret = HI_MPI_ISP_GetCtrlParam( - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspCtrlParam); - stIspCtrlParam.u32StatIntvl = u32Framerate / 30; - s32Ret = HI_MPI_ISP_SetCtrlParam( - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspCtrlParam); - s32Ret = SAMPLE_COMM_VI_StartVi(&g_stViConfig); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "Start VI failed with %#x!\n", s32Ret); - goto EXIT_SYS_STOP; - } - zlog_debug(log_video, "eb3516 VI Start Success..."); + // 启动 VI + s32Ret = SAMPLE_COMM_VI_SetParam(&g_stViConfig); + ISP_CTRL_PARAM_S stIspCtrlParam = {0}; + memset(&stIspCtrlParam, 0, sizeof(stIspCtrlParam)); + s32Ret = HI_MPI_ISP_GetCtrlParam( + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspCtrlParam); + stIspCtrlParam.u32StatIntvl = u32Framerate / 30; + s32Ret = HI_MPI_ISP_SetCtrlParam( + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspCtrlParam); + s32Ret = SAMPLE_COMM_VI_StartVi(&g_stViConfig); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "Start VI failed with %#x!\n", s32Ret); + goto EXIT_SYS_STOP; + } + zlog_debug(log_video, "eb3516 VI Start Success..."); - // 启动 VPSS - s32Ret = SAMPLE_COMM_VPSS_Start( - g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable, - &g_stVpss0Config.stGrpAttr, g_stVpss0Config.astChnAttrs); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "Start VPSS0 group %d failed with %#x!\n", - g_stVpss0Config.s32GrpId, s32Ret); - goto EXIT_VI_STOP; - } - zlog_debug(log_video, "eb3516 VPSS0 Start Success..."); + // 启动 VPSS + s32Ret = SAMPLE_COMM_VPSS_Start( + g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable, + &g_stVpss0Config.stGrpAttr, g_stVpss0Config.astChnAttrs); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "Start VPSS0 group %d failed with %#x!\n", + g_stVpss0Config.s32GrpId, s32Ret); + goto EXIT_VI_STOP; + } + zlog_debug(log_video, "eb3516 VPSS0 Start Success..."); - s32Ret = SAMPLE_COMM_VPSS_Start( - g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable, - &g_stVpss1Config.stGrpAttr, g_stVpss1Config.astChnAttrs); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "Start VPSS1 group %d failed with %#x!\n", - g_stVpss1Config.s32GrpId, s32Ret); - goto EXIT_VI_STOP; - } - zlog_debug(log_video, "eb3516 VPSS1 Start Success..."); + s32Ret = SAMPLE_COMM_VPSS_Start( + g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable, + &g_stVpss1Config.stGrpAttr, g_stVpss1Config.astChnAttrs); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "Start VPSS1 group %d failed with %#x!\n", + g_stVpss1Config.s32GrpId, s32Ret); + goto EXIT_VI_STOP; + } + zlog_debug(log_video, "eb3516 VPSS1 Start Success..."); - // 绑定 VI->VPSS - s32Ret = SAMPLE_COMM_VI_Bind_VPSS( - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], - g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss0Config.s32GrpId); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "VI Video Pipe bind VPSS0 failed with %#x!\n", - s32Ret); - goto EXIT_VPSS_STOP; - } - zlog_debug(log_video, "eb3516 VI Bind VPSS0 Success"); - s32Ret = SAMPLE_COMM_VI_Bind_VPSS( - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], - g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss1Config.s32GrpId); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "VI Snap Pipe bind VPSS1 failed with %#x!\n", - s32Ret); - goto EXIT_VPSS_STOP; - } - zlog_debug(log_video, "eb3516 VI Bind VPSS1 Success"); + // 绑定 VI->VPSS + s32Ret = SAMPLE_COMM_VI_Bind_VPSS( + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], + g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss0Config.s32GrpId); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "VI Video Pipe bind VPSS0 failed with %#x!\n", + s32Ret); + goto EXIT_VPSS_STOP; + } + zlog_debug(log_video, "eb3516 VI Bind VPSS0 Success"); + s32Ret = SAMPLE_COMM_VI_Bind_VPSS( + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], + g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss1Config.s32GrpId); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "VI Snap Pipe bind VPSS1 failed with %#x!\n", s32Ret); + goto EXIT_VPSS_STOP; + } + zlog_debug(log_video, "eb3516 VI Bind VPSS1 Success"); - // Get Venc Config - VENC_GOP_ATTR_S stGopAttr; - SAMPLE_COMM_VENC_GetGopAttr(VENC_GOPMODE_NORMALP, &stGopAttr); + // Get Venc Config + VENC_GOP_ATTR_S stGopAttr; + SAMPLE_COMM_VENC_GetGopAttr(VENC_GOPMODE_NORMALP, &stGopAttr); - // 编码 h.265 4k - s32Ret = - SAMPLE_COMM_VENC_Creat(g_VencChn[0], g_CodecTypes[0], g_PicSizes[0], - SAMPLE_RC_VBR, 0, HI_FALSE, &stGopAttr); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "Create Venc Chn %d failed with %#x!\n", - g_VencChn[0], s32Ret); - goto EXIT_VI_VPSS_UNBIND; - } - zlog_debug(log_video, "eb3516 VENC Start Success..."); + // 编码 h.265 4k + s32Ret = SAMPLE_COMM_VENC_Creat(g_VencChn[0], g_CodecTypes[0], g_PicSizes[0], + SAMPLE_RC_VBR, 0, HI_FALSE, &stGopAttr); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "Create Venc Chn %d failed with %#x!\n", g_VencChn[0], + s32Ret); + goto EXIT_VI_VPSS_UNBIND; + } + zlog_debug(log_video, "eb3516 VENC Start Success..."); - /*config vo*/ - SAMPLE_COMM_VO_GetDefConfig(&stVoConfig); - stVoConfig.enDstDynamicRange = DYNAMIC_RANGE_SDR8; - stVoConfig.enVoIntfType = VO_INTF_HDMI; - stVoConfig.enPicSize = enPicSize; + /*config vo*/ + SAMPLE_COMM_VO_GetDefConfig(&stVoConfig); + stVoConfig.enDstDynamicRange = DYNAMIC_RANGE_SDR8; + stVoConfig.enVoIntfType = VO_INTF_HDMI; + stVoConfig.enPicSize = enPicSize; - /*start vo*/ - s32Ret = SAMPLE_COMM_VO_StartVO(&stVoConfig); - if (HI_SUCCESS != s32Ret) { - SAMPLE_PRT("start vo failed. s32Ret: 0x%x !\n", s32Ret); - goto EXIT_VENC_H264_STOP; - } - zlog_debug(log_video, "eb3516 VO Start Success..."); + /*start vo*/ + s32Ret = SAMPLE_COMM_VO_StartVO(&stVoConfig); + if (HI_SUCCESS != s32Ret) { + SAMPLE_PRT("start vo failed. s32Ret: 0x%x !\n", s32Ret); + goto EXIT_VENC_H264_STOP; + } + zlog_debug(log_video, "eb3516 VO Start Success..."); - /*vpss bind vo*/ - s32Ret = SAMPLE_COMM_VPSS_Bind_VO(g_stVpss0Config.s32GrpId, g_Vpss0Chn[0], - stVoConfig.VoDev, g_VencChn[0]); - if (HI_SUCCESS != s32Ret) { - SAMPLE_PRT("vo bind vpss failed. s32Ret: 0x%x !\n", s32Ret); - goto EXIT_VO_STOP; - } + /*vpss bind vo*/ + s32Ret = SAMPLE_COMM_VPSS_Bind_VO(g_stVpss0Config.s32GrpId, g_Vpss0Chn[0], + stVoConfig.VoDev, g_VencChn[0]); + if (HI_SUCCESS != s32Ret) { + SAMPLE_PRT("vo bind vpss failed. s32Ret: 0x%x !\n", s32Ret); + goto EXIT_VO_STOP; + } - // 抓拍 jpeg 4k - SIZE_S stPicSize; - SAMPLE_COMM_SYS_GetPicSize(g_PicSizes[2], &stPicSize); - s32Ret = SAMPLE_COMM_VENC_SnapStart(g_VencChn[2], &stPicSize, HI_TRUE); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "Venc Snap Start failed with %#x\n", s32Ret); - goto EXIT_VENC_H264_UNBIND; - } - // 绑定 VPSS[1,0]->VENC[2] - s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss1Config.s32GrpId, g_Vpss1Chn, - g_VencChn[2]); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret); - goto EXIT_VENC_SNAP_STOP; - } + // 抓拍 jpeg 4k + SIZE_S stPicSize; + SAMPLE_COMM_SYS_GetPicSize(g_PicSizes[2], &stPicSize); + s32Ret = SAMPLE_COMM_VENC_SnapStart(g_VencChn[2], &stPicSize, HI_TRUE); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "Venc Snap Start failed with %#x\n", s32Ret); + goto EXIT_VENC_H264_UNBIND; + } + // 绑定 VPSS[1,0]->VENC[2] + s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss1Config.s32GrpId, g_Vpss1Chn, + g_VencChn[2]); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret); + goto EXIT_VENC_SNAP_STOP; + } - // 启动抓拍通道 - SNAP_ATTR_S stSnapAttr; - stSnapAttr.enSnapType = SNAP_TYPE_NORMAL; - stSnapAttr.bLoadCCM = HI_TRUE; - stSnapAttr.stNormalAttr.u32FrameCnt = 1; - stSnapAttr.stNormalAttr.u32RepeatSendTimes = 1; - stSnapAttr.stNormalAttr.bZSL = HI_FALSE; - s32Ret = HI_MPI_SNAP_SetPipeAttr( - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], &stSnapAttr); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "HI_MPI_SNAP_SetPipeAttr failed with %#x!\n", - s32Ret); - goto EXIT_VO_STOP; - } - s32Ret = - HI_MPI_SNAP_EnablePipe(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1]); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "HI_MPI_SNAP_EnablePipe failed with %#x!\n", - s32Ret); - goto EXIT_VO_STOP; - } + // 启动抓拍通道 + SNAP_ATTR_S stSnapAttr; + stSnapAttr.enSnapType = SNAP_TYPE_NORMAL; + stSnapAttr.bLoadCCM = HI_TRUE; + stSnapAttr.stNormalAttr.u32FrameCnt = 1; + stSnapAttr.stNormalAttr.u32RepeatSendTimes = 1; + stSnapAttr.stNormalAttr.bZSL = HI_FALSE; + s32Ret = HI_MPI_SNAP_SetPipeAttr( + g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], &stSnapAttr); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "HI_MPI_SNAP_SetPipeAttr failed with %#x!\n", s32Ret); + goto EXIT_VO_STOP; + } + s32Ret = + HI_MPI_SNAP_EnablePipe(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1]); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "HI_MPI_SNAP_EnablePipe failed with %#x!\n", s32Ret); + goto EXIT_VO_STOP; + } - // 设置照片 EXIF 信息 - ISP_DCF_INFO_S stIspDCF; - HI_MPI_ISP_GetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], - &stIspDCF); - strncpy((char*)stIspDCF.stIspDCFConstInfo.au8ImageDescription, "", - DCF_DRSCRIPTION_LENGTH); - strncpy((char*)stIspDCF.stIspDCFConstInfo.au8Make, "OurEDA", - DCF_DRSCRIPTION_LENGTH); - strncpy((char*)stIspDCF.stIspDCFConstInfo.au8Model, "CatFeeder Camera", - DCF_DRSCRIPTION_LENGTH); - snprintf((char*)stIspDCF.stIspDCFConstInfo.au8Software, - DCF_DRSCRIPTION_LENGTH, "CatFeeder snap"); - s32Ret = HI_MPI_ISP_SetDCFInfo( - g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspDCF); - if (s32Ret != HI_SUCCESS) { - zlog_error(log_video, "HI_MPI_ISP_SetDCFInfo failed with %#x!\n", - s32Ret); - } + // 设置照片 EXIF 信息 + ISP_DCF_INFO_S stIspDCF; + HI_MPI_ISP_GetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], + &stIspDCF); + strncpy((char *)stIspDCF.stIspDCFConstInfo.au8ImageDescription, "", + DCF_DRSCRIPTION_LENGTH); + strncpy((char *)stIspDCF.stIspDCFConstInfo.au8Make, "OurEDA", + DCF_DRSCRIPTION_LENGTH); + strncpy((char *)stIspDCF.stIspDCFConstInfo.au8Model, "CatFeeder Camera", + DCF_DRSCRIPTION_LENGTH); + snprintf((char *)stIspDCF.stIspDCFConstInfo.au8Software, + DCF_DRSCRIPTION_LENGTH, "CatFeeder snap"); + s32Ret = HI_MPI_ISP_SetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], + &stIspDCF); + if (s32Ret != HI_SUCCESS) { + zlog_error(log_video, "HI_MPI_ISP_SetDCFInfo failed with %#x!\n", s32Ret); + } - // // 绑定 VPSS[0,0]->VENC[0] - // s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss0Config.s32GrpId, - // g_Vpss0Chn[0], - // g_VencChn[0]); - // if (s32Ret != HI_SUCCESS) { - // zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret); - // goto EXIT_VENC_H265_STOP; - // } + // // 绑定 VPSS[0,0]->VENC[0] + // s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss0Config.s32GrpId, + // g_Vpss0Chn[0], + // g_VencChn[0]); + // if (s32Ret != HI_SUCCESS) { + // zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret); + // goto EXIT_VENC_H265_STOP; + // } - // Start Venc Stream - // s32Ret = SAMPLE_COMM_VENC_StartGetStream( - // g_VencChn + 1, sizeof(g_VencChn) / sizeof(VENC_CHN) - 2); - // if (HI_SUCCESS != s32Ret) { - // zlog_error(log_video, "Get venc stream failed!\n"); - // goto EXIT_VENC_H264_STOP; - // } - // zlog_debug(log_video, "eb3516 Stream Start Success..."); + // Start Venc Stream + // s32Ret = SAMPLE_COMM_VENC_StartGetStream( + // g_VencChn + 1, sizeof(g_VencChn) / sizeof(VENC_CHN) - 2); + // if (HI_SUCCESS != s32Ret) { + // zlog_error(log_video, "Get venc stream failed!\n"); + // goto EXIT_VENC_H264_STOP; + // } + // zlog_debug(log_video, "eb3516 Stream Start Success..."); - // s32Ret = SAMPLE_COMM_VENC_SaveJpeg(g_VencChn[2], 1); - // if (HI_SUCCESS != s32Ret) { - // zlog_error(log_video, "Save Jpeg Failed"); - // } + // s32Ret = SAMPLE_COMM_VENC_SaveJpeg(g_VencChn[2], 1); + // if (HI_SUCCESS != s32Ret) { + // zlog_error(log_video, "Save Jpeg Failed"); + // } - zlog_info(log_video, "Mpp Start Successfully"); - // PAUSE(); + zlog_info(log_video, "Mpp Start Successfully"); + // PAUSE(); - // SAMPLE_COMM_VENC_StopGetStream(); - return true; + // SAMPLE_COMM_VENC_StopGetStream(); + return true; EXIT_VENC_SNAP_STOP: - SAMPLE_COMM_VENC_Stop(g_VencChn[2]); + SAMPLE_COMM_VENC_Stop(g_VencChn[2]); EXIT_VO_STOP: - SAMPLE_COMM_VO_StopVO(&stVoConfig); + SAMPLE_COMM_VO_StopVO(&stVoConfig); EXIT_VENC_H264_STOP: - SAMPLE_COMM_VENC_Stop(g_VencChn[1]); + SAMPLE_COMM_VENC_Stop(g_VencChn[1]); EXIT_VENC_H264_UNBIND: - // SAMPLE_COMM_VPSS_UnBind_VENC(g_stVpss0Config.s32GrpId, g_Vpss0Chn[1], - // g_VencChn[1]); + // SAMPLE_COMM_VPSS_UnBind_VENC(g_stVpss0Config.s32GrpId, g_Vpss0Chn[1], + // g_VencChn[1]); VENC_H265_STOP: - SAMPLE_COMM_VENC_Stop(g_VencChn[0]); + SAMPLE_COMM_VENC_Stop(g_VencChn[0]); EXIT_VI_VPSS_UNBIND: - SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], - g_stViConfig.astViInfo[0].stChnInfo.ViChn, - g_stVpss0Config.s32GrpId); - SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], - g_stViConfig.astViInfo[0].stChnInfo.ViChn, - g_stVpss1Config.s32GrpId); + SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], + g_stViConfig.astViInfo[0].stChnInfo.ViChn, + g_stVpss0Config.s32GrpId); + SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], + g_stViConfig.astViInfo[0].stChnInfo.ViChn, + g_stVpss1Config.s32GrpId); EXIT_VPSS_STOP: - SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId, - g_stVpss0Config.abChnEnable); - SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId, - g_stVpss1Config.abChnEnable); + SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable); + SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable); EXIT_VI_STOP: - SAMPLE_COMM_VI_StopVi(&g_stViConfig); + SAMPLE_COMM_VI_StopVi(&g_stViConfig); EXIT_SYS_STOP: - SAMPLE_COMM_SYS_Exit(); + SAMPLE_COMM_SYS_Exit(); EXIT_SYS_RST_CLK: EXIT: - return false; + return false; } void eb3516VideoStop(void) { - SAMPLE_COMM_VENC_Stop(g_VencChn[2]); - SAMPLE_COMM_VO_StopVO(&stVoConfig); - SAMPLE_COMM_VENC_Stop(g_VencChn[1]); - SAMPLE_COMM_VENC_Stop(g_VencChn[0]); - SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], - g_stViConfig.astViInfo[0].stChnInfo.ViChn, - g_stVpss0Config.s32GrpId); - SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], - g_stViConfig.astViInfo[0].stChnInfo.ViChn, - g_stVpss1Config.s32GrpId); - SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId, - g_stVpss0Config.abChnEnable); - SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId, - g_stVpss1Config.abChnEnable); - SAMPLE_COMM_VI_StopVi(&g_stViConfig); - SAMPLE_COMM_SYS_Exit(); + SAMPLE_COMM_VENC_Stop(g_VencChn[2]); + SAMPLE_COMM_VO_StopVO(&stVoConfig); + SAMPLE_COMM_VENC_Stop(g_VencChn[1]); + SAMPLE_COMM_VENC_Stop(g_VencChn[0]); + SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], + g_stViConfig.astViInfo[0].stChnInfo.ViChn, + g_stVpss0Config.s32GrpId); + SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], + g_stViConfig.astViInfo[0].stChnInfo.ViChn, + g_stVpss1Config.s32GrpId); + SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable); + SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable); + SAMPLE_COMM_VI_StopVi(&g_stViConfig); + SAMPLE_COMM_SYS_Exit(); - zlog_info(log_video, "Finish Stopping eb3516 Video"); + zlog_info(log_video, "Finish Stopping eb3516 Video"); } bool eb3516GetPic(void) { - HI_S32 ret = HI_SUCCESS; - - VIDEO_FRAME_INFO_S stRawInfo; - HI_S32 milliSec = 10000; - - ret = HI_MPI_VI_GetPipeFrame(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], - &stRawInfo, milliSec); - if (HI_SUCCESS != ret) { - zlog_error(log_video, "Get Pipe Frame Failed"); - return false; - } + HI_S32 ret = HI_SUCCESS; + VIDEO_FRAME_INFO_S stRawInfo; + HI_S32 milliSec = 10000; + ret = HI_MPI_VI_GetPipeFrame(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], + &stRawInfo, milliSec); + if (HI_SUCCESS != ret) { + zlog_error(log_video, "Get Pipe Frame Failed"); + return false; + } } \ No newline at end of file diff --git a/src/modules/isp/eb3516_video.h b/src/modules/isp/eb3516_video.h index 6f7447a..6595429 100755 --- a/src/modules/isp/eb3516_video.h +++ b/src/modules/isp/eb3516_video.h @@ -9,6 +9,7 @@ extern "C"{ bool eb3516VideoInit(void); bool eb3516VideoStart(void); +void eb3516VideoStop(void); #ifdef __cplusplus } diff --git a/xmake.lua b/xmake.lua index a5200f7..1b9d313 100755 --- a/xmake.lua +++ b/xmake.lua @@ -12,50 +12,55 @@ toolchain_end() -- set_config("sdk", "/opt/hisi-linux/x86-arm/arm-himix200-linux/") set_toolchains("arm-himix200-linux") set_plat("cross") +set_arch("arm") set_languages("c11", "c++14") --- Add requires and dependencies -add_requires("live555 2024.11.28") -add_requires("zlog 1.2.17", { system = false }) +add_requires( + "zlog 1.2.17", + "mongoose 7.15", + "live555 2024.11.28", + { system = false } +) target("ISP") - set_kind("static") - add_files("src/modules/isp/*.c") - add_includedirs("src") - add_deps("sample_common") - add_packages("zlog") +set_kind("static") +add_files("src/modules/isp/*.c") +add_includedirs("src") +add_deps("sample_common") +add_packages("zlog") target_end() target("NNIE") - set_kind("static") - add_files("src/modules/nnie/*.c") - add_includedirs("src") - add_deps("sample_common", "sample_svp") - add_packages("zlog") +set_kind("static") +add_files("src/modules/nnie/*.c") +add_includedirs("src") +add_deps("sample_common", "sample_svp") +add_packages("zlog") target_end() target("RTSP") - set_kind("static") - add_files("src/modules/rtsp/*.cpp") - add_includedirs("src") - add_packages("live555", "zlog") - add_links("pthread") +set_kind("static") +add_files("src/modules/rtsp/*.cpp") +add_includedirs("src") +add_packages("live555", "zlog") +add_links("pthread") target_end() target("CatFeeder") - set_kind("binary") - add_includedirs("src") - add_files("src/*.cpp") - add_deps("hi_library", "ISP", "NNIE", "RTSP") - add_packages("zlog") - add_links("stdc++fs") - after_build(function(target) - os.cp("src/log.conf", "$(buildir)/cross/arm/release") - end) +set_kind("binary") +add_includedirs("src") +add_files("src/*.cpp") +add_deps("hi_library", "ISP", "NNIE", "RTSP") +add_packages("zlog") +add_links("stdc++fs") +after_build(function(target) + os.cp("src/log.conf", "$(buildir)/cross/arm/release") +end) - if is_mode("debug") then - add_defines("DEBUG") - set_symbols("debug") - set_optimize("none") - end +if is_mode("debug") then + add_defines("DEBUG") + set_symbols("debug") + set_optimize("none") +end target_end()