您好我为Windows 8.1创建了一个简单的解码器,输出格式为46厘米长的pcm_wav标头。 好的,该类运行良好,并编写一个格式良好的.wav文件。 问题是pcm数据的长度,我在进程开始时计算 这样:
HRESULT GetSourceDuration(IMFMediaSource *pSource, MFTIME *pDuration)
{
*pDuration = 0;
IMFPresentationDescriptor *pPD = NULL;
HRESULT hr = pSource->CreatePresentationDescriptor(&pPD);
if (SUCCEEDED(hr))
{
hr = pPD->GetUINT64(MF_PD_DURATION, (UINT64*)pDuration);
pPD->Release();
}
return hr;
}
这个返回(100ns滴答)一个奇数值es:2593440625, 从这里我计算pcm的长度,以字节为单位
(2593440625 / 1e7)*(nChannel(2)* nByteIntoSample(2)* SampleRate(44100))= 45748292,625 我已经变得奇怪了,625(??)
顺便说一下pcm的正确大小是45748224,你知道写完所有字节之后, 是的差异只有几个字节,但重点是:MF_PD_DURATION得到错误的时间,或不精确的时间。 那么问题是如何获得正确的pcm字节长度?
感谢。