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

📄 ssbsiprender.cpp

📁 6410BSP1
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                }

                // 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 + -