示例#1
0
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, &region_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, &region_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;
}
示例#2
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, &region_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, &region_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;
}
示例#3
0
/* 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, &region_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;
}