fix isp and write bash script for set up ftp server in Hi3516

This commit is contained in:
SikongJueluo 2024-12-23 13:08:34 +08:00
parent 6159bbb27d
commit c289d4ee7d
No known key found for this signature in database
9 changed files with 421 additions and 394 deletions

21
.gitignore vendored
View File

@ -1,18 +1,23 @@
# Xmake cache # Xmake cache
.xmake/ .xmake
.vscode/ .vscode
.devenv/ .devenv
.direnv/ .direnv
Hi3516CV500_SDK/ Hi3516CV500_SDK
toolchains/ toolchains
arm-himix200-linux/ arm-himix200-linux
build/ build
Rouring Rouring
Rouring-Vision Rouring-Vision
smart_trash_bin smart_trash_bin
nnie-yolov3-demo nnie-yolov3-demo
dtof_sensor_driver dtof_sensor_driver
# Build Cache
*.a
*.o
*.so
# MacOS Cache # MacOS Cache
.DS_Store .DS_Store

36
.justfile Normal file
View 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

View File

@ -18,17 +18,6 @@
clang-tools 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 ... # When enter shell, exec ...
enterShell = '' enterShell = ''
export LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH export LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH

View File

@ -5,8 +5,8 @@ set_homepage("http://www.live555.com")
set_urls("http://www.live555.com/liveMedia/public/live.$(version).tar.gz") set_urls("http://www.live555.com/liveMedia/public/live.$(version).tar.gz")
add_versions("2024.11.28", "a9af16f46d2f4c7ccdbfc4b617480503d27cccb46fa5abb7dfd8a25951b44cc3") add_versions("2024.11.28", "a9af16f46d2f4c7ccdbfc4b617480503d27cccb46fa5abb7dfd8a25951b44cc3")
add_configs("no_openssl", {description = "Set 1 if no OpenSSL", 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_configs("no_std_lib", { description = "Set 1 if no C++20 STD LIB", default = "1", values = { "0", "1" } })
add_includedirs( add_includedirs(
"include/BasicUsageEnvironment", "include/BasicUsageEnvironment",
@ -15,7 +15,8 @@ add_includedirs(
"include/UsageEnvironment" "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 = [[ local make_scipt = [[
C = c C = c
@ -36,7 +37,7 @@ LIBS_FOR_GUI_APPLICATION =
EXE = EXE =
]] ]]
on_load(function (package) on_load(function(package)
local no_openssl = package:config("no_openssl") or "1" local no_openssl = package:config("no_openssl") or "1"
local no_std_lib = package:config("no_std_lib") or "1" local no_std_lib = package:config("no_std_lib") or "1"
package:add("defines", "NO_OPENSSL=" .. no_openssl) package:add("defines", "NO_OPENSSL=" .. no_openssl)
@ -73,7 +74,6 @@ on_install(function(package)
import("package.tools.make").install(package) import("package.tools.make").install(package)
end) end)
on_test(function (package) on_test(function(package)
assert(package:has_cxxtypes("RTSPServer", {includes = "liveMedia.hh"})) assert(package:has_cxxtypes("RTSPServer", { includes = "liveMedia.hh" }))
end) end)

3
src/ftpServerStart.sh Executable file
View File

@ -0,0 +1,3 @@
mount /dev/mmcblk0p5 /mnt/sd
tcpsvd 0 21 ftpd -w /mnt/sd &
cd /mnt/sd

View File

@ -13,14 +13,14 @@ int main(int argc, char** argv) {
zlog_category_t *log = nullptr; zlog_category_t *log = nullptr;
// init log and check log.conf // Init log and check log.conf
result = zlog_init("log.conf"); result = zlog_init("log.conf");
if (result) { if (result) {
std::cout << "zlog init failed! Please check log.conf!\n"; std::cout << "zlog init failed! Please check log.conf!\n";
return (-1); return (-1);
} }
// get log cat for main to print // Get log cat for main to print
log = zlog_get_category("cat"); log = zlog_get_category("cat");
if (!log) { if (!log) {
std::cout << "Main get log failed!\n"; 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()); zlog_warn(log, "Can't Create log dir FOR %s", file_error.message().c_str());
} }
// eb3516VideoInit(); eb3516VideoInit();
// eb3516VideoStart(); eb3516VideoStart();
eb3516Yolov3Init("./coco_yolov3_detect.wk", "./dog_bike_car_416x416.bgr"); eb3516VideoStop();
eb3516Yolov3Exit(); // eb3516Yolov3Init("./coco_yolov3_detect.wk", "./dog_bike_car_416x416.bgr");
// eb3516Yolov3Exit();
zlog_fini(); zlog_fini();

View File

@ -12,13 +12,13 @@
#define ALIGN_DOWN_SIZE 2 #define ALIGN_DOWN_SIZE 2
typedef struct hiSAMPLE_VPSS_CONFIG_S { typedef struct hiSAMPLE_VPSS_CONFIG_S {
VPSS_GRP s32GrpId; VPSS_GRP s32GrpId;
VPSS_GRP_ATTR_S stGrpAttr; VPSS_GRP_ATTR_S stGrpAttr;
HI_BOOL abChnEnable[VPSS_MAX_PHY_CHN_NUM]; HI_BOOL abChnEnable[VPSS_MAX_PHY_CHN_NUM];
VPSS_CHN_ATTR_S astChnAttrs[VPSS_MAX_PHY_CHN_NUM]; VPSS_CHN_ATTR_S astChnAttrs[VPSS_MAX_PHY_CHN_NUM];
} SAMPLE_VPSS_CONFIG_S; } SAMPLE_VPSS_CONFIG_S;
static zlog_category_t* log_video = NULL; static zlog_category_t *log_video = NULL;
// Sensor Info // Sensor Info
static SAMPLE_VI_CONFIG_S g_stViConfig = {0}; 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 VENC_CHN g_VencChn[3] = {0, 1, 2};
static const PAYLOAD_TYPE_E g_CodecTypes[3] = {PT_H265, PT_H264, PT_JPEG}; 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) { VPSS_CHN VpssChn, PIC_SIZE_E enPicSize) {
SIZE_S stSize; SIZE_S stSize;
SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize); SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize);
pstVpssChnAttr->enChnMode = VPSS_CHN_MODE_USER; pstVpssChnAttr->enChnMode = VPSS_CHN_MODE_USER;
pstVpssChnAttr->u32Width = stSize.u32Width; pstVpssChnAttr->u32Width = stSize.u32Width;
pstVpssChnAttr->u32Height = stSize.u32Height; pstVpssChnAttr->u32Height = stSize.u32Height;
pstVpssChnAttr->enVideoFormat = VIDEO_FORMAT_LINEAR; pstVpssChnAttr->enVideoFormat = VIDEO_FORMAT_LINEAR;
pstVpssChnAttr->enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420; pstVpssChnAttr->enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
pstVpssChnAttr->enDynamicRange = DYNAMIC_RANGE_SDR8; pstVpssChnAttr->enDynamicRange = DYNAMIC_RANGE_SDR8;
pstVpssChnAttr->enCompressMode = COMPRESS_MODE_NONE; // COMPRESS_MODE_SEG; pstVpssChnAttr->enCompressMode = COMPRESS_MODE_NONE; // COMPRESS_MODE_SEG;
pstVpssChnAttr->stFrameRate.s32SrcFrameRate = -1; pstVpssChnAttr->stFrameRate.s32SrcFrameRate = -1;
pstVpssChnAttr->stFrameRate.s32DstFrameRate = -1; pstVpssChnAttr->stFrameRate.s32DstFrameRate = -1;
pstVpssChnAttr->u32Depth = 0; pstVpssChnAttr->u32Depth = 0;
pstVpssChnAttr->bMirror = HI_FALSE; pstVpssChnAttr->bMirror = HI_FALSE;
pstVpssChnAttr->bFlip = HI_FALSE; pstVpssChnAttr->bFlip = HI_FALSE;
pstVpssChnAttr->stAspectRatio.enMode = ASPECT_RATIO_NONE; pstVpssChnAttr->stAspectRatio.enMode = ASPECT_RATIO_NONE;
return HI_SUCCESS; return HI_SUCCESS;
} }
static HI_S32 VPSS_GetParams(SAMPLE_VPSS_CONFIG_S* pstVpssConfig, static HI_S32 VPSS_GetParams(SAMPLE_VPSS_CONFIG_S *pstVpssConfig,
SIZE_S* pstMaxSize, HI_BOOL bSnap) { SIZE_S *pstMaxSize, HI_BOOL bSnap) {
// 设置 VPSS 组 // 设置 VPSS 组
pstVpssConfig->s32GrpId = !bSnap ? 0 : 1; pstVpssConfig->s32GrpId = !bSnap ? 0 : 1;
pstVpssConfig->stGrpAttr.u32MaxW = pstMaxSize->u32Width; pstVpssConfig->stGrpAttr.u32MaxW = pstMaxSize->u32Width;
pstVpssConfig->stGrpAttr.u32MaxH = pstMaxSize->u32Width; pstVpssConfig->stGrpAttr.u32MaxH = pstMaxSize->u32Width;
pstVpssConfig->stGrpAttr.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420; pstVpssConfig->stGrpAttr.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
pstVpssConfig->stGrpAttr.enDynamicRange = DYNAMIC_RANGE_SDR8; pstVpssConfig->stGrpAttr.enDynamicRange = DYNAMIC_RANGE_SDR8;
pstVpssConfig->stGrpAttr.stFrameRate.s32SrcFrameRate = -1; pstVpssConfig->stGrpAttr.stFrameRate.s32SrcFrameRate = -1;
pstVpssConfig->stGrpAttr.stFrameRate.s32DstFrameRate = -1; pstVpssConfig->stGrpAttr.stFrameRate.s32DstFrameRate = -1;
pstVpssConfig->stGrpAttr.bNrEn = HI_TRUE; pstVpssConfig->stGrpAttr.bNrEn = HI_TRUE;
pstVpssConfig->stGrpAttr.stNrAttr.enNrType = pstVpssConfig->stGrpAttr.stNrAttr.enNrType =
!bSnap ? VPSS_NR_TYPE_VIDEO : VPSS_NR_TYPE_SNAP; !bSnap ? VPSS_NR_TYPE_VIDEO : VPSS_NR_TYPE_SNAP;
pstVpssConfig->stGrpAttr.stNrAttr.enCompressMode = COMPRESS_MODE_FRAME; pstVpssConfig->stGrpAttr.stNrAttr.enCompressMode = COMPRESS_MODE_FRAME;
pstVpssConfig->stGrpAttr.stNrAttr.enNrMotionMode = NR_MOTION_MODE_NORMAL; pstVpssConfig->stGrpAttr.stNrAttr.enNrMotionMode = NR_MOTION_MODE_NORMAL;
// 设置 VPSS 通道 // 设置 VPSS 通道
if (!bSnap) { if (!bSnap) {
for (HI_S32 i = 0; i < ARRAY_LENGTH(g_Vpss0Chn); i++) { for (HI_S32 i = 0; i < ARRAY_LENGTH(g_Vpss0Chn); i++) {
VPSS_CHN VpssChn = g_Vpss0Chn[i]; VPSS_CHN VpssChn = g_Vpss0Chn[i];
pstVpssConfig->abChnEnable[VpssChn] = HI_TRUE; pstVpssConfig->abChnEnable[VpssChn] = HI_TRUE;
VPSS_GetDefChnAttr(&pstVpssConfig->astChnAttrs[VpssChn], VpssChn, VPSS_GetDefChnAttr(&pstVpssConfig->astChnAttrs[VpssChn], VpssChn,
g_PicSizes[i]); g_PicSizes[i]);
if (i == 1) { if (i == 1) {
pstVpssConfig->astChnAttrs[VpssChn].u32Depth = 2; 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]);
} }
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) { bool eb3516VideoInit(void) {
log_video = zlog_get_category("eb3516_video"); log_video = zlog_get_category("eb3516_video");
if (!log_video) { if (!log_video) {
return false; return false;
} }
// Get Sensor(VI) Info: picture size , frame rate // Get Sensor(VI) Info: picture size , frame rate
SAMPLE_COMM_VI_GetSensorInfo(&g_stViConfig); SAMPLE_COMM_VI_GetSensorInfo(&g_stViConfig);
SAMPLE_COMM_VI_GetSizeBySensor( SAMPLE_COMM_VI_GetSizeBySensor(g_stViConfig.astViInfo[0].stSnsInfo.enSnsType,
g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, &enPicSize); &enPicSize);
SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize); SAMPLE_COMM_SYS_GetPicSize(enPicSize, &stSize);
SAMPLE_COMM_VI_GetFrameRateBySensor( SAMPLE_COMM_VI_GetFrameRateBySensor(
g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, &u32Framerate); g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, &u32Framerate);
// 配置图像缓冲区 // 配置图像缓冲区
g_stVbConfig.u32MaxPoolCnt = 2; g_stVbConfig.u32MaxPoolCnt = 2;
// 获取一帧图片 buffer 的大小 // 获取一帧图片 buffer 的大小
g_stVbConfig.astCommPool[0].u64BlkSize = COMMON_GetPicBufferSize( g_stVbConfig.astCommPool[0].u64BlkSize = COMMON_GetPicBufferSize(
stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_YVU_SEMIPLANAR_422, stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_YVU_SEMIPLANAR_422,
DATA_BITWIDTH_8, COMPRESS_MODE_SEG, DEFAULT_ALIGN); DATA_BITWIDTH_8, COMPRESS_MODE_SEG, DEFAULT_ALIGN);
g_stVbConfig.astCommPool[0].u32BlkCnt = VB_YUV_COUNT; g_stVbConfig.astCommPool[0].u32BlkCnt = VB_YUV_COUNT;
// 获取 raw buffer 的大小 // 获取 raw buffer 的大小
g_stVbConfig.astCommPool[1].u64BlkSize = VI_GetRawBufferSize( g_stVbConfig.astCommPool[1].u64BlkSize = VI_GetRawBufferSize(
stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_RGB_BAYER_16BPP, stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_RGB_BAYER_16BPP,
COMPRESS_MODE_NONE, DEFAULT_ALIGN); COMPRESS_MODE_NONE, DEFAULT_ALIGN);
g_stVbConfig.astCommPool[1].u32BlkCnt = VB_RGB_COUNT; g_stVbConfig.astCommPool[1].u32BlkCnt = VB_RGB_COUNT;
// 配置 VI // 配置 VI
g_stViConfig.s32WorkingViNum = 1; g_stViConfig.s32WorkingViNum = 1;
g_stViConfig.as32WorkingViId[0] = 0; g_stViConfig.as32WorkingViId[0] = 0;
// 设置 VI 传感器信息 // 设置 VI 传感器信息
g_stViConfig.astViInfo[0].stSnsInfo.MipiDev = g_stViConfig.astViInfo[0].stSnsInfo.MipiDev =
SAMPLE_COMM_VI_GetComboDevBySensor( SAMPLE_COMM_VI_GetComboDevBySensor(
g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, 0); g_stViConfig.astViInfo[0].stSnsInfo.enSnsType, 0);
g_stViConfig.astViInfo[0].stDevInfo.ViDev = 0; g_stViConfig.astViInfo[0].stDevInfo.ViDev = 0;
g_stViConfig.astViInfo[0].stDevInfo.enWDRMode = WDR_MODE_NONE; g_stViConfig.astViInfo[0].stDevInfo.enWDRMode = WDR_MODE_NONE;
// 设置 VI PIPE 信息 // 设置 VI PIPE 信息
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0] = 0; // video 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[1] = 1; // snap pipe
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[2] = -1; g_stViConfig.astViInfo[0].stPipeInfo.aPipe[2] = -1;
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[3] = -1; g_stViConfig.astViInfo[0].stPipeInfo.aPipe[3] = -1;
g_stViConfig.astViInfo[0].stPipeInfo.enMastPipeMode = g_stViConfig.astViInfo[0].stPipeInfo.enMastPipeMode = VI_OFFLINE_VPSS_OFFLINE;
VI_OFFLINE_VPSS_OFFLINE; // 设置 VI 通道信息
// 设置 VI 通道信息 g_stViConfig.astViInfo[0].stChnInfo.ViChn = 0;
g_stViConfig.astViInfo[0].stChnInfo.ViChn = 0; g_stViConfig.astViInfo[0].stChnInfo.enPixFormat =
g_stViConfig.astViInfo[0].stChnInfo.enPixFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
PIXEL_FORMAT_YVU_SEMIPLANAR_420; g_stViConfig.astViInfo[0].stChnInfo.enDynamicRange = DYNAMIC_RANGE_SDR8;
g_stViConfig.astViInfo[0].stChnInfo.enDynamicRange = DYNAMIC_RANGE_SDR8; g_stViConfig.astViInfo[0].stChnInfo.enVideoFormat = VIDEO_FORMAT_LINEAR;
g_stViConfig.astViInfo[0].stChnInfo.enVideoFormat = VIDEO_FORMAT_LINEAR; g_stViConfig.astViInfo[0].stChnInfo.enCompressMode = COMPRESS_MODE_SEG;
g_stViConfig.astViInfo[0].stChnInfo.enCompressMode = COMPRESS_MODE_SEG; // 设置 VI 抓拍信息
// 设置 VI 抓拍信息 g_stViConfig.astViInfo[0].stSnapInfo.bSnap = HI_TRUE;
g_stViConfig.astViInfo[0].stSnapInfo.bSnap = HI_TRUE; g_stViConfig.astViInfo[0].stSnapInfo.bDoublePipe = HI_TRUE;
g_stViConfig.astViInfo[0].stSnapInfo.bDoublePipe = HI_TRUE; g_stViConfig.astViInfo[0].stSnapInfo.VideoPipe = 0;
g_stViConfig.astViInfo[0].stSnapInfo.VideoPipe = 0; g_stViConfig.astViInfo[0].stSnapInfo.SnapPipe = 1;
g_stViConfig.astViInfo[0].stSnapInfo.SnapPipe = 1; g_stViConfig.astViInfo[0].stSnapInfo.enVideoPipeMode =
g_stViConfig.astViInfo[0].stSnapInfo.enVideoPipeMode = VI_OFFLINE_VPSS_OFFLINE;
VI_OFFLINE_VPSS_OFFLINE; g_stViConfig.astViInfo[0].stSnapInfo.enSnapPipeMode = VI_OFFLINE_VPSS_OFFLINE;
g_stViConfig.astViInfo[0].stSnapInfo.enSnapPipeMode =
VI_OFFLINE_VPSS_OFFLINE;
// 配置 VPSS // 配置 VPSS
VPSS_GetParams(&g_stVpss0Config, &stSize, false); VPSS_GetParams(&g_stVpss0Config, &stSize, false);
VPSS_GetParams(&g_stVpss1Config, &stSize, true); 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) { bool eb3516VideoStart(void) {
HI_S32 s32Ret = 0; HI_S32 s32Ret = 0;
// 初始化 VB 和 MPI 系统 // 初始化 VB 和 MPI 系统
s32Ret = SAMPLE_COMM_SYS_InitWithVbSupplement(&g_stVbConfig, s32Ret = SAMPLE_COMM_SYS_InitWithVbSupplement(&g_stVbConfig,
VB_SUPPLEMENT_JPEG_MASK); VB_SUPPLEMENT_JPEG_MASK);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "Init VB and MPI failed with %#x!\n", s32Ret); zlog_error(log_video, "Init VB and MPI failed with %#x!\n", s32Ret);
goto EXIT_SYS_RST_CLK; goto EXIT_SYS_RST_CLK;
} }
// 启动 VI // 启动 VI
s32Ret = SAMPLE_COMM_VI_SetParam(&g_stViConfig); s32Ret = SAMPLE_COMM_VI_SetParam(&g_stViConfig);
ISP_CTRL_PARAM_S stIspCtrlParam = {0}; ISP_CTRL_PARAM_S stIspCtrlParam = {0};
memset(&stIspCtrlParam, 0, sizeof(stIspCtrlParam)); memset(&stIspCtrlParam, 0, sizeof(stIspCtrlParam));
s32Ret = HI_MPI_ISP_GetCtrlParam( s32Ret = HI_MPI_ISP_GetCtrlParam(
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspCtrlParam); g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspCtrlParam);
stIspCtrlParam.u32StatIntvl = u32Framerate / 30; stIspCtrlParam.u32StatIntvl = u32Framerate / 30;
s32Ret = HI_MPI_ISP_SetCtrlParam( s32Ret = HI_MPI_ISP_SetCtrlParam(
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspCtrlParam); g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspCtrlParam);
s32Ret = SAMPLE_COMM_VI_StartVi(&g_stViConfig); s32Ret = SAMPLE_COMM_VI_StartVi(&g_stViConfig);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "Start VI failed with %#x!\n", s32Ret); zlog_error(log_video, "Start VI failed with %#x!\n", s32Ret);
goto EXIT_SYS_STOP; goto EXIT_SYS_STOP;
} }
zlog_debug(log_video, "eb3516 VI Start Success..."); zlog_debug(log_video, "eb3516 VI Start Success...");
// 启动 VPSS // 启动 VPSS
s32Ret = SAMPLE_COMM_VPSS_Start( s32Ret = SAMPLE_COMM_VPSS_Start(
g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable, g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable,
&g_stVpss0Config.stGrpAttr, g_stVpss0Config.astChnAttrs); &g_stVpss0Config.stGrpAttr, g_stVpss0Config.astChnAttrs);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "Start VPSS0 group %d failed with %#x!\n", zlog_error(log_video, "Start VPSS0 group %d failed with %#x!\n",
g_stVpss0Config.s32GrpId, s32Ret); g_stVpss0Config.s32GrpId, s32Ret);
goto EXIT_VI_STOP; goto EXIT_VI_STOP;
} }
zlog_debug(log_video, "eb3516 VPSS0 Start Success..."); zlog_debug(log_video, "eb3516 VPSS0 Start Success...");
s32Ret = SAMPLE_COMM_VPSS_Start( s32Ret = SAMPLE_COMM_VPSS_Start(
g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable, g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable,
&g_stVpss1Config.stGrpAttr, g_stVpss1Config.astChnAttrs); &g_stVpss1Config.stGrpAttr, g_stVpss1Config.astChnAttrs);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "Start VPSS1 group %d failed with %#x!\n", zlog_error(log_video, "Start VPSS1 group %d failed with %#x!\n",
g_stVpss1Config.s32GrpId, s32Ret); g_stVpss1Config.s32GrpId, s32Ret);
goto EXIT_VI_STOP; goto EXIT_VI_STOP;
} }
zlog_debug(log_video, "eb3516 VPSS1 Start Success..."); zlog_debug(log_video, "eb3516 VPSS1 Start Success...");
// 绑定 VI->VPSS // 绑定 VI->VPSS
s32Ret = SAMPLE_COMM_VI_Bind_VPSS( s32Ret = SAMPLE_COMM_VI_Bind_VPSS(
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss0Config.s32GrpId); g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss0Config.s32GrpId);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "VI Video Pipe bind VPSS0 failed with %#x!\n", zlog_error(log_video, "VI Video Pipe bind VPSS0 failed with %#x!\n",
s32Ret); s32Ret);
goto EXIT_VPSS_STOP; goto EXIT_VPSS_STOP;
} }
zlog_debug(log_video, "eb3516 VI Bind VPSS0 Success"); zlog_debug(log_video, "eb3516 VI Bind VPSS0 Success");
s32Ret = SAMPLE_COMM_VI_Bind_VPSS( s32Ret = SAMPLE_COMM_VI_Bind_VPSS(
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1],
g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss1Config.s32GrpId); g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stVpss1Config.s32GrpId);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "VI Snap Pipe bind VPSS1 failed with %#x!\n", zlog_error(log_video, "VI Snap Pipe bind VPSS1 failed with %#x!\n", s32Ret);
s32Ret); goto EXIT_VPSS_STOP;
goto EXIT_VPSS_STOP; }
} zlog_debug(log_video, "eb3516 VI Bind VPSS1 Success");
zlog_debug(log_video, "eb3516 VI Bind VPSS1 Success");
// Get Venc Config // Get Venc Config
VENC_GOP_ATTR_S stGopAttr; VENC_GOP_ATTR_S stGopAttr;
SAMPLE_COMM_VENC_GetGopAttr(VENC_GOPMODE_NORMALP, &stGopAttr); SAMPLE_COMM_VENC_GetGopAttr(VENC_GOPMODE_NORMALP, &stGopAttr);
// 编码 h.265 4k // 编码 h.265 4k
s32Ret = s32Ret = SAMPLE_COMM_VENC_Creat(g_VencChn[0], g_CodecTypes[0], g_PicSizes[0],
SAMPLE_COMM_VENC_Creat(g_VencChn[0], g_CodecTypes[0], g_PicSizes[0], SAMPLE_RC_VBR, 0, HI_FALSE, &stGopAttr);
SAMPLE_RC_VBR, 0, HI_FALSE, &stGopAttr); if (s32Ret != HI_SUCCESS) {
if (s32Ret != HI_SUCCESS) { zlog_error(log_video, "Create Venc Chn %d failed with %#x!\n", g_VencChn[0],
zlog_error(log_video, "Create Venc Chn %d failed with %#x!\n", s32Ret);
g_VencChn[0], s32Ret); goto EXIT_VI_VPSS_UNBIND;
goto EXIT_VI_VPSS_UNBIND; }
} zlog_debug(log_video, "eb3516 VENC Start Success...");
zlog_debug(log_video, "eb3516 VENC Start Success...");
/*config vo*/ /*config vo*/
SAMPLE_COMM_VO_GetDefConfig(&stVoConfig); SAMPLE_COMM_VO_GetDefConfig(&stVoConfig);
stVoConfig.enDstDynamicRange = DYNAMIC_RANGE_SDR8; stVoConfig.enDstDynamicRange = DYNAMIC_RANGE_SDR8;
stVoConfig.enVoIntfType = VO_INTF_HDMI; stVoConfig.enVoIntfType = VO_INTF_HDMI;
stVoConfig.enPicSize = enPicSize; stVoConfig.enPicSize = enPicSize;
/*start vo*/ /*start vo*/
s32Ret = SAMPLE_COMM_VO_StartVO(&stVoConfig); s32Ret = SAMPLE_COMM_VO_StartVO(&stVoConfig);
if (HI_SUCCESS != s32Ret) { if (HI_SUCCESS != s32Ret) {
SAMPLE_PRT("start vo failed. s32Ret: 0x%x !\n", s32Ret); SAMPLE_PRT("start vo failed. s32Ret: 0x%x !\n", s32Ret);
goto EXIT_VENC_H264_STOP; goto EXIT_VENC_H264_STOP;
} }
zlog_debug(log_video, "eb3516 VO Start Success..."); zlog_debug(log_video, "eb3516 VO Start Success...");
/*vpss bind vo*/ /*vpss bind vo*/
s32Ret = SAMPLE_COMM_VPSS_Bind_VO(g_stVpss0Config.s32GrpId, g_Vpss0Chn[0], s32Ret = SAMPLE_COMM_VPSS_Bind_VO(g_stVpss0Config.s32GrpId, g_Vpss0Chn[0],
stVoConfig.VoDev, g_VencChn[0]); stVoConfig.VoDev, g_VencChn[0]);
if (HI_SUCCESS != s32Ret) { if (HI_SUCCESS != s32Ret) {
SAMPLE_PRT("vo bind vpss failed. s32Ret: 0x%x !\n", s32Ret); SAMPLE_PRT("vo bind vpss failed. s32Ret: 0x%x !\n", s32Ret);
goto EXIT_VO_STOP; goto EXIT_VO_STOP;
} }
// 抓拍 jpeg 4k // 抓拍 jpeg 4k
SIZE_S stPicSize; SIZE_S stPicSize;
SAMPLE_COMM_SYS_GetPicSize(g_PicSizes[2], &stPicSize); SAMPLE_COMM_SYS_GetPicSize(g_PicSizes[2], &stPicSize);
s32Ret = SAMPLE_COMM_VENC_SnapStart(g_VencChn[2], &stPicSize, HI_TRUE); s32Ret = SAMPLE_COMM_VENC_SnapStart(g_VencChn[2], &stPicSize, HI_TRUE);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "Venc Snap Start failed with %#x\n", s32Ret); zlog_error(log_video, "Venc Snap Start failed with %#x\n", s32Ret);
goto EXIT_VENC_H264_UNBIND; goto EXIT_VENC_H264_UNBIND;
} }
// 绑定 VPSS[1,0]->VENC[2] // 绑定 VPSS[1,0]->VENC[2]
s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss1Config.s32GrpId, g_Vpss1Chn, s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss1Config.s32GrpId, g_Vpss1Chn,
g_VencChn[2]); g_VencChn[2]);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret); zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret);
goto EXIT_VENC_SNAP_STOP; goto EXIT_VENC_SNAP_STOP;
} }
// 启动抓拍通道 // 启动抓拍通道
SNAP_ATTR_S stSnapAttr; SNAP_ATTR_S stSnapAttr;
stSnapAttr.enSnapType = SNAP_TYPE_NORMAL; stSnapAttr.enSnapType = SNAP_TYPE_NORMAL;
stSnapAttr.bLoadCCM = HI_TRUE; stSnapAttr.bLoadCCM = HI_TRUE;
stSnapAttr.stNormalAttr.u32FrameCnt = 1; stSnapAttr.stNormalAttr.u32FrameCnt = 1;
stSnapAttr.stNormalAttr.u32RepeatSendTimes = 1; stSnapAttr.stNormalAttr.u32RepeatSendTimes = 1;
stSnapAttr.stNormalAttr.bZSL = HI_FALSE; stSnapAttr.stNormalAttr.bZSL = HI_FALSE;
s32Ret = HI_MPI_SNAP_SetPipeAttr( s32Ret = HI_MPI_SNAP_SetPipeAttr(
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], &stSnapAttr); g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], &stSnapAttr);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "HI_MPI_SNAP_SetPipeAttr failed with %#x!\n", zlog_error(log_video, "HI_MPI_SNAP_SetPipeAttr failed with %#x!\n", s32Ret);
s32Ret); goto EXIT_VO_STOP;
goto EXIT_VO_STOP; }
} s32Ret =
s32Ret = HI_MPI_SNAP_EnablePipe(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1]);
HI_MPI_SNAP_EnablePipe(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1]); if (s32Ret != HI_SUCCESS) {
if (s32Ret != HI_SUCCESS) { zlog_error(log_video, "HI_MPI_SNAP_EnablePipe failed with %#x!\n", s32Ret);
zlog_error(log_video, "HI_MPI_SNAP_EnablePipe failed with %#x!\n", goto EXIT_VO_STOP;
s32Ret); }
goto EXIT_VO_STOP;
}
// 设置照片 EXIF 信息 // 设置照片 EXIF 信息
ISP_DCF_INFO_S stIspDCF; ISP_DCF_INFO_S stIspDCF;
HI_MPI_ISP_GetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], HI_MPI_ISP_GetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
&stIspDCF); &stIspDCF);
strncpy((char*)stIspDCF.stIspDCFConstInfo.au8ImageDescription, "", strncpy((char *)stIspDCF.stIspDCFConstInfo.au8ImageDescription, "",
DCF_DRSCRIPTION_LENGTH); DCF_DRSCRIPTION_LENGTH);
strncpy((char*)stIspDCF.stIspDCFConstInfo.au8Make, "OurEDA", strncpy((char *)stIspDCF.stIspDCFConstInfo.au8Make, "OurEDA",
DCF_DRSCRIPTION_LENGTH); DCF_DRSCRIPTION_LENGTH);
strncpy((char*)stIspDCF.stIspDCFConstInfo.au8Model, "CatFeeder Camera", strncpy((char *)stIspDCF.stIspDCFConstInfo.au8Model, "CatFeeder Camera",
DCF_DRSCRIPTION_LENGTH); DCF_DRSCRIPTION_LENGTH);
snprintf((char*)stIspDCF.stIspDCFConstInfo.au8Software, snprintf((char *)stIspDCF.stIspDCFConstInfo.au8Software,
DCF_DRSCRIPTION_LENGTH, "CatFeeder snap"); DCF_DRSCRIPTION_LENGTH, "CatFeeder snap");
s32Ret = HI_MPI_ISP_SetDCFInfo( s32Ret = HI_MPI_ISP_SetDCFInfo(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], &stIspDCF); &stIspDCF);
if (s32Ret != HI_SUCCESS) { if (s32Ret != HI_SUCCESS) {
zlog_error(log_video, "HI_MPI_ISP_SetDCFInfo failed with %#x!\n", zlog_error(log_video, "HI_MPI_ISP_SetDCFInfo failed with %#x!\n", s32Ret);
s32Ret); }
}
// // 绑定 VPSS[0,0]->VENC[0] // // 绑定 VPSS[0,0]->VENC[0]
// s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss0Config.s32GrpId, // s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss0Config.s32GrpId,
// g_Vpss0Chn[0], // g_Vpss0Chn[0],
// g_VencChn[0]); // g_VencChn[0]);
// if (s32Ret != HI_SUCCESS) { // if (s32Ret != HI_SUCCESS) {
// zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret); // zlog_error(log_video, "Venc bind Vpss failed with %#x!\n", s32Ret);
// goto EXIT_VENC_H265_STOP; // goto EXIT_VENC_H265_STOP;
// } // }
// Start Venc Stream // Start Venc Stream
// s32Ret = SAMPLE_COMM_VENC_StartGetStream( // s32Ret = SAMPLE_COMM_VENC_StartGetStream(
// g_VencChn + 1, sizeof(g_VencChn) / sizeof(VENC_CHN) - 2); // g_VencChn + 1, sizeof(g_VencChn) / sizeof(VENC_CHN) - 2);
// if (HI_SUCCESS != s32Ret) { // if (HI_SUCCESS != s32Ret) {
// zlog_error(log_video, "Get venc stream failed!\n"); // zlog_error(log_video, "Get venc stream failed!\n");
// goto EXIT_VENC_H264_STOP; // goto EXIT_VENC_H264_STOP;
// } // }
// zlog_debug(log_video, "eb3516 Stream Start Success..."); // zlog_debug(log_video, "eb3516 Stream Start Success...");
// s32Ret = SAMPLE_COMM_VENC_SaveJpeg(g_VencChn[2], 1); // s32Ret = SAMPLE_COMM_VENC_SaveJpeg(g_VencChn[2], 1);
// if (HI_SUCCESS != s32Ret) { // if (HI_SUCCESS != s32Ret) {
// zlog_error(log_video, "Save Jpeg Failed"); // zlog_error(log_video, "Save Jpeg Failed");
// } // }
zlog_info(log_video, "Mpp Start Successfully"); zlog_info(log_video, "Mpp Start Successfully");
// PAUSE(); // PAUSE();
// SAMPLE_COMM_VENC_StopGetStream(); // SAMPLE_COMM_VENC_StopGetStream();
return true; return true;
EXIT_VENC_SNAP_STOP: EXIT_VENC_SNAP_STOP:
SAMPLE_COMM_VENC_Stop(g_VencChn[2]); SAMPLE_COMM_VENC_Stop(g_VencChn[2]);
EXIT_VO_STOP: EXIT_VO_STOP:
SAMPLE_COMM_VO_StopVO(&stVoConfig); SAMPLE_COMM_VO_StopVO(&stVoConfig);
EXIT_VENC_H264_STOP: EXIT_VENC_H264_STOP:
SAMPLE_COMM_VENC_Stop(g_VencChn[1]); SAMPLE_COMM_VENC_Stop(g_VencChn[1]);
EXIT_VENC_H264_UNBIND: EXIT_VENC_H264_UNBIND:
// SAMPLE_COMM_VPSS_UnBind_VENC(g_stVpss0Config.s32GrpId, g_Vpss0Chn[1], // SAMPLE_COMM_VPSS_UnBind_VENC(g_stVpss0Config.s32GrpId, g_Vpss0Chn[1],
// g_VencChn[1]); // g_VencChn[1]);
VENC_H265_STOP: VENC_H265_STOP:
SAMPLE_COMM_VENC_Stop(g_VencChn[0]); SAMPLE_COMM_VENC_Stop(g_VencChn[0]);
EXIT_VI_VPSS_UNBIND: EXIT_VI_VPSS_UNBIND:
SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stViConfig.astViInfo[0].stChnInfo.ViChn,
g_stVpss0Config.s32GrpId); g_stVpss0Config.s32GrpId);
SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1],
g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stViConfig.astViInfo[0].stChnInfo.ViChn,
g_stVpss1Config.s32GrpId); g_stVpss1Config.s32GrpId);
EXIT_VPSS_STOP: EXIT_VPSS_STOP:
SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId, SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable);
g_stVpss0Config.abChnEnable); SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable);
SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId,
g_stVpss1Config.abChnEnable);
EXIT_VI_STOP: EXIT_VI_STOP:
SAMPLE_COMM_VI_StopVi(&g_stViConfig); SAMPLE_COMM_VI_StopVi(&g_stViConfig);
EXIT_SYS_STOP: EXIT_SYS_STOP:
SAMPLE_COMM_SYS_Exit(); SAMPLE_COMM_SYS_Exit();
EXIT_SYS_RST_CLK: EXIT_SYS_RST_CLK:
EXIT: EXIT:
return false; return false;
} }
void eb3516VideoStop(void) { void eb3516VideoStop(void) {
SAMPLE_COMM_VENC_Stop(g_VencChn[2]); SAMPLE_COMM_VENC_Stop(g_VencChn[2]);
SAMPLE_COMM_VO_StopVO(&stVoConfig); SAMPLE_COMM_VO_StopVO(&stVoConfig);
SAMPLE_COMM_VENC_Stop(g_VencChn[1]); SAMPLE_COMM_VENC_Stop(g_VencChn[1]);
SAMPLE_COMM_VENC_Stop(g_VencChn[0]); SAMPLE_COMM_VENC_Stop(g_VencChn[0]);
SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0], SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[0],
g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stViConfig.astViInfo[0].stChnInfo.ViChn,
g_stVpss0Config.s32GrpId); g_stVpss0Config.s32GrpId);
SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1], SAMPLE_COMM_VI_UnBind_VPSS(g_stViConfig.astViInfo[0].stPipeInfo.aPipe[1],
g_stViConfig.astViInfo[0].stChnInfo.ViChn, g_stViConfig.astViInfo[0].stChnInfo.ViChn,
g_stVpss1Config.s32GrpId); g_stVpss1Config.s32GrpId);
SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId, SAMPLE_COMM_VPSS_Stop(g_stVpss0Config.s32GrpId, g_stVpss0Config.abChnEnable);
g_stVpss0Config.abChnEnable); SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId, g_stVpss1Config.abChnEnable);
SAMPLE_COMM_VPSS_Stop(g_stVpss1Config.s32GrpId, SAMPLE_COMM_VI_StopVi(&g_stViConfig);
g_stVpss1Config.abChnEnable); SAMPLE_COMM_SYS_Exit();
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) { bool eb3516GetPic(void) {
HI_S32 ret = HI_SUCCESS; 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;
}
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;
}
} }

