finish snap but don't work
This commit is contained in:
parent
7c1feb9857
commit
92b2097a97
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in New Issue