📄 dispconapi.c
字号:
pArg = (SVEARG_FIMD_WIN_POS *)pBufIn;
if (pPMCtxt->bPowerOn)
{
if (pCtxt->bVideoEnable && pCtxt->bWindowEnable[pArg->dwWinNum]) // Window is in use
{
BOOL bRetry = TRUE;
while(bRetry)
{
EnterCriticalSection(&pCtxt->DispCmdCtxt[pArg->dwWinNum].csCmd);
if (pCtxt->DispCmdCtxt[pArg->dwWinNum].bCmdSetPosition == FALSE)
{
pCtxt->DispCmdCtxt[pArg->dwWinNum].dwOffsetX = pArg->dwOffsetX;
pCtxt->DispCmdCtxt[pArg->dwWinNum].dwOffsetY = pArg->dwOffsetY;
pCtxt->DispCmdCtxt[pArg->dwWinNum].bCmdSetPosition = TRUE;
bRetry = FALSE;
}
LeaveCriticalSection(&pCtxt->DispCmdCtxt[pArg->dwWinNum].csCmd);
if (bRetry)
{
if (WAIT_TIMEOUT == SVE_wait_disp_cmd_done())
{
VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_POSITION : SVE_wait_disp_cmd_done() TimeOut\n\r")));
bRet = FALSE;
}
}
}
}
else
{
Disp_set_window_position(pArg->dwWinNum, pArg->dwOffsetX, pArg->dwOffsetY);
}
}
// Backup for PM
pPMCtxt->tFIMDWinMode[pArg->dwWinNum].dwOffsetX = pArg->dwOffsetX;
pPMCtxt->tFIMDWinMode[pArg->dwWinNum].dwOffsetY = pArg->dwOffsetY;
pPMCtxt->bFIMDWinMode[pArg->dwWinNum] = TRUE;
break;
}
case SVE_FIMD_SET_WINDOW_FRAMEBUFFER:
{
SVEARG_FIMD_WIN_FRAMEBUFFER *pArg;
VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_FRAMEBUFFER\n\r")));
if(!pBufIn)
{
DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
bRet = FALSE;
break;
}
pArg = (SVEARG_FIMD_WIN_FRAMEBUFFER *)pBufIn;
if (pPMCtxt->bPowerOn)
{
if (pCtxt->bVideoEnable && pCtxt->bWindowEnable[pArg->dwWinNum]) // Window is in use
{
BOOL bRetry = TRUE;
while(bRetry)
{
EnterCriticalSection(&pCtxt->DispCmdCtxt[pArg->dwWinNum].csCmd);
if (pCtxt->DispCmdCtxt[pArg->dwWinNum].bCmdSetBuffer == FALSE)
{
pCtxt->DispCmdCtxt[pArg->dwWinNum].dwBuffer = pArg->dwFrameBuffer;
pCtxt->DispCmdCtxt[pArg->dwWinNum].bCmdSetBuffer = TRUE;
bRetry = FALSE;
}
LeaveCriticalSection(&pCtxt->DispCmdCtxt[pArg->dwWinNum].csCmd);
if (bRetry || pArg->bWaitForVSync)
{
if (WAIT_TIMEOUT == SVE_wait_disp_cmd_done())
{
VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_FRAMEBUFFER : SVE_wait_disp_cmd_done() TimeOut\n\r")));
bRet = FALSE;
}
}
}
}
else
{
Disp_set_framebuffer(pArg->dwWinNum, pArg->dwFrameBuffer);
}
}
// Backup for PM
memcpy(&pPMCtxt->tFIMDWinFBuffer[pArg->dwWinNum], pArg, sizeof(SVEARG_FIMD_WIN_FRAMEBUFFER));
pPMCtxt->bFIMDWinFBuffer[pArg->dwWinNum] = TRUE;
break;
}
case SVE_FIMD_SET_WINDOW_ENABLE:
{
DWORD dwWinNum;
VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_ENABLE\n\r")));
if(!pBufIn)
{
DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
bRet = FALSE;
break;
}
dwWinNum = *((DWORD *)pBufIn);
if(dwWinNum < DISP_WIN_MAX)
{
if (pPMCtxt->bPowerOn)
{
Disp_window_onfoff(dwWinNum, DISP_WINDOW_ON);
pCtxt->bWindowEnable[dwWinNum] = TRUE;
}
// Backup for PM
pPMCtxt->bFIMDWinEnable[dwWinNum] = TRUE;
}
break;
}
case SVE_FIMD_SET_WINDOW_DISABLE:
{
DWORD dwWinNum;
VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_DISABLE\n\r")));
if(!pBufIn)
{
DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
bRet = FALSE;
break;
}
dwWinNum = *((DWORD *)pBufIn);
if(dwWinNum < DISP_WIN_MAX)
{
if (pPMCtxt->bPowerOn)
{
Disp_window_onfoff(dwWinNum, DISP_WINDOW_OFF);
pCtxt->bWindowEnable[dwWinNum] = FALSE;
}
// Backup for PM
pPMCtxt->bFIMDWinEnable[dwWinNum] = FALSE;
}
break;
}
case SVE_FIMD_SET_WINDOW_BLEND_COLORKEY:
{
SVEARG_FIMD_WIN_COLORKEY *pArg;
VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_BLEND_COLORKEY\n\r")));
if(!pBufIn)
{
DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
bRet = FALSE;
break;
}
pArg = (SVEARG_FIMD_WIN_COLORKEY *)pBufIn;
if (pPMCtxt->bPowerOn)
{
Disp_set_color_key(pArg->dwWinNum, pArg->bOnOff, pArg->dwDirection, pArg->dwColorKey, pArg->dwCompareKey);
}
// Backup for PM
memcpy(&pPMCtxt->tFIMDColorKey[pArg->dwWinNum], pArg, sizeof(SVEARG_FIMD_WIN_COLORKEY));
pPMCtxt->bFIMDColorKey[pArg->dwWinNum] = TRUE;
break;
}
case SVE_FIMD_SET_WINDOW_BLEND_ALPHA:
{
SVEARG_FIMD_WIN_ALPHA *pArg;
VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_BLEND_ALPHA\n\r")));
if(!pBufIn)
{
DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
bRet = FALSE;
break;
}
pArg = (SVEARG_FIMD_WIN_ALPHA *)pBufIn;
if (pPMCtxt->bPowerOn)
{
Disp_set_alpha_blending(pArg->dwWinNum, pArg->dwMethod, pArg->dwAlpha0, pArg->dwAlpha1);
}
// Backup for PM
memcpy(&pPMCtxt->tFIMDAlpha[pArg->dwWinNum], pArg, sizeof(SVEARG_FIMD_WIN_ALPHA));
pPMCtxt->bFIMDAlpha[pArg->dwWinNum] = TRUE;
break;
}
case SVE_FIMD_WAIT_FRAME_INTERRUPT:
{
if (pPMCtxt->bPowerOn && pCtxt->bVideoEnable)
{
if (WAIT_TIMEOUT == SVE_wait_disp_cmd_done())
{
VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_WAIT_FRAME_INTERRUPT : SVE_wait_disp_cmd_done() TimeOut\n\r")));
bRet = FALSE;
}
}
else
{
VDE_INF((_T("[VDE:INF] SVE_DispCon_API_Proc() : SVE_FIMD_WAIT_FRAME_INTERRUPT : Video Output is Disabled or Power Off Mode\n\r")));
}
break;
}
case SVE_FIMD_GET_OUTPUT_STATUS:
{
SVEARG_FIMD_OUTPUT_STAT *pArg;
VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_GET_OUTPUT_STATUS\n\r")));
pArg = (SVEARG_FIMD_OUTPUT_STAT *)pBufOut;
if (pPMCtxt->bPowerOn)
{
pArg->dwLineCnt = Disp_get_line_count();
pArg->dwVerticalStatus = Disp_get_vertical_status();
pArg->dwHorizontalStatus = 0;
pArg->bENVID = Disp_get_envid_status();
}
else
{
// Return Pseudo Values in Power Off State
pArg->dwLineCnt = 0;
pArg->dwVerticalStatus = 0;
pArg->dwHorizontalStatus = 0;
pArg->bENVID = FALSE;
}
*pdwActualOut = sizeof(SVEARG_FIMD_OUTPUT_STAT);
break;
}
case SVE_FIMD_SET_WINDOW_COLORMAP:
VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_GET_OUTPUT_STATUS : Not Implemented Yet...\n\r")));
bRet = FALSE;
break;
case SVE_FIMD_GET_WINDOW_STATUS:
VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_GET_WINDOW_STATUS : Not Implemented Yet...\n\r")));
bRet = FALSE;
break;
case SVE_FIMD_SET_WINDOW_BLEND_DISABLE:
VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_BLEND_DISABLE : Not Implemented Yet...\n\r")));
bRet = FALSE;
break;
default: // This is filtered above switch statement
bRet = FALSE;
break;
}
CleanUp:
VDE_MSG((_T("[VDE] --SVE_DispCon_API_Proc()\n\r")));
return bRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -