📄 grframe.c
字号:
#include <stdio.h>
#include <string.h>
#include "ct_type.h"
#include "dvb_osd.h"
#include "dvb_sys.h"
#include "ct_osd.h"
#ifdef ANTIFLICKER_OPEN
#include "aflicker.h"
#endif
/*******************************************************************************************/
#if 1
#define GR_MSG(p)
#else
#define GR_MSG(p) printf p
#endif
#if 1
#define GR_DBG(p)
#else
#define GR_DBG(p) printf p
#endif
#ifdef CT216T_ELGIST_MM
extern u32 gen_point;
#endif
/*******************************************************************************************/
#define LINE_SEGMENT_SIZE 64
#define MPEG_DRAM_DISABLE_CACHE 0x80000000
#define OSD_DISP_REGION (EN_CT_OSD_FRAME_REGION_DISPLAY)
#define OSD_WORK_REGION (EN_CT_OSD_FRAME_REGION_WORKING)
#ifndef NO_BMP_REGION
#define OSD_BMP_REGION (EN_CT_OSD_FRAME_REGION_BITMAP)
#endif // end #ifndef NO_BMP_REGION
u8 _u8grFrameDebug = 0;
typedef struct
{
u32 u32GrFrameTopFieldStartAddr ;
u32 u32GrFrameBtmFieldStartAddr ;
u32 u32GrFrameWidth ;
u32 u32GrFrameHieght ;
u32 u32TopFieldDispRgnStartAddr ;
u32 u32BtmFieldDispRgnStartAddr ;
u32 u32DispRgnHieght ;
u32 u32TopFieldWorkRgnStartAddr ;
u32 u32BtmFieldWorkRgnStartAddr ;
u32 u32WorkRgnHieght ;
u32 u32TopFieldBmpRgnStartAddr ;
u32 u32BtmFieldBmpRgnStartAddr ;
u32 u32BmpRgnHieght ;
u32 u32ColorDepth ;
u32 u32ColoPalletStartAddr ;
u32 u32GrFrameTopFieldHeaderAddr ;
u32 u32GrFrameBtmFieldHeaderAddr ;
} tFRAME_DEV_HANDLE ;
u16 **pu16SysFontSet;
u32 **pu32SysFontsSetFontOffset;
u8 **pu8SysFontsSetFontWidth;
u8 **pu8SysFontsSetFontHeight;
u8 **pu8SysFontsSetFontStartPos;
u8 **pu8SysFontsInfo;
u16 au16LetterMatrix[396];
u8 au8LetterMatrix[256];
bool8 GrFrame_GetDevHandle(tFRAME_DEV_HANDLE *pstFrameDevHandle) ;
void GRFrame_SetFontInfo(DVB_OSD_UNICODE_FONT_PARAMETER stUsrFontsAddr);
void MemCpyExcludeColorKey(u8 *pu8Dst, u8 *pu8Src, u32 u32Length, u8 u8ColorKey);
void MemCpy(u8 *pu8Dst, u8 *pu8Src, u32 u32Length);
int GrFrame_DrawChar(tFRAME_DEV_HANDLE *pstFrameDevHandle, u16 u16RegionId, u16 u16X, u16 u16Y, u16 u16CharIndex, u8 u8BackColor, u8 u8ForeColor,u8 u8IsColorkey) ;
void GrFrame_DrawString(u16 u16RegionId, u16 u16X, u16 u16Y, u16 u16CharSpace, u16 *pu16CharIndex, u16 u16StrLength, u8 u8BackColor, u8 u8ForeColor,u8 u8IsColorkey) ;
void GRFrame_SetFontInfo(DVB_OSD_UNICODE_FONT_PARAMETER stUsrFontsAddr)
{
pu16SysFontSet = (u16**)stUsrFontsAddr.u16SysFontSetAddr;
pu32SysFontsSetFontOffset = (u32**)stUsrFontsAddr.u32SysFontsSetFontOffsetAddr;
pu8SysFontsSetFontWidth = (u8**)stUsrFontsAddr.u8SysFontsSetFontWidthAddr;
pu8SysFontsSetFontHeight = (u8**)stUsrFontsAddr.u8SysFontsSetFontHeightAddr;
pu8SysFontsSetFontStartPos = (u8**)stUsrFontsAddr.u8SysFontsSetFontStartPosAddr;
pu8SysFontsInfo = (u8**)stUsrFontsAddr.u8SysFontsInfoAddr;
// GR_DBG(("Get Font Set %x, Font Offset %x, Font width %d, Font Info %x\n", pu16SysFontSet, pu32SysFontsSetFontOffset, pu8SysFontsSetFontWidth, pu8SysFontsInfo));
}
void GRFrame_SetFontInfo_SChinese(DVB_OSD_UNICODE_FONT_PARAMETER stUsrFontsAddr)
{
pu16SysFontSet = (u16**)stUsrFontsAddr.u16SysFontSetAddr;
pu8SysFontsInfo = (u8**)stUsrFontsAddr.u8SysFontsInfoAddr;
// GR_DBG(("Get Font Set %x, Font Offset %x, Font width %d, Font Info %x\n", pu16SysFontSet, pu32SysFontsSetFontOffset, pu8SysFontsSetFontWidth, pu8SysFontsInfo));
}
tFRAME_DEV_HANDLE stGrFrameDevHandle ;
bool8 GrFrame_GetDevHandle(tFRAME_DEV_HANDLE *pstFrameDevHandle)
{
CT_OSD_FrameHandleParams* pstOSdFrameHandle = NULL;
CT_OSD_ColorPatelleParams* pstColorPalette = NULL;
pstColorPalette = CT_OSD_GetcolorPatelleParameter();
pstOSdFrameHandle = CT_OSD_GetOperationFrameHandle();
if ((pstOSdFrameHandle==NULL)||
(pstColorPalette==NULL))
{
return FALSE;
}
pstFrameDevHandle->u32GrFrameTopFieldStartAddr = pstOSdFrameHandle->u32FrameTopFieldStartAddr;
pstFrameDevHandle->u32GrFrameBtmFieldStartAddr = pstOSdFrameHandle->u32FrameBtmFieldStartAddr;
pstFrameDevHandle->u32GrFrameWidth = pstOSdFrameHandle->stInitParams.u16RegionWidth;
pstFrameDevHandle->u32GrFrameHieght = pstOSdFrameHandle->stInitParams.u16DisplayRegionHeight;
pstFrameDevHandle->u32GrFrameHieght += pstOSdFrameHandle->stInitParams.u16WorkingRegionHeight;
pstFrameDevHandle->u32GrFrameHieght += pstOSdFrameHandle->stInitParams.u16BitmapRegionHeight;
pstFrameDevHandle->u32TopFieldDispRgnStartAddr = pstOSdFrameHandle->u32DisplayRegionTopFieldStartAddr;
pstFrameDevHandle->u32BtmFieldDispRgnStartAddr = pstOSdFrameHandle->u32DisplayRegionBtmFieldStartAddr;
pstFrameDevHandle->u32DispRgnHieght = pstOSdFrameHandle->stInitParams.u16DisplayRegionHeight ;
pstFrameDevHandle->u32TopFieldWorkRgnStartAddr = pstOSdFrameHandle->u32WorkingRegionTopFieldStartAddr;
pstFrameDevHandle->u32BtmFieldWorkRgnStartAddr = pstOSdFrameHandle->u32WorkingRegionBtmFieldStartAddr;
pstFrameDevHandle->u32WorkRgnHieght = pstOSdFrameHandle->stInitParams.u16WorkingRegionHeight;
pstFrameDevHandle->u32TopFieldBmpRgnStartAddr = pstOSdFrameHandle->u32BitmapRegionTopFieldStartAddr;
pstFrameDevHandle->u32BtmFieldBmpRgnStartAddr = pstOSdFrameHandle->u32BitmapRegionBtmFieldStartAddr;
pstFrameDevHandle->u32BmpRgnHieght = pstOSdFrameHandle->stInitParams.u16BitmapRegionHeight;
pstFrameDevHandle->u32ColorDepth = (u32)pstOSdFrameHandle->stInitParams.enColorDepth;
pstFrameDevHandle->u32ColoPalletStartAddr = pstColorPalette->stInitParams.u32Addr;
pstFrameDevHandle->u32GrFrameTopFieldHeaderAddr = pstOSdFrameHandle->u32FrameTopFieldHeaderAddr;
pstFrameDevHandle->u32GrFrameBtmFieldHeaderAddr = pstOSdFrameHandle->u32FrameBtmFieldHeaderAddr;
#if 0
// Mpeg Dram Disable Cache
#if 1
pstFrameDevHandle->u32GrFrameTopFieldStartAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32GrFrameBtmFieldStartAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32TopFieldDispRgnStartAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32BtmFieldDispRgnStartAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32TopFieldWorkRgnStartAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32BtmFieldWorkRgnStartAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32TopFieldBmpRgnStartAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32BtmFieldBmpRgnStartAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32GrFrameTopFieldHeaderAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32GrFrameBtmFieldHeaderAddr |= MPEG_DRAM_DISABLE_CACHE;
pstFrameDevHandle->u32ColoPalletStartAddr |= MPEG_DRAM_DISABLE_CACHE;
#else
{
extern disable_dcahce() ;
extern enable_dcahce() ;
disable_dcahce() ;
enable_dcahce() ;
}
#endif
#endif
return TRUE;
}
u32 GrFrame_GetRegionTopFieldAddr(tFRAME_DEV_HANDLE *pstFrameDevHandle, u16 u16RegionId)
{
u32 u32RegionAddr = 0;
switch(u16RegionId)
{
case OSD_DISP_REGION :
u32RegionAddr = pstFrameDevHandle->u32TopFieldDispRgnStartAddr ;
break ;
case OSD_WORK_REGION:
u32RegionAddr = pstFrameDevHandle->u32TopFieldWorkRgnStartAddr;
break ;
#ifndef NO_BMP_REGION
case OSD_BMP_REGION:
u32RegionAddr = pstFrameDevHandle->u32TopFieldBmpRgnStartAddr;
break ;
#endif // end #ifndef NO_BMP_REGION
}
return(u32RegionAddr) ;
}
u32 GrFrame_GetRegionBtmFieldAddr(tFRAME_DEV_HANDLE *pstFrameDevHandle, u16 u16RegionId)
{
u32 u32RegionAddr = 0;
switch(u16RegionId)
{
case OSD_DISP_REGION :
u32RegionAddr = pstFrameDevHandle->u32BtmFieldDispRgnStartAddr ;
break ;
case OSD_WORK_REGION:
u32RegionAddr = pstFrameDevHandle->u32BtmFieldWorkRgnStartAddr;
break ;
#ifndef NO_BMP_REGION
case OSD_BMP_REGION:
u32RegionAddr = pstFrameDevHandle->u32BtmFieldBmpRgnStartAddr;
break ;
#endif // end #ifndef NO_BMP_REGION
}
return(u32RegionAddr) ;
}
u16 GrFrame_GetRegionWidth(tFRAME_DEV_HANDLE *pstFrameDevHandle, u16 u16RegionId)
{
// same width for all region
return (u16)(pstFrameDevHandle->u32GrFrameWidth) ;
}
u16 GrFrame_GetRegionHeight(tFRAME_DEV_HANDLE *pstFrameDevHandle, u16 u16RegionId)
{
u16 u16Height = 0;
switch(u16RegionId)
{
case OSD_DISP_REGION :
u16Height = (u16)pstFrameDevHandle->u32DispRgnHieght;
break ;
case OSD_WORK_REGION:
u16Height = (u16)pstFrameDevHandle->u32WorkRgnHieght;
break ;
#ifndef NO_BMP_REGION
case OSD_BMP_REGION:
u16Height = (u16)pstFrameDevHandle->u32BmpRgnHieght ;
break ;
#endif // end #ifndef NO_BMP_REGION
}
return(u16Height) ;
}
void GrFrame_ShowDevInfo(void)
{
if (GrFrame_GetDevHandle(&stGrFrameDevHandle)!=TRUE)
{
return;
}
// show start address
// show header 0/1/2/3 info
GR_DBG(("top field start address : 0x%08lx\n",stGrFrameDevHandle.u32GrFrameTopFieldHeaderAddr));
GR_DBG(("btm field start address : 0x%08lx\n",stGrFrameDevHandle.u32GrFrameBtmFieldHeaderAddr));
GR_DBG(("header 0 : 0x%08lx\n",*((u32 *)(stGrFrameDevHandle.u32GrFrameTopFieldHeaderAddr))));
GR_DBG(("header 1 : 0x%08lx\n",*((u32 *)(stGrFrameDevHandle.u32GrFrameTopFieldHeaderAddr+1))));
GR_DBG(("header 2 : 0x%08lx\n",*((u32 *)(stGrFrameDevHandle.u32GrFrameTopFieldHeaderAddr+2))));
GR_DBG(("header 3 : 0x%08lx\n",*((u32 *)(stGrFrameDevHandle.u32GrFrameTopFieldHeaderAddr+3))));
}
void GrFrame_EnableDisplay(int iFlag)
{
}
//#define SHOW_FONT_IN_DEBUG 1
#define FONT_MATRIX_MAX_W 56
#define FONT_MATRIX_MAX_H 56
u8 au8FnColoredBmp[FONT_MATRIX_MAX_W*FONT_MATRIX_MAX_W * 2] ;
void FnBitMarixTo8BitColorBitmap (
u16 *pu16FnBitMatrixData,
int iFnMatrixW,
int iFnMatrixH,
int iFnDataWidth,
u8 u8BgColor,
u8 u8FgColor,
u8 *pu8FnColoredBitmap)
{
int i,j;
int iNumOfWordInMatrixW ;
u16 *pu16FnLineBitsInWord ;
u8 *pu8FnColoredBitmapLine ;
int iBitAnchorInLineBits ;
if ((iFnMatrixW%16) > 0)
{
iNumOfWordInMatrixW = (iFnMatrixW/16) + 1;
}
else
{
iNumOfWordInMatrixW = (iFnMatrixW/16);
}
#if defined(SHOW_FONT_IN_DEBUG)
GR_DBG(("\n"));
#endif
for(i=0;i<iFnMatrixH;i++)
{
pu16FnLineBitsInWord = &pu16FnBitMatrixData[i*iNumOfWordInMatrixW] ;
pu8FnColoredBitmapLine = &pu8FnColoredBitmap[i*iFnMatrixW] ;
iBitAnchorInLineBits = 0 ;
for(j=0;j<iFnDataWidth;j++)
{
// パオ娩衡筁ㄓ材
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -