您尚未登录。

楼主 #1 2020-11-15 20:06:52

ylhljo555
会员
注册时间: 2020-11-15
已发帖子: 2
积分: 2

hi35xx 能只编码一路vga分辨率的h264吗?摄像头是720p@30fps的。

小白刚入坑,设置一路vga就报 SAMPLE_PRT("get venc stream time out, exit thread\n");

离线

#2 2020-11-16 09:21:44

cijliu
Moderator
注册时间: 2019-06-13
已发帖子: 59
积分: 56

Re: hi35xx 能只编码一路vga分辨率的h264吗?摄像头是720p@30fps的。

可以的,如果其他编码正常,说明程序哪里配置有问题导致超时

离线

#3 2020-11-16 11:33:03

ylhljo
会员
注册时间: 2020-11-15
已发帖子: 2
积分: 2

Re: hi35xx 能只编码一路vga分辨率的h264吗?摄像头是720p@30fps的。

还是没试出来.看看高人能否看出破绽?
HI_S32 SAMPLE_VENC_720P_CLASSICvga(HI_VOID)
{
PAYLOAD_TYPE_E enPayLoad[3]= {PT_H264, PT_H264,PT_H264};
PIC_SIZE_E enSize[3] = {PIC_HD720, PIC_VGA,PIC_QVGA};
//PIC_SIZE_E enSize[2] = {PIC_VGA,PIC_QVGA};
HI_U32 u32Profile = 0;

VB_CONF_S stVbConf;
SAMPLE_VI_CONFIG_S stViConfig = {0};

VPSS_GRP VpssGrp;
VPSS_CHN VpssChn;
VPSS_GRP_ATTR_S stVpssGrpAttr;
VPSS_CHN_ATTR_S stVpssChnAttr;
VPSS_CHN_MODE_S stVpssChnMode;

VENC_CHN VencChn;
SAMPLE_RC_E enRcMode= SAMPLE_RC_FIXQP;

HI_S32 s32ChnNum=1;

HI_S32 s32Ret = HI_SUCCESS;
HI_U32 u32BlkSize;
SIZE_S stSize;

/**
step 1: init sys variable
**/
memset(&stVbConf,0,sizeof(VB_CONF_S));
printf("s32ChnNum = %d\n",s32ChnNum);

stVbConf.u32MaxPoolCnt = 128;

/video buffer/

u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
enSize[0], SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
stVbConf.astCommPool[0].u32BlkCnt = g_u32BlkCnt;

/**
step 2: mpp system init.
**/
s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("system init failed with %d!\n", s32Ret);
goto END_VENC_720P_CLASSIC_0;
}

/**
step 3: start vi dev & chn to capture
**/
stViConfig.enViMode = SENSOR_TYPE;
stViConfig.enRotate = ROTATE_NONE;
stViConfig.enNorm = VIDEO_ENCODING_MODE_AUTO;
stViConfig.enViChnSet = VI_CHN_SET_NORMAL;
stViConfig.enWDRMode = WDR_MODE_NONE;
s32Ret = SAMPLE_COMM_VI_StartVi(&stViConfig);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("start vi failed!\n");
goto END_VENC_720P_CLASSIC_1;
}

/**
step 4: start vpss and vi bind vpss
**/
s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[0], &stSize);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
goto END_VENC_720P_CLASSIC_1;
}

VpssGrp = 0;
stVpssGrpAttr.u32MaxW = stSize.u32Width;
stVpssGrpAttr.u32MaxH = stSize.u32Height;
stVpssGrpAttr.bIeEn = HI_FALSE;
stVpssGrpAttr.bNrEn = HI_TRUE;
stVpssGrpAttr.bHistEn = HI_FALSE;
stVpssGrpAttr.bDciEn = HI_FALSE;
stVpssGrpAttr.enDieMode = VPSS_DIE_MODE_NODIE;
stVpssGrpAttr.enPixFmt = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

s32Ret = SAMPLE_COMM_VPSS_StartGroup(VpssGrp, &stVpssGrpAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start Vpss failed!\n");
goto END_VENC_720P_CLASSIC_2;
}

s32Ret = SAMPLE_COMM_VI_BindVpss(stViConfig.enViMode);//vga vi02vpss1
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Vi bind Vpss failed!\n");
goto END_VENC_720P_CLASSIC_3;
}

s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[1], &stSize);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");//vga
goto END_VENC_720P_CLASSIC_1;
}

VpssChn = 1;
stVpssChnMode.enChnMode = VPSS_CHN_MODE_USER;
stVpssChnMode.bDouble = HI_FALSE;
stVpssChnMode.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
stVpssChnMode.u32Width = stSize.u32Width;
stVpssChnMode.u32Height = stSize.u32Height;
stVpssChnMode.enCompressMode = COMPRESS_MODE_SEG;
memset(&stVpssChnAttr, 0, sizeof(stVpssChnAttr));
stVpssChnAttr.s32SrcFrameRate = -1;
stVpssChnAttr.s32DstFrameRate = -1;
enRcMode = SAMPLE_RC_VBR;
s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Enable vpss chn failed!\n");
goto END_VENC_720P_CLASSIC_4;
}
/**
step 5: start stream venc
**/
/* enSize[0] /

VpssGrp = 0;
VpssChn = 1;
VencChn = 1;
s32Ret = SAMPLE_COMM_VENC_Start(VencChn, enPayLoad[0],\
gs_enNorm, enSize[1], enRcMode,u32Profile);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start Venc failed!\n");
goto END_VENC_720P_CLASSIC_5;
}

s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VpssChn);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start Venc failed!\n");
goto END_VENC_720P_CLASSIC_5;
}

/**
step 6: stream venc process -- get stream, then save it to file.
**/
s32Ret = SAMPLE_COMM_VENC_StartGetStream(s32ChnNum);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start Venc failed!\n");
goto END_VENC_720P_CLASSIC_5;
}

printf("please press twice ENTER to exit this sample\n");

//getchar();
//getchar();
goto END_VENC;
/**
step 7: exit process
**/
SAMPLE_COMM_VENC_StopGetStream();

END_VENC_720P_CLASSIC_5:
VpssGrp = 0;
VpssChn = 0;
VencChn = 0;
SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, VpssChn);
SAMPLE_COMM_VENC_Stop(VencChn);
SAMPLE_COMM_VI_UnBindVpss(stViConfig.enViMode);
END_VENC_720P_CLASSIC_4: //vpss stop
VpssGrp = 0;
VpssChn = 0;
SAMPLE_COMM_VPSS_DisableChn(VpssGrp, VpssChn);
END_VENC_720P_CLASSIC_3: //vpss stop
SAMPLE_COMM_VI_UnBindVpss(stViConfig.enViMode);
END_VENC_720P_CLASSIC_2: //vpss stop
SAMPLE_COMM_VPSS_StopGroup(VpssGrp);
END_VENC_720P_CLASSIC_1: //vi stop
SAMPLE_COMM_VI_StopVi(&stViConfig);
END_VENC_720P_CLASSIC_0: //system exit
SAMPLE_COMM_SYS_Exit();
END_VENC:

return s32Ret;
}

离线

#4 2020-11-17 01:56:56

ylhljo
会员
注册时间: 2020-11-15
已发帖子: 2
积分: 2

Re: hi35xx 能只编码一路vga分辨率的h264吗?摄像头是720p@30fps的。

cijliu wrote:

可以的,如果其他编码正常,说明程序哪里配置有问题导致超时

次码流不能独立存在?

SXM19940913sxm
关注
嵌入式 视频编码(H264)hi3518 sample流程及API 原创

一、重要概念

主次码流

主次码流是指硬件逻辑单元启动一次同时产生的 2 路码流,即 1 路主码流和 1 路次码流。主码流和次码流可以为不同的编码协议,但其宽高比例都必须满足 1:1、1:2 或 1:4,次码流不能单独存在(必须和 1 路主码流在同一个通道组中) 。

离线

#5 2020-11-17 09:47:31

whyabc666
封禁
注册时间: 2019-12-12
已发帖子: 378
积分: 365

Re: hi35xx 能只编码一路vga分辨率的h264吗?摄像头是720p@30fps的。

海思的RTSP推流服务器,PC用ffmpeg解码显示no existing PPS 0 reference,no frame,有什么办法?还有PC端的ffmpeg不能解码720p以上分辨率的,invalid UE holomb code!得用海思的PC 解码库?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发