📄 apiosdrender.c
字号:
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 + -