Hi3536初始化程序和qt程序是分开运行的,下面是Hi3536初始化程序
HI_S32 s32Ret = HI_SUCCESS;
pthread_t phifb0 = -1;
HI_BOOL done = 0;
HI_U32 u32PicWidth = WIDTH;
HI_U32 u32PicHeight = HEIGHT;
SIZE_S stSize;
VO_LAYER VoLayer = SAMPLE_VO_LAYER_VHD0;
VO_DEV VoDev = SAMPLE_VO_DEV_DHD0;
VO_PUB_ATTR_S stPubAttr;
VO_VIDEO_LAYER_ATTR_S stLayerAttr;
HI_U32 u32VoFrmRate;
VB_CONF_S stVbConf;
HI_U32 u32BlkSize;
struct fb_var_screeninfo stVarInfo;
HI_CHAR file[12] = "/dev/fb0";
HI_S32 fd;
HI_BOOL bEnable;
HIFB_DDRZONE_S stDDRZonePara;
HIFB_LAYER_INFO_S stLayerinfo;
HIFB_COLORKEY_S stColorKey;
HIFB_ALPHA_S stAlpha;
HI_BOOL bShow;
signal(SIGINT, SAMPLE_HIFB_HandleSig);
signal(SIGTERM, SAMPLE_HIFB_HandleSig);
/******************************************
step 1: init variable
******************************************/
memset(&stVbConf,0,sizeof(VB_CONF_S));
u32BlkSize = CEILING_2_POWER(u32PicWidth,SAMPLE_SYS_ALIGN_WIDTH) * CEILING_2_POWER(u32PicHeight,SAMPLE_SYS_ALIGN_WIDTH) * 2;
stVbConf.u32MaxPoolCnt = 128;
stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
stVbConf.astCommPool[0].u32BlkCnt = 6;
/******************************************
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 SAMPLE_HIFB_NoneBufMode_0;
}
stPubAttr.enIntfSync = VO_OUTPUT_1080P60;
stPubAttr.enIntfType = VO_INTF_HDMI;
stPubAttr.u32BgColor = 0x00ff00;
stLayerAttr.bClusterMode = HI_FALSE;
stLayerAttr.bDoubleFrame = HI_FALSE;
stLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
s32Ret = SAMPLE_COMM_VO_GetWH(stPubAttr.enIntfSync,&stSize.u32Width,\
&stSize.u32Height,&u32VoFrmRate);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("get vo wh failed with %d!\n", s32Ret);
goto SAMPLE_HIFB_NoneBufMode_0;
}
memcpy(&stLayerAttr.stImageSize,&stSize,sizeof(stSize));
stLayerAttr.u32DispFrmRt = 60;
stLayerAttr.stDispRect.s32X = 0;
stLayerAttr.stDispRect.s32Y = 0;
stLayerAttr.stDispRect.u32Width = stSize.u32Width;
stLayerAttr.stDispRect.u32Height = stSize.u32Height;
s32Ret = SAMPLE_COMM_VO_StartDev(VoDev, &stPubAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("start vo dev failed with %d!\n", s32Ret);
goto SAMPLE_HIFB_NoneBufMode_0;
}
s32Ret = SAMPLE_COMM_VO_StartLayer(VoLayer, &stLayerAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("start vo layer failed with %d!\n", s32Ret);
goto SAMPLE_HIFB_NoneBufMode_1;
}
if (stPubAttr.enIntfType & VO_INTF_HDMI)
{
s32Ret = SAMPLE_COMM_VO_HdmiStart(stPubAttr.enIntfSync);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("start HDMI failed with %d!\n", s32Ret);
goto SAMPLE_HIFB_NoneBufMode_2;
}
}
/* 1. open framebuffer device overlay 0 */
fd = open(file, O_RDWR, 0);
if(fd < 0)
{
SAMPLE_PRT("open %s failed!\n", file);
return HI_NULL;
}
bShow = HI_FALSE;
if (ioctl(fd, FBIOPUT_SHOW_HIFB, &bShow) < 0)
{
SAMPLE_PRT("FBIOPUT_SHOW_HIFB failed!\n");
return HI_NULL;
}
HIFB_POINT_S stPoint = {0, 0};
if (ioctl(fd, FBIOPUT_SCREEN_ORIGIN_HIFB, &stPoint) < 0)
{
printf("set screen original show position failed!\n");
close(fd);
return -1;
}
stAlpha.bAlphaEnable = HI_FALSE;//HI_TRUE;
stAlpha.bAlphaChannel = HI_FALSE;//0;
stAlpha.u8Alpha0 = 0x0;
stAlpha.u8Alpha1 = 0xff;
stAlpha.u8GlobalAlpha = 0x80;
if (ioctl(fd, FBIOPUT_ALPHA_HIFB, &stAlpha) < 0)
{
SAMPLE_PRT("Set alpha failed!\n");
close(fd);
return HI_NULL;
}
stColorKey.bKeyEnable = HI_TRUE;
stColorKey.u32Key = 0x0;
if (ioctl(fd, FBIOPUT_COLORKEY_HIFB, &stColorKey) < 0)
{
SAMPLE_PRT("FBIOPUT_COLORKEY_HIFB!\n");
close(fd);
return HI_NULL;
}
s32Ret = ioctl(fd, FBIOGET_VSCREENINFO, &stVarInfo);
if(s32Ret < 0)
{
SAMPLE_PRT("FBIOGET_VSCREENINFO failed!\n");
close(fd);
return HI_FAILURE;
}
stVarInfo.red = s_r32;
stVarInfo.green = s_g32;
stVarInfo.blue = s_b32;
stVarInfo.transp = s_a32;
stVarInfo.bits_per_pixel = 32;
stVarInfo.xres = WIDTH;
stVarInfo.yres = HEIGHT;
stVarInfo.activate = FB_ACTIVATE_NOW;
stVarInfo.xres_virtual = WIDTH;
stVarInfo.yres_virtual = HEIGHT;
stVarInfo.xoffset = 0;
stVarInfo.yoffset = 0;
s32Ret = ioctl(fd, FBIOPUT_VSCREENINFO, &stVarInfo);
if(s32Ret < 0)
{
SAMPLE_PRT("FBIOPUT_VSCREENINFO failed!\n");
close(fd);
return HI_FAILURE;
}
bShow = HI_TRUE;
if (ioctl(fd, FBIOPUT_SHOW_HIFB, &bShow) < 0)
{
SAMPLE_PRT("FBIOPUT_SHOW_HIFB failed!\n");
return HI_NULL;
}
while(!done)
{
usleep(200 * 1000);
}
SAMPLE_HIFB_NoneBufMode_2:
SAMPLE_COMM_VO_StopLayer(VoLayer);
SAMPLE_HIFB_NoneBufMode_1:
SAMPLE_COMM_VO_StopDev(VoDev);
SAMPLE_HIFB_NoneBufMode_0:
SAMPLE_COMM_SYS_Exit();
return HI_SUCCESS;