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

📄 dvb_osd.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
	u8 *pu8BitmapBuffer)
{
    EN_CT_OSD_FRAME_REGION  enCtRegion           = EN_CT_OSD_FRAME_REGION_BITMAP;


    if (enCurrentOSDMode == EN_OSD_MODE_DISABLE)
    {
        return EN_OSD_ERROR_DATA_FORMAT;
    }

    enCtRegion = OSD_GetCtRegionByDvbRegion(u16RegionId);
    if (enCtRegion>=EN_CT_OSD_FRAME_REGION_NUMBER)
    {
        return EN_OSD_ERROR_DATA_FORMAT;
    }

	GrFrame_CopyRegionDataToBitmap(
		enCtRegion,
		u16X,
		u16Y,
		u16Width,
		u16Height,
		pu8BitmapBuffer ) ;
		
    return EN_OSD_NO_ERROR;
}
#endif // end #ifdef NO_BMP_REGION

EN_OSD_ERROR DVB_OSD_CopyBitmapDataToRegion(
	u16 u16RegionId,
	u16 u16X,
	u16 u16Y,
	u16 u16Width,
	u16 u16Height,
	u8 *pu8BitmapBuffer)
{
    EN_CT_OSD_FRAME_REGION  enCtRegion           = EN_CT_OSD_FRAME_REGION_WORKING;

    if (enCurrentOSDMode == EN_OSD_MODE_DISABLE)
    {
        return EN_OSD_ERROR_DATA_FORMAT;
    }

    enCtRegion = OSD_GetCtRegionByDvbRegion(u16RegionId);
    if (enCtRegion>=EN_CT_OSD_FRAME_REGION_NUMBER)
    {
        return EN_OSD_ERROR_DATA_FORMAT;
    }

	GrFrame_CopyBitmapDataToRegion(
		enCtRegion,
		u16X ,
		u16Y,
		u16Width,
		u16Height,
		pu8BitmapBuffer,
        u16AreaCopyColorKeyIndex ) ;	// color key always enable in this function

    return EN_OSD_NO_ERROR;
}

