⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gfx_osi_surface.c

📁 IBM source for pallas/vulcan/vesta
💻 C
📖 第 1 页 / 共 4 页
字号:
    if(!gfx_osi_pSurface_alloc(pSurface))    {	    PDEBUG("pSurface is not initialized !");	    return -1;    }    if(!pSurface->pPalette )    {	    PDEBUG("pSurface doesn't have palette !");	    return 0;   // we don't have palette    }    uMaxPal = 1<<pSurface->plane[0].uPixelSize;    if(uStart >= uMaxPal || uNumEntry == 0)    {       PDEBUG("Palette index s(%d) n(%d) out of range!\n", uStart, uNumEntry);       return 0;    }    if(uStart + uNumEntry > uMaxPal)        uNumEntry = uMaxPal - uStart;    PDEBUGE("Get palette %d to %d\n",  uStart, uStart + uNumEntry-1);    _OS_MEMCPY(pPal, pSurface->pPalette + uStart, uNumEntry*sizeof(GFX_PALETTE_T));    return 0;}static int __gfx_osi_adjust_surface_wh(UINT uPlaneConfig, UINT *puWidth, UINT *puHeight, UINT *puBytePerLine){    switch(uPlaneConfig)    {    case GFX_SURFACE_CLUT8BPP_ARGB:    case GFX_SURFACE_CLUT8BPP_AYCBCR:     case GFX_SURFACE_AYCBCR_422_8888:     case GFX_SURFACE_YCBCR_422_888:    case GFX_SURFACE_AYCBCR_420_8888:     case GFX_SURFACE_YCBCR_420_888:        *puWidth = (*puWidth + 3)&0xfffffffc;       // 4 pixel justify        *puHeight = (*puHeight + 1) & 0xfffffffe;       // must be even lines        *puBytePerLine = *puWidth;        break;    case GFX_SURFACE_CLUT8BPPP_ARGB:    case GFX_SURFACE_CLUT8BPPP_AYCBCR:     case GFX_SURFACE_CLUT4BPP_ARGB:       case GFX_SURFACE_CLUT4BPP_AYCBCR:     case GFX_SURFACE_CURSOR4BPP_RGB:       case GFX_SURFACE_CURSOR4BPP_YCBCR:         *puWidth = (*puWidth + 7)&0xfffffff8;       // 8 pixel justify        *puHeight = (*puHeight + 1) & 0xfffffffe;       // must be even lines        *puBytePerLine = *puWidth/2;        break;    case GFX_SURFACE_CLUT4BPPP_ARGB:      case GFX_SURFACE_CLUT4BPPP_AYCBCR:    case GFX_SURFACE_CLUT2BPP_ARGB:       case GFX_SURFACE_CLUT2BPP_AYCBCR:     case GFX_SURFACE_CURSOR4BPPP_RGB:       case GFX_SURFACE_CURSOR4BPPP_YCBCR:     case GFX_SURFACE_CURSOR2BPP_RGB:       case GFX_SURFACE_CURSOR2BPP_YCBCR:         *puWidth = (*puWidth + 15)&0xfffffff0;       // 16 pixel justify        *puHeight = (*puHeight + 1) & 0xfffffffe;       // must be even lines        *puBytePerLine = *puWidth/4;       break;    case GFX_SURFACE_CLUT2BPPP_ARGB:       case GFX_SURFACE_CLUT2BPPP_AYCBCR:     case GFX_SURFACE_CURSOR2BPPP_RGB:       case GFX_SURFACE_CURSOR2BPPP_YCBCR:         *puWidth = (*puWidth + 31)&0xffffffe0;       // 32 pixel justify        *puHeight = (*puHeight + 1) & 0xfffffffe;       // must be even lines        *puBytePerLine = *puWidth/8;        break;    case GFX_SURFACE_ARGB_8888:               *puBytePerLine = *puWidth*4;        break;    case GFX_SURFACE_RAW8BPP :        *puBytePerLine = *puWidth;        break;    case GFX_SURFACE_RAW1BPP :        *puBytePerLine = (*puWidth + 7)/8;        break;    default:        PDEBUG("Invalid plane config 0x%8.8x !\n", uPlaneConfig);        return -1;    }	if(IS_SURFACE_CURSOR_COMP(uPlaneConfig) && *puBytePerLine > 32)	// cursor must be less than 32bpl in stb03 and stbx2		return -1;    return 0;}INT gfx_osi_create_surface(GFX_SURFACE_T *pSurface, GFX_VISUAL_DEVICE_ID_T graphDev, UINT uPlaneConfig, UINT uWidth, UINT uHeight){    UINT uNumBuf, i;    UINT uHeaderSize;    UINT uAllocSize, uNumPal, uBytePerLine;    UINT cursor=0, twinheader=0;    uNumBuf = GET_GFX_SURFACE_SUBPLANES(uPlaneConfig);    // first, a rough check of the parameters    if(!pSurface )    {	    PDEBUG("pSurface is NULL!");	    return -1;    }    if(gfx_osi_pSurface_alloc(pSurface))    {	    PDEBUG("pSurface is already initialized !");	    return -1;    }	        if(   uNumBuf < 1 // wrong plane config        || uWidth < 4 || uHeight < 2        || uWidth > GFX_SURFACE_MAX_WIDTH || uHeight > GFX_SURFACE_MAX_HEIGHT)     {        PDEBUG("Invalid parameter: plane config = %08x, width=%d, height=%d !\n", uPlaneConfig, uWidth, uHeight);        return -1;    // we cann't do it    }    if(__gfx_osi_adjust_surface_wh(uPlaneConfig, &uWidth, &uHeight, &uBytePerLine) < 0)    {        PDEBUG("Invalid parameter: plane config = %08x, width=%d, height=%d !\n", uPlaneConfig, uWidth, uHeight);        return -1;    // we cann't do it    }    // then, we need to check if the planeconfig is compatible with the device    switch(graphDev)    {    case GFX_VDEV_OSDCUR:        if(!(uPlaneConfig & GFX_COMP_OSDCUR))        {            PDEBUG("Desired planeConfig is incompatible with cursor device!\n");            return -1;        }        break;    case GFX_VDEV_OSDGFX:        if(!(uPlaneConfig & GFX_COMP_OSDGFX))        {            PDEBUG("Desired planeConfig is incompatible with graphics device!\n");            return -1;        }        break;    case GFX_VDEV_OSDIMG:        if(!(uPlaneConfig & GFX_COMP_OSDIMG))        {            PDEBUG("Desired planeConfig is incompatible with still device!\n");            return -1;        }        break;    default:        // GFX_VDEV_NULL        break;    }    gfx_osi_init_surface_t(pSurface);  // just make sure it's is empty    //ok, we now try to alloc the surface    switch(uPlaneConfig)    {    case GFX_SURFACE_CLUT8BPP_ARGB:    case GFX_SURFACE_CLUT8BPP_AYCBCR:         pSurface->plane[0].uAllocWidth = uWidth;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 8;      // 8 bits        pSurface->plane[0].uPixelJustify = 1;   // on 1 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 8;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 8;        pSurface->plane[0].b.uNumbits = 8;        pSurface->plane[0].a.uOffset = 24;  // for palette entry        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_GI_CONTROL_BLOCK_T) + 256*sizeof(STB_OSD_GI_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        break;    case GFX_SURFACE_CLUT8BPPP_ARGB:    case GFX_SURFACE_CLUT8BPPP_AYCBCR:         pSurface->plane[0].uAllocWidth = uWidth/2;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 8;      // 8 bits        pSurface->plane[0].uPixelJustify = 1;   // on 1 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 8;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 8;        pSurface->plane[0].b.uNumbits = 8;        pSurface->plane[0].a.uOffset = 24;  // for palette entry        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_GI_CONTROL_BLOCK_T) + 256*sizeof(STB_OSD_GI_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        break;    case GFX_SURFACE_CLUT4BPP_ARGB:       case GFX_SURFACE_CLUT4BPP_AYCBCR:         pSurface->plane[0].uAllocWidth = uWidth;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 4;      // 4 bits        pSurface->plane[0].uPixelJustify = 1;   // on 1 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 8;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 8;        pSurface->plane[0].b.uNumbits = 8;        pSurface->plane[0].a.uOffset = 24;  // for palette entry        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_GI_CONTROL_BLOCK_T) + 16*sizeof(STB_OSD_GI_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        break;    case GFX_SURFACE_CLUT4BPPP_ARGB:      case GFX_SURFACE_CLUT4BPPP_AYCBCR:        pSurface->plane[0].uAllocWidth = uWidth/2;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 4;      // 4 bits        pSurface->plane[0].uPixelJustify = 1;   // on 1 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 8;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 8;        pSurface->plane[0].b.uNumbits = 8;        pSurface->plane[0].a.uOffset = 24;  // for palette entry        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_GI_CONTROL_BLOCK_T) + 16*sizeof(STB_OSD_GI_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        break;    case GFX_SURFACE_CLUT2BPP_ARGB:       case GFX_SURFACE_CLUT2BPP_AYCBCR:         pSurface->plane[0].uAllocWidth = uWidth;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 2;      // 4 bits        pSurface->plane[0].uPixelJustify = 1;   // on 1 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 8;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 8;        pSurface->plane[0].b.uNumbits = 8;        pSurface->plane[0].a.uOffset = 24;  // for palette entry        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_GI_CONTROL_BLOCK_T) + 4*sizeof(STB_OSD_GI_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        break;    case GFX_SURFACE_CLUT2BPPP_ARGB:       case GFX_SURFACE_CLUT2BPPP_AYCBCR:         pSurface->plane[0].uAllocWidth = uWidth/2;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 2;      // 4 bits        pSurface->plane[0].uPixelJustify = 1;   // on 1 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 8;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 8;        pSurface->plane[0].b.uNumbits = 8;        pSurface->plane[0].a.uOffset = 24;  // for palette entry        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_GI_CONTROL_BLOCK_T) + 4*sizeof(STB_OSD_GI_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        break;    case GFX_SURFACE_CURSOR4BPP_RGB:       case GFX_SURFACE_CURSOR4BPP_YCBCR:         pSurface->plane[0].uAllocWidth = uWidth;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 4;      // 4 bits        pSurface->plane[0].uPixelJustify = 1;   // on 1 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 8;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 8;        pSurface->plane[0].b.uNumbits = 8;        pSurface->plane[0].a.uOffset = 24;  // for palette entry        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_CURSOR_CONTROL_BLOCK_T) + 16*sizeof(STB_OSD_C_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        cursor = 1;        break;    case GFX_SURFACE_CURSOR4BPPP_RGB:       case GFX_SURFACE_CURSOR4BPPP_YCBCR:         pSurface->plane[0].uAllocWidth = uWidth/2;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 4;      // 4 bits        pSurface->plane[0].uPixelJustify = 1;   // on 1 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 8;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 8;        pSurface->plane[0].b.uNumbits = 8;        pSurface->plane[0].a.uOffset = 24;  // for palette entry        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_CURSOR_CONTROL_BLOCK_T) + 16*sizeof(STB_OSD_C_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        cursor = 1;        break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -