2,543
社区成员
发帖
与我相关
我的任务
分享
HRESULT CMyAudioSourceStream::FillBuffer(IMediaSample *pms)
{
CheckPointer(pms,E_POINTER);
BYTE *pData;
int DataLen,de_size,cmp_size;
pms->GetPointer(&pData);
DataLen=pms->GetSize();
de_size=0;
cmp_size=0;
int MyRecv=recv(aClient,(char *)buffer,AVCODEC_MAX_AUDIO_FRAME_SIZE,0);
if (MyRecv>0)
{
fwrite(buffer,MyRecv,1,TestFile);
while (DataLen!=0 && MyRecv>0)
{
int out_size=avcodec_decode_audio2(c,(int16_t *)pData,&DataLen,buffer,MyRecv);
if (out_size<0)
{
break;
}
MyRecv-=out_size;
buffer+=out_size;
cmp_size+=out_size;
pData+=DataLen;
de_size+=DataLen;
}
pData-=de_size;
buffer-=cmp_size;
pms->SetActualDataLength(de_size);
pms->SetSyncPoint(TRUE);
pms->SetTime(0,0);
}
return NOERROR;
}