void ap_osd_layer2_init() { UINT8 *p_pallette; struct OSDPara tOpenPara; struct OSDRect region1, region2, rc1, rc2; cas_osd_dev = (struct osd_device*)dev_get_by_id(HLD_DEV_TYPE_OSD, 0); tOpenPara.eMode = OSD_256_COLOR; tOpenPara.uGAlphaEnable = 0; tOpenPara.uGAlpha = 0x0F; tOpenPara.uPalletteSel = 0; OSDDrv_Open((HANDLE)cas_osd_dev, &tOpenPara); osal_task_sleep(20); OSDDrv_IoCtl((HANDLE)cas_osd_dev, OSD_IO_SET_TRANS_COLOR, OSD_TRANSPARENT_COLOR); //create region for bottom osd msg region2.uLeft = 0; region2.uTop = 530; region2.uWidth = 720; region2.uHeight = 28; rc2.uLeft = 0; rc2.uTop = 0; rc2.uWidth = region2.uWidth; rc2.uHeight = region2.uHeight; OSDDrv_CreateRegion((HANDLE)cas_osd_dev, OSDMSG_REGION_BTM, ®ion2, NULL); p_pallette = OSD_GetRscPallette(0x4080 | 0); OSDDrv_SetPallette((HANDLE)cas_osd_dev, p_pallette, COLOR_N, OSDDRV_YCBCR); OSDDrv_RegionFill((HANDLE)cas_osd_dev,OSDMSG_REGION_BTM,&rc2,OSD_TRANSPARENT_COLOR); OSDDrv_ShowOnOff((HANDLE)cas_osd_dev,OSDDRV_ON); }
void sys_data_set_palette(UINT8 flag) { static UINT8 *pal = NULL; UINT8 *pal_data; INT32 i; UINT8 val; struct osd_device *osd_dev; if (pal == NULL) pal = (UINT8*)MALLOC(COLOR_N *4); pal_data = (UINT8*)OSD_GetRscPallette(0x4080 /*LIB_PALLETE_8BPP*/ | system_config.osd_set.pallete); switch (system_config.osd_set.osd_trans) { case 1: //"10%", val = 1; break; case 2: //"20%", val = 2; break; case 3: //"40%", val = 3; break; case 4: //"40%", val = 4; break; case 0: // "No" default: val = 0; } MEMCPY(pal, pal_data, COLOR_N *4); if (!flag) { for (i = 0; i < COLOR_N; i++) { pal[4 *i + 3] = pal[4 *i + 3]*(10-val) / 10; } } osd_dev = (struct osd_device*)dev_get_by_id(HLD_DEV_TYPE_OSD, 0); OSDDrv_SetPallette((HANDLE)osd_dev, pal, COLOR_N, OSDDRV_YCBCR); }