RET_CODE OSDDrv_Open(HANDLE hDev,struct OSDPara*pOpenPara) { INT32 result = RET_SUCCESS; struct osd_device *dev = (struct osd_device *)hDev; #ifdef GE_SIMULATE_OSD ge_gma_region_t region_param; ge_open(m_osddrv_ge_dev); if (m_cmd_list == 0) m_cmd_list = ge_cmd_list_create(m_osddrv_ge_dev, 2); if (pOpenPara) { ge_gma_get_region_info(m_osddrv_ge_dev, GMA_SW_LAYER_ID, 0, ®ion_param); region_param.galpha_enable = pOpenPara->uGAlphaEnable; region_param.global_alpha = pOpenPara->uGAlpha; region_param.pallette_sel = pOpenPara->uPalletteSel; region_param.color_format = osddrv_color_mode_to_ge(pOpenPara->eMode); ge_gma_move_region(m_osddrv_ge_dev, GMA_SW_LAYER_ID, 0, ®ion_param); } return RET_SUCCESS; #endif if (dev == NULL) { return RET_SUCCESS; } /* If openned already, exit */ if(dev->flags & HLD_DEV_STATS_UP) { PRINTF("osddrv_open: warning - device %s openned already!\n", dev->name); return RET_SUCCESS; } /* Open this device */ if (dev->open) { result = dev->open(dev,pOpenPara); } /* Setup init work mode */ if (result == RET_SUCCESS) { dev->flags |= (HLD_DEV_STATS_UP | HLD_DEV_STATS_RUNNING); } return result; }
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; }