?? ddoverlay.cpp
字號:
// Disable Overlay TV DMA
if (m_eTVDMAMode == TV_DMA_OVERLAY)
{
RETAILMSG(DISP_ZONE_TEMP, (_T("[DDHAL] DevOverlayInitialize() : Disable TV DMA\n\r")));
DevOutputDisableTVDMA();
}
// Initialize Overlay Widnow
if (m_OverlayCtxt.bLocalPath)
{
SVEARG_FIMD_WIN_MODE tParamMode;
SVEARG_POST_PARAMETER tParamPost;
SVEARG_POST_BUFFER tParamBuffer;
tParamMode.dwWinMode = m_OverlayCtxt.dwWinMode;
tParamMode.dwBPP = m_OverlayCtxt.dwBPPMode;
tParamMode.dwWidth = m_OverlayCtxt.uiDstWidth;
tParamMode.dwHeight = m_OverlayCtxt.uiDstHeight;
tParamMode.dwOffsetX = m_OverlayCtxt.uiDstOffsetX;
tParamMode.dwOffsetY = m_OverlayCtxt.uiDstOffsetY;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_MODE, &tParamMode, sizeof(SVEARG_FIMD_WIN_MODE), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayInitialize() : IOCTL_SVE_FIMD_SET_WINDOW_MODE Failed\n\r")));
}
tParamPost.dwOpMode = POST_FREE_RUN_MODE;
tParamPost.dwScanMode = POST_PROGRESSIVE;
tParamPost.dwSrcType = m_OverlayCtxt.dwPostSrcType;
tParamPost.dwSrcBaseWidth = m_OverlayCtxt.pSurface->Width();
tParamPost.dwSrcBaseHeight = m_OverlayCtxt.pSurface->Height();
tParamPost.dwSrcWidth = m_OverlayCtxt.uiSrcWidth;
tParamPost.dwSrcHeight = m_OverlayCtxt.uiSrcHeight;
tParamPost.dwSrcOffsetX = m_OverlayCtxt.uiSrcOffsetX;
tParamPost.dwSrcOffsetY = m_OverlayCtxt.uiSrcOffsetY;
tParamPost.dwDstType = POST_DST_FIFO_RGB888;
tParamPost.dwDstBaseWidth = m_OverlayCtxt.uiDstWidth;
tParamPost.dwDstBaseHeight = m_OverlayCtxt.uiDstHeight;
tParamPost.dwDstWidth = m_OverlayCtxt.uiDstWidth;
tParamPost.dwDstHeight = m_OverlayCtxt.uiDstHeight;
tParamPost.dwDstOffsetX = 0;
tParamPost.dwDstOffsetY = 0;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_POST_SET_PROCESSING_PARAM, &tParamPost, sizeof(SVEARG_POST_PARAMETER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayInitialize() : IOCTL_SVE_POST_SET_PROCESSING_PARAM Failed\n\r")));
}
tParamBuffer.dwBufferRGBY = m_OverlayCtxt.pSurface->OffsetInVideoMemory() + m_VideoMemoryPhysicalBase;
tParamBuffer.dwBufferCb = tParamBuffer.dwBufferRGBY+m_OverlayCtxt.pSurface->m_uiOffsetCb;
tParamBuffer.dwBufferCr = tParamBuffer.dwBufferRGBY+m_OverlayCtxt.pSurface->m_uiOffsetCr;
tParamBuffer.bWaitForVSync = FALSE;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_POST_SET_SOURCE_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayInitialize() : IOCTL_SVE_POST_SET_SOURCE_BUFFER Failed\n\r")));
}
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_POST_SET_NEXT_SOURCE_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayInitialize() : IOCTL_SVE_POST_SET_NEXT_SOURCE_BUFFER Failed\n\r")));
}
}
else
{
SVEARG_FIMD_WIN_MODE tParamMode;
SVEARG_FIMD_WIN_FRAMEBUFFER tParamFB;
tParamMode.dwWinMode = m_OverlayCtxt.dwWinMode;
tParamMode.dwBPP = m_OverlayCtxt.dwBPPMode;
tParamMode.dwWidth = m_OverlayCtxt.uiDstWidth;
tParamMode.dwHeight = m_OverlayCtxt.uiDstHeight;
tParamMode.dwOffsetX = m_OverlayCtxt.uiDstOffsetX;
tParamMode.dwOffsetY = m_OverlayCtxt.uiDstOffsetY;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_MODE, &tParamMode, sizeof(SVEARG_FIMD_WIN_MODE), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayInitialize() : IOCTL_SVE_FIMD_SET_WINDOW_MODE Failed\n\r")));
}
tParamFB.dwWinNum = OVERLAY_WINDOW;
tParamFB.dwFrameBuffer = m_OverlayCtxt.pSurface->OffsetInVideoMemory() + m_VideoMemoryPhysicalBase;
tParamFB.bWaitForVSync = FALSE;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_FRAMEBUFFER, &tParamFB, sizeof(SVEARG_FIMD_WIN_FRAMEBUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayInitialize() : IOCTL_SVE_FIMD_SET_WINDOW_FRAMEBUFFER Failed\n\r")));
}
}
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --DevOverlayInitialize()\n\r")));
}
void
S3C6410Disp::DevOverlaySetPosition(void)
{
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] ++DevOverlaySetPosition()\n\r")));
DWORD dwBytes;
SVEARG_FIMD_WIN_POS tParam;
tParam.dwWinNum = OVERLAY_WINDOW;
tParam.dwOffsetX = m_OverlayCtxt.uiDstOffsetX;
tParam.dwOffsetY = m_OverlayCtxt.uiDstOffsetY;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_POSITION, &tParam, sizeof(SVEARG_FIMD_WIN_POS), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlaySetPosition() : IOCTL_SVE_FIMD_SET_WINDOW_POSITION Failed\n\r")));
}
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --DevOverlaySetPosition()\n\r")));
}
void
S3C6410Disp::DevOverlayEnable(void)
{
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] ++%s()\n\r"), _T(__FUNCTION__)));
DWORD dwBytes;
if (!m_OverlayCtxt.bEnabled)
{
if (m_OverlayCtxt.bLocalPath)
{
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_LOCALPATH_SET_WIN0_START, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlaySetPosition() : IOCTL_SVE_LOCALPATH_SET_WIN0_START Failed\n\r")));
}
}
else
{
DWORD dwParam;
dwParam = OVERLAY_WINDOW;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_ENABLE, &dwParam, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] %s() : IOCTL_SVE_FIMD_SET_WINDOW_ENABLE Failed\n\r"), _T(__FUNCTION__)));
}
}
m_OverlayCtxt.bEnabled = TRUE;
}
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --%s()\n\r"), _T(__FUNCTION__)));
}
void
S3C6410Disp::DevOverlayDisable(void)
{
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] ++%s()\n\r"), _T(__FUNCTION__)));
DWORD dwBytes;
if (m_OverlayCtxt.bEnabled)
{
if (m_OverlayCtxt.bLocalPath)
{
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_LOCALPATH_SET_WIN0_STOP, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlaySetPosition() : IOCTL_SVE_LOCALPATH_SET_WIN0_STOP Failed\n\r")));
}
}
else
{
DWORD dwParam;
dwParam = OVERLAY_WINDOW;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_DISABLE, &dwParam, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayDisable() : IOCTL_SVE_FIMD_SET_WINDOW_DISABLE Failed\n\r")));
}
}
m_OverlayCtxt.bEnabled = FALSE;
}
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --DevOverlayDisable()\n\r")));
}
void
S3C6410Disp::DevOverlayBlendDisable(void)
{
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] DevOverlayBlendDisable()\n\r")));
SVEARG_FIMD_WIN_COLORKEY tParamCKey;
SVEARG_FIMD_WIN_ALPHA tParamAlpha;
DWORD dwBytes;
// Color Key Disable
tParamCKey.dwWinNum = PRIMARY_WINDOW;
tParamCKey.bOnOff = FALSE;
tParamCKey.dwDirection = DISP_FG_MATCH_BG_DISPLAY;
tParamCKey.dwColorKey = 0;
tParamCKey.dwCompareKey = 0;
// Alpha Set to 0x0 (Show Window0)
tParamAlpha.dwWinNum = PRIMARY_WINDOW;
tParamAlpha.dwMethod = DISP_ALPHA_PER_PLANE;
tParamAlpha.dwAlpha0 = 0x0;
tParamAlpha.dwAlpha1 = 0x0;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_BLEND_COLORKEY, &tParamCKey, sizeof(SVEARG_FIMD_WIN_COLORKEY), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayBlendDisable() : IOCTL_SVE_FIMD_SET_WINDOW_BLEND_COLORKEY Failed\n\r")));
}
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_BLEND_ALPHA, &tParamAlpha, sizeof(SVEARG_FIMD_WIN_ALPHA), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlayBlendDisable() : IOCTL_SVE_FIMD_SET_WINDOW_BLEND_ALPHA Failed\n\r")));
}
}
void
S3C6410Disp::DevOverlaySetColorKey(void)
{
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] DevOverlaySetColorKey()\n\r")));
SVEARG_FIMD_WIN_COLORKEY tParamCKey;
DWORD dwBytes;
if (m_OverlayCtxt.bSrcCKey)
{
tParamCKey.dwWinNum = PRIMARY_WINDOW;
tParamCKey.bOnOff = TRUE;
tParamCKey.dwDirection = DISP_BG_MATCH_FG_DISPLAY;
tParamCKey.dwColorKey = m_OverlayCtxt.ColorKey;
tParamCKey.dwCompareKey = m_OverlayCtxt.CompareKey;
}
else
{
tParamCKey.dwWinNum = PRIMARY_WINDOW;
tParamCKey.bOnOff = TRUE;
tParamCKey.dwDirection = DISP_FG_MATCH_BG_DISPLAY;
tParamCKey.dwColorKey = m_OverlayCtxt.ColorKey;
tParamCKey.dwCompareKey = m_OverlayCtxt.CompareKey;
}
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_BLEND_COLORKEY, &tParamCKey, sizeof(SVEARG_FIMD_WIN_COLORKEY), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlaySetColorKey() : IOCTL_SVE_FIMD_SET_WINDOW_BLEND_COLORKEY Failed\n\r")));
}
}
void
S3C6410Disp::DevOverlaySetAlpha(void)
{
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] DevOverlaySetAlpha()\n\r")));
SVEARG_FIMD_WIN_ALPHA tParamAlpha;
DWORD dwBytes;
if (m_OverlayCtxt.bUsePixelBlend)
{
tParamAlpha.dwWinNum = PRIMARY_WINDOW;
tParamAlpha.dwMethod = DISP_ALPHA_PER_PIXEL;
tParamAlpha.dwAlpha0 = m_OverlayCtxt.Alpha;
tParamAlpha.dwAlpha1 = 0x0;
}
else
{
tParamAlpha.dwWinNum = PRIMARY_WINDOW;
tParamAlpha.dwMethod = DISP_ALPHA_PER_PLANE;
tParamAlpha.dwAlpha0 = m_OverlayCtxt.Alpha;
tParamAlpha.dwAlpha1 = m_OverlayCtxt.Alpha;
}
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_BLEND_ALPHA, &tParamAlpha, sizeof(SVEARG_FIMD_WIN_ALPHA), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOverlaySetAlpha() : IOCTL_SVE_FIMD_SET_WINDOW_BLEND_ALPHA Failed\n\r")));
}
}
void
S3C6410Disp::DevRecoverOverlay(void)
{
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] ++DevRecoverOverlay()\n\r")));
if (m_OverlayCtxt.bShow)
{
// Initialize Overlay Window
DevOverlayInitialize();
// Configure Blending
if (m_OverlayCtxt.bBlendOn)
{
if (m_OverlayCtxt.bColorKey)
{
DevOverlaySetColorKey();
}
else
{
DevOverlaySetAlpha();
}
}
else
{
DevOverlayBlendDisable();
}
DevOverlayEnable();
}
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --DevRecoverOverlay()\n\r")));
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -