視頻監控行業G711編解碼[續]編碼樣例

//G711 PCMA解碼
bool G711A_AudioDecode(unsigned char*pFrameBuf, unsigned int nFrameSize, unsigned char* pOutput, unsigned int& nOutLen)
{
	if(nFrameSize <= 0 || !pFrameBuf)
		return false;

	unsigned int out_size = (nFrameSize << 1);

	for(int i=0, nOffset=0; i<nFrameSize; i++)
	{
		int iLinear = alaw2linear(pFrameBuf[i]);
		memcpy(pOutput + nOffset, &iLinear, 2);
		nOffset += 2;
	}
	nOutLen = out_size;
	
	return true;
}

//G711 PCMU解碼
bool G711U_AudioDecode(unsigned char*pFrameBuf, unsigned int nFrameSize, unsigned char* pOutput, unsigned int& nOutLen)
{
	if(nFrameSize <= 0 || !pFrameBuf)
		return false;

	unsigned int out_size = (nFrameSize << 1);

	for(int i=0, nOffset=0; i<nFrameSize; i++)
	{
		int iLinear = ulaw2linear(pFrameBuf[i]);
		memcpy(pOutput + nOffset, &iLinear, 2);
		nOffset += 2;
	}
	nOutLen = out_size;

	return true;
}

//G711 PCMA編碼
bool G711A_AudioEncode(unsigned char* pInput, unsigned int nInLen, unsigned char* pOutput, unsigned int& nOutLen)
{
	if(!pInput || !pOutput || nInLen <= 0)
		return false;

	unsigned int out_size = (nInLen >> 1);
	uint8_t* pout_data = pOutput;
	int16_t* pin_data = (int16_t*)pInput;

	for(int i=0; i<out_size; i++)
	{
		pout_data[i] = linear2alaw(pin_data[i]);
	}

	nOutLen = out_size;
	return true;
}

//G711 PCMU編碼
bool G711U_AudioEncode(unsigned char* pInput, unsigned int nInLen, unsigned char* pOutput, unsigned int& nOutLen)
{
	if(!pInput || !pOutput || nInLen <= 0)
		return false;

	unsigned int out_size = (nInLen >> 1);
	uint8_t* pout_data = pOutput;
	int16_t* pin_data = (int16_t*)pInput;

	for(int i=0; i<out_size; i++)
	{
		pout_data[i] = linear2ulaw(pin_data[i]);
	}

	nOutLen = out_size;
	return true;
}


發佈了54 篇原創文章 · 獲贊 14 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章