View File

@ -9,6 +9,7 @@ extern "C"{
bool eb3516VideoInit(void); bool eb3516VideoInit(void);
bool eb3516VideoStart(void); bool eb3516VideoStart(void);
void eb3516VideoStop(void);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -12,50 +12,55 @@ toolchain_end()
-- set_config("sdk", "/opt/hisi-linux/x86-arm/arm-himix200-linux/") -- set_config("sdk", "/opt/hisi-linux/x86-arm/arm-himix200-linux/")
set_toolchains("arm-himix200-linux") set_toolchains("arm-himix200-linux")
set_plat("cross") set_plat("cross")
set_arch("arm")
set_languages("c11", "c++14") set_languages("c11", "c++14")
--- Add requires and dependencies --- Add requires and dependencies
add_requires("live555 2024.11.28") add_requires(
add_requires("zlog 1.2.17", { system = false }) "zlog 1.2.17",
"mongoose 7.15",
"live555 2024.11.28",
{ system = false }
)
target("ISP") target("ISP")
set_kind("static") set_kind("static")
add_files("src/modules/isp/*.c") add_files("src/modules/isp/*.c")
add_includedirs("src") add_includedirs("src")
add_deps("sample_common") add_deps("sample_common")
add_packages("zlog") add_packages("zlog")
target_end() target_end()
target("NNIE") target("NNIE")
set_kind("static") set_kind("static")
add_files("src/modules/nnie/*.c") add_files("src/modules/nnie/*.c")
add_includedirs("src") add_includedirs("src")
add_deps("sample_common", "sample_svp") add_deps("sample_common", "sample_svp")
add_packages("zlog") add_packages("zlog")
target_end() target_end()
target("RTSP") target("RTSP")
set_kind("static") set_kind("static")
add_files("src/modules/rtsp/*.cpp") add_files("src/modules/rtsp/*.cpp")
add_includedirs("src") add_includedirs("src")
add_packages("live555", "zlog") add_packages("live555", "zlog")
add_links("pthread") add_links("pthread")
target_end() target_end()
target("CatFeeder") target("CatFeeder")
set_kind("binary") set_kind("binary")
add_includedirs("src") add_includedirs("src")
add_files("src/*.cpp") add_files("src/*.cpp")
add_deps("hi_library", "ISP", "NNIE", "RTSP") add_deps("hi_library", "ISP", "NNIE", "RTSP")
add_packages("zlog") add_packages("zlog")
add_links("stdc++fs") add_links("stdc++fs")
after_build(function(target) after_build(function(target)
os.cp("src/log.conf", "$(buildir)/cross/arm/release") os.cp("src/log.conf", "$(buildir)/cross/arm/release")
end) end)
if is_mode("debug") then if is_mode("debug") then
add_defines("DEBUG") add_defines("DEBUG")
set_symbols("debug") set_symbols("debug")
set_optimize("none") set_optimize("none")
end end
target_end() target_end()