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

📄 cbytebuffer.cpp

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


#include "stdafx.h"
#include "CByteBuffer.h"

CByteBuffer::CByteBuffer(UINT uTheMaxLength)						
{
	uMaxLength=uTheMaxLength;
	uLength=0;
	uHeader=0;
	uTail=0;
	pbyContent=(BYTE*)GlobalAlloc(GMEM_FIXED,uMaxLength);
}

CByteBuffer::~CByteBuffer()
{
	GlobalFree(pbyContent);
}

UINT CByteBuffer::DetachHeader(BYTE* pbyDetachedContent,UINT uDetachLength)								
{
	CSingleLock sLock(&CriSec);
	sLock.Lock();	
	if(uDetachLength==0)return 0;
	if(pbyDetachedContent==NULL)return 0;
	if(uLength==0)return 0;

	if(uDetachLength>uLength)uDetachLength=uLength;
	

	if(uHeader>=uTail)
	{			
		BYTE *pTemp=pbyContent+uHeader;
		if(uDetachLength+uHeader<=uMaxLength)
			CopyMemory(pbyDetachedContent,pTemp,uDetachLength);
		else
		{
			CopyMemory(pbyDetachedContent,pTemp,uMaxLength-uHeader);
			CopyMemory(pbyDetachedContent+uMaxLength-uHeader,
						pbyContent,uDetachLength-(uMaxLength-uHeader));	
		}
		
	}
	else	
		CopyMemory(pbyDetachedContent,
					pbyContent+uHeader,uDetachLength);
		
	uHeader+=uDetachLength;
	uHeader%=uMaxLength;
	uLength-=uDetachLength;
	return uDetachLength;
}

UINT CByteBuffer::GetHeader(BYTE* pbyBuffer,UINT uGetLength)
{
	CSingleLock sLock(&CriSec);
	sLock.Lock();
	if(uGetLength==0)return 0;
	if(pbyBuffer==NULL)return 0;
	if(uLength==0)return 0;

	if(uGetLength>uLength)uGetLength=uLength;
	

	if(uHeader>=uTail)
	{			
		BYTE *pTemp=pbyContent+uHeader;
		if(uGetLength+uHeader<=uMaxLength)
			CopyMemory(pbyBuffer,pTemp,uGetLength);
		else
		{
			CopyMemory(pbyBuffer,pTemp,uMaxLength-uHeader);
			CopyMemory(pbyBuffer+uMaxLength-uHeader,
						pbyContent,uGetLength-(uMaxLength-uHeader));	
		}
		
	}
	else	
		CopyMemory(pbyBuffer,
					pbyContent+uHeader,uGetLength);
	
	return uGetLength;
}

void CByteBuffer::RemoveHeader(UINT uRemoveLength)
{
	CSingleLock sLock(&CriSec);
	sLock.Lock();
	if(uRemoveLength==0)return ;
	if(uLength==0)return ;
	if(uRemoveLength>uLength)uRemoveLength=uLength;
	
	uHeader+=uRemoveLength;
	uHeader%=uMaxLength;
	uLength-=uRemoveLength;	
}

BOOL CByteBuffer::AppendTail(BYTE* pbyAppendContent,UINT uAppendLength)
{
	CSingleLock sLock(&CriSec);
	sLock.Lock();
	if(uAppendLength==0)return TRUE;
	if(pbyAppendContent==NULL)return FALSE;
	if(uAppendLength+uLength>=uMaxLength)return FALSE;
	if(uHeader<=uTail)
	{
		if(uMaxLength-uTail>=uAppendLength)
			CopyMemory(pbyContent+uTail,
						pbyAppendContent,uAppendLength);
			
		else
		{
			CopyMemory(pbyContent+uTail,
					pbyAppendContent,uMaxLength-uTail);
			CopyMemory(pbyContent,pbyAppendContent+uMaxLength-uTail,
					uAppendLength-(uMaxLength-uTail));
		}
	
	}
	else		
		CopyMemory(pbyContent+uTail,pbyAppendContent,uAppendLength);	
	
	uTail+=uAppendLength;
	uTail%=uMaxLength;
	uLength+=uAppendLength;
	return TRUE;
}

UINT CByteBuffer::GetLength()
{
	CSingleLock sLock(&CriSec);
	sLock.Lock();
	return uLength;	
}
UINT CByteBuffer::GetMaxLength()
{
	CSingleLock sLock(&CriSec);
	sLock.Lock();
	return uMaxLength;	
}

void CByteBuffer::Clear()
{
	CSingleLock sLock(&CriSec);
	sLock.Lock();
	uLength=0;
	uHeader=0;
	uTail=0;
}

⌨️ 快捷键说明

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