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