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

📄 dctq_test.c

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************

 Filename:	DCTQ_test.c

 Descriptions		
 - DCTQ function test 

 History
 -15.Dec.2003
  draft
 
 Copyright (c) 2003 SAMSUNG Electronics.
 # However, Anybody can use this code without our permission.  

 ******************************************************************************/
#include <stdio.h>
#include "24a0lib.h"
#include "24a0addr.h"
#include "fimvlib.h"
#include "fim20_def.h"
#include "dctq_test.h"
#include "me_test.h"
#include "mc_test.h"



//DCTQ_CTRL
#define COEFF_NOT_WRITE_BIT		(1<<29)
#define WITH_VLC_BIT			(1<<28)
#define Q_SKIP_BIT			(1<<27)
#define IQ_SKIP_BIT			(1<<26)
#define SWRST_BIT			(1<<25)
#define DCTQ_BUSY_BIT			(1<<7)
#define DCTQ_START_BIT			(1<<6)
#define H263_FORMAT_BIT			(1<<4)
#define MPEG4_FORMAT_BIT		(0<<4)
#define IS_ENCODE_BIT			(1<<2)
#define IS_DECODE_BIT			(0<<2)
#define FRAME_START_BIT			(1<<0)


#if(FIMVTEST_IMAGE_SIZE==QCIF)
#define FIMV_IMAGE_WIDTH		(176)
#define FIMV_IMAGE_HEIGHT		(144)
#define FIMV_DISPLAY_IMAGE_WIDTH	(240)
#define FIMV_DISPLAY_IMAGE_HEIGHT	(196)
#define TEST_PREV_IMAGE 		((U32)image_a1p)
#define TEST_CURR_IMAGE 		((U32)image_a2)  
#elif(FIMVTEST_IMAGE_SIZE==CIF)
#define FIMV_IMAGE_WIDTH		(352)
#define FIMV_IMAGE_HEIGHT		(288)
#define FIMV_DISPLAY_IMAGE_WIDTH	(240)
#define FIMV_DISPLAY_IMAGE_HEIGHT	(196)
#define TEST_PREV_IMAGE 		((U32)image_b1p)
#define TEST_CURR_IMAGE 		((U32)image_b2)  
#elif(FIMVTEST_IMAGE_SIZE==VGA)
#define FIMV_IMAGE_WIDTH		(640)
#define FIMV_IMAGE_HEIGHT		(480)
#define FIMV_DISPLAY_IMAGE_WIDTH	(240)
#define FIMV_DISPLAY_IMAGE_HEIGHT	(196)
#define TEST_PREV_IMAGE 		((U32)image_c1p)
#define TEST_CURR_IMAGE 		((U32)image_c2)  


// add QCIF, VGA image  size

#endif


extern void USB_Download(void);
extern volatile U32 downloadFileSize;


#if (FIMVTEST_IMAGE_SIZE==QCIF)
const U8 image_a1p[]=
{
    #include "..\bmp\foreman_qcif_001_420_padded.pic"
};
const U8 image_a2[]=
{
    #include "..\bmp\foreman_qcif_002_420.pic"
};
#endif	  

#if (FIMVTEST_IMAGE_SIZE==CIF)
const U8 image_b1p[]=
{
    #include "..\bmp\foreman_cif_001_420_padded.pic"
};
const U8 image_b2[]=
{
    #include "..\bmp\foreman_cif_002_420.pic"
    //#include ".\bmp\fig1_352x288.pic"
    //#include ".\bmp\fig2_352x288.pic"
    //#include ".\bmp\fig3_352x288.pic"
    //#include ".\bmp\fig4_352x288.pic"
};
#endif

#if (FIMVTEST_IMAGE_SIZE==VGA)

U8 image_c1p[(640+32)*(480+32)+(640+32)*(480+32)/2];
const U8 image_c2[]=
{
    //#include ".\bmp\oasis_vga_002_420.pic"
    //#include ".\bmp\fig1_640x480.pic"
    //#include ".\bmp\fig2_640x480.pic"
    #include "..\bmp\fig3_640x480.pic"
    //#include ".\bmp\fig4_640x480.pic"
};

#endif	  


volatile U32 dctqDone;

static ME_VECTOR meVector[(FIMV_IMAGE_WIDTH/16)*(FIMV_IMAGE_HEIGHT/16)];


