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

📄 apiosdrender.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 5 页
字号:
    if (eOSD_COLOR_FMT == OSD_ARGB8888)
    {
        bInfo.fmt = GE_FMT_ARGB8888;
		//bInfo.colorRange.color_s.u32AllColorValue = fromColor.u32AllColorValue;
        //bInfo.colorRange.color_s.a = fromColor.a;
        //bInfo.colorRange.color_s.r = fromColor.r;
        //bInfo.colorRange.color_s.g = fromColor.g;
        //bInfo.colorRange.color_s.b = fromColor.b;
        bInfo.flag = u8Gradient;
		//bInfo.colorRange.color_e.u32AllColorValue = toColor.u32AllColorValue;
        //bInfo.colorRange.color_e.a = toColor.a;
        //bInfo.colorRange.color_e.r = toColor.r;
        //bInfo.colorRange.color_e.g = toColor.g;
        //bInfo.colorRange.color_e.b = toColor.b;
    }
    else if (eOSD_COLOR_FMT == OSD_I8)
    {
        if (pGC ->fmt != FMT_I8)
        {
            //PRINTE ("MApi_Osd_DrawFillRect: Input Color FMT is I8 but Output Color FMT isn't I8 ");
            return FALSE;
        }

        bInfo.fmt = GE_FMT_I8;
        /*bInfo.colorRange.color_s.a = 0;
        bInfo.rang.colorRange.color_s.r = 0;
        bInfo.rang.colorRange.color_s.g = 0;
        bInfo.rang.colorRange.color_s.b = fromColor.ColorIndex;
        bInfo.flag = GERECT_FLAG_COLOR_CONSTANT;
        bInfo.rang.colorRange.color_e.a = 0;
        bInfo.rang.colorRange.color_e.r = 0;
        bInfo.rang.colorRange.color_e.g = 0;
        bInfo.rang.colorRange.color_e.b = toColor.ColorIndex;*/
     }
    else
    {
        //PRINTE ("MApi_Osd_DrawFillRect: Unknow Input Color FMT");
        return FALSE;
    }

    //MDrv_GE_PE_RectFill(&bInfo);
#endif

    MApi_Osd_EndDraw (pGC);

    return TRUE;
}
#endif


//-------------------------------------------------------------------------------------------------
/// MApi_Osd_DrawLine : line draw on buffer
/// @param  pGC             \b IN: the GC
/// @param  r               \b IN: Rectangle for draw
/// @param  eOSD_COLOR_FMT  \b IN: input Color Format (I8 or ARGB8888)
/// @param  fromColor       \b IN: Start of Gradient color (I8 or ARGB8888)
/// @param  toColor         \b IN: End of Gradient color (I8 or ARGB8888)
/// @param  bGradient       \b IN: TRUE/FALSE Enable Gradient/Disable Gradient
/// @param  pAlpha_Blending \b IN: Alpha Blending input parameter
/// @return TRUE/FALSE : Sucess/Fail
//-------------------------------------------------------------------------------------------------
#if 1
BOOLEAN MApi_Osd_DrawFillRect( OsdGC *pGC,
                            Rect *r,
                            OSD_COLOR_FMT eOSD_COLOR_FMT,
                            OSD_COLOR fromColor,
                            OSD_COLOR toColor,
                            OSD_GRADIENT eGradient,
                            OSD_ALPHA_BLENDING *pAlpha_Blending)

