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

📄 cpacker.cpp

📁 这是G.723和G.729的音频编解码的源代码
💻 CPP
字号:

#include "stdafx.h"
#include "CPacker.h"

CPacker::CPacker()
{
	m_uLength=0;
}

BOOL CPacker::UniPack(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,UINT uInputLength,UINT& uPackedLength)
{
	m_uLength=uInputLength;
	BYTE by;
	UINT i,j;
	
	for(i=0;i<uInputLength;i++)
	{
		by=pbyInputFrame[i];
		//if(by==FRAME_FLAG||by==ESCAPE_CODE||by=='+')
		if(by==FRAME_FLAG||by==ESCAPE_CODE
			||by==FLOW_CONTROL_XON||by==FLOW_CONTROL_XOFF||by==IDLE_CODE)
			m_uLength++;
	}

	if(pbyPackedFrame==NULL)
	{
		uPackedLength=m_uLength+2;
		return FALSE;
	}

	if(uPackedLength<m_uLength+2)
	{
		uPackedLength=m_uLength+2;
		return FALSE;
	}
		
	pbyPackedFrame[0]=FRAME_FLAG;
	pbyPackedFrame[1]=m_byPM;
	j=2;
	for(i=0;i<uInputLength;i++)
	{
		by=pbyInputFrame[i];
		if(by==FRAME_FLAG)
		{
			pbyPackedFrame[j]=ESCAPE_CODE;
			j++;
			pbyPackedFrame[j]=ESCAPE_FLAG;
			j++;
		}
		else if(by==ESCAPE_CODE)
		{
			pbyPackedFrame[j]=ESCAPE_CODE;
			j++;
			pbyPackedFrame[j]=ESCAPE_CODE;
			j++;
		}
		else if(by==FLOW_CONTROL_XON)
		{
			pbyPackedFrame[j]=ESCAPE_CODE;
			j++;
			pbyPackedFrame[j]=ESCAPE_FLOW_CONTROL_XON;
			j++;
		}
		else if(by==FLOW_CONTROL_XOFF)
		{
			pbyPackedFrame[j]=ESCAPE_CODE;
			j++;
			pbyPackedFrame[j]=ESCAPE_FLOW_CONTROL_XOFF;
			j++;
		}
		else if(by==IDLE_CODE)
		{
			pbyPackedFrame[j]=ESCAPE_CODE;
			j++;
			pbyPackedFrame[j]=ESCAPE_IDLE_CODE;
			j++;
		}
		/*
		else if(by=='+')
		{
			pbyPackedFrame[j]=ESCAPE_CODE;
			j++;
			pbyPackedFrame[j]=by;
			j++;
		}
		*/
		else
		{
			pbyPackedFrame[j]=by;
			j++;
		}
	}
	m_uLength++;
	m_uLength++;
	uPackedLength=m_uLength;
	return TRUE;
}

//去掉填充码和转义码
int CPacker::Unpack(BYTE * pbyInputFrame,UINT& uLength)
{
	if(uLength==0)return MT_ERR;

//	TRACE("%d;",uLength);
	//BYTE* pby=new BYTE[uLength];
	BYTE pby[1024];
	UINT i,j;	
	i=0;
	j=0;
	m_byPM=pbyInputFrame[i];
	i++;
	while(i<uLength)
	{
		if(pbyInputFrame[i]==ESCAPE_CODE)
		{
			i++;
			if(pbyInputFrame[i]==ESCAPE_CODE)
			{
				pby[j]=ESCAPE_CODE;
				i++;
				j++;
			}
			else if(pbyInputFrame[i]==ESCAPE_IDLE_CODE)
			{
				pby[j]=IDLE_CODE;
				i++;
				j++;
			}
			else if(pbyInputFrame[i]==ESCAPE_FLOW_CONTROL_XOFF)
			{
				pby[j]=FLOW_CONTROL_XOFF;
				i++;
				j++;
			}
			else if(pbyInputFrame[i]==ESCAPE_FLOW_CONTROL_XON)
			{
				pby[j]=FLOW_CONTROL_XON;
				i++;
				j++;
			}
			/*
			else if(pbyInputFrame[i]=='+')
			{
				pby[j]='+';
				i++;
				j++;
			}
			*/
			else if(pbyInputFrame[i]==ESCAPE_FLAG)
			{
				pby[j]=FRAME_FLAG;
				j++;
				i++;
			}
			else
			{
				pby[j]=FRAME_FLAG;
				j++;
				i++;
			}
		}
		else
		{
			pby[j]=pbyInputFrame[i];
			j++;
			i++;
		}
	}
	
	uLength=j;
	CopyMemory(pbyInputFrame,pby,j);
	//delete[] pby;

	return (int)m_byPM;
}

CPacker::~CPacker()
{
}

⌨️ 快捷键说明

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