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

📄 post.c

📁 三星s3c2460开发板完整功能测试代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	OrgSrcWidth=SrcWidth=QCIF_XSIZE; //no source offset
	OrgSrcHeight=SrcHeight=QCIF_YSIZE; //no source offset
	SrcStartX=SrcStartY=0;
	OrgDstWidth=DstWidth=PQVGA_XSIZE; //no destination offset
	OrgDstHeight=DstHeight=PQVGA_YSIZE; //no destination offset
	DstStartX=DstStartY=0;
	InFrameBuffer=downloadAddress;
	OutFrameBuffer=LCDFRAMEBUFFERBG1;
	mode=POST_IN_YCBYCR420|POST_OUT_RGB16B;
	
	//LCD Initialization 
	LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);	


	PostInit(OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY, 
			OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY, 
			InFrameBuffer, OutFrameBuffer, mode);

	pISR_CAMIF_BLOCK_POST=(unsigned)PostIsr;
	rINTMSK &= ~(BIT_CAMIF_BLOCK_POST);
	rINTSUBMSK2 &= ~(BIT_SUB_POST);

#if 1
	PostStartProcessing(0);
#else
	if(mode&POST_IN_YCBYCR420)
		amount=OrgSrcWidth*OrgSrcHeight*3/2;

	if(mode&POST_OUT_RGB16B)
		amount+=OrgDstWidth*OrgDstHeight*2;
	else if(mode&POST_OUT_RGB24B)
		amount+=OrgDstWidth*OrgDstHeight*4;
	PostStartProcessing(amount, 0);
#endif

	while(!postProcessingDone); //waiting for post-processing done 
	postProcessingDone=0;
	
	LcdEnvidOnOff(1); //LCD Envid On

	rINTSUBMSK2 |= BIT_SUB_POST;
	rINTMSK |= BIT_CAMIF_BLOCK_POST; 
	while(!postProcessingDone);
	
	//LCD Envid On have to be executed in this point.

	printf("Test of Zoom In/Out, PIP Operation\n");
	printf("w.z.s.a for Zoom in/out\n");	
	printf("r.c.f.d for Coordination of zoomed image\n");
	printf("y.b.h.g for PIP\n");	
	printf("i.m.k.j for Coordination of PIP image\n");

	while(1) {

	// Code is needed.......	 
	
	 }

	rINTSUBMSK2 |= BIT_SUB_POST;
	rINTMSK |= BIT_CAMIF_BLOCK_POST;
	
}

void Test_Post_CIF_YCbCr420_PQVGA_16B_Offset(void)
{

	unsigned int OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
	unsigned int OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
	unsigned int InFrameBuffer, OutFrameBuffer;
	unsigned int mode;

	OrgSrcWidth=SrcWidth=CIF_XSIZE; //no source offset
	OrgSrcHeight=SrcHeight=CIF_YSIZE; //no source offset
	SrcStartX=SrcStartY=0;
	OrgDstWidth=DstWidth=PQVGA_XSIZE; //no destination offset
	OrgDstHeight=DstHeight=PQVGA_YSIZE; //no destination offset
	DstStartX=DstStartY=0;
	InFrameBuffer=downloadAddress;
	OutFrameBuffer=LCDFRAMEBUFFERBG1;
	mode=POST_IN_YCBYCR420|POST_OUT_RGB16B;
	
	//LCD Initialization 
	LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);	


	PostInit(OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY, 
			OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY, 
			InFrameBuffer, OutFrameBuffer, mode);

	pISR_CAMIF_BLOCK_POST=(unsigned)PostIsr;
	rINTMSK &= ~(BIT_CAMIF_BLOCK_POST);
	rINTSUBMSK2 &= ~(BIT_SUB_POST);

#if 1
	PostStartProcessing(0);
#else
	if(mode&POST_IN_YCBYCR420)
		amount=OrgSrcWidth*OrgSrcHeight*3/2;

	if(mode&POST_OUT_RGB16B)
		amount+=OrgDstWidth*OrgDstHeight*2;
	else if(mode&POST_OUT_RGB24B)
		amount+=OrgDstWidth*OrgDstHeight*4;
	PostStartProcessing(amount, 0);
#endif

	while(!postProcessingDone); //waiting for post-processing done 
	postProcessingDone=0;
	
	LcdEnvidOnOff(1); //LCD Envid On

	rINTSUBMSK2 |= BIT_SUB_POST;
	rINTMSK |= BIT_CAMIF_BLOCK_POST; 
	while(!postProcessingDone);
	
	//LCD Envid On have to be executed in this point.

	printf("Test of Zoom In/Out, PIP Operation\n");
	printf("w.z.s.a for Zoom in/out\n");	
	printf("r.c.f.d for Coordination of zoomed image\n");
	printf("y.b.h.g for PIP\n");	
	printf("i.m.k.j for Coordination of PIP image\n");

	while(1) {

	// Code is needed.......	 
	
	 }

	rINTSUBMSK2 |= BIT_SUB_POST;
	rINTMSK |= BIT_CAMIF_BLOCK_POST;
	
}

