mf: Implement GetFullTopology().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2020-03-02 13:31:05 +03:00 committed by Alexandre Julliard
parent ce434a8a14
commit 0b4e460184
1 changed files with 35 additions and 2 deletions

View File

@ -1395,9 +1395,42 @@ static HRESULT WINAPI mfsession_GetSessionCapabilities(IMFMediaSession *iface, D
static HRESULT WINAPI mfsession_GetFullTopology(IMFMediaSession *iface, DWORD flags, TOPOID id, IMFTopology **topology)
{
FIXME("%p, %#x, %s, %p.\n", iface, flags, wine_dbgstr_longlong(id), topology);
struct media_session *session = impl_from_IMFMediaSession(iface);
struct queued_topology *queued;
HRESULT hr = S_OK;
TOPOID topo_id;
return E_NOTIMPL;
TRACE("%p, %#x, %s, %p.\n", iface, flags, wine_dbgstr_longlong(id), topology);
*topology = NULL;
EnterCriticalSection(&session->cs);
if (flags & MFSESSION_GETFULLTOPOLOGY_CURRENT)
{
if (session->presentation.topo_status != MF_TOPOSTATUS_INVALID)
*topology = session->presentation.current_topology;
else
hr = MF_E_INVALIDREQUEST;
}
else
{
LIST_FOR_EACH_ENTRY(queued, &session->topologies, struct queued_topology, entry)
{
if (SUCCEEDED(IMFTopology_GetTopologyID(queued->topology, &topo_id)) && topo_id == id)
{
*topology = queued->topology;
break;
}
}
}
if (*topology)
IMFTopology_AddRef(*topology);
LeaveCriticalSection(&session->cs);
return hr;
}
static const IMFMediaSessionVtbl mfmediasessionvtbl =