MF_PD_DURATION返回音频的不精确值

时间:2014-08-27 11:25:34

标签: c++ windows ms-media-foundation

您好我为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字节长度?

感谢。

0 个答案:

没有答案