void TestDctq_2048X2048(void)
{
    	IMAGE420 currImage;  //no-padded image YCbCr420
	IMAGE420 prevImage;  //padded image YCbCr420 
	IMAGE420 refImage;   //padded image YCbCr420
	IMAGE420 mcedImage;  //padded image YCbCr420
	IMAGE420 dctqCoeff;  //no-padded, the size is twice than currImage.
	PQINFO pQInfo;
	    
	U32 qinfoMode;

	U32 imageWidth=2048;  
	U32 imageHeight=2048; 
	    
	U32 freeBufStartAddr=0x11000000;	

	U32 qpStepTable[((2048/16)*(2048/16)+3)/4];  //for deblock test

	int i;
	    

	printf("[DCTQ Encoder Test = 2048X2048 ]\n");
	    
    	qinfoMode=QINFO_INTRA_MODE;

	printf("QINFO mode:%s %s\n",(qinfoMode &QINFO_INTRA_MODE) ? "Intra" :
				 	    (qinfoMode &QINFO_INTER_MODE) ? "Inter" : "Unknown",
					    (qinfoMode &QINFO_SKIP_0_2_4) ? "Skip_0_2_4" :	
					    (qinfoMode &QINFO_SKIP_01_45) ? "Skip_01_45" : "" );		

	    //currImage has already been in the read-only area.
	AllocImage420(&currImage,0x11000000,imageWidth,imageHeight,IMAGE420_NO_PADDED);
	   
	printf("currImage addr: %x\n",0x11000000);
	//printf("The picture is the currImage. Press any key!\n");
	//getchar();


	//previous mcedImage will be on the read-only area.
	AllocImage420(&refImage,0x11600000,imageWidth,imageHeight,IMAGE420_PADDED|IMAGE420_CLEAR);
	printf("prevImage addr(read only): %x\n",0x11600000);	


	freeBufStartAddr=AllocImage420(&dctqCoeff,0x11c30600,imageWidth,imageHeight,IMAGE420_DCTQ_COEFF|IMAGE420_CLEAR);

	freeBufStartAddr=
	AllocImage420(&mcedImage,freeBufStartAddr,imageWidth,imageHeight,
    		      IMAGE420_PADDED|IMAGE420_CLEAR);

	    
	InitQInfo(&pQInfo,&freeBufStartAddr,imageWidth,imageHeight,qinfoMode);

	DctqInitIsr();
	MeInitIsr();
	McInitIsr();
	


    	MeEngine(&currImage,&refImage,meVector,0);

    	//printf("Wait until M.E. is completed.\n");
    	while(meDone==0);
    	printf("M.E. is completed!\n");
	getchar();
	
    	McEngine(&refImage,&mcedImage,meVector,0);

    	//printf("Wait until M.C. is completed.\n");
    	while(mcDone==0);
    	printf("M.C. is completed!\n");
	getchar();

	DctqEngine(&currImage,&mcedImage,&dctqCoeff,pQInfo,0);

	    while(dctqDone==0);
	    printf("completed!\n");

    	getchar();



}


