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

📄 test.c

📁 6410BSP2
💻 C
📖 第 1 页 / 共 3 页
字号:

#if (DEBUG == 1)
void printD(char* fmt, ...) 
{

    char str[512];
    wchar_t wstr[512];
    int    alen;
    int wlen;

    vsprintf(str, fmt, (char *)(&fmt+1));
    alen = strlen(str);
    wlen = MultiByteToWideChar(CP_ACP, 0, str, alen, 0, 0);
    MultiByteToWideChar(CP_ACP, 0, str, alen, wstr, wlen);
    wstr[wlen] = 0;
    NKDbgPrintfW(wstr);
}
#else
void printD(char* fmd, ...)
{
}
#endif


/*
*******************************************************************************
Name            : DecodeFileOutYCBYCR
Description     : To write result YCBYCR file.
Parameter       :
Return Value    : void
*******************************************************************************
*/
void DisplayJPEG (int srcAddr, 
                  INT32 srcwidth, INT32 srcheight, 
                  INT32 dstwidth, INT32 dstheight,
                  int displayTime)
{
    HANDLE                        hVideoDrv = INVALID_HANDLE_VALUE;
    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                        dwWinNum;
    DWORD                        dwBytes;    

    //-----------------------
    // Open Video Driver
    //-----------------------
    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;
    }

    // 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;
    }

    // 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;
    }

        tParamMode.dwWinMode = DISP_WIN0_POST_RGB;
        tParamMode.dwBPP = DISP_24BPP_888;
            tParamMode.dwWidth = dstwidth;
            tParamMode.dwHeight = dstheight;
            tParamMode.dwOffsetX = 0;
            tParamMode.dwOffsetY = 0;

            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;
            }

            // 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;
            }

            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;
            }

            tParamPost.dwOpMode = POST_FREE_RUN_MODE;
            tParamPost.dwScanMode = POST_PROGRESSIVE;
            tParamPost.dwSrcType = POST_SRC_RGB16;
             tParamPost.dwSrcBaseWidth = srcwidth;
            tParamPost.dwSrcBaseHeight = srcheight;
            tParamPost.dwSrcWidth = tParamPost.dwSrcBaseWidth;
            tParamPost.dwSrcHeight = tParamPost.dwSrcBaseHeight;
            tParamPost.dwSrcOffsetX = 0;
            tParamPost.dwSrcOffsetY = 0;
            tParamPost.dwDstType = POST_DST_FIFO_RGB888;
             tParamPost.dwDstBaseWidth = dstwidth;
            tParamPost.dwDstBaseHeight = dstheight;
            tParamPost.dwDstWidth = dstwidth;
            tParamPost.dwDstHeight = dstheight;
            tParamPost.dwDstOffsetX = 0;
            tParamPost.dwDstOffsetY = 0;

            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;
            }

            tParamBuffer.dwBufferRGBY = srcAddr;
            tParamBuffer.dwBufferCb = tParamBuffer.dwBufferRGBY+srcwidth*srcheight;
            tParamBuffer.dwBufferCr = tParamBuffer.dwBufferCb+srcwidth*srcheight/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;
            }

            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;
            }

            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;
            }

    Sleep(displayTime*1000);

    //--------------------------------------------
    // close surface
    //---------------------------------------------
    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;
    }
    // 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;
    }

    // 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;
    }

    CloseHandle(hVideoDrv);


}

