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

📄 mobile_demo.c

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

 Filename:	mobile_demo.c

 Descriptions		
 - MPEG4 ME block routines

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

 ******************************************************************************/
#include "def.h"
#include "24a0addr.h"
#include "24a0lib.h"
#include "fim20_def.h"
#include "memc_test.h"
#include "dctq_test.h"
#include "vlx_test.h"
#include "mobile_demo.h"
//#include "iic_s5x532.h"
#include "camif.h"
#include "lcdlib.h"
#include "post.h"
#include "camproset.h"



#if (FIMV_DEMO_IMAGE_SIZE == QCIF)
	#define FIMV_IMAGE_WIDTH	(176)
	#define FIMV_IMAGE_HEIGHT	(144)
	
#elif (FIMV_DEMO_IMAGE_SIZE == CIF)
	#define FIMV_IMAGE_WIDTH	(352)
	#define FIMV_IMAGE_HEIGHT	(288)
	
#elif (FIMV_DEMO_IMAGE_SIZE == VGA)
	#define FIMV_IMAGE_WIDTH	(640)
	#define FIMV_IMAGE_HEIGHT	(480)

#elif (FIMV_DEMO_IMAGE_SIZE == MPIXEL)
	#define FIMV_IMAGE_WIDTH	(1152)
	#define FIMV_IMAGE_HEIGHT	(864)
	
#endif


#define FIMV_MBLK_NUM			((FIMV_IMAGE_WIDTH/16)*(FIMV_IMAGE_HEIGHT/16))

volatile U32 d_dctqDone, d_meDone, d_mcDone, d_vlxDone, d_camDone;
volatile U32 c_dctqDone, c_meDone, c_mcDone, c_vlxDone, c_camDone;
volatile U32 c_dctqCnt, c_meCnt, c_mcCnt, c_vlxCnt, c_camCnt;
volatile U32 _DCTQ_FLAG,_ME_FLAG,_MC_FLAG, _CAMIF_FLAG, _POSTLCD_FLAG;
volatile U32 prevImageNum, frameNum;


static IMAGE420 currImage;	//no-padded image YCbCr420
static IMAGE420 currImage2[4];	//no-padded image YCbCr420
static IMAGE420 refImage[4];	//padded image YCbCr420
static IMAGE420 dctqCoeff[4];   //no-padded, the size is twice than currImage.
static ME_VECTOR meVector[4][(FIMV_IMAGE_WIDTH/16)*(FIMV_IMAGE_HEIGHT/16)];
static U32 meVector2[4];
static PQINFO pQInfo;



void * mp4_function[][2]=
{
    	//(void *)TestDctq_Encoder,        			"DCTQ                 ",
    	//(void *)TestDctq_2048X2048,        			"2048*2048 Test   ",		
    	//(void *)TestVLC_CoeffMem,        			"VLC <-Coeff Mem      ",		    
    	//(void *)TestVLC_fromDCTQ,        			"VLC <-DCTQ       ",		        
    	//(void *)TestVLD_DCTQ,        				"VLD ->DCTQ           ",		     
    	(void *)TestVlx,							"Vlx test          ",
    	(void *)TestMeMc,						"ME MC Test          ",
    	(void *)Test_Post_CIF_16,					"post test			",

    	(void *)Mobile_Image_Demo,			       "Mobile Demo        ",
    	//(void *)S5X532_Iic_Test,				"camera preview    ",
    	(void *)Mpeg4_camera_image,			"Mpeg4 <-camera  ",
    	//(void *)AHB_I_Bus_Test,					"AHB-I arbitration test ",
  	0,0
};

void Ch22_mpeg4_test(void)
{
	int i;

	while(1)
	{
       	i = 0;
      
		Uart_Printf("\n\nS3C24A0A MPEG4 Test Program \n\n");
        
		while(1)
		{   //display menu
			Uart_Printf("%2d:%s",i,mp4_function[i][1]);
			i++;
			if((int)(mp4_function[i][0])==0)
			{
				Uart_Printf("\n");
				break;
			}
			if((i%2)==0)
			Uart_Printf("\n");
		}
        
		Uart_Printf("\nSelect the function to test : ");
		i = Uart_GetIntNum();
		Uart_Printf("\n");
     
		if(i==-1) break;

		if(i>=0 && (i<(sizeof(mp4_function)/8)) ) 
		( (void (*)(void)) (mp4_function[i][0]) )();            
	}


}




