bool SoundSourceMediaFoundation::readProperties() { PROPVARIANT prop; HRESULT hr = S_OK; //Get the duration, provided as a 64-bit integer of 100-nanosecond units hr = m_pReader->GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_DURATION, &prop); if (FAILED(hr)) { qWarning() << "SSMF: error getting duration"; return false; } // QuadPart isn't available on compilers that don't support _int64. Visual // Studio 6.0 introduced the type in 1998, so I think we're safe here // -bkgood m_iDuration = secondsFromMF(prop.hVal.QuadPart); m_mfDuration = prop.hVal.QuadPart; qDebug() << "SSMF: Duration:" << m_iDuration; PropVariantClear(&prop); // presentation attribute MF_PD_AUDIO_ENCODING_BITRATE only exists for // presentation descriptors, one of which MFSourceReader is not. // Therefore, we calculate it ourselves. m_iBitrate = kBitsPerSample * kSampleRate * kNumChannels; return true; }
inline unsigned long SoundSourceMediaFoundation::length() { unsigned long len(secondsFromMF(m_mfDuration) * kSampleRate * kNumChannels); return len % kNumChannels == 0 ? len : len + 1; }
inline int AudioDecoderMediaFoundation::numSamples() { int len(secondsFromMF(m_mfDuration) * m_iSampleRate * m_iChannels); return len % m_iChannels == 0 ? len : len + 1; }