BOOL ConvertYCBYCRToRGB(int inBuf, INT32 srcwidth, INT32 srcheight, 
                        unsigned long srcType,
                        int outBuf, INT32 dstwidth, INT32 dstheight,
                        unsigned long dstType)
{
    HANDLE hPostDrv = INVALID_HANDLE_VALUE;
    SVEARG_POST_PARAMETER tParamPost;
    SVEARG_POST_BUFFER tParamBuffer;
    DWORD dwBytes;

    hPostDrv = CreateFile( L"VDE0:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
    if (hPostDrv == INVALID_HANDLE_VALUE)
    {
        RETAILMSG(1,(L"[VDE:ERR] VDE0 Open Device Failed\n"));
        return FALSE;
    }
    
    // Request Post Processor H/W Resource to Video Engine Driver for Local Path
    if ( !DeviceIoControl(hPostDrv, IOCTL_SVE_RSC_REQUEST_POST, NULL, 0, NULL, 0, &dwBytes, NULL) )
    {
        RETAILMSG(1,(L"[VDE:ERR] IOCTL_SVE_RSC_REQUEST_POST Failed\n"));
        return    FALSE;
    }

    tParamPost.dwOpMode = POST_PER_FRAME_MODE;
    tParamPost.dwScanMode = POST_PROGRESSIVE;
    tParamPost.dwSrcType = srcType;
    tParamPost.dwSrcBaseWidth = srcwidth;
    tParamPost.dwSrcBaseHeight = srcheight;
    tParamPost.dwSrcWidth = srcwidth;
    tParamPost.dwSrcHeight = srcheight;
    tParamPost.dwSrcOffsetX = 0;
    tParamPost.dwSrcOffsetY = 0;
    tParamPost.dwDstType = dstType;
    tParamPost.dwDstBaseWidth = dstwidth;
    tParamPost.dwDstBaseHeight = dstheight;
    tParamPost.dwDstWidth = dstwidth;
    tParamPost.dwDstHeight = dstheight;
    tParamPost.dwDstOffsetX = 0;
    tParamPost.dwDstOffsetY = 0;

    if ( !DeviceIoControl(hPostDrv, 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 FALSE;
    }

    // Source Address
    tParamBuffer.dwBufferRGBY = (DWORD)inBuf;
    tParamBuffer.dwBufferCb = tParamBuffer.dwBufferRGBY+srcwidth*srcheight;
    tParamBuffer.dwBufferCr = tParamBuffer.dwBufferCb+srcwidth*srcheight/4;
    tParamBuffer.bWaitForVSync = FALSE;

    if ( !DeviceIoControl(hPostDrv, 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 FALSE;
    }

    // Destination Address
    tParamBuffer.dwBufferRGBY = (DWORD)outBuf;
    tParamBuffer.dwBufferCb = 0;
    tParamBuffer.dwBufferCr = 0;
    tParamBuffer.bWaitForVSync = FALSE;

    if ( !DeviceIoControl(hPostDrv, 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 FALSE;
    }

    // Post Processing Start
    if ( !DeviceIoControl(hPostDrv, 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 FALSE;
    }

    // Wait for Post Processing Finished
    if ( !DeviceIoControl(hPostDrv, 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 FALSE;
    }

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

    CloseHandle(hPostDrv);

    return TRUE;


}

/*
*******************************************************************************
Name            : DecodeFileOutRGB16ToPPM
Description     : To change RGB16 to PPM, and write result file.
Parameter       :
Return Value    : void
*******************************************************************************
*/
void DecodeFileOutRGB16ToPPM(unsigned char *p_img, int wd, int hi,  char *filename)
{
    int   i, size;
    FILE *fp_write;
    unsigned short rgb565;
    unsigned char  rgb[3];

    fp_write = fopen(filename, "wb");

    fprintf(fp_write, "P6\n");
    fprintf(fp_write, "# Samsung Electronics\n");
    fprintf(fp_write, "%d %d\n255\n", wd, hi);

    size = wd * hi;
    for (i=0; i<size; i++) {
        rgb565 = (*p_img) | (*(++p_img));
        rgb[0] = *p_img++;
        rgb[1] = *p_img;
        rgb565 = (rgb[0]<<8) | rgb[1];

        rgb[0] = R_RGB565(rgb565);
        rgb[1] = G_RGB565(rgb565);
        rgb[2] = B_RGB565(rgb565);

        fwrite(rgb, 1, 3, fp_write);
    }

    fclose(fp_write);
}

⌨️ 快捷键说明

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