mirror of
https://github.com/reactos/wine.git
synced 2025-03-01 09:16:00 +00:00
mfplat: Implement MFGetService().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
6fb250e584
commit
42b04e2cf4
@ -20,6 +20,8 @@
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "mfidl.h"
|
||||
@ -51,3 +53,24 @@ HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array)
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* MFGetService (mf.@)
|
||||
*/
|
||||
HRESULT WINAPI MFGetService(IUnknown *object, REFGUID service, REFIID riid, void **obj)
|
||||
{
|
||||
IMFGetService *gs;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("(%p, %s, %s, %p)\n", object, debugstr_guid(service), debugstr_guid(riid), obj);
|
||||
|
||||
if (!object)
|
||||
return E_POINTER;
|
||||
|
||||
if (FAILED(hr = IUnknown_QueryInterface(object, &IID_IMFGetService, (void **)&gs)))
|
||||
return hr;
|
||||
|
||||
hr = IMFGetService_GetService(gs, service, riid, obj);
|
||||
IMFGetService_Release(gs);
|
||||
return hr;
|
||||
}
|
||||
|
@ -72,7 +72,7 @@
|
||||
@ stub MFCreateWMVEncoderActivate
|
||||
@ stub MFEnumDeviceSources
|
||||
@ stub MFGetMultipleServiceProviders
|
||||
@ stub MFGetService
|
||||
@ stdcall MFGetService(ptr ptr ptr ptr)
|
||||
@ stdcall MFGetSupportedMimeTypes(ptr)
|
||||
@ stub MFGetSupportedSchemes
|
||||
@ stub MFGetTopoNodeCurrentType
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
|
||||
#include "initguid.h"
|
||||
#include "mfidl.h"
|
||||
|
||||
#include "wine/test.h"
|
||||
@ -43,7 +44,134 @@ static void test_topology(void)
|
||||
IMFTopology_Release(topology);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI test_getservice_QI(IMFGetService *iface, REFIID riid, void **obj)
|
||||
{
|
||||
if (IsEqualIID(riid, &IID_IMFGetService) || IsEqualIID(riid, &IID_IUnknown))
|
||||
{
|
||||
*obj = iface;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*obj = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI test_getservice_AddRef(IMFGetService *iface)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ULONG WINAPI test_getservice_Release(IMFGetService *iface)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI test_getservice_GetService(IMFGetService *iface, REFGUID service, REFIID riid, void **obj)
|
||||
{
|
||||
*obj = (void *)0xdeadbeef;
|
||||
return 0x83eddead;
|
||||
}
|
||||
|
||||
static const IMFGetServiceVtbl testmfgetservicevtbl =
|
||||
{
|
||||
test_getservice_QI,
|
||||
test_getservice_AddRef,
|
||||
test_getservice_Release,
|
||||
test_getservice_GetService,
|
||||
};
|
||||
|
||||
static IMFGetService test_getservice = { &testmfgetservicevtbl };
|
||||
|
||||
static HRESULT WINAPI testservice_QI(IUnknown *iface, REFIID riid, void **obj)
|
||||
{
|
||||
if (IsEqualIID(riid, &IID_IUnknown))
|
||||
{
|
||||
*obj = iface;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*obj = NULL;
|
||||
|
||||
if (IsEqualIID(riid, &IID_IMFGetService))
|
||||
return 0x82eddead;
|
||||
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI testservice2_QI(IUnknown *iface, REFIID riid, void **obj)
|
||||
{
|
||||
if (IsEqualIID(riid, &IID_IUnknown))
|
||||
{
|
||||
*obj = iface;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if (IsEqualIID(riid, &IID_IMFGetService))
|
||||
{
|
||||
*obj = &test_getservice;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*obj = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI testservice_AddRef(IUnknown *iface)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ULONG WINAPI testservice_Release(IUnknown *iface)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const IUnknownVtbl testservicevtbl =
|
||||
{
|
||||
testservice_QI,
|
||||
testservice_AddRef,
|
||||
testservice_Release,
|
||||
};
|
||||
|
||||
static const IUnknownVtbl testservice2vtbl =
|
||||
{
|
||||
testservice2_QI,
|
||||
testservice_AddRef,
|
||||
testservice_Release,
|
||||
};
|
||||
|
||||
static IUnknown testservice = { &testservicevtbl };
|
||||
static IUnknown testservice2 = { &testservice2vtbl };
|
||||
|
||||
static void test_MFGetService(void)
|
||||
{
|
||||
IUnknown *unk;
|
||||
HRESULT hr;
|
||||
|
||||
hr = MFGetService(NULL, NULL, NULL, NULL);
|
||||
ok(hr == E_POINTER, "Unexpected return value %#x.\n", hr);
|
||||
|
||||
unk = (void *)0xdeadbeef;
|
||||
hr = MFGetService(NULL, NULL, NULL, (void **)&unk);
|
||||
ok(hr == E_POINTER, "Unexpected return value %#x.\n", hr);
|
||||
ok(unk == (void *)0xdeadbeef, "Unexpected out object.\n");
|
||||
|
||||
hr = MFGetService(&testservice, NULL, NULL, NULL);
|
||||
ok(hr == 0x82eddead, "Unexpected return value %#x.\n", hr);
|
||||
|
||||
unk = (void *)0xdeadbeef;
|
||||
hr = MFGetService(&testservice, NULL, NULL, (void **)&unk);
|
||||
ok(hr == 0x82eddead, "Unexpected return value %#x.\n", hr);
|
||||
ok(unk == (void *)0xdeadbeef, "Unexpected out object.\n");
|
||||
|
||||
unk = NULL;
|
||||
hr = MFGetService(&testservice2, NULL, NULL, (void **)&unk);
|
||||
ok(hr == 0x83eddead, "Unexpected return value %#x.\n", hr);
|
||||
ok(unk == (void *)0xdeadbeef, "Unexpected out object.\n");
|
||||
}
|
||||
|
||||
START_TEST(mf)
|
||||
{
|
||||
test_topology();
|
||||
test_MFGetService();
|
||||
}
|
||||
|
@ -256,3 +256,4 @@ cpp_quote("HRESULT WINAPI MFCreateStreamDescriptor(DWORD identifier, DWORD cMedi
|
||||
cpp_quote(" IMFMediaType **types, IMFStreamDescriptor **descriptor);")
|
||||
cpp_quote("HRESULT WINAPI MFCreateTopology(IMFTopology **topology);")
|
||||
cpp_quote("HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array);")
|
||||
cpp_quote("HRESULT WINAPI MFGetService(IUnknown *object, REFGUID service, REFIID iid, void **obj);")
|
||||
|
Loading…
x
Reference in New Issue
Block a user