// IMFSchemeHandler methods IFACEMETHODIMP CSchemeHandler::BeginCreateObject( _In_ LPCWSTR pwszURL, _In_ DWORD dwFlags, _In_ IPropertyStore *pProps, _Out_opt_ IUnknown **ppIUnknownCancelCookie, _In_ IMFAsyncCallback *pCallback, _In_ IUnknown *punkState) { if (pwszURL == nullptr || pCallback == nullptr) { return E_INVALIDARG; } if ((dwFlags & MF_RESOLUTION_MEDIASOURCE) == 0) { return E_INVALIDARG; } ComPtr<CMediaSource> spSource; ComPtr<IMFAsyncResult> spResult; HRESULT hr = CMediaSource::CreateInstance(&spSource); if (SUCCEEDED(hr)) { ComPtr<IUnknown> spunkSource; hr = spSource.As(&spunkSource); if (SUCCEEDED(hr)) { hr = MFCreateAsyncResult(spunkSource.Get(), pCallback, punkState, &spResult); } } if (SUCCEEDED(hr)) { hr = spSource->BeginOpen(pwszURL, &_OnSourceOpenCB, spResult.Get()); } if (SUCCEEDED(hr) && ppIUnknownCancelCookie != nullptr) { *ppIUnknownCancelCookie = nullptr; } if (FAILED(hr)) { spSource->Shutdown(); } TRACEHR_RET(hr); }