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

📄 deblock.c

📁 三星s3c2460开发板完整功能测试代码
💻 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 + -