RET_CODE lib_subt_atsc_get_region_pos(struct osd_device *subt_atsc_osd_dev) { RET_CODE ret = SUCCESS; struct OSDRect rect; ret = OSDDrv_GetRegionPos((HANDLE)subt_atsc_osd_dev,0,&rect); if(SUCCESS != ret) { SDBBP(); } #ifdef tnntc_debug libc_printf("Character rect region got: uLeft:%d, uTop:%d, uWidth:%d, uHeight:%d\n",rect.uLeft,rect.uTop,\ rect.uWidth,rect.uHeight); #endif return ret; }
RET_CODE OSDDrv_RegionFillInverse(HANDLE hDev,UINT8 uRegionId,struct OSDRect *rect, UINT32 uColorData) { struct osd_device *dev = (struct osd_device *)hDev; #ifdef GE_SIMULATE_OSD RET_CODE ret; struct OSDRect rr; ret = OSDDrv_GetRegionPos(hDev, uRegionId, &rr); if(ret != RET_SUCCESS) return ret; GE_SIMU_MUTEX_LOCK(); ge_cmd_list_new(m_osddrv_ge_dev, m_cmd_list, GE_COMPILE_AND_EXECUTE); ret = ge_gma_set_region_to_cmd_list(m_osddrv_ge_dev, GMA_SW_LAYER_ID, uRegionId, m_cmd_list); if (ret != RET_SUCCESS) { GE_SIMU_MUTEX_UNLOCK(); return ret; } UINT32 cmd_hdl = ge_cmd_begin(m_osddrv_ge_dev, m_cmd_list, GE_FILL_RECT_DRAW_COLOR); ge_set_draw_color(m_osddrv_ge_dev, cmd_hdl, uColorData); ge_set_xy(m_osddrv_ge_dev, cmd_hdl, GE_DST, (rr.uWidth - rect->uLeft - rect->uWidth), rect->uTop); ge_set_wh(m_osddrv_ge_dev, cmd_hdl, GE_DST, rect->uWidth, rect->uHeight); ge_set_scan_order(m_osddrv_ge_dev, cmd_hdl, GE_PTN, GE_SCAN_TOP_TO_BOTTOM, GE_SCAN_RIGHT_TO_LEFT); ge_cmd_end(m_osddrv_ge_dev, cmd_hdl); ge_cmd_list_end(m_osddrv_ge_dev, m_cmd_list); GE_SIMU_MUTEX_UNLOCK(); return RET_SUCCESS; #endif /* If device not running, exit */ if ((dev->flags & HLD_DEV_STATS_UP) == 0) { return RET_FAILURE; } if (dev->region_fill_inverse) { return dev->region_fill_inverse(dev, uRegionId,rect,uColorData); } return !RET_SUCCESS; }
RET_CODE OSDDrv_RegionReadInverse(HANDLE hDev,UINT8 uRegionId,VSCR *pVscr,struct OSDRect *rect) { struct osd_device *dev = (struct osd_device *)hDev; #ifdef GE_SIMULATE_OSD RET_CODE ret; struct OSDRect rr; ret = OSDDrv_GetRegionPos(hDev, uRegionId, &rr); if(ret != RET_SUCCESS) return ret; GE_SIMU_MUTEX_LOCK(); ge_cmd_list_new(m_osddrv_ge_dev, m_cmd_list, GE_COMPILE_AND_EXECUTE); ret = ge_gma_set_region_to_cmd_list(m_osddrv_ge_dev, GMA_SW_LAYER_ID, uRegionId, m_cmd_list); if (ret != RET_SUCCESS) { GE_SIMU_MUTEX_UNLOCK(); return ret; } UINT32 byte_pitch = osddrv_get_pitch(pVscr->bColorMode, pVscr->vR.uWidth); UINT32 ptn_x, ptn_y; ptn_x = rect->uLeft - pVscr->vR.uLeft; ptn_y = rect->uTop - pVscr->vR.uTop; osal_cache_invalidate(pVscr->lpbScr + byte_pitch * ptn_y, byte_pitch * rect->uHeight); ge_cmd_list_hdl cmd_list = m_cmd_list; ge_base_addr_t base_addr; base_addr.color_format = (enum GE_PIXEL_FORMAT)osddrv_color_mode_to_ge(pVscr->bColorMode); base_addr.base_address = (UINT32)pVscr->lpbScr; base_addr.data_decoder = GE_DECODER_DISABLE; base_addr.pixel_pitch = pVscr->vR.uWidth; base_addr.modify_flags = GE_BA_FLAG_ADDR|GE_BA_FLAG_FORMAT|GE_BA_FLAG_PITCH; UINT32 cmd_hdl = ge_cmd_begin(m_osddrv_ge_dev, cmd_list, GE_PRIM_DISABLE); ge_set_base_addr(m_osddrv_ge_dev, cmd_hdl, GE_DST, &base_addr); ge_set_xy(m_osddrv_ge_dev, cmd_hdl, GE_DST, ptn_x, ptn_y); ge_set_wh(m_osddrv_ge_dev, cmd_hdl, GE_DST, rect->uWidth, rect->uHeight); ge_set_xy(m_osddrv_ge_dev, cmd_hdl, GE_SRC, (rr.uWidth - rect->uLeft - rect->uWidth), rect->uTop); ge_set_scan_order(m_osddrv_ge_dev, cmd_hdl, GE_SRC, GE_SCAN_TOP_TO_BOTTOM, GE_SCAN_RIGHT_TO_LEFT); ge_cmd_end(m_osddrv_ge_dev, cmd_hdl); ge_cmd_list_end(m_osddrv_ge_dev, cmd_list); GE_SIMU_MUTEX_UNLOCK(); return RET_SUCCESS; #endif /* If device not running, exit */ if ((dev->flags & HLD_DEV_STATS_UP) == 0) { return RET_FAILURE; } if (dev->region_read_inverse) { return dev->region_read_inverse(dev, uRegionId,pVscr,rect); } return !RET_SUCCESS; }