void TestDctq_Encoder(void)
{
    	IMAGE420 currImage;  //no-padded image YCbCr420
	IMAGE420 prevImage;  //padded image YCbCr420 
	IMAGE420 refImage;   //padded image YCbCr420
	IMAGE420 refImage2;  //padded image YCbCr420
	IMAGE420 dctqCoeff;  //no-padded, the size is twice than currImage.
	PQINFO pQInfo;
	    
	U32 qinfoMode;

	U32 imageWidth=FIMV_IMAGE_WIDTH;  
	U32 imageHeight=FIMV_IMAGE_HEIGHT; 
	    
	U32 freeBufStartAddr=0x11000000;	

	U32 qpStepTable[((FIMV_IMAGE_WIDTH/16)*(FIMV_IMAGE_HEIGHT/16)+3)/4];  //for deblock test

	int i;
	    

	printf("[DCTQ Encoder Test]\n");
	printf("Test Image size:%s\n",(FIMVTEST_IMAGE_SIZE==QCIF) ? "QCIF":
	    				    (FIMVTEST_IMAGE_SIZE==CIF)  ? "CIF" :
					    (FIMVTEST_IMAGE_SIZE==VGA)  ? "VGA" :	
					    (FIMVTEST_IMAGE_SIZE==PQVGA)? "PQVGA":"Unknown");		

       printf("Select QINFO mode: 1)intra  2)intra_skip_0_2_4  3)intra_skip_01_45\n"
	    	       "                   4)inter  5)inter_skip_0_2_4  6)inter_skip_01_45\n"); 
	    
	switch(getchar())
	{
	    case '1':
	    	qinfoMode=QINFO_INTRA_MODE;
	    	break;
	    case '2':
	        qinfoMode=QINFO_INTRA_MODE|QINFO_SKIP_0_2_4;
	    	break;
	    case '3':
		qinfoMode=QINFO_INTRA_MODE|QINFO_SKIP_01_45;
	    	break;
	    case '4':
	    	qinfoMode=QINFO_INTER_MODE;
	    	break;
	    case '5':
		qinfoMode=QINFO_INTER_MODE|QINFO_SKIP_0_2_4;
		break;
	    case '6':
		qinfoMode=QINFO_INTER_MODE|QINFO_SKIP_01_45;
		break;
	    default:
	    	break;
	}

	printf("QINFO mode:%s %s\n",(qinfoMode &QINFO_INTRA_MODE) ? "Intra" :
				 	    (qinfoMode &QINFO_INTER_MODE) ? "Inter" : "Unknown",
					    (qinfoMode &QINFO_SKIP_0_2_4) ? "Skip_0_2_4" :	
					    (qinfoMode &QINFO_SKIP_01_45) ? "Skip_01_45" : "" );		

	    //currImage has already been in the read-only area.
	AllocImage420(&currImage,TEST_CURR_IMAGE,imageWidth,imageHeight,IMAGE420_NO_PADDED);
	   
	printf("currImage addr: %x\n",TEST_CURR_IMAGE);
	//printf("The picture is the currImage. Press any key!\n");
	//getchar();


	//previous mcedImage will be on the read-only area.
	AllocImage420(&prevImage,TEST_PREV_IMAGE,imageWidth,imageHeight,IMAGE420_PADDED);
	printf("prevImage addr(read only): %x\n",TEST_PREV_IMAGE);	


	//*********************************
	//	    encoding path test
	//*********************************

	//refImage is used for DctqEngine() as mced_input_image and recon_output image.
	printf("reference image addr: %x\n",freeBufStartAddr);
	freeBufStartAddr=AllocImage420(&refImage,freeBufStartAddr,imageWidth,imageHeight,
				      IMAGE420_PADDED|IMAGE420_CLEAR);

	//printf("The picture is the refImage before DCTQ/IDCTQ. Press any key!\n");
	//getchar();    


	printf("dctqCoeff addr: [%x,",freeBufStartAddr);    
	freeBufStartAddr=AllocImage420(&dctqCoeff,freeBufStartAddr,imageWidth,imageHeight,IMAGE420_DCTQ_COEFF|IMAGE420_CLEAR);
	printf("%x)\n",freeBufStartAddr);      

	    
	InitQInfo(&pQInfo,&freeBufStartAddr,imageWidth,imageHeight,qinfoMode);

	DctqInitIsr();
	
#if DCTQ_GOB_OPERATION    
	    for(i=0;i<(imageHeight/16);i++)
	    {
	    	DctqEngineGob(&currImage,&prevImage,&dctqCoeff,pQInfo,(imageWidth/16),
			      ((i==0)? DCTQ_FRAME_START_MODE : 0) );
		while(dctqDone==0);
	    	printf("completed(DCT_Q_IQ_IDCT GOB=%d).\n",i);
	    }
#else
	    DctqEngine(&currImage,&prevImage,&dctqCoeff,pQInfo,0);

	    //printf("Wait until DCT_Q_IQ_IDCT is completed... ");
	    while(dctqDone==0);
	    printf("completed!\n");
#endif

	/*
	    PostInitCfgEx(&postCfg,
		imageWidth+32,imageHeight+32,0,0,imageWidth+32,imageHeight+32,
		LCD_XSIZE,LCD_YSIZE,0,0,FIMV_DISPLAY_IMAGE_WIDTH,FIMV_DISPLAY_IMAGE_HEIGHT,
		refImage.frameStartAddr,0,0,0,
		LCDFRAMEBUFFER,POST_IN_420_YCBCR);
	    PostInitIsr();
	    PostInitRegs(&postCfg);
	    PostStartProcessing(&postCfg,0);

⌨️ 快捷键说明

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