{
#if 1
    OSDClrBtn clrBtn1;

    _OSD_Render_BeginDraw (pGC);

    _MApi_Osd_SetAlphaBlending (pAlpha_Blending);

    switch (eGradient)
    {
        case OSD_GRADIENT_DISABLE:
            clrBtn1.u8Gradient = CONSTANT_COLOR;
            break;
		case OSD_COLOR_GRADIENT_X:
		    clrBtn1.u8Gradient = GRADIENT_X_COLOR;
		    break;
		case OSD_COLOR_GRADIENT_Y:
		    clrBtn1.u8Gradient = GRADIENT_Y_COLOR;
		    break;
		case OSD_COLOR_GRADIENT_X_CENTER:
		    clrBtn1.u8Gradient = GRADIENT_X_CENTER_COLOR;
		    break;
		case OSD_COLOR_GRADIENT_Y_CENTER:
		    clrBtn1.u8Gradient = GRADIENT_Y_CENTER_COLOR;
		    break;
    }

    clrBtn1.x = (U16)r->left;
    clrBtn1.y = (U16)r->top;
    clrBtn1.width = (U16)r->width;
    clrBtn1.height = (U16)r->height;
    clrBtn1.radius = 0;
    clrBtn1.t_clr = COLOR_WHITE;
    clrBtn1.b_clr = fromColor;
    clrBtn1.f_clr = toColor;
    clrBtn1.fHighLight = FALSE;
    clrBtn1.bFrameWidth = FALSE;
    msAPI_OSD_DrawBlock(&clrBtn1);

    MApi_Osd_EndDraw (pGC);

    return true;
#else
	Rect R1, R2;
	switch (eGradient)
	{
		case OSD_GRADIENT_DISABLE:
		case OSD_COLOR_GRADIENT_X:
		case OSD_COLOR_GRADIENT_Y:
			_msApi_Osd_DrawFillRect(pGC,
										   r,
										   eOSD_COLOR_FMT,
										   fromColor,
										   toColor,
										   eGradient,
										   pAlpha_Blending);
			break;

		case OSD_COLOR_GRADIENT_X_CENTER:
			RECT(R1, r->left, r->top, r->width >> 1, r->height);
			RECT(R2, r->left + R1.width, r->top, r->width - R1.width, r->height);
			_msApi_Osd_DrawFillRect(pGC,
								   &R1,
								   eOSD_COLOR_FMT,
								   toColor,
								   fromColor,
								   GERECT_FLAG_COLOR_GRADIENT_X,
								   pAlpha_Blending);
			_msApi_Osd_DrawFillRect(pGC,
								   &R2,
								   eOSD_COLOR_FMT,
								   fromColor,
								   toColor,
								   GERECT_FLAG_COLOR_GRADIENT_X,
								   pAlpha_Blending);
            break;

		case OSD_COLOR_GRADIENT_Y_CENTER:
			RECT(R1, r->left, r->top, r->width, r->height>>1);
			RECT(R2, r->left, r->top + R1.height, r->width, r->height - R1.height);
			_msApi_Osd_DrawFillRect(pGC,
								   &R1,
								   eOSD_COLOR_FMT,
								   toColor,
								   fromColor,
								   GERECT_FLAG_COLOR_GRADIENT_Y,
								   pAlpha_Blending);
			_msApi_Osd_DrawFillRect(pGC,
								   &R2,
								   eOSD_COLOR_FMT,
								   fromColor,
								   toColor,
								   GERECT_FLAG_COLOR_GRADIENT_Y,
								   pAlpha_Blending);
            break;


	}

	return TRUE;
#endif
}
#endif