/*******************************************************************************************/
EN_OSD_ERROR DVB_OSDBitmap_Show (u16 u16PosX, u16 u16PosY, u8 u8BmpIndex)
{
    CT_OSD_AreaCopyParam    stAreaCopy;
    u16                     u16Temp1    = 0;
    bool8                   b8CtStatus    = FALSE;

    if (enCurrentOSDMode == EN_OSD_MODE_DISABLE)
        return EN_OSD_ERROR_DATA_FORMAT;

    for(u16Temp1 = 0;u16Temp1 < u16ToatalLoadBmp; u16Temp1++)
    {
        if(u8BmpIndex == BmpParameter[u16Temp1].u8BmpIndex)
        {
            break;
        }
    }
    if(u16Temp1 == u16ToatalLoadBmp)
    {
        return EN_OSD_ERROR_BMP_INDEX;
    }
    stAreaCopy.enSrcRegion      = EN_CT_OSD_FRAME_REGION_WORKING;
    stAreaCopy.u16SrcPosX       = BmpParameter[u16Temp1].u16PosX;
    stAreaCopy.u16SrcPosY       = BmpParameter[u16Temp1].u16PosY;
    stAreaCopy.u16Width         = BmpParameter[u16Temp1].u16Width;
    stAreaCopy.u16Height        = BmpParameter[u16Temp1].u16Height;
    stAreaCopy.enDstRegion      = EN_CT_OSD_FRAME_REGION_DISPLAY;
    stAreaCopy.u16DstPosX       = u16PosX;
    stAreaCopy.u16DstPosY       = u16PosY;
    stAreaCopy.u16ColorKeyIdx   = u16AreaCopyColorKeyIndex;
    stAreaCopy.b8ColorKey       = b8AreaCopyColorKeyEnable;
    
#ifdef OSD_DIRECT_ACCESS_MODE
    b8CtStatus = GrFrame_RegionCopy(stAreaCopy.enDstRegion,
	                                stAreaCopy.u16DstPosX ,
	                                stAreaCopy.u16DstPosY,
	                                stAreaCopy.enSrcRegion,
	                                stAreaCopy.u16SrcPosX,
	                                stAreaCopy.u16SrcPosY,
	                                stAreaCopy.u16Width,
	                                stAreaCopy.u16Height,
	                                stAreaCopy.u16ColorKeyIdx,
	                                stAreaCopy.b8ColorKey);
#else
    b8CtStatus = CT_OSD_AreaCopy(u16OSDFrameHandleID, &stAreaCopy);
#endif
    
    if (b8CtStatus!=TRUE)
    {
    }

    return EN_OSD_NO_ERROR;
}
#ifndef NO_BMP_REGION
/*******************************************************************************************/
EN_OSD_ERROR DVB_OSDSystemIcon_Show (u16 u16PosX, u16 u16PosY, u16 u16SrcX, u16 u16SrcY, u16 u16SrcW, u16 u16SrcH)
{
    CT_OSD_AreaCopyParam   stAreaCopy;
     bool8              b8CtStatus = FALSE;

    if (enCurrentOSDMode == EN_OSD_MODE_DISABLE)
        return EN_OSD_ERROR_DATA_FORMAT;

    stAreaCopy.enSrcRegion      = EN_CT_OSD_FRAME_REGION_BITMAP;
    stAreaCopy.u16SrcPosX       = u16SrcX;
    stAreaCopy.u16SrcPosY       = u16SrcY;
    stAreaCopy.u16Width         = u16SrcW;
    stAreaCopy.u16Height        = u16SrcH;
    stAreaCopy.enDstRegion      = EN_CT_OSD_FRAME_REGION_DISPLAY;
    stAreaCopy.u16DstPosX       = u16PosX;
    stAreaCopy.u16DstPosY       = u16PosY;
    stAreaCopy.u16ColorKeyIdx   = u16AreaCopyColorKeyIndex;
    stAreaCopy.b8ColorKey       = b8AreaCopyColorKeyEnable;
    
#ifdef OSD_DIRECT_ACCESS_MODE
    b8CtStatus = GrFrame_RegionCopy(stAreaCopy.enDstRegion,
	                                stAreaCopy.u16DstPosX ,
	                                stAreaCopy.u16DstPosY,
	                                stAreaCopy.enSrcRegion,
	                                stAreaCopy.u16SrcPosX,
	                                stAreaCopy.u16SrcPosY,
	                                stAreaCopy.u16Width,
	                                stAreaCopy.u16Height,
	                                stAreaCopy.u16ColorKeyIdx,
	                                stAreaCopy.b8ColorKey);
#else
    b8CtStatus =  CT_OSD_AreaCopy(u16OSDFrameHandleID, &stAreaCopy);
#endif    
    if (b8CtStatus!=TRUE)
    {
        return EN_OSD_ERROR_BMP_SIZE;
    }
    return EN_OSD_NO_ERROR;
}
#endif  // end #ifndef NO_BMP_REGION
/*******************************************************************************************/
void DVB_OSDBitmap_UnLoad ( u8 u8BmpIndex )
{
    u16                 u16Temp1    = 0;
    u16                 u16Temp2    = 0;
    CT_OSD_FillRectParam   stFillRect;

    if (enCurrentOSDMode == EN_OSD_MODE_DISABLE)
        return;


    OSD_DEBUG(("MMMMMMMMMM unload %hx\n", u8BmpIndex));

    for(u16Temp1 = 0;u16Temp1 < u16ToatalLoadBmp; u16Temp1++)
    {
        if(u8BmpIndex == BmpParameter[u16Temp1].u8BmpIndex)
        {
            break;
        }
    }
    if(u16Temp1 == u16ToatalLoadBmp)
    {
        //return EN_OSD_ERROR_BMP_INDEX;
    }
    else
    {

        stFillRect.enRegion     = EN_CT_OSD_FRAME_REGION_WORKING;
        stFillRect.u16PosX      = BmpParameter[u16Temp1].u16PosX;
        stFillRect.u16PosY      = BmpParameter[u16Temp1].u16PosY;
        stFillRect.u16Width     = BmpParameter[u16Temp1].u16Width;
        stFillRect.u16Height    = BmpParameter[u16Temp1].u16Height;
        stFillRect.u16ColorIdx  = u16TransponderColorIdx;
        
    #ifdef OSD_DIRECT_ACCESS_MODE
        GrFrame_FillRectangle(   stFillRect.enRegion,
                                 stFillRect.u16PosX,
                                 stFillRect.u16PosY,
                                 stFillRect.u16Width,
                                 stFillRect.u16Height,
                                 (u8)stFillRect.u16ColorIdx);
    #else
        CT_OSD_FillRectangle(u16OSDFrameHandleID, &stFillRect);
    #endif        

        if (CT_OS_WaitOnSemaphore(&stDvbOsdSemaphore, CTOS_WAIT)!= EN_CTOS_SUCCESS)
        {
            return;
        }
        // reflash database
        for(u16Temp2 = u16Temp1;u16Temp2 < (u16ToatalLoadBmp-1); u16Temp2++)
        {
            BmpParameter[u16Temp2].u8BmpIndex    = BmpParameter[u16Temp2+1].u8BmpIndex;
            BmpParameter[u16Temp2].u16PosX       = BmpParameter[u16Temp2+1].u16PosX;
            BmpParameter[u16Temp2].u16PosY       = BmpParameter[u16Temp2+1].u16PosY;
            BmpParameter[u16Temp2].u16Width      = BmpParameter[u16Temp2+1].u16Width;
            BmpParameter[u16Temp2].u16Height     = BmpParameter[u16Temp2+1].u16Height;
        }
        BmpParameter[u16ToatalLoadBmp-1].u8BmpIndex  = 0;
        BmpParameter[u16ToatalLoadBmp-1].u16PosX     = 0;
        BmpParameter[u16ToatalLoadBmp-1].u16PosY     = 0;
        BmpParameter[u16ToatalLoadBmp-1].u16Width    = 0;
        BmpParameter[u16ToatalLoadBmp-1].u16Height   = 0;
        u16ToatalLoadBmp--;
        // Free Semaphore
        CT_OS_FreeSemaphore(&stDvbOsdSemaphore);
    }
}
/*******************************************************************************************/
EN_OSD_ERROR DVB_OSDPalette_Setup (u16 u16Index, u32 u32RGBColor, bool8 b8MixEnable)
{
    u32 u32YUV  = 0;
//	u8  u8Y     = 0;
//	u8  u8U     = 0;
//	u8  u8V     = 0;

    if ((u32RGBColor&OSD_PALETTE_YUV_MASK)!=OSD_PALETTE_YUV_MASK)
    {
        u32YUV = COMUTL_RGB2YUV(u32RGBColor);
//        u8Y = (u8)(u32YUV>>16);
//        u8U = (u8)(u32YUV>>8);
//        u8V = (u8)(u32YUV);
//        u32YUV = MAKE_YUV(u8Y, u8U, u8V);
    }
    else
    {
        u32YUV = u32RGBColor;
    }
    CT_OSD_PaletteSetup(u16Index, u32YUV , b8MixEnable);
    return EN_OSD_NO_ERROR;
}
/*******************************************************************************************/
#if defined (CT216S) || defined (CT216T) || defined (CT216H)
EN_OSD_ERROR DVB_OSDPaletteAlpha_Setup (u16 u16Index, u8 u8AlphaValue, bool8 b8MixEnable)
{
    CT_OSD_PaletteAlphaSetup(u16Index, u8AlphaValue, b8MixEnable);
    return EN_OSD_NO_ERROR;
}
#endif
/*******************************************************************************************/
void DVB_OSDCleanScreen (void)
{
    if (enCurrentOSDMode == EN_OSD_MODE_DISABLE)
        return;
            
    OSD_ClearRegion(enOsdOperationCtRegion);
    
}
/*******************************************************************************************/
bool8 DVB_OSD_Initial(DVB_OSD_InitParameters* pstParam)
{

    CT_OSD_ColorPatelleInitParams         stColorPaletteParams;
    CT_OSD_LinemapInitParams              stLinemapParams;
    CT_OSD_FrameInitParams                stFrameParams;

    if (pstParam==NULL)
    {
        OSD_DEBUG(("\n>> DVB_OSD_Initial() : Parameter Fail\n"));
        return FALSE;
    }
    
    if (b8DvbOsdInit==TRUE)
    {
        return TRUE;
    }
    
    
    if (CT_OS_CreateSemaphore(&stDvbOsdSemaphore, "OSDSEM", 1, EN_CTOS_SUSPEND_FIFO)!= EN_CTOS_SUCCESS)
    {
        return FALSE;
    }
    

			
    
    u16OSDFrameHandleID             = CT_OSD_FRAME_ERROR_HANDLE_ID;
    enOsdOperationCtRegion          = EN_CT_OSD_FRAME_REGION_DISPLAY;
    enCurrentOSDMode                = EN_OSD_MODE_DISABLE;
    u16ToatalLoadBmp                = 0;
    memset(BmpParameter,0,sizeof(DVB_OSD_BmpParameter)*MAX_BMP_IN_SDRAM_NUMBER);


    

    stColorPaletteParams.u32Addr            = pstParam->stColorPaletteParams.u32Addr;
    stColorPaletteParams.u32Len             = pstParam->stColorPaletteParams.u32Len;

    stLinemapParams.u32MaxCmdNum            = pstParam->stLinemapParams.u32MaxCmdNum;
    stLinemapParams.u32MaxLineNum           = pstParam->stLinemapParams.u32MaxLineNum;

#ifdef DVB_MallocLineMap
	gen_point = 322;
	if(pstParam->stLinemapParams.u32Len == 0)
	{
		stLinemapParams.u32Addr 		  = 0;
	}
	else
	{
    	stLinemapParams.u32Addr 		   = (u32)DVB_MemoryAllocate(4*(pstParam->stLinemapParams.u32MaxCmdNum)*(pstParam->stLinemapParams.u32MaxLineNum+1));
	}
#else
    stLinemapParams.u32Addr                 = pstParam->stLinemapParams.u32Addr;
#endif
    stLinemapParams.u32Len                  = pstParam->stLinemapParams.u32Len;

    stFrameParams.u32FrameBufferAddr        = pstParam->stFrameParams.u32FrameBufferAddr;
    stFrameParams.u16RegionWidth            = pstParam->stFrameParams.u16RegionWidth;
    stFrameParams.u16DisplayRegionHeight    = pstParam->stFrameParams.u16DisplayRegionHeight;
    stFrameParams.u16WorkingRegionHeight    = pstParam->stFrameParams.u16WorkingRegionHeight;
    stFrameParams.u16BitmapRegionHeight     = pstParam->stFrameParams.u16BitmapRegionHeight;
    stFrameParams.u16PAL_VisibleHeight      = pstParam->stFrameParams.u16PAL_VisibleHeight;
    stFrameParams.u16NTSC_VisibleHeight     = pstParam->stFrameParams.u16NTSC_VisibleHeight;
    stFrameParams.u16PAL_LeftTopPoint_X     = pstParam->stFrameParams.u16PAL_LeftTopPoint_X;
    stFrameParams.u16PAL_LeftTopPoint_Y     = pstParam->stFrameParams.u16PAL_LeftTopPoint_Y;
    stFrameParams.u16NTSC_LeftTopPoint_X    = pstParam->stFrameParams.u16NTSC_LeftTopPoint_X;
    stFrameParams.u16NTSC_LeftTopPoint_Y    = pstParam->stFrameParams.u16NTSC_LeftTopPoint_Y;
    if (pstParam->stFrameParams.u16ColorDepth == 1) // 4 Bit OSD
    {
        stFrameParams.enColorDepth             = EN_CT_OSD_COLOR_DEPTH_4_BITS;
    }
    else
    {
        stFrameParams.enColorDepth             = EN_CT_OSD_COLOR_DEPTH_8_BITS;
    }
    stFrameParams.b8LinkNextFrame           = pstParam->stFrameParams.b8LinkNextFrame;
    if (pstParam->stFrameParams.u16kNextFrameHandleID==OSD_FRAME_HANLDE_ERROR_ID)
    {
        stFrameParams.u16kNextFrameHandleID     = CT_OSD_FRAME_ERROR_HANDLE_ID;
    }
    else
    {
        stFrameParams.u16kNextFrameHandleID     = pstParam->stFrameParams.u16kNextFrameHandleID;
    }
    stFrameParams.b8DefaultPALSystem        = pstParam->stFrameParams.b8DefaultPALSystem;

    stFrameParams.u16DefaultMixRatio          = pstParam->stFrameParams.u16DefaultMixRatio;


	gen_point = 321;
    pb8EnableLinemapPicture = (bool8*)DVB_MemoryAllocate(stLinemapParams.u32MaxCmdNum);
    if (pb8EnableLinemapPicture==NULL)
    {
        OSD_DEBUG(("\n>> DVB_OSD_Initial() : DVB_MemoryAllocate Fail\n"));
        return FALSE;
    }
    memset(pb8EnableLinemapPicture, 0, stLinemapParams.u32MaxCmdNum);

    u16TransponderColorIdx      = pstParam->u16TransponderColorIdx;
    u16AreaCopyColorKeyIndex    = pstParam->u16AreaCopyColorKeyIndex;
    b8OSDDrawStringFGColorKey   = pstParam->b8OSDDrawStringFGColorKey;
    b8OSDDrawStringBGColorKey   = pstParam->b8OSDDrawStringBGColorKey;
    b8AreaCopyColorKeyEnable    = pstParam->b8AreaCopyColorKeyEnable;

#if defined(CT216S)||defined(CT216T) || defined (CT216H)
    if(CT_OSD_SetFormat(EN_CT_OSD_8BIT_BITMAP) == TRUE)
    {

    }
    else
    {
        OSD_DEBUG(("\n>> DVB_OSD_Initial() : CT_OSD_SetFormat Fail\n

⌨️ 快捷键说明

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