gui 的高清与标清

来源:互联网 发布:ubuntu 安装软件 编辑:程序博客网 时间:2024/04/24 03:56

现在无论对图层设计多样化 一般采用4层 或者更多 、、

我们习惯用宏定义来分开如下:

 

//#define STILL_IMG_ZAPPING_BUF_SIZE 0x918C00 ///< DWin buffer size used for still image zapping
#define STILL_IMG_ZAPPING_HD_GOP   3 ///< HD GOP used for still image zapping
#define STILL_IMG_ZAPPING_SD_GOP   4 ///< SD GOP used for still image zapping

 

当然现在都要去初始化一下:

MS_BOOL _DISP_VE_Init(void)
{

    MSAPI_VE_INITDATA msAPI_VE_InitData;
    msAPI_VE_InitData.u32VEMemAddress = VE_FRAMEBUFFER_ADR ;
    msAPI_VE_InitData.u32VEMemSize= VE_FRAMEBUFFER_LEN;
    msAPI_VE_InitData.eOutputVideoStd = MS_VE_PAL;
    msAPI_VE_InitData.eInputSrcType = MS_VE_SRC_DI;
    msAPI_VE_InitData.eOutputDstType = MS_VE_DEST_CVBS;
    msAPI_VE_InitData.bBootLogoEnable = FALSE;
  //msAPI_VE_InitData.bBootLogoEnable = TRUE;
    msAPI_VE_Init(msAPI_VE_InitData);
    MDrv_VE_SetBlackScreen(TRUE); //jack.lei refine

#if ENABLE_DI2VE_AUTO
    geVeSrcType=E_MSAPI_VE_SOURCE_SCALER_DI2VE;//E_MSAPI_VE_SOURCE_SCALER_OP2;
#else
    geVeSrcType=E_MSAPI_VE_SOURCE_SCALER_OP2;//E_MSAPI_VE_SOURCE_SCALER_OP2;
#endif

    msAPI_VE_SetSourceType(geVeSrcType);

    return TRUE;
}

MS_BOOL DApi_DISP_Init(void)

{
    MS_U32 u32OutputTiming;
    MS_U16 u16StartX,u16StartY,u16Width,u16Height;

    if(_bDISPInited)
    {
        DBG_ERROR("%s : Already Inited\n",__FUNCTION__);
        return TRUE;
    }

    printf("Demo_GOP_Init\n");
    GOP_InitInfo pGopInit;
    GFX_Config tGFXcfg;

    //MDrv_SEM_Init();

    /// -Initial GE
    tGFXcfg.bIsCompt = TRUE;
    tGFXcfg.bIsHK = TRUE;
    MApi_GFX_Init(&tGFXcfg);
    printf("driver GE init ok\n");

    //_OSD_ScalerInit(); //jerry.wang add

    //Initial GOP
    MApi_GOP_RegisterFBFmtCB(( MS_U32(*)(MS_U16 pitch,MS_U32 addr , MS_U16 fmt ))_OSD_SetFBFmt);
    MApi_GOP_RegisterXCIsInterlaceCB(_sc_is_interlace);
    MApi_GOP_RegisterXCGetCapHStartCB(_sc_get_h_cap_start);
    MApi_GOP_RegisterXCReduceBWForOSDCB(_XC_Sys_PQ_ReduceBW_ForOSD);

    pGopInit.u16PanelWidth = g_IPanel.Width();
    pGopInit.u16PanelHeight = g_IPanel.Height();
    pGopInit.u16PanelHStr = g_IPanel.HStart();
    printf("g_IPanel.HStart()=%d\n",g_IPanel.HStart());
    #if GOP_ENABLE_MIU_1
        pGopInit.u32GOPRBAdr = GOP_GWIN_RB_ADR + MIU_INTERVAL;
    #else
        pGopInit.u32GOPRBAdr = GOP_GWIN_RB_ADR;
    #endif
   
    pGopInit.u32GOPRBLen = GOP_GWIN_RB_LEN;
   
    #if GOP_ENABLE_MIU_1
        pGopInit.u32GOPRegdmaAdr = GOP_REGDMABASE_ADR + MIU_INTERVAL;
    #else
        pGopInit.u32GOPRegdmaAdr = GOP_REGDMABASE_ADR;
    #endif
    pGopInit.u32GOPRegdmaLen = GOP_REGDMABASE_LEN;
    pGopInit.bEnableVsyncIntFlip = FALSE;
    MApi_GOP_Init(&pGopInit);
    printf("GOP_GWIN_RB_ADR : %x, GOP_REGDMABASE_ADR: %x\n", GOP_GWIN_RB_ADR, GOP_REGDMABASE_ADR);
    printf("driver GOP init ok\n");
   
    // XC init
    //XC init
    _DISP_XC_Init();//appDemo_XC_Init();
    // VE init
    _DISP_VE_Init();
   
    //jack.lei refine DApi_DISP_Blank();
    u16StartX = 0;
    u16StartY = 0;
    u16Width = 1920;
    u16Height = 1080;
    u32OutputTiming = DISP_TIMING_1920X1080_50I;
    //_DISP_XC_SetOutputTiming(u32OutputTiming, u16StartX, u16StartY, u16Width, u16Height);
    u32OutputTiming = DISP_TIMING_720X576_50I;
    u16StartX = 0;
    u16StartY = 0;
    u16Width = 720;
    u16Height = 576;
    //_DISP_VE_SetOutputTiming(u32OutputTiming, u16StartX, u16StartY, u16Width, u16Height);

    gDispInfo.HD_AS_WND = DISP_ASPECT_WINDOW_FULL;
    gDispInfo.SD_AS_WND = DISP_ASPECT_WINDOW_FULL;

    _bDISPInited = TRUE;

    if (_s32StillImgMutexId < 0)
    {
        _s32StillImgMutexId = MsOS_CreateMutex(E_MSOS_FIFO, "StillImage_Mutex", MSOS_PROCESS_SHARED);

        if (_s32StillImgMutexId < 0)
        {
            printf("DApi_DISP_Init: Create mutex failed.\n");
        }
    }

#if 1   //Patch for BW
    MS_U32 u32MMIOBaseAdr, u32BankSize;
    if( !MDrv_MMIO_GetBASE(&u32MMIOBaseAdr, &u32BankSize, MS_MODULE_HW))
    {
        printf("Get IOMap failure\n");
        MS_ASSERT(0);
        return FALSE;
    }
    else
    {
        printf("Get IOMap u32NonPmBase = 0x%lx \n",(MS_U32)u32MMIOBaseAdr);
    }

    u32NonPmBase = u32MMIOBaseAdr;
#endif
    pthread_mutex_init(&s_vmix_mutex, NULL);
    return TRUE;
}

 

那么去用呢

MS_BOOL DApi_DISP_InitStillImage(void)
{
    MS_BOOL bRet = FALSE;
    MS_U32 u32DWinBufPA = 0;
    MS_U32 u32DWinBufLen = 0;

    if (MsOS_ObtainMutex(_s32StillImgMutexId, MSOS_WAIT_FOREVER) == FALSE)
    {
        return FALSE;
    }

    u32DWinBufPA = STILLIMAGE_BUF_ADR;
    u32DWinBufLen = STILLIMAGE_BUF_LEN;

    printf("Still zapping DWIN buffer PA = %lx, size = %ld\n", u32DWinBufPA, u32DWinBufLen);

    bRet = msAPI_GEGOP_CreateStillVideo(STILL_IMG_ZAPPING_HD_GOP, STILL_IMG_ZAPPING_SD_GOP, u32DWinBufPA, STILLIMAGE_BUF_LEN);
    if(bRet == FALSE)
    {
        printf("msAPI_GEGOP_CreateStillVideo FAIL!!!\n");
    }

    MsOS_ReleaseMutex(_s32StillImgMutexId);
    return TRUE;
}

 

