📄 me_test.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 + -