void PostEnvidOn(void)
{
	rMODE|=(1<<5);
}

void Test_Post_YCbCr420_PQVGA_Padded(void)
{

	unsigned int OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
	unsigned int OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
	unsigned int InFrameBuffer, OutFrameBuffer;
	unsigned int mode;
	unsigned int i;

	printf("Select size of input image[0:QCIF, 1:CIF]:");
	i=GetIntNum();
	if(i==0) {
		SrcWidth=QCIF_XSIZE;
		SrcHeight=QCIF_YSIZE;
		OrgSrcWidth=QCIF_XSIZE+32;
		OrgSrcHeight=QCIF_YSIZE+32;
	}
	else if(i==1) {
		SrcWidth=CIF_XSIZE;
		SrcHeight=CIF_YSIZE;
		OrgSrcWidth=CIF_XSIZE+32;
		OrgSrcHeight=CIF_YSIZE+32;
	}

	printf("\n");
	printf("Select bpp of output image[0:16B, 1:24B]:");
	i=GetIntNum();
	if(i==0) {
		mode=POST_IN_YCBYCR420|POST_OUT_RGB16B;
		LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);
	}
	else if(i==1) {
		mode=POST_IN_YCBYCR420|POST_OUT_RGB24B;
		LcdBGInit(MODE_PAR_24BIT_240320|MODE_NO_VIRTUAL_24B);
	}
	
//	OrgSrcWidth=SrcWidth=CIF_XSIZE; //no source offset
//	OrgSrcHeight=SrcHeight=CIF_YSIZE; //no source offset
	SrcStartX=SrcStartY=16;
	OrgDstWidth=DstWidth=PQVGA_XSIZE; //no destination offset
	OrgDstHeight=DstHeight=PQVGA_YSIZE; //no destination offset
	DstStartX=DstStartY=0;
	InFrameBuffer=downloadAddress;
	OutFrameBuffer=LCDFRAMEBUFFERBG1;
//	mode=POST_IN_YCBYCR420|POST_OUT_RGB16B;
	
	//LCD Initialization 
	//LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);	


	PostInit(OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY, 
			OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY, 
			InFrameBuffer, OutFrameBuffer, mode);

	pISR_CAMIF_BLOCK_POST=(unsigned)PostIsr;
	rINTMSK &= ~(BIT_CAMIF_BLOCK_POST);
	rINTSUBMSK2 &= ~(BIT_SUB_POST);

#if 1
	PostStartProcessing(0);
#else
	if(mode&POST_IN_YCBYCR420)
		amount=OrgSrcWidth*OrgSrcHeight*3/2;

	if(mode&POST_OUT_RGB16B)
		amount+=OrgDstWidth*OrgDstHeight*2;
	else if(mode&POST_OUT_RGB24B)
		amount+=OrgDstWidth*OrgDstHeight*4;
	PostStartProcessing(amount, 0);
#endif

	while(!postProcessingDone); //waiting for post-processing done 
	postProcessingDone=0;
	
	LcdEnvidOnOff(1); //LCD Envid On

	rINTSUBMSK2 |= BIT_SUB_POST;
	rINTMSK |= BIT_CAMIF_BLOCK_POST; 

	
}