MS_BOOL DApi_DISP_EnableStillImage(void)
{
    MS_BOOL bRet = FALSE;
 MS_U32  L_last1 = 0;
 MS_U32  L_last2 = 0;
 MS_U32  L_last = 0;
 /*times++;
 if(times > 10)
 {
  return TRUE;
 }*/
 printf("enter %s\n",__FUNCTION__);
    if (MsOS_ObtainMutex(_s32StillImgMutexId, MSOS_WAIT_FOREVER) == FALSE)
    {
        return FALSE;
    }
    _bLastFrame = TRUE;

    MSAPI_GEGOP_UIEffect_Para UIEffect_Para;
    memset(&UIEffect_Para, 0, sizeof(MSAPI_GEGOP_UIEffect_Para));
    UIEffect_Para.Effect_Enable = TRUE;
    UIEffect_Para.Para1 = COEF_ASRC;
    UIEffect_Para.Para2 = 0xFF;

 L_last1 = MsOS_GetSystemTime();

 printf("line to ..........msAPI_GEGOP_StillVideo_UIBitbltEffect......2138....................\n");
    bRet = msAPI_GEGOP_StillVideo_UIBitbltEffect(MSAPI_GEGOP_ABL, ABL_Para_Amount, &UIEffect_Para);
 printf("line to ..........bRet == FALSE......2140....................\n");
 if(bRet == FALSE)
    {
        printf("DApi_OSD_ShowStillImage UIBitbltEffect FAIL!!!\n");
    }

#if 1   //Patch for BW
    REG16_NPM(0x1200*2+0x40*2)=0xC016;
    REG16_NPM(0x1200*2+0x42*2)=0x0810;

    REG16_NPM(0x1200*2+0x60*2)=0x8011;
    REG16_NPM(0x1200*2+0x62*2)=0x0000;
    REG16_NPM(0x1200*2+0x68*2)=0xEF0F;

    REG16_NPM(0x1200*2+0x6A*2)=0x321C;
    REG16_NPM(0x1200*2+0x6C*2)=0x0B87;
    REG16_NPM(0x1200*2+0x6E*2)=0xDEA9;
    REG16_NPM(0x1200*2+0x70*2)=0x654F;
#endif
 printf("line to ..........REG16_NPM......2159....................\n");
    bRet = msAPI_GEGOP_ShowStillVideo(STILL_IMG_ZAPPING_HD_GOP, STILL_IMG_ZAPPING_SD_GOP, 0, 0);
 printf("line to ..........msAPI_GEGOP_ShowStillVideo......2161....................\n");
 L_last2 = MsOS_GetSystemTime();
 L_last =(L_last2 - L_last1);

 printf("2174...... ...... ...... L_last = %d \n", L_last);
 
 if(bRet == FALSE)
    {
        printf("msAPI_GEGOP_ShowStillVideo FAIL!!!\n");
    }

#if 1   //Patch for BW
    REG16_NPM(0x1200*2+0x40*2)=0x8011;
    REG16_NPM(0x1200*2+0x42*2)=0x0000;

    REG16_NPM(0x1200*2+0x60*2)=0x8015;
    REG16_NPM(0x1200*2+0x62*2)=0x0018;
    REG16_NPM(0x1200*2+0x68*2)=0xAF5F;

    REG16_NPM(0x1200*2+0x6A*2)=0x4321;
    REG16_NPM(0x1200*2+0x6C*2)=0x8765;
    REG16_NPM(0x1200*2+0x6E*2)=0xCBA9;
    REG16_NPM(0x1200*2+0x70*2)=0x0FED;
#endif

    MsOS_ReleaseMutex(_s32StillImgMutexId);
    return bRet;
}

0 0