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

📄 ssbsiprender.cpp

📁 6410BSP1
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************************
*                                                                               *
* Copyright (c) 2008 Samsung System LSI                                            *
* All rights reserved.                                                          *
*                                                                               *
* This software is test sample code for Hybrid Divx Decoder                        *
*                                                                                *
* Author : Jiyoung Shin                                                            *
* Last Changed : 2008.06.10                                                     *
*********************************************************************************/

#include <windows.h>
// Platform Dependent
#include <SVEDriverAPI.h>
#include "SsbSipRender.h"
#include "SsbSipMpeg4Decode.h"

HANDLE            hEvent = INVALID_HANDLE_VALUE;
HANDLE            displayThread = INVALID_HANDLE_VALUE;
HANDLE             hVideoDrv = INVALID_HANDLE_VALUE;
static UINT        DisplayBuffPhyAddr;
static unsigned int    DisplayWidth, DisplayHeight;
static unsigned int    DisplayBufWidth, DisplayBufHeight;
static unsigned int    DisplayOffsetX, DisplayOffsetY;

static int SsbSipDisplayInit()
{
    DWORD             dwBytes;


    hVideoDrv = CreateFile( L"VDE0:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
    if (hVideoDrv == INVALID_HANDLE_VALUE)
    {
        RETAILMSG(1,(L"[VDE:ERR] VDE0 Open Device Failed\n"));
        return 0;
    }

    // Request FIMD Win0 H/W Resource to Video Engine Driver for Local Path
    if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_RSC_REQUEST_FIMD_WIN0, NULL, 0, NULL, 0, &dwBytes, NULL) )
    {
        RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_RSC_REQUEST_FIMD_WIN0 Failed\n"));
        return 0;
    }

    // Request Post Processor H/W Resource to Video Engine Driver for Local Path
    if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_RSC_REQUEST_POST, NULL, 0, NULL, 0, &dwBytes, NULL) )
    {
        RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_RSC_REQUEST_POST Failed\n"));
        return 0;
    }

    return    1;

}

int SsbSipDisplayDeInit()
{
    DWORD             dwBytes;
    DWORD            dwWinNum;

#ifdef MEM_TO_MEM
    dwWinNum = DISP_WIN0;
    if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_DISABLE, &dwWinNum, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
    {
        RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_DISABLE Failed\n"));
        return 0;
    }
#else //LOCAL_PATH

    if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_LOCALPATH_SET_WIN0_STOP, NULL, 0, NULL, 0, &dwBytes, NULL) )
    {
        RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_LOCALPATH_SET_WIN0_STOP Failed\n"));
        return 0;
    }


#endif

    // Release FIMD Win0 H/W Resource to Video Engine Driver for Local Path
    if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_RSC_RELEASE_FIMD_WIN0, NULL, 0, NULL, 0, &dwBytes, NULL) )
    {
        RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_RSC_RELEASE_FIMD_WIN0 Failed\n"));
        return 0;
    }

    // Release Post Processor H/W Resource to Video Engine Driver for Local Path
    if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_RSC_RELEASE_POST, NULL, 0, NULL, 0, &dwBytes, NULL) )
    {
        RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_RSC_RELEASE_POST Failed\n"));
        return 0;
    }

    CloseHandle(hVideoDrv);
    return 0;
}


static DWORD WINAPI SsbSipDisplayThread()
{
    int                            ret;
    BOOL                        bFirstRender;
    SVEARG_FIMD_WIN_MODE        tParamMode;
    SVEARG_FIMD_WIN_FRAMEBUFFER tParamFB;
    SVEARG_FIMD_WIN_COLORKEY    tParamCKey;
    SVEARG_FIMD_WIN_ALPHA        tParamAlpha;
    SVEARG_POST_PARAMETER        tParamPost;
    SVEARG_POST_BUFFER            tParamBuffer;
    DWORD                         dwBytes;
    DWORD                        dwWinNum;


    printf("StartDisplay\n");
    
    if(!SsbSipDisplayInit()) ExitThread(0);

    bFirstRender = TRUE;

    while(TRUE){

        WaitForSingleObject(hEvent, INFINITE);

#ifdef MEM_TO_MEM
        if (bFirstRender)
        {
                bFirstRender = FALSE;

                tParamMode.dwWinMode = DISP_WIN0_DMA;
                tParamMode.dwBPP = DISP_16BPP_565;
                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;
                }

                // Set Window0 Framebuffer
                tParamFB.dwWinNum = DISP_WIN0;
                tParamFB.dwFrameBuffer = 0x57400000;
                tParamFB.bWaitForVSync = FALSE;
                if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_FRAMEBUFFER, &tParamFB, sizeof(SVEARG_FIMD_WIN_FRAMEBUFFER), NULL, 0, &dwBytes, NULL) )
                {
                    RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_FRAMEBUFFER Failed\n"));
                    return 0;
                }

                // Window0 Enable
                dwWinNum = DISP_WIN0;
                if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_ENABLE, &dwWinNum, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
                {
                    RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_ENABLE Failed\n"));
                    return 0;
                }

                tParamPost.dwOpMode = POST_PER_FRAME_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_RGB16;
                 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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -