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

📄 test.c

📁 SAMSUNG S3C6410 CPU BSP for winmobile6
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -