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>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#define COBJMACROS
|
||||||
|
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "mfidl.h"
|
#include "mfidl.h"
|
||||||
@ -51,3 +53,24 @@ HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array)
|
|||||||
|
|
||||||
return E_NOTIMPL;
|
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 MFCreateWMVEncoderActivate
|
||||||
@ stub MFEnumDeviceSources
|
@ stub MFEnumDeviceSources
|
||||||
@ stub MFGetMultipleServiceProviders
|
@ stub MFGetMultipleServiceProviders
|
||||||
@ stub MFGetService
|
@ stdcall MFGetService(ptr ptr ptr ptr)
|
||||||
@ stdcall MFGetSupportedMimeTypes(ptr)
|
@ stdcall MFGetSupportedMimeTypes(ptr)
|
||||||
@ stub MFGetSupportedSchemes
|
@ stub MFGetSupportedSchemes
|
||||||
@ stub MFGetTopoNodeCurrentType
|
@ stub MFGetTopoNodeCurrentType
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
|
|
||||||
|
#include "initguid.h"
|
||||||
#include "mfidl.h"
|
#include "mfidl.h"
|
||||||
|
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
@ -43,7 +44,134 @@ static void test_topology(void)
|
|||||||
IMFTopology_Release(topology);
|
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)
|
START_TEST(mf)
|
||||||
{
|
{
|
||||||
test_topology();
|
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(" IMFMediaType **types, IMFStreamDescriptor **descriptor);")
|
||||||
cpp_quote("HRESULT WINAPI MFCreateTopology(IMFTopology **topology);")
|
cpp_quote("HRESULT WINAPI MFCreateTopology(IMFTopology **topology);")
|
||||||
cpp_quote("HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array);")
|
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