HI_S32 HI_TDE2_MultiBlending(TDE_HANDLE s32Handle, TDE_SURFACE_LIST_S *pstSurfaceList) { HI_S32 i = 0; if(HI_ERR_TDE_INVALID_HANDLE == s32Handle) { printf("Fail to create Job.\n"); return HI_FAILURE; } if (NULL == pstSurfaceList) { printf("surface list is null!"); return HI_FAILURE; } HI_S32 blitnum = pstSurfaceList->u32SurfaceNum; TDE2_SURFACE_S dstSur = {0}; memcpy(&dstSur, pstSurfaceList->pDstSurface, sizeof(TDE2_SURFACE_S)); for (i = 0; i < blitnum; i++) { TDE2_SURFACE_S srcSur = {0}; TDE2_RECT_S srcRect = {0}; TDE2_RECT_S dstRect = {0}; TDE2_OPT_S stOpt; memset(&stOpt, 0, sizeof(TDE2_OPT_S)); memcpy(&srcSur, &(pstSurfaceList->pstComposor[i].stSrcSurface), sizeof(TDE2_SURFACE_S)); memcpy(&srcRect, &(pstSurfaceList->pstComposor[i].stInRect), sizeof(TDE2_RECT_S)); memcpy(&dstRect, &(pstSurfaceList->pstComposor[i].stOutRect), sizeof(TDE2_RECT_S)); memcpy(&stOpt, &(pstSurfaceList->pstComposor[i].stOpt), sizeof(TDE2_OPT_S)); HI_S32 s32Ret = HI_TDE2_Bitblit(s32Handle, &dstSur, &dstRect, &srcSur, &srcRect, &dstSur, &dstRect, &stOpt); if(HI_SUCCESS != s32Ret) { fprintf(stderr, "%d return error is 0x%x", i, s32Ret); HI_TDE2_CancelJob(s32Handle); return s32Ret; } } return HI_SUCCESS; }
static HI_VOID circumrotate (HI_U32 u32CurOnShow) { TDE_HANDLE s32Handle; TDE2_OPT_S stOpt = {0}; HI_FLOAT eXMid, eYMid; HI_FLOAT eRadius; HI_U32 i; HI_FLOAT f; HI_U32 u32NextOnShow; TDE2_RECT_S stSrcRect; TDE2_RECT_S stDstRect; HI_S32 s32Ret = HI_SUCCESS; u32NextOnShow = !u32CurOnShow; f = (float) (g_s32FrameNum % CYCLE_LEN) / CYCLE_LEN; stSrcRect.s32Xpos = 0; stSrcRect.s32Ypos = 0; stSrcRect.u32Width = g_stBackGround.u32Width; stSrcRect.u32Height = g_stBackGround.u32Height; eXMid = g_stBackGround.u32Width/2.16f; eYMid = g_stBackGround.u32Height/2.304f; eRadius = MIN (eXMid, eYMid) / 2.0f; /* 1. start job */ s32Handle = HI_TDE2_BeginJob(); if(HI_ERR_TDE_INVALID_HANDLE == s32Handle) { TDE_PRINT("start job failed!\n"); return ; } /* 2. bitblt background to screen */ s32Ret = HI_TDE2_QuickCopy(s32Handle, &g_stBackGround, &stSrcRect, &g_stScreen[u32NextOnShow], &stSrcRect); if(s32Ret < 0) { TDE_PRINT("Line:%d failed,ret=0x%x!\n", __LINE__, s32Ret); HI_TDE2_CancelJob(s32Handle); return ; } for(i = 0; i < N_IMAGES; i++) { HI_FLOAT ang; HI_FLOAT r; stSrcRect.s32Xpos = 0; stSrcRect.s32Ypos = 0; stSrcRect.u32Width = g_stImgSur[i].u32Width; stSrcRect.u32Height = g_stImgSur[i].u32Height; /* 3. calculate new pisition */ ang = 2.0f * (HI_FLOAT) M_PI * (HI_FLOAT) i / N_IMAGES - f * 2.0f * (HI_FLOAT) M_PI; r = eRadius + (eRadius / 3.0f) * sinf (f * 2.0 * M_PI); stDstRect.s32Xpos = eXMid + r * cosf (ang) - g_stImgSur[i].u32Width / 2.0f;; stDstRect.s32Ypos = eYMid + r * sinf (ang) - g_stImgSur[i].u32Height / 2.0f; stDstRect.u32Width = g_stImgSur[i].u32Width; stDstRect.u32Height = g_stImgSur[i].u32Height; /* 4. bitblt image to screen */ s32Ret = HI_TDE2_Bitblit(s32Handle, NULL, NULL, &g_stImgSur[i], &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 ; } g_s32FrameNum++; return; }
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; }