void AHB_I_Bus_Test(void)
{
    	int i;
	U32 pVlcData;
		
	// step 1 : Initialize ISR 
	Fim20DemoIsrUnmask();
	// step 2 : Initialize memory map
	Fim20DemoMem();
	// step 3 : start scheduler

	printf("ref[0] = %08x\n",refImage[0]);
	printf("cur[3] = %08x, pre[3]=%08x\n", currImage2[3],refImage[3]);
	Uart_Printf("FC=%d\n", (rMODE&(0x3<<10))>>10);
	//Uart_Printf("rpriority=%d, %d\n", rPRIORITY0, rPRIORITY1);
	//rPRIORITY0=rPRIORITY1=0x1;
	//Fim20Scheduler();
//	Post_Envid_On();

//	printf("dkdkdkd\n");
//	Uart_Printf("FC=%d\n", (rMODE&(0x3<<10))>>10);

	Uart_TxEmpty(0);


	PostInit(384, 320, 352, 288, 16, 16, 
			240, 320, 240, 320, 0, 0, 
			0x11000000, LCDFRAMEBUFFERBG1, POST_IN_YCBYCR420|POST_OUT_RGB16B);    

	LcdEnvidOnOff(1);


	Init_FIMV20_Isr();

    	pVlcData=(U32 *)0x12300000;
       VlcConfig4Dctq(352,(U32)pVlcData,(352/16)*(284/16),0);
	//DctqEngine(&currImage,&prevImage,&dctqCoeff,pQInfo,DCTQ_WITH_VLC_COEFF_WRITE);


	//DctqEngine(&currImage, &refImage[prevImageNum], &dctqCoeff[frameNum], pQInfo, DCTQ_FRAME_START_MODE);
	DctqEngine(&currImage, &refImage[prevImageNum], &dctqCoeff[frameNum], pQInfo, DCTQ_WITH_VLC_COEFF_WRITE);
	MeEngine(&currImage, &refImage[prevImageNum], meVector[frameNum%4], 0);
	McEngine(&refImage[prevImageNum], &refImage[1 ], meVector[frameNum%4], 0);

//	PostStartProcessing(0, 0);


	while(1){
		//printf("1");
		}
	// step 4 : mask mpeg4 ISR
	//Fim20DemoIsrMask();



}

/*  
c:camera  r:reference	d:dctq_coeff


	C0	    C1		C2	    C3		C4     	    C5
	------------------------------------------------------------------------
	Cap:c0	    EC:c0r3-r0  Post1:r0 
		    Dc:c0r0-d0	
		    Post2:c0
		    
		    Cap:c1  	EC:c1r0-r1  Post1:r1
		  		Dc:c1r1-d1
		  		Post2:c1
		  		
		    		Cap:c2	    EC:c2r1-r2	Post1:r2
					    Dc:c2r2-d2	
					    Post2:c2
					    
		    			    Cap:c3	EC:c3r2-r3  Post1:r3		
							Dc:c3r3-d3  
							Post2:c3
							
		    			    		Cap:c0	    EC:c0r3-r0
	    	    						    Dc:c0r0-d0	
	    	    						    Post2:c0
	    	    						    
								    cap:c1
C0->C1->C2->C3->C4->C5
        +            |
        |            |
        +--<--<--<---+
*/        

U32 FimvImageWidth, FimvImageHeight, fpsNum;

void Image_Select(void)
{

	printf("[Camera Encoder Test]\n");

       printf("Select Image Size: \n\
  	           1. QCIF  		2.CIF 	3.VGA \n");
	    
	switch(getchar())
	{
	    case '1':
	    		FimvImageWidth = QCIF_XSIZE;
			FimvImageHeight = QCIF_YSIZE;
	    	break;
	    case '2':
	    		FimvImageWidth = CIF_XSIZE;
			FimvImageHeight = CIF_YSIZE;
	    	break;
	    case '3':
	    		FimvImageWidth = VGA_XSIZE;
			FimvImageHeight = VGA_YSIZE;
	    default:
	    	break;
	}

}


