📄 deblock.c
字号:
/******************************************************************************
Filename: deblock.c
Descriptions
- MPEG4 deblock filter routines for S3C2460
History
-30.Aug.2003:purnnamu draft
-17.June.2004:junon edit
Copyright (c) 2003 SAMSUNG Electronics.
# However, Anybody can use this code without our permission.
******************************************************************************/
#include "def.h"
#include "2460addr.h"
#include "2460lib.h"
#include "fim20_def.h"
#include "deblock.h"
volatile unsigned int deblockDone;
/****************************************************************************
DeblockEngine - deblock filter engine
Description:
- if DB_QPSRC_EXTERNAL_MODE is enabled, only the first QStep pointed by pQStep is used.
- input image size must be PADDED. (reference image)
*****************************************************************************/
void DeblockEngine(PIMAGE420 pImageP, unsigned int *pQStep, unsigned int mode)
{
unsigned int xmbn,ymbn;
deblockDone=0;
xmbn=pImageP->imageWidth/16;
ymbn=pImageP->imageHeight/16;
if( pImageP->type != IMAGE420_PADDED )
printf("ERROR:The image should be padded one.\n");
rDB_MBLOCKSIZE=(xmbn<<5)|(ymbn<<0);
rDB_CON=(((unsigned char)pQStep[0])<<0) | //QpStep when DB_QPSRC_EXTERNAL is 0
(2<<8) | //thr1=2(default)
(6<<5); //thr2=6(default)
rDB_ADDRSTART_Y=pImageP->yStartAddr;
rDB_ADDREND_Y=pImageP->yStartAddr + pImageP->imageWidth*pImageP->imageHeight +
32*(pImageP->imageHeight-1);
rDB_ADDRSTART_CB=pImageP->cbStartAddr;
rDB_ADDREND_CB=pImageP->cbStartAddr +pImageP->imageWidth*pImageP->imageHeight/4 +
(32/2)*(pImageP->imageHeight/2-1);
rDB_ADDRSTART_CR=pImageP->crStartAddr;
rDB_ADDREND_CR=pImageP->crStartAddr +pImageP->imageWidth*pImageP->imageHeight/4 +
(32/2)*(pImageP->imageHeight/2-1);
rDB_ADDRSTART_QP=(unsigned int)pQStep;
rDB_NUMOFWORD_QP=(xmbn*ymbn)/4;
rDB_OFFSET_Y=32;
rDB_OFFSET_C=32/2;
rDB_MODE=DB_INTEN | ( (mode & DB_QPSRC_EXTERNAL) ? DB_QPSRC_EXTERNAL : 0 ) | DB_ENVID;
}
void __irq DeblockIsr(void)
{
rDB_MODE &= ~(DB_DEBLKINT); //deblock interrupt pending self-register
ClearPending(BIT_CAMIF_BLOCK_POST);
rSUBSRCPND2 = BIT_SUB_DEBLOCK;
printf("{b}");
deblockDone=TRUE;
}
void DeblockInitIsr(void)
{
pISR_CAMIF_BLOCK_POST = (unsigned int)DeblockIsr;
rINTMSK &= ~BIT_CAMIF_BLOCK_POST;
rINTSUBMSK2 &= ~BIT_SUB_DEBLOCK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -