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

📄 block.c

📁 DM642的mpeg4编码
💻 C
字号:
#include "block.h"
#include "../global.h"

//***********************************************************************************************
//函 数 名:Transfer16_ImageToBlock()
//函数功能:
//形式参数:
//返 回 值:void
//***********************************************************************************************
/*
void Transfer16_ImageToBlock(short* Dst, short* Src, short iStride)
{
     short i, j;

	 for (i = 0; i < 8; i++)
	 {
		 for (j = 0; j < 8; j++)
		 {
			 Dst[i*8+j] = Src[i*iStride+j];
		 }
	 }
}
*/
/*
void Transfer16_BlockToImage(short* Dst, short* Src, short iStride)
{
     short i, j;

	 for (i = 0; i < 8; i++)
	 {
		 for (j = 0; j < 8; j++)
		 {
			 Dst[i*iStride+j] = Src[i*8+j];
		 }
	 }
}
*/
/*
void Transfer16_ImageToImage(short* Dst, short* Src, short iStride)
{
	short i, j;

	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 8; j++)
		{
			Dst[i * iStride + j] = Src[i * iStride + j];
		}
	}
}
*/
/*
void Transfer16_BlockSubBlock(short* Dst, short* Src)
{
    short i, j;

	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 8; j++)
		{
			Dst[i * 8 + j] -= Src[i * 8 + j];
		}
	}
}
*/
/*
//***********************************************************************************************
//函 数 名:Transfer16_BlockAddBlock()
//函数功能:将对应位置上的Dst=Src+Dst,并对Dst进行0-255限制范围
//形式参数:void
//返 回 值:void
//***********************************************************************************************
void Transfer16_BlockAddBlock(short* Dst, short* Src)
{
    short i, j;

	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 8; j++)
		{
			Dst[i * 8 + j] += Src[i * 8 + j];
			Dst[i*8+j]=CLIP(Dst[i*8+j], 0, 255);
		}
	}
}


*/




/*
void Transfer16_ImageAddToImage(short* Dst, short* Src, short iStride)
{
  	short i, j;

	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 8; j++)
		{
			Dst[i * iStride + j] += Src[i * iStride + j];
		}
	}
}
*/
/*
void Transfer16_BlockAddToImage(short* Dst, short* Src, short iStride)
{
    short i, j;

	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 8; j++)
		{
			Dst[i * iStride + j] += Src[i * 8+ j];
			Dst[i * iStride + j] = CLIP(Dst[i * iStride + j], 0, 255);
		}
	}
}
*/