//-------------------------------------------------------------------------------------------------
/// MApi_Osd_Draw3DRectangle : Rectangle border drawing on buffer
/// @param   pGC                    \b IN: the GC
/// @param   r                      \b IN: Rectangle for draw
/// @param   eOSD_COLOR_FMT         \b IN: input Color Format (I8 or ARGB8888)
/// @param   COLOR_3DBORDER_DARK    \b IN: 3D Broder Dark color
/// @param   COLOR_3DBORDER_LIGHT   \b IN:3D Broder Ligte color
/// @param   borderWidth            \b IN: borderWidth
/// @param   flag                   \b IN:reference to  Rect3DType
/// @param   pAlpha_Blending        \b IN: Alpha Blending input parameter
/// @return TRUE/FALSE : Sucess/Fail
/// @Note: eOSD_COLOR_FMT only support ARGB8888 and GC fmt can't be I8.
//-------------------------------------------------------------------------------------------------
/*BOOLEAN MApi_Osd_Draw3DRectangle(  OsdGC *pGC,
                                Rect  *r,
                                OSD_COLOR_FMT eOSD_COLOR_FMT,
                                OSD_COLOR COLOR_3DBORDER_DARK,
                                OSD_COLOR COLOR_3DBORDER_LIGHT,
                                U8 borderWidth,
                                U8 flag,
                                OSD_ALPHA_BLENDING *pAlpha_Blending)
{
#if 0
    Pos a, b;
    U8 i;
    Rect rr;
    U32 color1  ;
    U32 color2  ;
    U32 colorIM ;
    U32 colorIM1;
    U32 colorIM2;
    U32 colorIM3;

    if ((eOSD_COLOR_FMT == OSD_I8) || (pGC->fmt == FMT_I8))
    {

        PRINTE ("MApi_Osd_Draw3DRectangle : can't support I8 format\n");
        return FALSE;
    }
    if(flag & eRect3D_Sink)
    {
        color1   = COLOR_3DBORDER_DARK.u32AllColorValue;
        color2   = COLOR_3DBORDER_LIGHT.u32AllColorValue;
        colorIM  = ColorGradient(COLOR_3DBORDER_LIGHT.u32AllColorValue, COLOR_3DBORDER_DARK.u32AllColorValue, 3, 4);
        colorIM1 = ColorGradient(COLOR_3DBORDER_LIGHT.u32AllColorValue, COLOR_3DBORDER_DARK.u32AllColorValue, 2, 3);
        colorIM2 = ColorGradient(COLOR_3DBORDER_LIGHT.u32AllColorValue, COLOR_3DBORDER_DARK.u32AllColorValue, 1, 3);
        colorIM3 = ColorGradient(COLOR_3DBORDER_LIGHT.u32AllColorValue, COLOR_3DBORDER_DARK.u32AllColorValue, 1, 4);
    }
    else
    {
        color1   = COLOR_3DBORDER_LIGHT.u32AllColorValue;
        color2   = COLOR_3DBORDER_DARK.u32AllColorValue;
        colorIM  = ColorGradient(COLOR_3DBORDER_LIGHT.u32AllColorValue, COLOR_3DBORDER_DARK.u32AllColorValue, 1, 4);
        colorIM1 = ColorGradient(COLOR_3DBORDER_LIGHT.u32AllColorValue, COLOR_3DBORDER_DARK.u32AllColorValue, 1, 3);
        colorIM2 = ColorGradient(COLOR_3DBORDER_LIGHT.u32AllColorValue, COLOR_3DBORDER_DARK.u32AllColorValue, 2, 3);
        colorIM3 = ColorGradient(COLOR_3DBORDER_LIGHT.u32AllColorValue, COLOR_3DBORDER_DARK.u32AllColorValue, 3, 4);
    }

//    MDrv_GE_PE_SetNearestMode(true);
    MDrv_GE_PE_Set_Line_Pattern(false, 0x33, 4);
    rr = *r;
    for(i=0; i<borderWidth; i++)
    {
        POS(a, rr.left, rr.top);
        POS(b, (rr.left+rr.width-1), rr.top);
        if(!(flag & eRect3D_NoUpBorder))
            MApi_Osd_DrawLine(pGC, &a, &b, eOSD_COLOR_FMT, (OSD_COLOR ) color1, (OSD_COLOR )color1, FALSE, 1 ,eSolidLine, pAlpha_Blending);
        POS(a, (rr.left+rr.width-2), (rr.top+rr.height-1));
        POS(b, (rr.left+rr.width-2), rr.top);
        MApi_Osd_DrawLine(pGC, &a, &b, eOSD_COLOR_FMT, (OSD_COLOR )colorIM3, (OSD_COLOR )colorIM2, TRUE, 1 ,eSolidLine, pAlpha_Blending);
        POS(b, rr.left, (rr.top+rr.height-1));
        if(!(flag & eRect3D_NoLowerBorder))
            MApi_Osd_DrawLine(pGC, &a, &b, eOSD_COLOR_FMT, (OSD_COLOR )color2, (OSD_COLOR )color2, FALSE, 1 ,eSolidLine, pAlpha_Blending);
        POS(a, rr.left, rr.top);
        MApi_Osd_DrawLine(pGC, &b, &a, eOSD_COLOR_FMT, (OSD_COLOR )colorIM1, (OSD_COLOR )colorIM, TRUE, 1 ,eSolidLine, pAlpha_Blending);
        RECT_SCALE(rr, 1, 1);
        if(flag & eRect3D_NoUpBorder)
        {
            rr.top --;
            rr.height ++;
        }
        if(flag & eRect3D_NoLowerBorder)
            rr.height ++;
    }
//    MDrv_GE_PE_SetNearestMode(false);

#endif
    return TRUE;

}*/