void Test_Post_YCbCr420_PQVGA_Offset(void)
{

	int OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
	int OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
	unsigned int InFrameBuffer, OutFrameBuffer;
	unsigned int mode;
	unsigned int i;

	printf("Select size of INPUT image \n0:PQVGA, 1:CIF, 2:QCIF(D) ->");
	i=GetIntNum();
	if(i==1) {
		OrgSrcWidth=CIF_XSIZE;
		OrgSrcHeight=CIF_YSIZE;
	}
	else if(i==2) {
		OrgSrcWidth=QCIF_XSIZE;
		OrgSrcHeight=QCIF_YSIZE;
	}
	else {
		OrgSrcWidth=PQVGA_XSIZE;
		OrgSrcHeight=PQVGA_YSIZE;
	}

	mode=0;
	printf("Select Input format of Post Processor\n");
	printf("0:YCBYCR420(D), 1:YCBYCR422, 2:CBYCRY422 ->");
	i=GetIntNum();
	switch(i) {
		case 1:
			mode|=POST_IN_YCBYCR422;
			break;
		case 2:
			mode|=POST_IN_CBYCRY422;
			break;			
		default:			
			mode|=POST_IN_YCBYCR420;
			break;
	}	

	printf("Select size of OUTPUT image\n0:PQVGA(D), 1:CIF, 2:QCIF ->");
	i=GetIntNum();
	if(i==1) {
		OrgDstWidth=CIF_XSIZE;
		OrgDstHeight=CIF_YSIZE;
	}
	else if(i==2) {
		OrgDstWidth=QCIF_XSIZE;
		OrgDstHeight=QCIF_YSIZE;
	}
	else {
		OrgDstWidth=PQVGA_XSIZE;
		OrgDstHeight=PQVGA_YSIZE;
	}

	printf("Select bpp of OUTPUT image\n0:16B(D), 1:24B ->");
	i=GetIntNum();
	if(i==1) {
		mode=POST_IN_YCBYCR420|POST_OUT_RGB24B;
		LcdBGInit(MODE_PAR_24BIT_240320|MODE_NO_VIRTUAL_24B);
		GlibInit(MODE_PAR_24BIT_240320, BGBUFFER1);
	}
	else {
		mode=POST_IN_YCBYCR420|POST_OUT_RGB16B;
		LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);
		GlibInit(MODE_PAR_16BIT565_240320, BGBUFFER1);
	}
	
	SrcWidth=OrgSrcWidth;
	SrcHeight=OrgSrcHeight;
	SrcStartX=SrcStartY=0;
	OrgDstWidth=DstWidth=PQVGA_XSIZE; //no destination offset
	OrgDstHeight=DstHeight=PQVGA_YSIZE; //no destination offset
	DstStartX=DstStartY=0;
	InFrameBuffer=downloadAddress;
	OutFrameBuffer=LCDFRAMEBUFFERBG1;
	

	PostInit(OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY, 
			OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY, 
			InFrameBuffer, OutFrameBuffer, mode);

	pISR_CAMIF_BLOCK_POST=(unsigned)PostIsr;
	rINTMSK &= ~(BIT_CAMIF_BLOCK_POST);
	rINTSUBMSK2 &= ~(BIT_SUB_POST);

	PostStartProcessing(0);

	while(!postProcessingDone); //waiting for post-processing done 
	postProcessingDone=0;
	
	LcdEnvidOnOff(1); //LCD Envid On

	printf("Test of Zoom In/Out, PIP Operation\n");
	printf("w.z.s.a for Zoom in/out\n");	
	printf("r.c.f.d for Coordination of zoomed image\n");
	printf("y.b.h.g for PIP\n");	
	printf("i.m.k.j for Coordination of PIP image\n");

	SrcStartX=SrcStartY=0;
	DstStartX=DstStartY=0;
	while(1) {
		switch(getchar()) {
			case 'w':
				SrcHeight+=8;
				if(SrcHeight>OrgSrcHeight)
					SrcHeight=OrgSrcHeight;
				break;
			case 'z':
				SrcHeight-=8;
				if(SrcHeight<8)
					SrcHeight=8;
				break;
			case 's':
				SrcWidth+=8;
				if(SrcWidth>OrgSrcWidth)
					SrcWidth=OrgSrcWidth;
				break;
			case 'a':
				SrcWidth-=8;
				if(SrcWidth<8)
					SrcWidth=8;
				break;
			case 'r':
				SrcStartY+=8;
				if((SrcStartY-1)>(OrgSrcHeight-SrcHeight))
					SrcStartY=OrgSrcHeight-SrcHeight;
				break;
			case 'c':
				SrcStartY-=8;
				if(SrcStartY<0)
					SrcStartY=0;
				break;
			case 'f':
				SrcStartX+=8;
				if((SrcStartX-1)>(OrgSrcWidth-SrcWidth))
					SrcStartX=OrgSrcWidth-SrcWidth;
				break;
			case 'd':
				SrcStartX-=8;
				if(SrcStartX<0)
					SrcStartX=0;
				break;				
			case 'y':
				DstHeight+=4;
				if(DstHeight>OrgDstHeight)
					DstHeight=OrgDstHeight;
				break;
			case 'b':
				DstHeight-=4;
				if(DstHeight<12)
					DstHeight=12;
				break;
			case 'h':
				DstWidth+=4;
				if(DstWidth>OrgDstWidth)
					DstWidth=OrgDstWidth;
				break;
			case 'g':
				DstWidth-=4;
				if(DstWidth<12)
					DstWidth=12;
				break;
			case 'i':
				DstStartY+=8;
				if((DstStartY-1)>(OrgDstHeight-DstHeight))
					DstStartY=OrgDstHeight-DstHeight;
				break;
			case 'm':
				DstStartY-=8;
				if(DstStartY<0)
					DstStartY=0;
				break;
			case 'k':
				DstStartX+=8;
				if((DstStartX-1)>(OrgDstWidth-DstWidth))
					DstStartX=OrgDstWidth-DstWidth;
				break;

⌨️ 快捷键说明

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