📄 test.c
字号:
encodeTime = GetTickCount() - encodeTime;
printf( "encodeTime : %d \n", encodeTime);
#endif
if(ret != JPEG_OK){
result = FALSE;
break;
}
//////////////////////////////////////////////////////////////
// 8. get output buffer address //
//////////////////////////////////////////////////////////////
OutBuf = SsbSipJPEGGetEncodeOutBuf(handle, &frameSize);
if(OutBuf == NULL){
result = FALSE;
break;
}
printD("OutBuf : 0x%x freamsize : %d\n", OutBuf, frameSize);
//////////////////////////////////////////////////////////////
// 9. write JPEG result file //
//////////////////////////////////////////////////////////////
fp = fopen(outFilename, "wb");
fwrite(OutBuf, 1, frameSize, fp);
fclose(fp);
//////////////////////////////////////////////////////////////
// 10. finalize handle //
//////////////////////////////////////////////////////////////
SsbSipJPEGEncodeDeInit(handle);
free(ExifInfo);
Sleep(5);
}while(1);
if(result == FALSE){
SsbSipJPEGEncodeDeInit(handle);
if(ExifInfo != NULL)
free(ExifInfo);
}
fclose(CTRfp);
printf("------------------------Encoder Test Done---------------------\n");
}
/*
*******************************************************************************
Name : makeExifParam
Description : To make exif input parameter
Parameter :
Return Value : exifFileInfo - exif input parameter
*******************************************************************************
*/
void makeExifParam(ExifFileInfo *exifFileInfo)
{
strcpy(exifFileInfo->Make,"Samsung SYS.LSI make");;
strcpy(exifFileInfo->Model,"Samsung 2007 model");
strcpy(exifFileInfo->Version,"version 1.0.2.0");
strcpy(exifFileInfo->DateTime,"2007:05:16 12:32:54");
strcpy(exifFileInfo->CopyRight,"Samsung Electronics@2007:All rights reserved");
exifFileInfo->Height = 320;
exifFileInfo->Width = 240;
exifFileInfo->Orientation = 1; // top-left
exifFileInfo->ColorSpace = 1;
exifFileInfo->Process = 1;
exifFileInfo->Flash = 0;
exifFileInfo->FocalLengthNum = 1;
exifFileInfo->FocalLengthDen = 4;
exifFileInfo->ExposureTimeNum = 1;
exifFileInfo->ExposureTimeDen = 20;
exifFileInfo->FNumberNum = 1;
exifFileInfo->FNumberDen = 35;
exifFileInfo->ApertureFNumber = 1;
exifFileInfo->SubjectDistanceNum = -20;
exifFileInfo->SubjectDistanceDen = -7;
exifFileInfo->CCDWidth = 1;
exifFileInfo->ExposureBiasNum = -16;
exifFileInfo->ExposureBiasDen = -2;
exifFileInfo->WhiteBalance = 6;
exifFileInfo->MeteringMode = 3;
exifFileInfo->ExposureProgram = 1;
exifFileInfo->ISOSpeedRatings[0] = 1;
exifFileInfo->ISOSpeedRatings[1] = 2;
exifFileInfo->FocalPlaneXResolutionNum = 65;
exifFileInfo->FocalPlaneXResolutionDen = 66;
exifFileInfo->FocalPlaneYResolutionNum = 70;
exifFileInfo->FocalPlaneYResolutionDen = 71;
exifFileInfo->FocalPlaneResolutionUnit = 3;
exifFileInfo->XResolutionNum = 48;
exifFileInfo->XResolutionDen = 20;
exifFileInfo->YResolutionNum = 48;
exifFileInfo->YResolutionDen = 20;
exifFileInfo->RUnit = 2;
exifFileInfo->BrightnessNum = -7;
exifFileInfo->BrightnessDen = 1;
strcpy(exifFileInfo->UserComments,"Usercomments");
}
/*
*******************************************************************************
Name : DecodeFileOutYUV422
Description : To change YCBYCR to YUV422, and write result file.
Parameter :
Return Value : void
*******************************************************************************
*/
void DecodeFileOutYUV422(char *OutBuf, UINT32 streamSize, char *filename)
{
UINT32 i;
UINT32 indexY, indexCB, indexCR;
char *Buf;
FILE *fp;
Buf = (char *)malloc(MAX_YUV_SIZE);
memset(Buf, 0x00, MAX_YUV_SIZE);
printD("convertyuvformat\n");
indexY = 0;
indexCB = streamSize >> 1;
indexCR = indexCB+(streamSize >> 2);
printD("indexY(%ld), indexCB(%ld), indexCR(%ld)\n", indexY, indexCB, indexCR);
for(i = 0; i < streamSize; i++)
{
if((i%2) == 0)
Buf[indexY++] = OutBuf[i];
if((i%4) == 1)
Buf[indexCB++] = OutBuf[i];
if((i%4) == 3)
Buf[indexCR++] = OutBuf[i];
}
fp = fopen(filename, "wb");
fwrite(Buf, 1, streamSize, fp);
fclose(fp);
free(Buf);
}
/*
*******************************************************************************
Name : DecodeFileOutYCBYCR
Description : To write result YCBYCR file.
Parameter :
Return Value : void
*******************************************************************************
*/
void DecodeFileOutYCBYCR(char *OutBuf, UINT32 streamSize, char *filename)
{
FILE *fp;
fp = fopen(filename, "wb");
fwrite(OutBuf, 1, streamSize, fp);
fclose(fp);
}
void printD(char* fmt, ...)
{
#if (DEBUG == 1)
char str[512];
vsprintf(str, fmt, (char *)(&fmt+1));
printf(str);
#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 + -