void Mpeg4_camera_image(void)
{

	//printf(" wif");
	//MMU_WaitForInterrupt();
	//rPRIORITY0 |= (0<<1);  // fixed priority I-BUS
	//rPRIORITY1 |= (0<<1);  // fixed priority I-BUS


	Image_Select();

  	Camera_Initialize();  
	// step 1 : Initialize ISR 
	Fim20DemoIsrUnmask();
	// step 2 : Initialize memory map
	Fim20DemoMem();
	// step 3 : start scheduler

	Fim20Scheduler();
	
	// step 4 : mask mpeg4 ISR
	Fim20DemoIsrMask();

	//LcdEnvidOnOff(0);
	
}

void Camera_Initialize(void)
{
	rCIGCTRL|=(1<<31);
	Delay(100);
	rCIGCTRL&=~(1<<31);
	
	CamReset(1);		
	
	CameraModuleSetting();
}



extern volatile U32 camTestMode;
extern volatile U32 camCodecCaptureCount;
extern volatile U32 camPviewCaptureCount;
extern volatile U32 camCodecStatus;
extern volatile U32 camPviewStatus;
extern volatile U32 amount;


void Fim20Scheduler(void)
{
	unsigned int camif_flag, dctq_flag, me_flag, mc_flag, post_flag;
	c_camDone=c_dctqDone=c_meDone=c_mcDone=0;
	c_dctqCnt= c_meCnt= c_mcCnt= c_vlxCnt= c_camCnt=0;
	_CAMIF_FLAG=_DCTQ_FLAG=_ME_FLAG=_MC_FLAG=_POSTLCD_FLAG=0;

	camTestMode=CAM_TEST_MODE_CODEC_POST;
	camCodecCaptureCount=0;
	camPviewCaptureCount=0;
	camPviewStatus=CAM_STOPPED;
	camCodecStatus=CAM_STOPPED;

	fpsNum=0;
	frameNum = 0;    
	//Timer_Start(2);

	calculate_FPS_WDT();
	
	CamCaptureStart(CAM_CODEC_SCALER_CAPTURE_ENABLE_BIT);
	
	LcdEnvidOnOff(1);
	
	while(!Uart_GetKey()){
		camif_flag = _CAMIF_FLAG;
		dctq_flag  = _DCTQ_FLAG;
		me_flag    = _ME_FLAG;

		
		if(camif_flag==0x00000020) {
			if(dctq_flag==0x00000000) {
				_DCTQ_FLAG = 0x00000010;
	        		//Uart_Printf("S : dctq_flag = 10-->");
				FdStartDctq(0);

			}
		}
		// process the 1st inter frame
		else if(camif_flag==0x00000030) {
			if(dctq_flag==0x00000011) {
				if(me_flag==0x00000000) {
					_ME_FLAG = 0x00000020;
	        			//Uart_Printf("S : me_flag = 20-->");
					FdStartMe(1, 0);

				}
			}
		}
		// process the 2nd inter frame
		else if(camif_flag==0x00000040) {
			if(dctq_flag==0x00000021) {
				if(me_flag==0x00000021) {
					_ME_FLAG = 0x00000030;
	        			//Uart_Printf("S : me_flag = 30-->");
					FdStartMe(2, 1);
				}
			}
		}
		// process the 3rd inter frame	
		else if(camif_flag==0x00000010) {
			if(dctq_flag==0x00000031) {
				if(me_flag==0x00000031) {
					_ME_FLAG = 0x00000040;
	        			//Uart_Printf("S : me_flag = 40-->");
					FdStartMe(3, 2);
				}
			}
		}

		dctq_flag = _DCTQ_FLAG;
		post_flag = _POSTLCD_FLAG;

		
		if(dctq_flag==0x00000011) {
			if(post_flag==0x00000000) {
				_POSTLCD_FLAG = 0x00000010;
	        		//Uart_Printf("S : post_flag = 10-->");
				//PostStartProcessing(0);
				PostStartFIMV20(refImage[0].frameStartAddr);

					
				//Uart_Printf("cp1 = %d\n",camcnt);				
					
			}
		}
		else if(dctq_flag==0x00000021) {
			if(post_flag==0x00000011) {
				_POSTLCD_FLAG = 0x00000020;
	        		//Uart_Printf("S : post_flag = 20-->");
				//PostStartProcessing(1);
				PostStartFIMV20(refImage[1].frameStartAddr);

					
				//Uart_Printf("cp2 = %d\n",camcnt);				
			}
		}
		else if(dctq_flag==0x00000031) {
			if(post_flag==0x00000021) {
				_POSTLCD_FLAG = 0x00000030;
	        		//Uart_Printf("S : post_flag = 30-->");
				//PostStartProcessing(2);
				PostStartFIMV20(refImage[2].frameStartAddr);
					
				//Uart_Printf("cp3 = %d\n",camcnt);				
					
			}
		}
		else if(dctq_flag==0x00000041) {
			if(post_flag==0x00000031) {
				_POSTLCD_FLAG = 0x00000040;
	        		//Uart_Printf("S : post_flag = 40-->");
				//PostStartProcessing(3);
				PostStartFIMV20(refImage[3].frameStartAddr);

			}
		}
		
		me_flag = _ME_FLAG;
		mc_flag = _MC_FLAG;

		if(me_flag==0x00000021) {
			if(mc_flag==0x00000000) {
				_MC_FLAG = 0x00000020;
	        		//Uart_Printf("S : mc_flag = 20-->");
				FdStartMc(0,1);
				
			}
		}
		else if(me_flag==0x00000031) {
			if(mc_flag==0x00000021) {
				_MC_FLAG = 0x00000030;
				//Uart_Printf("S : mc_flag = 30-->");
				FdStartMc(1,2);
			}
		}
		else if(me_flag==0x00000041) {
			if(mc_flag==0x00000031) {
				_MC_FLAG = 0x00000040;
	        		//Uart_Printf("S : mc_flag = 40-->");
				FdStartMc(2,3);
				_ME_FLAG = 0x00000000;
	        		//Uart_Printf("S : me_flag = 0-->");
			}
		}
			//Delay(70);

		//Uart_Printf("c%d\n",camcnt);

		mc_flag = _MC_FLAG;
		dctq_flag = _DCTQ_FLAG;

		if(mc_flag==0x00000021) {
			if(dctq_flag==0x00000011) {
				_DCTQ_FLAG = 0x00000020;
	        		//Uart_Printf("S : dctq_flag = 20-->");
				FdStartDctq(1);
		
			}
		}
		else if(mc_flag==0x00000031) {
			if(dctq_flag==0x00000021) {
				_DCTQ_FLAG = 0x00000030;
				FdStartDctq(2);
			}
		}
		else if(mc_flag==0x00000041) {
			if(dctq_flag==0x00000031) {
				_DCTQ_FLAG = 0x00000040;
	        		//Uart_Printf("S : dctq_flag = 40-->");
				FdStartDctq(3);
				_MC_FLAG = 0x00000000;
	        		//Uart_Printf("S : mc_flag = 0-->");
			}
		}
	}
	
}


void FdStartDctq(U32 frameNum)
{
        //DctqEngine(&currImage2[frameNum],&refImage[frameNum],&dctqCoeff[frameNum],pQInfo,DCTQ_FRAME_START_MODE);
	//DctqEngine(&currImage,&prevImage,&dctqCoeff,pQInfo,DCTQ_WITH_VLC_COEFF_WRITE);

	
	//DctqEngine(&currImage, &refImage[prevImageNum], &dctqCoeff[frameNum], pQInfo, DCTQ_WITH_VLC_COEFF_WRITE);

    	DctqEngine(&currImage2[frameNum],&refImage[frameNum],&dctqCoeff[frameNum],pQInfo,DCTQ_WITH_VLC_COEFF_NOTWRITE);
}

void FdStartMe(U32 frameNum,U32 prevFrameNum)
{
    MeEngine(&currImage2[frameNum],&refImage[prevFrameNum],meVector2[frameNum],0);
}

void FdStartMc(U32 frameNum,U32 prevFrameNum)
{
    McEngine(&refImage[prevFrameNum],&refImage[frameNum],meVector2[frameNum],0);
}

⌨️ 快捷键说明

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