HRESULT MFStartup() { const int MF_VISTA_VERSION = (0x0001 << 16 | MF_API_VERSION); const int MF_WIN7_VERSION = (0x0002 << 16 | MF_API_VERSION); // decltype is unusable for functions having default parameters DECL_FUNCTION_PTR(MFStartup, ULONG, DWORD); ENSURE_FUNCTION_PTR_(MFStartup, Mfplat.dll) if (!IsWin7OrLater()) return MFStartupPtr(MF_VISTA_VERSION, MFSTARTUP_FULL); else return MFStartupPtr(MF_WIN7_VERSION, MFSTARTUP_FULL); }
bool MediaPlayerPrivateMediaFoundation::createSession() { if (!MFStartupPtr() || !MFCreateMediaSessionPtr()) return false; if (FAILED(MFStartupPtr()(MF_VERSION, MFSTARTUP_FULL))) return false; if (FAILED(MFCreateMediaSessionPtr()(nullptr, &m_mediaSession))) return false; // Get next event. AsyncCallback* callback = new AsyncCallback(this, true); HRESULT hr = m_mediaSession->BeginGetEvent(callback, nullptr); ASSERT(SUCCEEDED(hr)); return true; }