📄 ssbsiprender.cpp
字号:
}
// Destination Address
tParamBuffer.dwBufferRGBY = 0x57400000;
tParamBuffer.dwBufferCb = 0;
tParamBuffer.dwBufferCr = 0;
tParamBuffer.bWaitForVSync = FALSE;
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_DESTINATION_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_SET_DESTINATION_BUFFER Failed\n"));
return 0;
}
// Post Processing Start
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_PROCESSING_START, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_SET_PROCESSING_START Failed\n"));
return 0;
}
}
else
{
// Wait for Post Processing Finished
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_WAIT_PROCESSING_DONE, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_WAIT_PROCESSING_DONE Failed\n"));
return 0;
}
// Source Address
tParamBuffer.dwBufferRGBY = DisplayBuffPhyAddr;
tParamBuffer.dwBufferCb = tParamBuffer.dwBufferRGBY+tParamPost.dwSrcBaseWidth*tParamPost.dwSrcBaseHeight;
tParamBuffer.dwBufferCr = tParamBuffer.dwBufferCb+tParamPost.dwSrcBaseWidth*tParamPost.dwSrcBaseHeight/4;
tParamBuffer.bWaitForVSync = FALSE;
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_SOURCE_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_SET_SOURCE_BUFFER Failed\n"));
return 0;
}
// Post Processing Start
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_PROCESSING_START, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_SET_PROCESSING_START Failed\n"));
return 0;
}
}
#else // LOCAL_PATH
if (bFirstRender)
{
bFirstRender = FALSE;
tParamMode.dwWinMode = DISP_WIN0_POST_RGB;
tParamMode.dwBPP = DISP_24BPP_888;
tParamMode.dwWidth = DISPLAY_X;
tParamMode.dwHeight = DISPLAY_Y;
tParamMode.dwOffsetX = (LCD_X - tParamMode.dwWidth)/2;
tParamMode.dwOffsetY = (LCD_Y - tParamMode.dwHeight)/2;
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_MODE, &tParamMode, sizeof(SVEARG_FIMD_WIN_MODE), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_MODE Failed\n"));
return 0;
}
// Color Key Disable
tParamCKey.dwWinNum = DISP_WIN1;
tParamCKey.bOnOff = FALSE;
tParamCKey.dwDirection = DISP_FG_MATCH_BG_DISPLAY;
tParamCKey.dwColorKey = 0;
tParamCKey.dwCompareKey = 0;
// Alpha Set to 0x0 (Show Window0)
tParamAlpha.dwWinNum = DISP_WIN1;
tParamAlpha.dwMethod = DISP_ALPHA_PER_PLANE;
tParamAlpha.dwAlpha0 = 0x0;
tParamAlpha.dwAlpha1 = 0x0;
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_BLEND_COLORKEY, &tParamCKey, sizeof(SVEARG_FIMD_WIN_COLORKEY), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_BLEND_COLORKEY Failed\n"));
return 0;
}
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_BLEND_ALPHA, &tParamAlpha, sizeof(SVEARG_FIMD_WIN_ALPHA), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_BLEND_ALPHA Failed\n"));
return 0;
}
tParamPost.dwOpMode = POST_FREE_RUN_MODE;
tParamPost.dwScanMode = POST_PROGRESSIVE;
tParamPost.dwSrcType = POST_SRC_YUV420;
tParamPost.dwSrcBaseWidth = DisplayBufWidth;
tParamPost.dwSrcBaseHeight = DisplayBufHeight;
tParamPost.dwSrcOffsetX = DisplayOffsetX;
tParamPost.dwSrcOffsetY = DisplayOffsetY;
tParamPost.dwSrcWidth = DisplayWidth;
tParamPost.dwSrcHeight = DisplayHeight ;
tParamPost.dwDstType = POST_DST_FIFO_RGB888;
tParamPost.dwDstBaseWidth = DISPLAY_X;
tParamPost.dwDstBaseHeight = DISPLAY_Y;
tParamPost.dwDstWidth = DISPLAY_X;
tParamPost.dwDstHeight = DISPLAY_Y;
tParamPost.dwDstOffsetX = (tParamPost.dwDstBaseWidth - tParamPost.dwDstWidth)/2;
tParamPost.dwDstOffsetY = (tParamPost.dwDstBaseHeight - tParamPost.dwDstHeight)/2;
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_PROCESSING_PARAM, &tParamPost, sizeof(SVEARG_POST_PARAMETER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_SET_PROCESSING_PARAM Failed\n"));
return 0;
}
tParamBuffer.dwBufferRGBY =DisplayBuffPhyAddr;
tParamBuffer.dwBufferCb = tParamBuffer.dwBufferRGBY+tParamPost.dwSrcBaseWidth*tParamPost.dwSrcBaseHeight;
tParamBuffer.dwBufferCr = tParamBuffer.dwBufferCb+tParamPost.dwSrcBaseWidth*tParamPost.dwSrcBaseHeight/4;
tParamBuffer.bWaitForVSync = FALSE;
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_SOURCE_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_SET_SOURCE_BUFFER Failed\n"));
return 0;
}
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_NEXT_SOURCE_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_SET_NEXT_SOURCE_BUFFER Failed\n"));
return 0;
}
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_LOCALPATH_SET_WIN0_START, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_LOCALPATH_SET_WIN0_START Failed\n"));
return 0;
}
}
else
{
tParamBuffer.dwBufferRGBY = DisplayBuffPhyAddr;
tParamBuffer.dwBufferCb = tParamBuffer.dwBufferRGBY+tParamPost.dwSrcBaseWidth*tParamPost.dwSrcBaseHeight;
tParamBuffer.dwBufferCr = tParamBuffer.dwBufferCb+tParamPost.dwSrcBaseWidth*tParamPost.dwSrcBaseHeight/4;
tParamBuffer.bWaitForVSync = TRUE;
if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_NEXT_SOURCE_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_POST_SET_NEXT_SOURCE_BUFFER Failed\n"));
return 0;
}
}
#endif
ResetEvent(hEvent);
}
ExitThread(0);
}
void SsbSipDisplayEventSet()
{
SetEvent(hEvent);
}
void SsbSipDisplayEventCreate()
{
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
}
void SsbSipDisplayParamSet(UINT phy_addr, unsigned int width, unsigned int height, unsigned int buf_width, unsigned int buf_height, unsigned int offset_x, unsigned int offset_y)
{
DisplayBuffPhyAddr = phy_addr;
DisplayWidth = (width/16)*16;
DisplayHeight = (height/16)*16;
DisplayBufWidth = buf_width;
DisplayBufHeight = buf_height;
DisplayOffsetX = offset_x;
DisplayOffsetY = offset_y;
//printf("DisplayParamSet : buff(0x%08x) width(%d) height(%d)(buf_width:%d)(buf_height : %d)(offset_x : %d)(offset_y : %d)\n",
// DisplayBuffPhyAddr, DisplayWidth, DisplayHeight, DisplayBufWidth, DisplayBufHeight, DisplayOffsetX, DisplayOffsetY);
}
int SsbSipDisplayThreadCreate()
{
displayThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,
(LPTHREAD_START_ROUTINE)SsbSipDisplayThread,
NULL,
0,
NULL);
if (!displayThread) {
printf("Unable to create display thread");
return FALSE;
}
return TRUE;
}
void SsbSipDisplayThreadClose()
{
SsbSipDisplayDeInit();
CloseHandle(displayThread);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -