#include "PlatformContextCairo.h"
#include <cairo.h>
#endif
-#include <wtf/SoftLinking.h>
#if USE(MEDIA_FOUNDATION)
#include <wtf/MainThread.h>
#include <wtf/NeverDestroyed.h>
-SOFT_LINK_LIBRARY(Mf);
-SOFT_LINK_OPTIONAL(Mf, MFCreateSourceResolver, HRESULT, STDAPICALLTYPE, (IMFSourceResolver**));
-SOFT_LINK_OPTIONAL(Mf, MFCreateMediaSession, HRESULT, STDAPICALLTYPE, (IMFAttributes*, IMFMediaSession**));
-SOFT_LINK_OPTIONAL(Mf, MFCreateTopology, HRESULT, STDAPICALLTYPE, (IMFTopology**));
-SOFT_LINK_OPTIONAL(Mf, MFCreateTopologyNode, HRESULT, STDAPICALLTYPE, (MF_TOPOLOGY_TYPE, IMFTopologyNode**));
-SOFT_LINK_OPTIONAL(Mf, MFGetService, HRESULT, STDAPICALLTYPE, (IUnknown*, REFGUID, REFIID, LPVOID*));
-SOFT_LINK_OPTIONAL(Mf, MFCreateAudioRendererActivate, HRESULT, STDAPICALLTYPE, (IMFActivate**));
-SOFT_LINK_OPTIONAL(Mf, MFCreateVideoRendererActivate, HRESULT, STDAPICALLTYPE, (HWND, IMFActivate**));
-SOFT_LINK_OPTIONAL(Mf, MFGetSupportedMimeTypes, HRESULT, STDAPICALLTYPE, (PROPVARIANT*));
-
-SOFT_LINK_LIBRARY(Mfplat);
-SOFT_LINK_OPTIONAL(Mfplat, MFStartup, HRESULT, STDAPICALLTYPE, (ULONG, DWORD));
-SOFT_LINK_OPTIONAL(Mfplat, MFShutdown, HRESULT, STDAPICALLTYPE, ());
-SOFT_LINK_OPTIONAL(Mfplat, MFCreateMediaType, HRESULT, STDAPICALLTYPE, (IMFMediaType**));
-SOFT_LINK_OPTIONAL(Mfplat, MFFrameRateToAverageTimePerFrame, HRESULT, STDAPICALLTYPE, (UINT32, UINT32, UINT64*));
-
-SOFT_LINK_LIBRARY(evr);
-SOFT_LINK_OPTIONAL(evr, MFCreateVideoSampleFromSurface, HRESULT, STDAPICALLTYPE, (IUnknown*, IMFSample**));
-
-SOFT_LINK_LIBRARY(Dxva2);
-SOFT_LINK_OPTIONAL(Dxva2, DXVA2CreateDirect3DDeviceManager9, HRESULT, STDAPICALLTYPE, (UINT*, IDirect3DDeviceManager9**));
-
-SOFT_LINK_LIBRARY(D3d9);
-SOFT_LINK_OPTIONAL(D3d9, Direct3DCreate9Ex, HRESULT, STDAPICALLTYPE, (UINT, IDirect3D9Ex**));
-
// MFSamplePresenterSampleCounter
// Data type: UINT32
//
cachedTypes.get().add(String("video/mp4"));
- if (!MFGetSupportedMimeTypesPtr())
- return cachedTypes;
-
PROPVARIANT propVarMimeTypeArray;
PropVariantInit(&propVarMimeTypeArray);
- HRESULT hr = MFGetSupportedMimeTypesPtr()(&propVarMimeTypeArray);
+ HRESULT hr = MFGetSupportedMimeTypes(&propVarMimeTypeArray);
if (SUCCEEDED(hr)) {
CALPWSTR mimeTypeArray = propVarMimeTypeArray.calpwstr;
{
COMPtr<IMFRateControl> rateControl;
- HRESULT hr = MFGetServicePtr()(m_mediaSession.get(), MF_RATE_CONTROL_SERVICE, IID_IMFRateControl, (void**)&rateControl);
+ HRESULT hr = MFGetService(m_mediaSession.get(), MF_RATE_CONTROL_SERVICE, IID_IMFRateControl, (void**)&rateControl);
if (!SUCCEEDED(hr))
return;
bool MediaPlayerPrivateMediaFoundation::setAllChannelVolumes(float volume)
{
- if (!MFGetServicePtr())
- return false;
-
COMPtr<IMFAudioStreamVolume> audioVolume;
- if (!SUCCEEDED(MFGetServicePtr()(m_mediaSession.get(), MR_STREAM_VOLUME_SERVICE, __uuidof(IMFAudioStreamVolume), (void **)&audioVolume)))
+ if (!SUCCEEDED(MFGetService(m_mediaSession.get(), MR_STREAM_VOLUME_SERVICE, __uuidof(IMFAudioStreamVolume), (void **)&audioVolume)))
return false;
UINT32 channelsCount;
bool MediaPlayerPrivateMediaFoundation::createSession()
{
- if (!MFStartupPtr() || !MFCreateMediaSessionPtr())
- return false;
-
- if (FAILED(MFStartupPtr()(MF_VERSION, MFSTARTUP_FULL)))
+ if (FAILED(MFStartup(MF_VERSION, MFSTARTUP_FULL)))
return false;
- if (FAILED(MFCreateMediaSessionPtr()(nullptr, &m_mediaSession)))
+ if (FAILED(MFCreateMediaSession(nullptr, &m_mediaSession)))
return false;
// Get next event.
m_mediaSession = nullptr;
}
- if (!MFShutdownPtr())
- return false;
-
- HRESULT hr = MFShutdownPtr()();
+ HRESULT hr = MFShutdown();
ASSERT_UNUSED(hr, SUCCEEDED(hr));
return true;
bool MediaPlayerPrivateMediaFoundation::startCreateMediaSource(const String& url)
{
- if (!MFCreateSourceResolverPtr())
- return false;
-
- if (FAILED(MFCreateSourceResolverPtr()(&m_sourceResolver)))
+ if (FAILED(MFCreateSourceResolver(&m_sourceResolver)))
return false;
COMPtr<IUnknown> cancelCookie;
bool MediaPlayerPrivateMediaFoundation::createTopologyFromSource()
{
- if (!MFCreateTopologyPtr())
+ if (!MFCreateTopology)
return false;
// Create a new topology.
- if (FAILED(MFCreateTopologyPtr()(&m_topology)))
+ if (FAILED(MFCreateTopology(&m_topology)))
return false;
// Create the presentation descriptor for the media source.
bool MediaPlayerPrivateMediaFoundation::createOutputNode(COMPtr<IMFStreamDescriptor> sourceSD, COMPtr<IMFTopologyNode>& node)
{
- if (!MFCreateTopologyNodePtr() || !MFCreateAudioRendererActivatePtr() || !MFCreateVideoRendererActivatePtr())
- return false;
-
if (!sourceSD)
return false;
return false;
// Create a downstream node.
- if (FAILED(MFCreateTopologyNodePtr()(MF_TOPOLOGY_OUTPUT_NODE, &node)))
+ if (FAILED(MFCreateTopologyNode(MF_TOPOLOGY_OUTPUT_NODE, &node)))
return false;
// Create an IMFActivate object for the renderer, based on the media type.
COMPtr<IMFActivate> rendererActivate;
if (MFMediaType_Audio == guidMajorType) {
// Create the audio renderer.
- if (FAILED(MFCreateAudioRendererActivatePtr()(&rendererActivate)))
+ if (FAILED(MFCreateAudioRendererActivate(&rendererActivate)))
return false;
m_hasAudio = true;
} else if (MFMediaType_Video == guidMajorType) {
// Create the video renderer.
- if (FAILED(MFCreateVideoRendererActivatePtr()(nullptr, &rendererActivate)))
+ if (FAILED(MFCreateVideoRendererActivate(nullptr, &rendererActivate)))
return false;
m_presenter = new CustomVideoPresenter(this);
bool MediaPlayerPrivateMediaFoundation::createSourceStreamNode(COMPtr<IMFStreamDescriptor> sourceSD, COMPtr<IMFTopologyNode>& node)
{
- if (!MFCreateTopologyNodePtr())
- return false;
-
if (!m_mediaSource || !m_sourcePD || !sourceSD)
return false;
// Create the source-stream node.
- HRESULT hr = MFCreateTopologyNodePtr()(MF_TOPOLOGY_SOURCESTREAM_NODE, &node);
+ HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_SOURCESTREAM_NODE, &node);
if (FAILED(hr))
return false;
void MediaPlayerPrivateMediaFoundation::updateReadyState()
{
- if (!MFGetServicePtr())
- return;
-
COMPtr<IPropertyStore> prop;
// Get the property store from the media session.
- HRESULT hr = MFGetServicePtr()(m_mediaSession.get(), MFNETSOURCE_STATISTICS_SERVICE, IID_PPV_ARGS(&prop));
+ HRESULT hr = MFGetService(m_mediaSession.get(), MFNETSOURCE_STATISTICS_SERVICE, IID_PPV_ARGS(&prop));
if (FAILED(hr))
return;
if (m_videoDisplay)
return m_videoDisplay;
- if (!MFGetServicePtr())
- return nullptr;
-
- MFGetServicePtr()(m_mediaSession.get(), MR_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_videoDisplay));
+ MFGetService(m_mediaSession.get(), MR_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_videoDisplay));
return m_videoDisplay;
}
HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::createOptimalVideoType(IMFMediaType* proposedType, IMFMediaType** optimalType)
{
COMPtr<IMFMediaType> optimalVideoType;
- HRESULT hr = MFCreateMediaTypePtr()(&optimalVideoType);
+ HRESULT hr = MFCreateMediaType(&optimalVideoType);
if (FAILED(hr))
return hr;
hr = optimalVideoType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
void MediaPlayerPrivateMediaFoundation::VideoScheduler::setFrameRate(const MFRatio& fps)
{
UINT64 avgTimePerFrame = 0;
- MFFrameRateToAverageTimePerFramePtr()(fps.Numerator, fps.Denominator, &avgTimePerFrame);
+ MFFrameRateToAverageTimePerFrame(fps.Numerator, fps.Denominator, &avgTimePerFrame);
m_frameDuration = (MFTIME)avgTimePerFrame;
}
if (sample) {
COMPtr<IMFMediaBuffer> buffer;
hr = sample->GetBufferByIndex(0, &buffer);
- hr = MFGetServicePtr()(buffer.get(), MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&surface);
+ hr = MFGetService(buffer.get(), MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&surface);
} else if (m_surfaceRepaint) {
// Use the last surface.
surface = m_surfaceRepaint;
ASSERT(!m_direct3D9);
ASSERT(!m_deviceManager);
- HRESULT hr = Direct3DCreate9ExPtr()(D3D_SDK_VERSION, &m_direct3D9);
+ HRESULT hr = Direct3DCreate9Ex(D3D_SDK_VERSION, &m_direct3D9);
if (FAILED(hr))
return hr;
- return DXVA2CreateDirect3DDeviceManager9Ptr()(&m_deviceResetToken, &m_deviceManager);
+ return DXVA2CreateDirect3DDeviceManager9(&m_deviceResetToken, &m_deviceManager);
}
HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createD3DDevice()
if (FAILED(hr))
return hr;
- return MFCreateVideoSampleFromSurfacePtr()(surface.get(), &videoSample);
+ return MFCreateVideoSampleFromSurface(surface.get(), &videoSample);
}
HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::getSwapChainPresentParameters(IMFMediaType* type, D3DPRESENT_PARAMETERS* presentParams)