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

📄 mbtransform.c

📁 在ccs开发环境下实现的基于dsp的图像二维dct变换和压缩,完整可实现的工程文件, 源文件算法清晰,良好的实现效果
💻 C
字号:
#include "DCTProcess.h"


#if 1
void Block_FillData(BYTE *pSrc, int16 *pDest, int iOff)
{
	int i, j;
	for (j = 0; j < (MB_SIZE >> 1); j ++)
	{
		for (i = 0; i < (MB_SIZE >> 1); i ++)
		{
			*pDest++ = *pSrc ++;
		}
		pSrc += iOff;
	}
}
#endif

void MB_FillData(int x, int y)
{
	int iOff;
	BYTE * pLum, * pCb, * pCr;
	int16 * p = m_iBlock;
		
	iOff = m_iEncPels - MB_SIZE / 2;
	pLum = (BYTE *)m_pGobY + x;
	Block_FillData(pLum, p, iOff);
	
	pLum = (BYTE *)m_pGobY + x + MB_SIZE / 2;
	p += MB_LENGTH;
	Block_FillData(pLum, p, iOff);

	pLum = (BYTE *)m_pGobY + x + (MB_SIZE >> 1) * m_iEncPels;
	p += MB_LENGTH;
	Block_FillData(pLum, p, iOff);

	pLum = (BYTE *)m_pGobY + x + (MB_SIZE >> 1) * m_iEncPels + MB_SIZE / 2;
	p += MB_LENGTH;
	Block_FillData(pLum, p, iOff);
	
	iOff = x>>1;
	pCb = m_pGobCb + iOff;
	pCr = m_pGobCr + iOff;
	iOff = (m_iEncPels>>1) - (MB_SIZE/2);
	
	p += MB_LENGTH;
	Block_FillData(pCb, p, iOff);
	
	p += MB_LENGTH;
	Block_FillData(pCr, p, iOff);
}

#if 1
void Block_ReconData(int16 * iLum, BYTE * pLum, int iPels)
{
	int i, j, k, iIn, iOut;
	int iBlockLen = MB_SIZE >> 1;
	for (j = 0, k = 0; j < iBlockLen;  j++)
	{
		for ( i = 0; i < iBlockLen; i++, k++)
		{
			iIn = *(iLum + k) - 128;
			iOut = _sshl(iIn, 24);
			*(pLum + i) = (iOut >> 24) + 128;
//			*(pLum + i + j * iPels) = (BYTE) minmax(*(iLum + k), 0, 255);
		}
		pLum += iPels;
	}
}
#endif

void MB_ReconData(int x, int y)
{
	BYTE * pLum, * pLumBak; 
	BYTE * pCb = m_pGobCb;
	BYTE * pCr = m_pGobCr;
	
	int16 * iLum = m_iBlock;
	int16 * iCb = iLum + (MB_LENGTH << 2);
	int16 * iCr = iCb + MB_LENGTH;
	
	int iBlockLen = MB_SIZE >> 1;
	
	pLum = pLumBak = m_pGobY + x;
	pCb += x >> 1;
	pCr += x >> 1;
	  
	Block_ReconData(iLum, pLum, m_iEncPels);
	
	pLum = pLumBak + iBlockLen;
	iLum += MB_LENGTH;
	Block_ReconData(iLum, pLum, m_iEncPels);
	
	pLum = pLumBak + (m_iEncPels << 3);
	iLum += MB_LENGTH;
	Block_ReconData(iLum, pLum, m_iEncPels);
	
	pLum = pLumBak + (m_iEncPels << 3) + iBlockLen;
	iLum += MB_LENGTH;
	Block_ReconData(iLum, pLum, m_iEncPels);

	Block_ReconData(iCb, pCb, m_iEncPels>>1);
	Block_ReconData(iCr, pCr, m_iEncPels>>1);
}


⌨️ 快捷键说明

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