|
안녕하세요.. 간만에 글을 올립니다.
음성을 주고받는 프로그램을 하고 있는데, 음성을 받는쪽에서 메모리가 쌓이는거 같습니다.
어디서 메모리가 새고 있는지 보시구 알려주세요. 밑에 소스는 받는 쪽입니다.
음성 송신에서는 "음성상태(1,처음,중간,끝):음성사이즈(4):음성실제데이타" 로 구성되어있습니다.
void __fastcall Audio::AudioIdUDPServerUDPRead(TObject *Sender, TStream *AData,
TIdSocketHandle *ABinding)
{
LPSTR MetaBlock; // 음성 상태 및 사이즈를 받는 부분
char *AudioBuffer = NULL; // 음성데이터 받는 부분
int sizeofBuffer;
AudioBuffer = (char *) malloc((AData->Size - 5));
MetaBlock = (char *) malloc(5);
AData->Position = 0;
AData->ReadBuffer(MetaBlock, 5);
AData->Position = 5;
AData->ReadBuffer(AudioBuffer, (AData->Size - 5));
::Sleep(0);
playSoundBlock(AudioBuffer, (AData->Size - 5), (byte)MetaBlock[0]);
free(MetaBlock);
free(AudioBuffer);
}
void Audio::playSoundBlock(char *srcSnd, DWORD srcLength, byte order)
{
ErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
if ( waveOutFlag != MMSYSERR_NOERROR || !waveOutStatus ) return;
static int BlockOrder;
WAVEHDR *waveOutHdr = new WAVEHDR;
waveOutHdr->lpData = srcSnd;
waveOutHdr->dwBufferLength = srcLength;
waveOutHdr->dwFlags = 0L;
waveOutHdr->dwLoops = 0L;
if (order == WHDR_BEGIN)
{
BlockOrder = 0;
waveOutPause(hWaveOut);
}
else
{
BlockOrder++;
if( order == WHDR_END || BlockOrder == BeginBufferIndex ) waveOutRestart(hWaveOut);
}
err = waveOutPrepareHeader(hWaveOut,waveOutHdr,sizeof(WAVEHDR));
err = waveOutWrite(hWaveOut,waveOutHdr,sizeof(WAVEHDR));
free(waveOutHdr->lpData);
waveOutHdr = NULL;
SetErrorMode(ErrorMode);
}
|