fix isp and write bash script for set up ftp server in Hi3516
This commit is contained in:
		
							
								
								
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								.justfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								.justfile
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
							
								
								
									
										11
									
								
								CCPP.nix
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								live555.lua
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								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)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								src/ftpServerStart.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								src/ftpServerStart.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
mount /dev/mmcblk0p5 /mnt/sd
 | 
			
		||||
tcpsvd 0 21 ftpd -w /mnt/sd &
 | 
			
		||||
cd /mnt/sd
 | 
			
		||||
							
								
								
									
										13
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								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();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -9,6 +9,7 @@ extern "C"{
 | 
			
		||||
 | 
			
		||||
bool eb3516VideoInit(void);
 | 
			
		||||
bool eb3516VideoStart(void);
 | 
			
		||||
void eb3516VideoStop(void);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										67
									
								
								xmake.lua
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								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()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user