finish snap but don't work

This commit is contained in:
SikongJueluo 2024-06-24 21:59:35 +08:00
parent 7c1feb9857
commit 92b2097a97
No known key found for this signature in database
GPG Key ID: D2D3D29A993716EA
3 changed files with 148 additions and 28 deletions

View File

@ -1,6 +1,8 @@
#include "eb3516_video.h"
#include "hi_comm_snap.h"
#include "hi_common.h"
#include "mpi_snap.h"
#include "my_common.h"
#include "sample_comm.h"
#include "zlog.h"
@ -34,7 +36,7 @@ static SAMPLE_VPSS_CONFIG_S g_stVpss1Config = {0};
static const VPSS_CHN g_Vpss0Chn[2] = {1, 2};
static const VPSS_CHN g_Vpss1Chn = 1;
static const PIC_SIZE_E g_PicSizes[3] = {PIC_1080P, PIC_720P, PIC_1080P};
static const VENC_CHN g_VencChn[1] = {0};
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,
@ -130,8 +132,8 @@ bool eb3516VideoInit(void) {
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[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 =
@ -144,10 +146,10 @@ bool eb3516VideoInit(void) {
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_FALSE;
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.SnapPipe = 1;
g_stViConfig.astViInfo[0].stSnapInfo.enVideoPipeMode =
VI_OFFLINE_VPSS_OFFLINE;
g_stViConfig.astViInfo[0].stSnapInfo.enSnapPipeMode =
@ -155,9 +157,9 @@ bool eb3516VideoInit(void) {
// 配置 VPSS
VPSS_GetParams(&g_stVpss0Config, &stSize, false);
// VPSS_GetParams(&g_stVpss1Config, &stSize, true);
VPSS_GetParams(&g_stVpss1Config, &stSize, true);
zlog_info(log_video, "eb3516 Video Init Finish...");
zlog_debug(log_video, "eb3516 Video Init Finish...");
}
bool eb3516VideoStart(void) {
@ -185,27 +187,48 @@ bool eb3516VideoStart(void) {
zlog_error(log_video, "Start VI failed with %#x!\n", s32Ret);
goto EXIT_SYS_STOP;
}
zlog_info(log_video, "eb3516 VI Start Success...");
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 VPSS group %d failed with %#x!\n",
zlog_error(log_video, "Start VPSS0 group %d failed with %#x!\n",
g_stVpss0Config.s32GrpId, s32Ret);
goto EXIT_VI_STOP;
}
zlog_info(log_video, "eb3516 VPSS Start Success...");
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...");
// 绑定 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 VPSS failed with %#x!\n", s32Ret);
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;
@ -216,11 +239,11 @@ bool eb3516VideoStart(void) {
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);
zlog_error(log_video, "Create Venc Chn %d failed with %#x!\n",
g_VencChn[0], s32Ret);
goto EXIT_VI_VPSS_UNBIND;
}
zlog_info(log_video, "eb3516 VENC Start Success...");
zlog_debug(log_video, "eb3516 VENC Start Success...");
/*config vo*/
SAMPLE_COMM_VO_GetDefConfig(&stVoConfig);
@ -234,7 +257,7 @@ bool eb3516VideoStart(void) {
SAMPLE_PRT("start vo failed. s32Ret: 0x%x !\n", s32Ret);
goto EXIT_VENC_H264_STOP;
}
zlog_info(log_video, "eb3516 VO Start Success...");
zlog_debug(log_video, "eb3516 VO Start Success...");
/*vpss bind vo*/
s32Ret = SAMPLE_COMM_VPSS_Bind_VO(g_stVpss0Config.s32GrpId, g_Vpss0Chn[0],
@ -244,6 +267,63 @@ bool eb3516VideoStart(void) {
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;
}
// 启动抓拍通道
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);
}
// // 绑定 VPSS[0,0]->VENC[0]
// s32Ret = SAMPLE_COMM_VPSS_Bind_VENC(g_stVpss0Config.s32GrpId,
// g_Vpss0Chn[0],
@ -260,44 +340,84 @@ bool eb3516VideoStart(void) {
// zlog_error(log_video, "Get venc stream failed!\n");
// goto EXIT_VENC_H264_STOP;
// }
// zlog_info(log_video, "eb3516 Stream Start Success...");
// zlog_debug(log_video, "eb3516 Stream Start Success...");
PAUSE();
// 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();
// SAMPLE_COMM_VENC_StopGetStream();
return true;
EXIT_VENC_SNAP_STOP:
SAMPLE_COMM_VENC_Stop(g_VencChn[2]);
EXIT_VO_STOP:
SAMPLE_COMM_VO_StopVO(&stVoConfig);
EXIT_VENC_H264_STOP:
SAMPLE_COMM_VENC_Stop(g_VencChn[1]);
EXIT_VENC_H265_STOP:
// SAMPLE_COMM_VENC_Stop(g_VencChn[0]);
EXIT_VENC_H264_UNBIND:
// SAMPLE_COMM_VPSS_UnBind_VENC(g_stVpss0Config.s32GrpId, g_Vpss0Chn[1],
// g_VencChn[1]);
VENC_H265_STOP:
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);
EXIT_VPSS_STOP:
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);
EXIT_SYS_STOP:
SAMPLE_COMM_SYS_Exit();
EXIT_SYS_RST_CLK:
EXIT:
return s32Ret;
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();
zlog_info(log_video, "Exit process Sucessfully!");
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;
}
}

View File

@ -10,7 +10,7 @@ detail = "[%d.%us] [%p:%F:%L] [%V] %m%n"
[rules]
*.ERROR >stdout; detail
*.WARN >stdout;
*.INFO >stdout; simple
*.=ERROR >stdout; detail
*.=WARN >stdout; detail
*.=INFO >stdout; simple
*.DEBUG "log/%c.log"; detail

View File

@ -28,9 +28,9 @@ int main(int argc, char** argv) {
}
zlog_info(log, "Init zlog Sucessfully");
// if (!std::experimental::filesystem::remove_all("log", file_error)) {
// zlog_warn(log, "Can't Remove Last Logs FOR %s", file_error.message().c_str());
// }
if (!std::experimental::filesystem::remove_all("log", file_error)) {
zlog_warn(log, "Can't Remove Last Logs FOR %s", file_error.message().c_str());
}
if (!std::experimental::filesystem::create_directory("log", file_error)) {
zlog_warn(log, "Can't Create log dir FOR %s", file_error.message().c_str());