📄 post.c
字号:
/*****************************************
NAME: Post.c
DESC: Post Processor test codes
HISTORY: 2004.01.31:draft ver 0.0
*****************************************/
#include <string.h>
#include "24a0addr.h"
#include "24a0lib.h"
#include "def.h"
#include "post.h"
#include "lcdlib.h"
#include "imagedef.h"
#include "flash.h"
extern U32 downloadAddress;
volatile U32 postProcessingDone;
U32 ADDRStartY[4], ADDREndY[4];
U32 ADDRStartCb[4], ADDREndCb[4];
U32 ADDRStartCr[4], ADDREndCr[4];
U32 ADDRStartRGB[4], ADDREndRGB[4];
void Test_SoftwareConver_420(void);
void * post_function[][2]=
{
(void *)PostDownloadImage, "Image Downloading ",
(void *)Test_Post_QCIF_YCbCr420_PQVGA_16B, "QCIF YCbCr420 to PQVGA 16bpp ",
(void *)Test_Post_QCIF_YCbCr420_PQVGA_24B, "QCIF YCbCr420 to PQVGA 24bpp ",
(void *)Test_Post_QCIF_YCbCr420_PQVGA_16B_Offset, "QCIF YCbCr420 to PQVGA 16bpp with offset ",
(void *)Test_Post_PQVGA_YCbCr420_PQVGA_16B, "PQVGA YCbCr420 to PQVGA 16bpp ",
(void *)Test_Post_PQVGA_YCbCr420_PQVGA_24B, "PQVGA YCbCr420 to PQVGA 24bpp ",
(void *)Test_Post_CIF_YCbCr420_PQVGA_16B, "CIF YCbCr420 to PQVGA 16bpp ",
(void *)Test_Post_CIF_YCbCr420_PQVGA_24B, "CIF YCbCr420 to PQVGA 24bpp ",
(void *)Test_Post_CIF_YCbCr420_PQVGA_16B_Offset, "CIF YCbCr420 to PQVGA 16bpp with offset ",
(void *)Test_Post_2M_YCbCr420_PQVGA_16B, "1600x1200 YCbCr420 to PQVGA 16bpp ",
(void *)Test_Post_2M_YCbCr420_PQVGA_24B, "1600x1200 YCbCr420 to PQVGA 24bpp ",
(void *)Test_Post_YCbCr420_PQVGA_Padded, "Post Test with Padded Image ",
(void *)Test_Post_YCbCr420_PQVGA_Offset, "Post Test with Input/Out Offset ",
(void *)Test_Post_RGB_RGB_PQVGA, "Post Test RGB to RGB ",
0,0
};
void PostDisplayFunction(void)
{
int i;
i=0;
Uart_Printf("\n\n");
while(1) { //display menu
Uart_Printf("%2d:%s",i,post_function[i][1]);
i++;
if((int)(post_function[i][0])==0) {
Uart_Printf("\n");
break;
}
if((i%2)==0) Uart_Printf("\n");
}
}
void Ch27_POST(void)
{
int i;
Uart_Printf("\n----Test of Post Processor----\n");
//LCD Initializtion
Uart_Printf("If you want to test Post Processor, then you must download image to memory before testing\n");
while(1) {
PostDisplayFunction();
Uart_Printf("\nSelect(-1 to exit): ");
i = Uart_GetIntNum();
if(i==-1) break;
if(i>=0 && (i<(sizeof(post_function)/8)) )
( (void (*)(void)) (post_function[i][0]) )(); // execute selected function.
}
}
void Test_Post_QCIF_YCbCr420_176220_16B(void)
{
U32 OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
U32 OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
U32 InFrameBuffer, OutFrameBuffer;
U32 mode;
OrgSrcWidth=SrcWidth=QCIF_XSIZE; //no source offset
OrgSrcHeight=SrcHeight=QCIF_YSIZE; //no source offset
SrcStartX=SrcStartY=0;
OrgDstWidth=DstWidth=176; //no destination offset
OrgDstHeight=DstHeight=220; //no destination offset
DstStartX=DstStartY=0;
InFrameBuffer=downloadAddress;
OutFrameBuffer=LCDFRAMEBUFFERBG1;
mode=POST_IN_YCBYCR420|POST_OUT_RGB16B;
//LCD Initialization
LcdBGInit(MODE_SER_16BIT565_176220|MODE_NO_VIRTUAL_16B);
PostInit(OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY,
OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY,
InFrameBuffer, OutFrameBuffer, mode);
pISR_LCD_POST=(unsigned)PostIsr;
rINTMSK &= ~(BIT_LCD_POST);
rINTSUBMSK &= ~(BIT_SUB_POST);
PostStartProcessing(0);
while(!postProcessingDone); //waiting for post-processing done
postProcessingDone=0;
LcdEnvidOnOff(1); //LCD Envid On
rINTSUBMSK |= BIT_SUB_POST;
rINTMSK |= BIT_LCD_POST;
}
void Test_Post_QCIF_YCbCr420_176220_24B(void)
{
U32 OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
U32 OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
U32 InFrameBuffer, OutFrameBuffer;
U32 mode;
OrgSrcWidth=SrcWidth=QCIF_XSIZE; //no source offset
OrgSrcHeight=SrcHeight=QCIF_YSIZE; //no source offset
SrcStartX=SrcStartY=0;
OrgDstWidth=DstWidth=176; //no destination offset
OrgDstHeight=DstHeight=220; //no destination offset
DstStartX=DstStartY=0;
InFrameBuffer=downloadAddress;
OutFrameBuffer=LCDFRAMEBUFFERBG1;
mode=POST_IN_YCBYCR420|POST_OUT_RGB24B;
//LCD Initialization
LcdBGInit(MODE_SER_18BIT_176220|MODE_NO_VIRTUAL_24B);
PostInit(OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY,
OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY,
InFrameBuffer, OutFrameBuffer, mode);
pISR_LCD_POST=(unsigned)PostIsr;
rINTMSK &= ~(BIT_LCD_POST);
rINTSUBMSK &= ~(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
rINTSUBMSK |= BIT_SUB_POST;
rINTMSK |= BIT_LCD_POST;
}
void Test_Post_QCIF_YCbCr420_PQVGA_16B(void)
{
U32 OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
U32 OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
U32 InFrameBuffer, OutFrameBuffer;
U32 mode;
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_LCD_POST=(unsigned)PostIsr;
rINTMSK &= ~(BIT_LCD_POST);
rINTSUBMSK &= ~(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
rINTSUBMSK |= BIT_SUB_POST;
rINTMSK |= BIT_LCD_POST;
}
void Test_Post_QCIF_YCbCr420_PQVGA_24B(void)
{
U32 OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
U32 OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
U32 InFrameBuffer, OutFrameBuffer;
U32 mode;
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_RGB24B;
//LCD Initialization
LcdBGInit(MODE_PAR_18BIT_240320|MODE_NO_VIRTUAL_24B);
PostInit(OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY,
OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY,
InFrameBuffer, OutFrameBuffer, mode);
pISR_LCD_POST=(unsigned)PostIsr;
rINTMSK &= ~(BIT_LCD_POST);
rINTSUBMSK &= ~(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
rINTSUBMSK |= BIT_SUB_POST;
rINTMSK |= BIT_LCD_POST;
}
void Test_Post_PQVGA_YCbCr420_PQVGA_16B(void)
{
U32 i;
U32 OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
U32 OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
U32 InFrameBuffer, OutFrameBuffer;
U32 mode;
OrgSrcWidth=SrcWidth=PQVGA_XSIZE; //no source offset
OrgSrcHeight=SrcHeight=PQVGA_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=0;
Uart_Printf("Select Input format of Post Processor\n");
Uart_Printf("0:YCBYCR420, 1:YCBYCR422, 2:CBYCRY\n");
i=Uart_GetIntNum();
switch(i) {
case 0:
mode|=POST_IN_YCBYCR420;
break;
case 1:
mode|=POST_IN_YCBYCR422;
break;
case 2:
mode|=POST_IN_CBYCRY422;
break;
default:
mode|=POST_IN_YCBYCR420;
break;
}
Uart_Printf("Select Output format of Post Processor\n");
Uart_Printf("0:RG16, 1:RGB24\n");
i=Uart_GetIntNum();
switch(i) {
case 0:
mode|=POST_OUT_RGB16B;
LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);
break;
case 1:
mode|=POST_OUT_RGB24B;
LcdBGInit(MODE_PAR_18BIT_240320|MODE_NO_VIRTUAL_24B);
break;
default:
mode|=POST_OUT_RGB16B;
LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);
break;
}
//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_LCD_POST=(unsigned)PostIsr;
rINTMSK &= ~(BIT_LCD_POST);
rINTSUBMSK &= ~(BIT_SUB_POST);
Uart_Printf("rMODE:0x%x\n", rMODE);
#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
rINTSUBMSK |= BIT_SUB_POST;
rINTMSK |= BIT_LCD_POST;
}
void Test_Post_PQVGA_YCbCr420_PQVGA_24B(void)
{
U32 OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
U32 OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
U32 InFrameBuffer, OutFrameBuffer;
U32 mode;
OrgSrcWidth=SrcWidth=PQVGA_XSIZE; //no source offset
OrgSrcHeight=SrcHeight=PQVGA_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_RGB24B;
//LCD Initialization
LcdBGInit(MODE_PAR_18BIT_240320|MODE_NO_VIRTUAL_24B);
PostInit(OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY,
OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY,
InFrameBuffer, OutFrameBuffer, mode);
pISR_LCD_POST=(unsigned)PostIsr;
rINTMSK &= ~(BIT_LCD_POST);
rINTSUBMSK &= ~(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
rINTSUBMSK |= BIT_SUB_POST;
rINTMSK |= BIT_LCD_POST;
}
void Test_Post_CIF_YCbCr420_PQVGA_16B(void)
{
U32 OrgSrcWidth, OrgSrcHeight, SrcWidth, SrcHeight, SrcStartX, SrcStartY;
U32 OrgDstWidth, OrgDstHeight, DstWidth, DstHeight, DstStartX, DstStartY;
U32 InFrameBuffer, OutFrameBuffer;
U32 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_LCD_POST=(unsigned)PostIsr;
rINTMSK &= ~(BIT_LCD_POST);
rINTSUBMSK &= ~(BIT_SUB_POST);
#if 1
PostStartProcessing(0);
#else
if(mode&POST_IN_YCBYCR420)
amount=OrgSrcWidth*OrgSrcHeight*3/2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -