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

📄 me_test.c

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 C
字号:
/******************************************************************************

 Filename:	me_test.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 "..\include\24a0addr.h"
#include "..\include\fim20_def.h"
#include "..\include\me_test.h"

//rME_CNFG
#define ME_FAST_MODE_ENABLE		(1<<24)	
#define ME_FAST_MODE_DISABLE		(0<<24) 


//rME_CMND
#define ME_ROUND_BIT_0			(0<<17)
#define ME_ROUND_BIT_1			(1<<17)

#define ME_16X16_MODE			(0<<16)
#define ME_4MV_MODE			(1<<16)

#define ME_MPEG4_MODE			(0<<2)
#define ME_H263_MODE			(1<<2)  //round=0, 16x16 mode,no_padding

#define ME_OP_START			(1<<3)
#define ME_FRAME_START			(1<<1)

#define ME_INT_REQ_CLEAR		(1<<0)





volatile U32 meDone;




void MeEngine(PIMAGE420 pCurrImage,PIMAGE420 pPrevImage,PME_VECTOR pMeVector,U32 mode)
{
    	U32 opUnit;
    	U32 m;
    	U32 n;

    	if( (pCurrImage->type != IMAGE420_NO_PADDED) ||
    		(pPrevImage->type != IMAGE420_PADDED))
    	{
    		printf("ERROR:MeEngine:incorrect image format!\n");
    	}
		

    	m=pCurrImage->imageWidth/16;
    	n=pCurrImage->imageHeight/16;
    
    	meDone=0;
    
    	rME_CFSA=pCurrImage->yStartAddr; 
    	rME_PFSA=pPrevImage->yStartAddr;
    	rME_MVSA=(U32)pMeVector;

    	opUnit=(m)*(n);
    	//printf("ME engine: opUnit=%d, m=%d, n=%d\n",opUnit,m,n);
    

    #if (FIMV20== TRUE)
    		//rME_CNFG=ME_FAST_MODE_DISABLE | (0x10<<16) | opUnit;   //0x10 is recommended for ME_FAST_MODE
		rME_CNFG=ME_FAST_MODE_ENABLE | (0x7f<<16) | opUnit;   //0x10 is recommended for ME_FAST_MODE
		
    		rME_IMGFMT=((n-1)<<8) | ((m-1)<<0);
    	
    		rME_CMND=ME_ROUND_BIT_1 | ME_4MV_MODE | ME_MPEG4_MODE |ME_OP_START |ME_FRAME_START |
    	     	           	ME_INT_REQ_CLEAR;
    #else
		rME_CMND = 0x0000c60b; //396MB
    #endif
}






void MeEngineGob(PIMAGE420 pCurrImage,PIMAGE420 pPrevImage,PME_VECTOR pMeVector,U32 opUnit,U32 mode)
{
    	U32 m;
    	U32 n;

    	if( (pCurrImage->type != IMAGE420_NO_PADDED) ||
		(pPrevImage->type != IMAGE420_PADDED))
    	{
		printf("ERROR:MeEngine:incorrect image format!\n");
    	}

    	m=pCurrImage->imageWidth/16;
    	n=pCurrImage->imageHeight/16;
    	meDone=0;

    	if(mode & ME_FRAME_START_MODE)
    	{

		rME_CFSA=pCurrImage->yStartAddr; 
		rME_PFSA=pPrevImage->yStartAddr;
		rME_MVSA=(U32)pMeVector;

		rME_CNFG=ME_FAST_MODE_DISABLE | (0x10<<16) | opUnit;   //0x10 is recommended for ME_FAST_MODE

		rME_IMGFMT=((n-1)<<8) | ((m-1)<<0);
    	}
#if FIMV20
    	rME_CMND=ME_ROUND_BIT_1 | 
	     	ME_4MV_MODE |  
	     	ME_MPEG4_MODE |
	     	ME_OP_START |
	     	((mode & ME_FRAME_START_MODE)?ME_FRAME_START:0) |
	     	ME_INT_REQ_CLEAR;
#else
	rME_CMND=ME_ROUND_BIT_1 | 
	     	ME_4MV_MODE |  
	     	ME_MPEG4_MODE |
	     	ME_OP_START |
	     	((mode & ME_FRAME_START_MODE)?ME_FRAME_START:0) |
	     	ME_INT_REQ_CLEAR |
	     	(opUnit<<7)|(0<<5);
#endif
}




void __irq MeIsr(void)
{
	U32 e_optime=0;
    	ClearPending(BIT_ME);	
	e_optime = mtimer_stop();
	printf("me= %d\n", e_optime*16);	
    	meDone=1;
    
    	//rME_CMND=rME_CMND & ~(ME_FRAME_START|ME_OP_START) | (ME_INT_REQ_CLEAR);
    	printf("{me}");
}




void MeInitIsr(void)
{
    	pISR_ME=(U32)MeIsr;
    
    	rINTMSK&=~BIT_ME;
}

⌨️ 快捷键说明

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