IMP_S32 RunAVDHiFBTde(IMP_S32 layer) { IMP_S32 fd; IMP_S32 i; IMP_S32 j; struct fb_fix_screeninfo fix; struct fb_var_screeninfo var; HIFB_CAPABILITY_S cap; HI_U32 u32FixScreenStride = 0; unsigned char *pShowScreen; unsigned char *pHideScreen; HIFB_ALPHA_S stAlpha; HIFB_POINT_S stPoIMP_S32 = {0, 0}; FILE *fp; char file[12] = "/dev/fb0"; char image_name[128]; HI_CHAR *pDst = NULL; TDE2_OPT_S pstOpt; HI_U32 u32PhyAddr; HI_U32 u32Size; HI_U32 u32CurOnShow = 0; HI_U32 u32NextOnShow = 1; TDE2_RECT_S stSrcRect; TDE2_RECT_S stDstRect; HI_S32 s32Ret; /* 1. open tde device */ HI_TDE2_Open(); /* 1. open framebuffer device overlay 0 */ //fd = open(file, O_RDWR, 0); /* 2. framebuffer operation */ fd = open("/dev/fb0", O_RDWR); if(fd < 0) { printf("open %s failed!\n",file); return -1; } /* 2. set the screen original position */ if (ioctl(fd, FBIOPUT_SCREEN_ORIGIN_HIFB, &stPoIMP_S32) < 0) { printf("set screen original show position failed!\n"); close(fd); return -1; } #if 1 SetTrasValueBydevPath(fd); #else /* 3.set alpha */ stAlpha.bAlphaEnable = HI_FALSE; stAlpha.bAlphaChannel = HI_FALSE; stAlpha.u8Alpha0 = 0xff; stAlpha.u8Alpha1 = 0x8f; stAlpha.u8GlobalAlpha = 0x80; if (ioctl(fd, FBIOPUT_ALPHA_HIFB, &stAlpha) < 0) { printf("Set alpha failed!\n"); close(fd); return -1; } #endif /* 4. get the variable screen info */ if (ioctl(fd, FBIOGET_VSCREENINFO, &var) < 0) { printf("Get variable screen info failed!\n"); close(fd); return -1; } /* 5. modify the variable screen info the screen size: IMAGE_WIDTH*IMAGE_HEIGHT the virtual screen size: VIR_SCREEN_WIDTH*VIR_SCREEN_HEIGHT (which equals to VIR_SCREEN_WIDTH*(IMAGE_HEIGHT*2)) the pixel format: ARGB1555 */ var.xres_virtual = AVD_VIR_SCREEN_WIDTH; var.yres_virtual = AVD_VIR_SCREEN_HEIGHT; var.xres = AVD_IMAGE_WIDTH; var.yres = AVD_IMAGE_HEIGHT; var.transp= g_a16; var.red = g_r16; var.green = g_g16; var.blue = g_b16; var.bits_per_pixel = 16; var.activate = FB_ACTIVATE_FORCE; /* 6. set the variable screeninfo */ if (ioctl(fd, FBIOPUT_VSCREENINFO, &var) < 0) { printf("Put variable screen info failed!\n"); close(fd); return -1; } /* 7. get the fix screen info */ if (ioctl(fd, FBIOGET_FSCREENINFO, &fix) < 0) { printf("Get fix screen info failed!\n"); close(fd); return -1; } u32FixScreenStride = fix.line_length; /*fix screen stride*/ /* 8. map the physical video memory for user use */ u32Size = fix.smem_len; u32PhyAddr = fix.smem_start; pShowScreen = mmap(NULL, fix.smem_len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if(MAP_FAILED == pShowScreen) { printf("mmap framebuffer failed!\n"); close(fd); return -1; } pHideScreen = pShowScreen + u32FixScreenStride*AVD_IMAGE_HEIGHT; memset(pShowScreen, 0x0000, u32FixScreenStride*AVD_IMAGE_HEIGHT); /* 9. create surface */ g_AVDstScreen[0].enColorFmt = PIXFMT; g_AVDstScreen[0].u32PhyAddr = u32PhyAddr; g_AVDstScreen[0].u32Width = AVD_VIR_SCREEN_WIDTH; g_AVDstScreen[0].u32Height = AVD_IMAGE_HEIGHT; g_AVDstScreen[0].u32Stride = fix.line_length; g_AVDstScreen[0].bAlphaMax255 = HI_TRUE; g_AVDstScreen[1] = g_AVDstScreen[0]; g_AVDstScreen[1].u32PhyAddr = g_AVDstScreen[0].u32PhyAddr + g_AVDstScreen[0].u32Stride * g_AVDstScreen[0].u32Height; g_stBackGround = g_AVDstScreen[1]; g_stBackGround.u32PhyAddr = g_AVDstScreen[1].u32PhyAddr + g_AVDstScreen[1].u32Stride * g_AVDstScreen[1].u32Height; //g_stBackGround = g_stScreen[0]; g_AVDstPingBuf = g_AVDstScreen[0]; g_AVDstPangBuf = g_AVDstScreen[1]; // printf("g_AVDstPingBuf:%d\n",g_AVDstPingBuf.u32Stride); // printf("g_AVDstPangBuf:%d\n",g_AVDstPangBuf.u32Stride); //g_stBackGround.u32PhyAddr = g_stScreen[1].u32PhyAddr + g_stScreen[1].u32Stride * g_stScreen[1].u32Height; // var.yoffset = (i%2)?0:1024; //var.yoffset = 0; /*set frame buffer start position*/ i = 0; while(1) { IMP_S32 target_num = 0; i++; u32CurOnShow = i%2; u32NextOnShow = !u32CurOnShow; if(u32CurOnShow == 1) { g_AVDpstBackGround = &g_AVDstPingBuf; } else { g_AVDpstBackGround = &g_AVDstPangBuf; } TDE_HANDLE s32Handle; TDE2_OPT_S stOpt = {0}; HI_FLOAT eXMid, eYMid; HI_FLOAT eRadius; HI_U32 i; HI_FLOAT f; HI_U32 u32NextOnShow; HI_U32 u32FillData = 0x8010; {printf("TDE2_BeginJob!\n"); /* 1. start job */ s32Handle = HI_TDE2_BeginJob(); if(HI_ERR_TDE_INVALID_HANDLE == s32Handle) { // TDE_PRINT("start job failed!\n"); printf("start job failed!\n"); return ; } //memset(pShowScreen, 0x0000, u32FixScreenStride*IMAGE_HEIGHT); stDstRect.s32Xpos = 0; stDstRect.s32Ypos = 0; stDstRect.u32Width = AVD_VIR_SCREEN_WIDTH; stDstRect.u32Height = AVD_IMAGE_HEIGHT; s32Ret = HI_TDE2_QuickFill( s32Handle, g_AVDpstBackGround,&stDstRect, 0); printf("TDE2_BeginJob2!\n"); stDstRect.s32Xpos = 0; stDstRect.s32Ypos = 0; stDstRect.u32Width = 120; stDstRect.u32Height = 120; stSrcRect.s32Xpos = 0; stSrcRect.s32Ypos = 0; stSrcRect.u32Width = g_AVDpstBackGround->u32Width; stSrcRect.u32Height = g_AVDpstBackGround->u32Height; //TDE_OUTPUT_PEA_RESULT(s32Handle, g_pstBackGround,&g_IP_Result);//,&stDstRect); printf("TDE_OUTPUT_AVD_RESULT start!\n"); TDE_OUTPUT_AVD_RESULT(s32Handle, g_AVDpstBackGround,&g_AVD_Reslut);//,&stDstRect); printf("TDE_OUTPUT_AVD_RESULT end!\n"); memset(&pstOpt,0,sizeof(pstOpt)); pstOpt.bDeflicker = HI_TRUE; /* { TDE_CreateSurfaceByFile(PIC_PEA_IMAGE_PATH6, g_AVDpstBackGround, pShowScreen + ((HI_U32)g_AVDpstBackGround->u32PhyAddr - u32PhyAddr)); stSrcRect.s32Xpos = 0; stSrcRect.s32Ypos = 0; stSrcRect.u32Width = 79; stSrcRect.u32Height = g_AVDpstBackGround->u32Height; stDstRect.s32Xpos = 2; stDstRect.s32Ypos = 35; stDstRect.u32Width = 79; stDstRect.u32Height = g_AVDpstBackGround->u32Height; s32Ret = HI_TDE2_QuickCopy(s32Handle, g_AVDpstBackGround, &stSrcRect, g_AVDpstBackGround, &stDstRect); }*/ /*TDE_CreateSurfaceByFile(AVD_IMAGE_PATH, g_AVDpstBackGround, pShowScreen + ((HI_U32)g_AVDpstBackGround->u32PhyAddr - u32PhyAddr)); stDstRect.s32Xpos = 0; stDstRect.s32Ypos = 0; stDstRect.u32Width = 720; stDstRect.u32Height = 576; s32Ret = HI_TDE2_QuickCopy(s32Handle, g_AVDpstBackGround, &stDstRect, g_AVDpstBackGround, &stDstRect); */ /* 4. bitblt image to screen */ //s32Ret = HI_TDE2_Bitblit(s32Handle, NULL, &stDstRect, g_AVDpstBackGround, &stSrcRect, g_AVDpstBackGround , &stDstRect, &pstOpt); if(s32Ret < 0) { printf("Line:%d,HI_TDE2_QuickFill failed,ret=0x%x!\n", __LINE__, s32Ret); return ; } printf("TDE2_BeginJob3!\n"); /* 5. submit job */ s32Ret = HI_TDE2_EndJob(s32Handle, HI_FALSE, HI_TRUE, 10); if(s32Ret < 0) { // TDE_PRINT("Line:%d,HI_TDE2_EndJob failed,ret=0x%x!\n", __LINE__, s32Ret); HI_TDE2_CancelJob(s32Handle); return ; } printf("TDE2_EndJob5!\n"); } var.yoffset = (u32CurOnShow==1) ? 0 : AVD_IMAGE_HEIGHT; if (ioctl(fd, FBIOPAN_DISPLAY, &var) < 0) { //TDE_PRINT("process frame buffer device error\n"); printf("process frame buffer device error\n"); //goto FB_PROCESS_ERROR1; } usleep(40000); } printf("Enter to quit!\n"); getchar(); /* 10.unmap the physical memory */ munmap(pShowScreen, fix.smem_len); /* 11. close the framebuffer device */ close(fd); HI_TDE2_Close(); return 0; }
static HI_VOID circumrotate (HI_U32 u32CurOnShow) { TDE_HANDLE s32Handle; TDE2_OPT_S stOpt = {0}; TDE2_RECT_S stSrcRect; TDE2_RECT_S stDstRect; HI_U32 u32NextOnShow; u32NextOnShow = !u32CurOnShow; HI_U32 s32Ret; HI_U32 u32FillData = 0x8000; TDE2_RECT_S pstScreenRect; /* 1. start job */ s32Handle = HI_TDE2_BeginJob(); if(HI_ERR_TDE_INVALID_HANDLE == s32Handle) { TDE_PRINT("start job failed!\n"); return ; } pstScreenRect.s32Xpos = 0; pstScreenRect.s32Ypos = 0; pstScreenRect.u32Width = SCREEN_WIDTH; pstScreenRect.u32Height = SCREEN_HEIGHT; s32Ret = HI_TDE2_QuickFill(s32Handle, &g_stScreen[u32NextOnShow], &pstScreenRect, u32FillData); if(s32Ret < 0) { TDE_PRINT("Line:%d,HI_TDE2_QuickFill failed,ret=0x%x!\n", __LINE__, s32Ret); HI_TDE2_CancelJob(s32Handle); return ; } stOpt.enColorKeyMode = TDE2_COLORKEY_MODE_FOREGROUND; stOpt.unColorKeyValue.struCkARGB.stBlue.bCompIgnore = HI_FALSE; stOpt.unColorKeyValue.struCkARGB.stBlue.bCompOut = HI_FALSE; stOpt.unColorKeyValue.struCkARGB.stBlue.u8CompMin = 0xff; stOpt.unColorKeyValue.struCkARGB.stBlue.u8CompMax = 0xff; stOpt.unColorKeyValue.struCkARGB.stBlue.u8CompMask = 0xff; stOpt.unColorKeyValue.struCkARGB.stGreen.bCompIgnore = HI_TRUE; stOpt.unColorKeyValue.struCkARGB.stRed.bCompIgnore = HI_TRUE; stOpt.unColorKeyValue.struCkARGB.stAlpha.bCompIgnore = HI_TRUE; stSrcRect.s32Xpos = 0; stSrcRect.s32Ypos = 0; stSrcRect.u32Width = g_stImgSur.u32Width; stSrcRect.u32Height = g_stImgSur.u32Height; stDstRect.s32Xpos = 100; stDstRect.s32Ypos = 100; stDstRect.u32Width = g_stImgSur.u32Width; stDstRect.u32Height = g_stImgSur.u32Height; /* 4. bitblt image to screen */ s32Ret = HI_TDE2_Bitblit(s32Handle, &g_stScreen[u32NextOnShow], &stDstRect, &g_stImgSur, &stSrcRect, &g_stScreen[u32NextOnShow], &stDstRect, &stOpt); if(s32Ret < 0) { TDE_PRINT("Line:%d,HI_TDE2_Bitblit failed,ret=0x%x!\n", __LINE__, s32Ret); HI_TDE2_CancelJob(s32Handle); return ; } /* 5. submit job */ s32Ret = HI_TDE2_EndJob(s32Handle, HI_FALSE, HI_TRUE, 10); if(s32Ret < 0) { TDE_PRINT("Line:%d,HI_TDE2_EndJob failed,ret=0x%x!\n", __LINE__, s32Ret); HI_TDE2_CancelJob(s32Handle); return ; } return; }