📄 test.c
字号:
#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 + -