UINT32 osdwnd_hidewnd(PGUI_WINDOW pwnd,UINT32 param) {//clear wnd UINT32 i; PGUI_VSCR pvscr; PGUI_REGION prgn; PGUI_OBJWND wndobj; //TODO:windows clear code if(gelib_get_wndmonitor()&&g_wndrects_cnt) { wndobj = (PGUI_OBJWND)param; for(i = 0;i < g_wndrects_idx;i++) { if(MEMCMP(&(wndobj->frame),&(g_wnd_rects[i]),sizeof(GUI_RECT)) == 0) { MEMSET(&(g_wnd_rects[i]),0x0,sizeof(GUI_RECT)); if(g_wndrects_cnt > 0) g_wndrects_cnt--; } } if(gelib_wndrects_showoff() && g_osdwnd_onoff) { pvscr = OSD_GetTaskVscr(osal_task_get_current_id()); prgn = gelib_getdstrgn(pvscr->dst_layer,pvscr->dst_rgn); ge_show_onoff((struct ge_device *)gui_dev,(ge_surface_desc_t *)prgn->hsurf,0); if(gelib_getdual_support()) { prgn = gelib_getdstrgn(GUI_SLVGMA_SURF,0); ge_show_onoff_deo((struct ge_device *)gui_dev,(ge_surface_desc_t *)prgn->hsurf,0); } g_osdwnd_onoff = 0; } } else if((g_wndrects_cnt == 0)&&(g_wnd_monitors == 1)) { if(gelib_wndrects_showoff() && g_osdwnd_onoff) { pvscr = OSD_GetTaskVscr(osal_task_get_current_id()); prgn = gelib_getdstrgn(pvscr->dst_layer,pvscr->dst_rgn); ge_show_onoff((struct ge_device *)gui_dev,(ge_surface_desc_t *)prgn->hsurf,0); g_osdwnd_onoff = 0; } } return 0; }
UINT32 osdwnd_showwnd(PGUI_WINDOW pwnd,UINT32 param) { UINT32 i,bfind; PGUI_REGION prgn; PGUI_VSCR pvscr; PGUI_OBJWND wndobj; i = 0; if(gelib_get_wndmonitor()) { bfind = 0; wndobj = (PGUI_OBJWND)param; if(g_wndrects_cnt>0) { for(i=0;i<g_wndrects_idx;i++) { if(MEMCMP(&(wndobj->frame),&(g_wnd_rects[i]),sizeof(GUI_RECT)) == 0) { bfind = 1; break; } } } if((gelib_wndrects_valid())&&( bfind==0)) { MEMCPY(&(g_wnd_rects[g_wndrects_idx]),&(wndobj->frame),sizeof(GUI_RECT)); g_wndrects_idx++; g_wndrects_cnt++; } if(gelib_wndrects_full()) {//wndrects is not enough gelib_disable_wnd_monitors(1); } else if(gelib_wndrects_valid()==0) { osdwnd_reclaim_rects(); } if(gelib_wndrects_showon() && (g_osdwnd_onoff == 0)) { pvscr = OSD_GetTaskVscr(osal_task_get_current_id()); prgn = gelib_getdstrgn(pvscr->dst_layer,pvscr->dst_rgn); ge_show_onoff((struct ge_device *)gui_dev,(ge_surface_desc_t *)prgn->hsurf,1); if(gelib_getdual_support()) { prgn = gelib_getdstrgn(GUI_SLVGMA_SURF,0); ge_show_onoff_deo((struct ge_device *)gui_dev,(ge_surface_desc_t *)prgn->hsurf,1); } g_osdwnd_onoff = 1; } } return i; }
UINT32 gelib_disable_wnd_monitors(UINT32 onoff) { PGUI_VSCR pvscr; PGUI_REGION prgn; g_wnd_monitors = 0; g_wndrects_idx = 0; g_wndrects_cnt = 0; g_osdwnd_onoff = 1; MEMSET(g_wnd_rects,0x0,sizeof(g_wnd_rects)); pvscr = OSD_GetTaskVscr(osal_task_get_current_id()); prgn = gelib_getdstrgn(pvscr->dst_layer,pvscr->dst_rgn); ge_show_onoff((struct ge_device *)gui_dev,(ge_surface_desc_t *)prgn->hsurf,onoff); if(gelib_getdual_support()) { prgn = gelib_getdstrgn(GUI_SLVGMA_SURF,0); ge_show_onoff_deo((struct ge_device *)gui_dev,(ge_surface_desc_t *)prgn->hsurf,1); } return 0; }
static PSD ALI_OSD_openGE(PSD psd) { ge_region_t region_para; ge_rect_t dst_rect; INT32 pitch = 0; ge_anti_flick_t af; psd->xres = psd->xvirtres = ALI_SCREEN_WIDTH; psd->yres = psd->yvirtres = ALI_SCREEN_HEIGHT; psd->bpp = 8; psd->ncolors = 1<<8; psd->linelen = (psd->xres * psd->bpp) >> 3; psd->size = psd->yres * psd->linelen; //psd->gr_mode = 15; psd->planes = 1; psd->pixtype = 0; psd->flags = PSF_SCREEN; //ge open ge_dev = (struct ge_device*)dev_get_by_id(HLD_DEV_TYPE_GE, 0); if (SUCCESS != ge_open(ge_dev)) { printf("%s() ge_open failed\n", __FUNCTION__); return (PSD)(- 1); } gfx_dst = NULL; memset((UINT8 *)&gfx_src, 0, sizeof(ge_surface_desc_t)); pitch = ALI_SCREEN_WIDTH; region_para.pixel_fmt = GE_PF_CLUT8; gfx_src.width = ALI_SCREEN_WIDTH; gfx_src.height = ALI_SCREEN_HEIGHT; gfx_src.pitch = pitch; gfx_src.endian = GE_PIXEL_LITTLE_ENDIAN; gfx_src.alpha_range = GE_LARGE_ALPHA; gfx_dst = ge_create_surface(ge_dev, &gfx_src, 0, GMA_HW_SURFACE_1); if(NULL==gfx_dst) { printf("%s() ge_create_surface fail!\n", __FUNCTION__); return (PSD)(- 1); } dst_rect.left = 0; dst_rect.top = 0; dst_rect.width = ALI_SCREEN_WIDTH; dst_rect.height = ALI_SCREEN_HEIGHT; region_para.glob_alpha_en = 0; region_para.glob_alpha = 0x7f; region_para.pallet_seg = 0; region_para.pitch = pitch; region_para.pixel_fmt = GE_PF_CLUT8; region_para.dst_rect_29e.top = 0; region_para.dst_rect_29e.left = 0; region_para.dst_rect_29e.width = 720; region_para.dst_rect_29e.height = 480; if(RET_SUCCESS!=ge_create_region(ge_dev, gfx_dst, 0, &dst_rect, ®ion_para)) { printf("%s() ge_create_region fail!\n", __FUNCTION__); return (PSD)(- 1); } #if 0 memset((UINT8 *)&gfx_src, 0, sizeof(ge_surface_desc_t)); pitch = ALI_SCREEN_WIDTH; region_para.pixel_fmt = GE_PF_CLUT8; gfx_src.width = ALI_SCREEN_WIDTH; gfx_src.height = ALI_SCREEN_HEIGHT; gfx_src.pitch = pitch; gfx_src.endian = GE_PIXEL_LITTLE_ENDIAN; gfx_src.alpha_range = GE_LARGE_ALPHA; gfx_bmp = ge_create_surface(ge_dev, &gfx_src, 0, GMA_MEM_SURFACE); pitch = ALI_SCREEN_WIDTH; region_para.pixel_fmt = GE_PF_CLUT8; if(NULL==gfx_bmp) { printf("%s() ge_create_surface fail!\n", __FUNCTION__); return - 1; } dst_rect.left = 0; dst_rect.top = 0; dst_rect.width = ALI_SCREEN_WIDTH; dst_rect.height = ALI_SCREEN_HEIGHT; region_para.glob_alpha_en = 0; region_para.glob_alpha = 0x7f; region_para.pallet_seg = 0; region_para.pitch = pitch; region_para.pixel_fmt = GE_PF_CLUT8; if(RET_SUCCESS!=ge_create_region(ge_dev, gfx_bmp, 0, &dst_rect, ®ion_para)) { printf("%s() ge_create_region fail!\n", __FUNCTION__); return - 1; } #endif memcpy((UINT8 *)&gfx_src, gfx_dst, sizeof(ge_surface_desc_t)); gfx_src.surf_id =2; af.layer = GMA_HW_SURFACE_1; af.valid = 1; ge_io_ctrl(ge_dev,GE_IO_ANTI_FLICK_29E,(UINT32)&af); ge_fill_rect(ge_dev,gfx_dst,&dst_rect,0); ge_show_onoff(ge_dev, gfx_dst, 1); return &scrdev; }
/* called from keyboard/mouse/screen */ static PSD ALI_OSD_open1555(PSD psd) { struct OSDRect tOpenRect, osdrect; enum OSDSys eOSDSys; struct OSDPara tOpenPara; enum TVSystem tvsys; psd->xres = psd->xvirtres = ALI_SCREEN_WIDTH; psd->yres = psd->yvirtres = ALI_SCREEN_HEIGHT; psd->bpp = 16; psd->ncolors = 1<<16; psd->linelen = (psd->xres * psd->bpp) >> 3; psd->size = psd->yres * psd->linelen; psd->gr_mode = 15; psd->planes = 1; psd->pixtype = 0; psd->flags = PSF_SCREEN; ge_region_t region_para; ge_rect_t dst_rect; INT32 pitch = 0; ge_anti_flick_t af; //ge open ge_dev = (struct ge_device*)dev_get_by_id(HLD_DEV_TYPE_GE, 0); if (SUCCESS != ge_open(ge_dev)) { printf("%s() ge_open failed\n", __FUNCTION__); return (PSD)(- 1); } gfx_dst = NULL; // gfx_buf = NULL; memset((UINT8 *)&gfx_src, 0, sizeof(ge_surface_desc_t)); //if (sys_ic_get_rev_id() >= IC_REV_2) { pitch = ALI_SCREEN_WIDTH<<1; region_para.pixel_fmt = GE_PF_ARGB1555; } //else { // pitch = 4*ALI_SCREEN_WIDTH; // region_para.pixel_fmt = GE_PF_AYCBCR8888; } gfx_src.width = ALI_SCREEN_WIDTH; gfx_src.height = ALI_SCREEN_HEIGHT; gfx_src.pitch = pitch; gfx_src.endian = GE_PIXEL_LITTLE_ENDIAN; gfx_src.alpha_range = GE_LARGE_ALPHA; /*A surface is a real display layer in HW*/ gfx_dst = ge_create_surface(ge_dev, &gfx_src, 0, GMA_HW_SURFACE_1); if(NULL==gfx_dst) { printf("%s() ge_create_surface fail!\n", __FUNCTION__); return (PSD)(- 1); } dst_rect.left = 0; dst_rect.top = 0; dst_rect.width = ALI_SCREEN_WIDTH; dst_rect.height = ALI_SCREEN_HEIGHT; region_para.glob_alpha_en = 0; region_para.glob_alpha = 0x7f; region_para.pallet_seg = 0; region_para.pitch = pitch; if(RET_SUCCESS!=ge_create_region(ge_dev, gfx_dst, 0, &dst_rect, ®ion_para)) { printf("%s() ge_create_region fail!\n", __FUNCTION__); return (PSD)(- 1); } // if (sys_ic_get_rev_id() >= IC_REV_2) { //enable the anti-flick af.layer = GMA_HW_SURFACE_1; af.valid = 1; ge_io_ctrl(ge_dev,GE_IO_ANTI_FLICK_29E,(UINT32)&af); ge_fill_rect(ge_dev,gfx_dst,&dst_rect,0); } // else { /*Fill the rectangle of this region with defined color. the color data sequence is A-Cr-Y-Cb from high to low when 32bits*/ //s ge_fill_rect(ge_dev,gfx_dst,&dst_rect,0x801080); } //libc_memcpy((UINT8 *)&gfx_src, gfx_dst, sizeof(ge_surface_desc_t)); //gfx_src.surf_id = 2;//GMA_MEM_SURFACE ge_show_onoff(ge_dev, gfx_dst, 1); return &scrdev; }