//typedef GE_BUFFER_INFO* BUFHANDLE;
//-------------------------------------------------------------------------------------------------
/// MApi_Osd_BitBlit : memory copy from source buffer to destination buffer w/ specified rectangle
/// @param  pGC                 \b IN: the GC
/// @param  r_src               \b IN: the source rectangle
/// @param  r_dst               \b IN: the destination rectangle
/// @param  pAlpha_Blending     \b IN: Alpha Blending input parameter
/// @return TRUE/FALSE : Sucess/Fail
//-------------------------------------------------------------------------------------------------
/*BOOLEAN MApi_Osd_BitBlit(OsdGC *pGC, Rect *r_src, Rect *r_dst, OSD_ALPHA_BLENDING *pAlpha_Blending)
{
    GE_DRAW_RECT blk;
    GE_BLOCK *geblk1, *geblk2;
    //    U32  drawflag = GEDRAW_FLAG_DUPLICAPE;
    U32  drawflag = GEDRAW_FLAG_DEFAULT;

    _OSD_Render_BeginDraw (pGC);

    _MApi_Osd_SetAlphaBlending(pAlpha_Blending);

    if(r_src->width != r_dst->width || r_src->height != r_dst->height)
        drawflag = GEDRAW_FLAG_SCALE;

    geblk1 = (GE_BLOCK *) &blk.srcblk;
    geblk2 = (GE_BLOCK *) &blk.dstblk;
    geblk1->x = r_src->left;
    geblk1->y = r_src->top;
    geblk1->width = r_src->width;
    geblk1->height = r_src->height;
    geblk2->x = r_dst->left;
    geblk2->y = r_dst->top;
    geblk2->width = r_dst->width;
    geblk2->height = r_dst->height;

    //    DrvGE_BLT_BeginDraw();
    MDrv_GE_PE_BitBlt(&blk, drawflag);

    MApi_Osd_EndDraw (pGC);

    return TRUE;

}*/


//-------------------------------------------------------------------------------------------------
/// MApi_Osd_BitBlit : memory copy from source buffer to destination buffer w/ specified rectangle
/// @param  pSrcGC              \b IN: the Src GC
/// @param  pDstGC              \b IN: the Dst GC
/// @param  r_src               \b IN: the source rectangle
/// @param  r_dst               \b IN: the destination rectangle
/// @param  bSrcColorKey        \b IN: True:False; Enable/Disable Src Color Key.
/// @param  srcColorKey         \b IN: the source color key (if PixelMap color equal to src color key, the color will be replaced by destination color)
/// @param  pAlpha_Blending     \b IN: Alpha Blending input parameter
/// @return TRUE/FALSE : Sucess/Fail
//-------------------------------------------------------------------------------------------------
BOOLEAN MApi_Osd_BitBlit(OsdGC *pSrcGC,
                      OsdGC *pDstGC,
                      Rect *r_src,
                      Rect *r_dst,
                      BOOLEAN bSrcColorKey,
                      OSD_COLOR srcColorKey,
                      OSD_ALPHA_BLENDING *pAlpha_Blending)
{
    /*GE_DRAW_RECT blk;
    GE_BLOCK *geblk1, *geblk2;
    //    U32  drawflag = GEDRAW_FLAG_DUPLICAPE;
    GE_Buffer_Format GEfmt;


    U32  drawflag = GEDRAW_FLAG_DEFAULT;

    _OSD_Render_BeginDraw (pDstGC);

    SetSrcBuffer(pSrcGC);


    _MApi_Osd_SetAlphaBlending(pAlpha_Blending);

    if(r_src->width != r_dst->width || r_src->height != r_dst->height)
        drawflag = GEDRAW_FLAG_SCALE;

    GEfmt = MapGEColorType(pSrcGC->fmt);

    MDrv_GE_PE_SetSrcColorKey(bSrcColorKey, CK_OP_NOT_EQUQL, GEfmt, (void *)srcColorKey.u32AllColorValue, (void *)srcColorKey.u32AllColorValue);

    geblk1 = (GE_BLOCK *) &blk.srcblk;
    geblk2 = (GE_BLOCK *) &blk.dstblk;
    geblk1->x = r_src->left;
    geblk1->y = r_src->top;
    geblk1->width = r_src->width;
    geblk1->height = r_src->height;
    geblk2->x = r_dst->left;
    geblk2->y = r_dst->top;
    geblk2->width = r_dst->width;
    geblk2->height = r_dst->height;

    //    DrvGE_BLT_BeginDraw();
    MDrv_GE_PE_BitBlt(&blk, drawflag);

⌨️ 快捷键说明

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