/*
void Transfer16_ImageToBlock_Interpolate_H(short* Dst, unsigned char* Src, short iStride, short iRounding)
{
     short i, j;

	 unsigned char * Src1 = Src + 1;

	 for (j = 0; j < 8; j++)
	 {
		 for (i = 0; i < 8; i++)
		 {
			 Dst[j*8+i] = (Src[j*iStride+i] + Src1[j*iStride+i] + 1 - iRounding)>>1;
		 }

	 }
}

void Transfer16_ImageToBlock_Interpolate_V(short* Dst, unsigned char* Src, short iStride, short iRounding)
{
	 short i, j;

	 unsigned char* Src1 = Src + iStride;

	 for (j = 0; j < 8; j++)
	 {
		 for (i = 0; i < 8; i++)
		 {
			 Dst[j*8+i] = (Src[j*iStride+i] + Src1[j*iStride+i] + 1 - iRounding)>>1;
		 }

	 }
}

void Transfer16_ImageToBlock_Interpolate_HV(short* Dst, unsigned char* Src, short iStride, short iRounding)
{
     short i, j;
	 for (j = 0; j < 8; j++)
	 {
		 for (i = 0; i < 8; i++)
		 {
			 Dst[j*8+i] = (Src[j*iStride+i] + Src[j*iStride+i+1] + Src[(j+1) * iStride+i] + Src[(j+1) * iStride + i + 1] + 2 - iRounding) >> 2;
		 }
	 }

}
*/
/*
void Transfer16_ImageToImage_Interpolate_H(short* Dst, short* Src, short iStride, short iRounding)
{
	 short i, j;

	 short* Src1 = Src + 1;

	 for (j = 0; j < 8; j++)
	 {
		 for (i = 0; i < 8; i++)
		 {
			 Dst[j*iStride+i] = (Src[j*iStride+i] + Src1[j*iStride+i] + 1 - iRounding)>>1;
		 }

	 }
}

void Transfer16_ImageToImage_Interpolate_V(short* Dst, short* Src, short iStride, short iRounding)
{
     short i, j;

	 short* Src1 = Src + iStride;

	 for (j = 0; j < 8; j++)
	 {
		 for (i = 0; i < 8; i++)
		 {
			 Dst[j*iStride+i] = (Src[j*iStride+i] + Src1[j*iStride+i] + 1 - iRounding)>>1;
		 }

	 }
}




void Transfer16_ImageToImage_Interpolate_HV(short* Dst, short* Src, short iStride, short iRounding)
{
	 short i, j;
	 for (j = 0; j < 8; j++)
	 {
		 for (i = 0; i < 8; i++)
		 {
			 Dst[j * iStride + i] = (Src[j*iStride+i] + Src[j*iStride+i+1] + Src[(j+1) * iStride+i] + Src[(j+1) * iStride + i + 1] + 2 - iRounding) >> 2;
		 }
	 }
}

//*********
void Transfer16_ImageSubBlock(short* Dst, short* Src, short iStride)
{
     short i, j;

	 for (i = 0; i < 8; i++)
	 {
		 for (j = 0; j < 8; j++)
		 {
			 Dst[i*iStride+j]=Dst[i*iStride+j]-Src[i*8+j];
		 }
	 }
}
*/
//***********************************************************************************************
//函 数 名:SetImage16Edge()
//函数功能:完成对image的扩边处理(上下左右、左上、左下、右上、右下)
//形式参数:
//返 回 值:void
//***********************************************************************************************
/*
void SetImage16Edge(Image* image, short iExtWidth, short iExtHeight, short iWidth, short iHeight )
{
	int i;
	short *pDst;
	short *pSrc;
	short size = 32;
    unsigned short  sizehalf =  size/2;

	//是否是判断iWidth,iHeight为16的整数倍,若不是则变为16的整数倍
	if (1)
	{
		iWidth  = (iWidth+15)&~15;
		iHeight = (iHeight+15)&~15;
	}
	
	// Y 扩边处理

	//将亮度块的指针指向开始的地方
	pDst = image->Y - (size + size * iExtWidth);
	pSrc = image->Y;

	//填充左上、上、右上扩边的值
	for (i = 0; i < size; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];

		//填充扩边后的左上角32×32的四个宏块为原图象的第一行的第一个值
		//填充扩边后的右上角32×32的四个宏块为原图象的第一行的最后一个值
		for (j = 0; j < size; j++)
		{
			pDst[j] = temp1;					//左上扩边的值
			pDst[j + iExtWidth - size] = temp2;					//右上扩边的值
		}
		memcpy(pDst + size, pSrc, sizeof(short) * iWidth);	//将原图象的第一行拷贝到上扩边图象的第一行。
		
		//转移到了下一行
		pDst += iExtWidth;
	}

	//填充左右扩边的值,左边为填充图象最左边的值,右边填充原始图象对应行的最右边的值
	for (i = 0; i < iHeight; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];
		for (j = 0; j < size; j++)
		{
			pDst[j] = temp1;
			pDst[j + iExtWidth - size] = temp2;			
		}

		pDst += iExtWidth;
		pSrc += iExtWidth;
	}
	
	pSrc -= iExtWidth;			//将原始图象的指针移动到扩边后的最后一行的起始地址
	//左下、下、右下扩边
	for (i = 0; i < size; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];
		for (j = 0; j < size; j++)
		{
			pDst[j] = temp1;						
			pDst[j + iExtWidth - size] = temp2;			
		}

		memcpy(pDst + size, pSrc, sizeof(short) * iWidth);	
		pDst += iExtWidth;
	}

	iWidth /= 2;
	iExtWidth  /= 2;
	iExtHeight /= 2;

	// U 扩边处理
	pDst = image->Cb - (sizehalf + sizehalf * iExtWidth);
	pSrc = image->Cb;

	for (i = 0; i < sizehalf; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];
		for (j = 0; j < sizehalf; j++)
		{
			pDst[j] = temp1;
			pDst[j + iExtWidth - sizehalf] = temp2;			
		}

		memcpy(pDst + sizehalf, pSrc,  sizeof(short) * iWidth);		
		pDst += iExtWidth;
	}
	
	for (i = 0; i < iHeight/2; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];
		for (j = 0; j < sizehalf; j++)
		{
			pDst[j] = temp1;
			pDst[j + iExtWidth - sizehalf] = temp2;			
		}

		pDst += iExtWidth;
		pSrc += iExtWidth;
	}
	
	pSrc -= iExtWidth;
	for (i = 0; i < sizehalf; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];
		for (j = 0; j < sizehalf; j++)
		{
			pDst[j] = temp1;
			pDst[j + iExtWidth - sizehalf] = temp2;			
		}
		
		memcpy(pDst + sizehalf, pSrc,  sizeof(short) * iWidth);
		pDst += iExtWidth;
	}

	//V 扩边处理 
	pDst = image->Cr - (sizehalf + sizehalf * iExtWidth);
	pSrc = image->Cr;


	for (i = 0; i < sizehalf; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];
		for (j = 0; j < sizehalf; j++)
		{
			pDst[j] = temp1;
			pDst[j + iExtWidth - sizehalf] = temp2;			
		}
		
		memcpy(pDst + sizehalf, pSrc,  sizeof(short) * iWidth);		
		pDst += iExtWidth;
	}
	
	for (i = 0; i < iHeight/2; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];
		for (j = 0; j < sizehalf; j++)
		{
			pDst[j] = temp1;
			pDst[j + iExtWidth - sizehalf] = temp2;			
		}

		pDst += iExtWidth;
		pSrc += iExtWidth;
	}

	pSrc -= iExtWidth;
	for (i = 0; i < sizehalf; i++) 
	{
		int j;
		short temp1, temp2;
		temp1 = pSrc[0];
		temp2 = pSrc[iWidth - 1];
		for (j = 0; j < sizehalf; j++)
		{
			pDst[j] = temp1;
			pDst[j + iExtWidth - sizehalf] = temp2;			
		}
		
		memcpy(pDst + sizehalf, pSrc, sizeof(short) * iWidth);
		pDst += iExtWidth;
	}
}
*/

⌨️ 快捷键说明

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