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

📄 gfx_osi_surface.c

📁 IBM source for pallas/vulcan/vesta
💻 C
📖 第 1 页 / 共 4 页
字号:
    case GFX_SURFACE_CURSOR2BPP_RGB:       case GFX_SURFACE_CURSOR2BPP_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) + 4*sizeof(STB_OSD_C_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        cursor = 1;        break;    case GFX_SURFACE_CURSOR2BPPP_RGB:       case GFX_SURFACE_CURSOR2BPPP_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) + 4*sizeof(STB_OSD_C_PALETTE_T);        pSurface->pPalette = (GFX_PALETTE_T *)1;  // we have palette        cursor = 1;        break;    case GFX_SURFACE_AYCBCR_422_8888:         // A        pSurface->plane[2].uAllocWidth = uWidth;        pSurface->plane[2].uAllocHeight = uHeight;        pSurface->plane[2].uPixelSize = 8;      // 8 bits        pSurface->plane[2].uPixelJustify = 2;    // on 2 pixel boundary        pSurface->plane[2].uBytePerLine = uBytePerLine;        pSurface->plane[2].a.uNumbits = 8;        pSurface->plane[2].r.uNumbits = 0;        pSurface->plane[2].g.uNumbits = 0;        pSurface->plane[2].b.uNumbits = 0;        pSurface->plane[2].a.uOffset = 0;        pSurface->plane[2].r.uOffset = 0;        pSurface->plane[2].g.uOffset = 0;        pSurface->plane[2].b.uOffset = 0;        twinheader = 1;        // fall through    case GFX_SURFACE_YCBCR_422_888:        // Y        pSurface->plane[0].uAllocWidth = uWidth;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 8;      // 8 bits        pSurface->plane[0].uPixelJustify = 2;    // on 2 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 0;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 0;        pSurface->plane[0].b.uNumbits = 0;        pSurface->plane[0].a.uOffset = 0;        pSurface->plane[0].r.uOffset = 0;        pSurface->plane[0].g.uOffset = 0;        pSurface->plane[0].b.uOffset = 0;        // UV        pSurface->plane[1].uAllocWidth = uWidth;        pSurface->plane[1].uAllocHeight = uHeight;        pSurface->plane[1].uPixelSize = 8;      // 8 bit for U/V        pSurface->plane[1].uPixelJustify = 2;    // on 1 pixel boundary        pSurface->plane[1].uBytePerLine = uBytePerLine;        pSurface->plane[1].a.uNumbits = 0;        pSurface->plane[1].r.uNumbits = 0;        pSurface->plane[1].g.uNumbits = 8;        pSurface->plane[1].b.uNumbits = 8;        pSurface->plane[1].a.uOffset = 0;        pSurface->plane[1].r.uOffset = 0;        pSurface->plane[1].g.uOffset = 0;        pSurface->plane[1].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_GI_CONTROL_BLOCK_T);        break;    case GFX_SURFACE_AYCBCR_420_8888:         // A        pSurface->plane[2].uAllocWidth = uWidth;        pSurface->plane[2].uAllocHeight = uHeight;        pSurface->plane[2].uPixelSize = 8;      // 8 bits        pSurface->plane[2].uPixelJustify = 2;    // on 2 pixel boundary        pSurface->plane[2].uBytePerLine = uBytePerLine;        pSurface->plane[2].a.uNumbits = 0;        pSurface->plane[2].r.uNumbits = 0;        pSurface->plane[2].g.uNumbits = 0;        pSurface->plane[2].b.uNumbits = 0;        pSurface->plane[2].a.uOffset = 0;        pSurface->plane[2].r.uOffset = 0;        pSurface->plane[2].g.uOffset = 0;        pSurface->plane[2].b.uOffset = 0;        twinheader = 1;        // fall through    case GFX_SURFACE_YCBCR_420_888:        // Y        pSurface->plane[0].uAllocWidth = uWidth;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 8;      // 8 bits        pSurface->plane[0].uPixelJustify = 2;    // on 2 pixel boundary        pSurface->plane[0].uBytePerLine = uBytePerLine;        pSurface->plane[0].a.uNumbits = 0;        pSurface->plane[0].r.uNumbits = 8;        pSurface->plane[0].g.uNumbits = 0;        pSurface->plane[0].b.uNumbits = 0;        pSurface->plane[0].a.uOffset = 0;        pSurface->plane[0].r.uOffset = 0;        pSurface->plane[0].g.uOffset = 0;        pSurface->plane[0].b.uOffset = 0;        // UV        pSurface->plane[1].uAllocWidth = uWidth;        pSurface->plane[1].uAllocHeight = uHeight/2;        pSurface->plane[1].uPixelSize = 8;      // 8 bit for U/V bits        pSurface->plane[1].uPixelJustify = 2;    // on 1 pixel boundary        pSurface->plane[1].uBytePerLine = uBytePerLine;        pSurface->plane[1].a.uNumbits = 0;        pSurface->plane[1].r.uNumbits = 0;        pSurface->plane[1].g.uNumbits = 8;        pSurface->plane[1].b.uNumbits = 8;        pSurface->plane[1].a.uOffset = 0;        pSurface->plane[1].r.uOffset = 0;        pSurface->plane[1].g.uOffset = 0;        pSurface->plane[1].b.uOffset = 0;        uHeaderSize = sizeof(STB_OSD_GI_CONTROL_BLOCK_T);        break;    case GFX_SURFACE_ARGB_8888:               pSurface->plane[0].uAllocWidth = uWidth;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 32;      // 32 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;        pSurface->plane[0].r.uOffset = 16;        pSurface->plane[0].g.uOffset = 8;        pSurface->plane[0].b.uOffset = 0;        uHeaderSize = 0;        break;    case GFX_SURFACE_RAW8BPP :        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 = 0;        pSurface->pPalette = (GFX_PALETTE_T *)0;  // we don't have palette        break;    case GFX_SURFACE_RAW1BPP :        pSurface->plane[0].uAllocWidth = uWidth;        pSurface->plane[0].uAllocHeight = uHeight;        pSurface->plane[0].uPixelSize = 1;      // 1 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 = 0;        pSurface->pPalette = (GFX_PALETTE_T *)0;  // we don't have palette        break;    default:        PDEBUG("Invalid plane config 0x%8.8x !\n", uPlaneConfig);        return -1;    }    PDEBUG("uPlaneConfig = %08x \n", uPlaneConfig);    PDEBUG("Parameter: numbuf = %d, width=%d, height=%d\n", uNumBuf, uWidth, uHeight);    // __os_alloc_physical_heap_walk();    uHeaderSize = ((uHeaderSize + OSD_LINK_ALIGNMENT-1) / OSD_LINK_ALIGNMENT) * OSD_LINK_ALIGNMENT;    if(twinheader)    {        uAllocSize = ((uHeaderSize + OSD_BUFFER_ALIGNMENT-1) / OSD_BUFFER_ALIGNMENT)*2;    }    else        uAllocSize = (uHeaderSize + OSD_BUFFER_ALIGNMENT-1) / OSD_BUFFER_ALIGNMENT;    PDEBUG("uHeaderSize = %08x, uAllocSize = %08x\n", uHeaderSize, uAllocSize);    for(i=0; i<uNumBuf; i++)    {        UINT uBufferSize = (pSurface->plane[i].uAllocHeight*pSurface->plane[i].uBytePerLine + OSD_BUFFER_ALIGNMENT-1) / OSD_BUFFER_ALIGNMENT;        pSurface->plane[i].uBMLA = uAllocSize * OSD_BUFFER_ALIGNMENT;        pSurface->plane[i].uAllocSize = uBufferSize*OSD_BUFFER_ALIGNMENT;        PDEBUG("Plane %d BMLA = %08x\n", i, pSurface->plane[i].uBMLA);        uAllocSize += uBufferSize;    }    uAllocSize *= OSD_BUFFER_ALIGNMENT;	//PDEBUG("Allocate size = %d bytes\n", uAllocSize);	 if(__STB_GRAPHICS_MEM_SIZE>0)  //we are using a specific graphics memory pool    {       pSurface->hBuffer = pm_alloc_physical_justify(gpGraphicsPMRoot,uAllocSize, OSD_ADDRESS_ALIGNMENT);       PDEBUG("gfx_osi_create_surface: allocated pSurface->hBuffer addr = 0c%8.8x (logical)= 0x%8.8x (physical)=0x%8.8x\n",pSurface->hBuffer,pSurface->hBuffer->pLogical,pSurface->hBuffer->uPhysical);            }               else    {        pSurface->hBuffer = os_alloc_physical_justify(uAllocSize, OSD_ADDRESS_ALIGNMENT);    }    if(NULL == pSurface->hBuffer)    {        PDEBUG("Failed to alloc %d buffer for new surface!\n", uAllocSize);        pSurface->hBuffer = NULL;        return -1;    }    PDEBUG("Buffer allocated = %08x \n", pSurface->hBuffer);    if(pSurface->pPalette) // check if we should adjust palette    {        uNumPal = 1<<pSurface->plane[0].uPixelSize;        pSurface->pPalette = MALLOC(uNumPal * sizeof(GFX_PALETTE_T));        if(NULL == pSurface->pPalette)        {            PDEBUG("Failed to alloc %d buffer for new surface!\n", uNumPal* sizeof(GFX_PALETTE_T));            if(__STB_GRAPHICS_MEM_SIZE>0)  //we are using a specific graphics memory pool            {               pm_free_physical(gpGraphicsPMRoot,pSurface->hBuffer);            }                       else            {              os_free_physical(pSurface->hBuffer);            }              pSurface->hBuffer = NULL;            return -1;        }        PDEBUG("Palette allocated = %08x \n", pSurface->pPalette);    }    pSurface->uPlaneConfig = uPlaneConfig;    pSurface->uAttr = __GFX_SURFACE_ALLOC;    if(__STB_GRAPHICS_MEM_SIZE>0)  //we are using a specific graphics memory pool       pSurface->uBufferBase = os_get_physical_address(pSurface->hBuffer)-__STB_GRAPHICS_MEM_BASE_ADDR+guGraphicsVideoOffset;    else       pSurface->uBufferBase = os_get_physical_address(pSurface->hBuffer) - os_get_physical_base() + guGraphicsVideoOffset;    PDEBUG("Buffer base = %08x \n", pSurface->uBufferBase);    for(i=0; i<uNumBuf; i++)    {        pSurface->plane[i].pBuffer = pSurface->plane[i].uBMLA + (BYTE *)os_get_logical_address(pSurface->hBuffer);        PDEBUGE("Plane %d buffer = %08x %08x + %08x\n", i, pSurface->plane[i].pBuffer, pSurface->plane[i].uBMLA, os_get_logical_address(pSurface->hBuffer));    }    PDEBUG("Init OSD control headers\n");    pSurface->attachedDev = GFX_VDEV_NULL;    // the initial clip region    pSurface->clip.x1 = pSurface->clip.y1 = 0;    pSurface->clip.x2 = uWidth-1;    pSurface->clip.y2 = uHeight-1;    // initialize bounding clip    pSurface->bound = pSurface->clip;    // then we will config for the initial parameters for osd control block    // although this is not nessesary for normal gfx surface, but we just do it.    if(cursor)    {        STB_OSD_CURSOR_CONTROL_BLOCK_T *pCntl;        pSurface->uAttr |= __GFX_SURFACE_OSDCURSOR;        pCntl = (STB_OSD_CURSOR_CONTROL_BLOCK_T *)os_get_logical_address(pSurface->hBuffer);        PDEBUG("pCntl = %08x\n", pCntl);        pSurface->pPal = (BYTE *)pCntl + sizeof(STB_OSD_CURSOR_CONTROL_BLOCK_T);        PDEBUG("pSurface->pPal = %08x\n", pSurface->pPal);        _OS_MEMSET(pCntl, 0, sizeof(STB_OSD_CURSOR_CONTROL_BLOCK_T));        gfx_osi_reset_surface_palette(pSurface);        pCntl->region_hsize = pSurface->plane[0].uAllocWidth * pSurface->plane[0].uPixelSize / 32;        pCntl->color_resolution = (uPlaneConfig&0x01) ? 1 : 0;        pCntl->region_vsize = pSurface->plane[0].uAllocHeight/2;        pCntl->pixel_resolution = (uPlaneConfig&0x04) ? 1 : 0;        pCntl->extlink_addr = pSurface->plane[0].uBMLA >> 2;    }    else    {        if(uHeaderSize > 0)        {            STB_OSD_GI_CONTROL_BLOCK_T *pCntl;            pCntl = (STB_OSD_GI_CONTROL_BLOCK_T *)os_get_logical_address(pSurface->hBuffer);            PDEBUG("pCntl = %08x\n", pCntl);            _OS_MEMSET(pCntl, 0, sizeof(STB_OSD_GI_CONTROL_BLOCK_T));            if(pSurface->pPalette)

⌨️ 快捷键说明

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