/********************************************************************** * 函数名称: ShowIntervalPage * 功能描述: 显示"interval页面" * 输入参数: ptPageLayout - 内含多个图标的文件名和显示区域 * 输出参数: 无 * 返 回 值: 无 * 修改日期 版本号 修改人 修改内容 * ----------------------------------------------- * 2013/02/08 V1.0 韦东山 创建 ***********************************************************************/ static void ShowIntervalPage(PT_PageLayout ptPageLayout) { PT_VideoMem ptVideoMem; int iError; PT_Layout atLayout = ptPageLayout->atLayout; /* 1. 获得显存 */ ptVideoMem = GetVideoMem(ID("interval"), 1); if (ptVideoMem == NULL) { DBG_PRINTF("can't get video mem for interval page!\n"); return; } /* 2. 描画数据 */ /* 如果还没有计算过各图标的坐标 */ if (atLayout[0].iTopLeftX == 0) { CalcIntervalPageLayout(ptPageLayout); } iError = GeneratePage(ptPageLayout, ptVideoMem); iError = GenerateIntervalPageSpecialIcon(g_iIntervalSecond, ptVideoMem); if (iError) { DBG_PRINTF("GenerateIntervalPageSpecialIcon error!\n"); } /* 3. 刷到设备上去 */ FlushVideoMemToDev(ptVideoMem); /* 4. 解放显存 */ PutVideoMem(ptVideoMem); }
/********************************************************************** * 函数名称: ShowSavePage * 功能描述: 显示"Save页面" * 输入参数: ptPageLayout - 内含多个图标的文件名和显示区域 * 输出参数: 无 * 返 回 值: 无 ***********************************************************************/ static void ShowSavePage(PT_PageLayout ptPageLayout) { PT_VideoMem ptVideoMem; int iError; PT_Layout atLayout = ptPageLayout->atLayout; /* 1. 获得显存 */ ptVideoMem = GetVideoMem(ID("save"), 1); if (ptVideoMem == NULL) { DBG_PRINTF("can't get video mem for Save page!\n"); return; } /* 2. 描画数据 */ /* 如果还没有计算过各图标的坐标 */ if (atLayout[0].iTopLeftX == 0) { CalcSavePageLayout(ptPageLayout); } iError = GeneratePage(ptPageLayout, ptVideoMem); /* 3. 刷到设备上去 */ FlushVideoMemToDev(ptVideoMem); /* 4. 解放显存 */ PutVideoMem(ptVideoMem); }
static void ShowMainPage(struct PageLayout *ptPageLayout) { int iError = 0; struct VideoMem *ptMainPageVM; struct DisLayout *atDisLayout; atDisLayout = ptPageLayout->atDisLayout; /* 获得一块内存以显示 main 页面 */ ptMainPageVM = GetVideoMem(GetID("main"), 1); if(NULL == ptMainPageVM){ DebugPrint(DEBUG_ERR"Get main-page video memory error\n"); return; } /* 把三个图标画上去 */ if(atDisLayout[0].iTopLeftX == 0){ CalcMainPageLayout(ptPageLayout); } iError = GeneratePage(ptPageLayout, ptMainPageVM); FlushVideoMemToDev(ptMainPageVM); /* 释放用完的内存,以供别的程序使用 */ ReleaseVideoMem(ptMainPageVM); }
/********************************************************************** * 函数名称: AutoPlayThreadFunction * 功能描述: "连播页面"的子线程函数:用于显示 (主线程用于读取输入数据) * 输入参数: pVoid - 未用 * 输出参数: 无 * 返 回 值: NULL - 正常退出 * 修改日期 版本号 修改人 修改内容 * ----------------------------------------------- * 2013/02/08 V1.0 韦东山 创建 ***********************************************************************/ static void *AutoPlayThreadFunction(void *pVoid) { int bFirst = 1; int bExit; PT_VideoMem ptVideoMem; ResetAutoPlayFile(); while (1) { /* 1. 先判断是否要退出 */ pthread_mutex_lock(&g_tAutoPlayThreadMutex); bExit = g_bAutoPlayThreadShouldExit; pthread_mutex_unlock(&g_tAutoPlayThreadMutex); if (bExit) { return NULL; } /* 2. 准备要显示的图片 */ ptVideoMem = PrepareNextPicture(0); /* 3. 时间到后就显示出来 */ if (!bFirst) { sleep(g_tPageCfg.iIntervalSecond); /* 先用休眠来代替 */ } bFirst = 0; if (ptVideoMem == NULL) { ptVideoMem = PrepareNextPicture(1); } /* 刷到设备上去 */ FlushVideoMemToDev(ptVideoMem); /* 解放显存 */ PutVideoMem(ptVideoMem); } return NULL; }