[PATCH 1/4] evr/tests: Add basic creation test for default mixer object.

Zebediah Figura z.figura12 at gmail.com
Wed Jun 17 10:34:39 CDT 2020


On 6/17/20 10:16 AM, Nikolay Sivov wrote:
> 
> 
> On 6/17/20 6:12 PM, Zebediah Figura wrote:
>> On 6/17/20 6:59 AM, Nikolay Sivov wrote:
>>> Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
>>> ---
>>>   dlls/evr/Makefile.in       |  3 ++-
>>>   dlls/evr/evr.spec          |  2 +-
>>>   dlls/evr/mixer.c           | 28 ++++++++++++++++++++
>>>   dlls/evr/tests/Makefile.in |  2 +-
>>>   dlls/evr/tests/evr.c       | 32 ++++++++++++++++++++++
>>>   include/evr.idl            | 54 ++++++++++++++++++++++++++++++++++++++
>>>   6 files changed, 118 insertions(+), 3 deletions(-)
>>>   create mode 100644 dlls/evr/mixer.c
>>>
>>> diff --git a/dlls/evr/Makefile.in b/dlls/evr/Makefile.in
>>> index 053d80e61d7..b1db77e639f 100644
>>> --- a/dlls/evr/Makefile.in
>>> +++ b/dlls/evr/Makefile.in
>>> @@ -5,6 +5,7 @@ EXTRADLLFLAGS = -mno-cygwin
>>>   
>>>   C_SRCS = \
>>>   	evr.c \
>>> -	main.c
>>> +	main.c \
>>> +	mixer.c
>>>   
>>>   IDL_SRCS = evr_classes.idl
>>> diff --git a/dlls/evr/evr.spec b/dlls/evr/evr.spec
>>> index c78900c5762..ea87f16da15 100644
>>> --- a/dlls/evr/evr.spec
>>> +++ b/dlls/evr/evr.spec
>>> @@ -13,7 +13,7 @@
>>>   @ stub MFCreateVideoMediaTypeFromSubtype
>>>   @ stub MFCreateVideoMediaTypeFromVideoInfoHeader2
>>>   @ stub MFCreateVideoMediaTypeFromVideoInfoHeader
>>> -@ stub MFCreateVideoMixer
>>> +@ stdcall MFCreateVideoMixer(ptr ptr ptr ptr)
>>>   @ stub MFCreateVideoMixerAndPresenter
>>>   @ stub MFCreateVideoOTA
>>>   @ stub MFCreateVideoPresenter2
>>> diff --git a/dlls/evr/mixer.c b/dlls/evr/mixer.c
>>> new file mode 100644
>>> index 00000000000..fe2f4bab1df
>>> --- /dev/null
>>> +++ b/dlls/evr/mixer.c
>>> @@ -0,0 +1,28 @@
>>> +/*
>>> + * Copyright 2020 Nikolay Sivov
>>> + *
>>> + * This library is free software; you can redistribute it and/or
>>> + * modify it under the terms of the GNU Lesser General Public
>>> + * License as published by the Free Software Foundation; either
>>> + * version 2.1 of the License, or (at your option) any later version.
>>> + *
>>> + * This library is distributed in the hope that it will be useful,
>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>>> + * Lesser General Public License for more details.
>>> + *
>>> + * You should have received a copy of the GNU Lesser General Public
>>> + * License along with this library; if not, write to the Free Software
>>> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
>>> + */
>>> +
>>> +#include "wine/debug.h"
>>> +#include "evr.h"
>>> +
>>> +WINE_DEFAULT_DEBUG_CHANNEL(evr);
>>> +
>>> +HRESULT WINAPI MFCreateVideoMixer(IUnknown *owner, REFIID riid_device, REFIID riid, void **obj)
>>> +{
>>> +    FIXME("%p, %s, %s, %p.\n", owner, debugstr_guid(riid_device), debugstr_guid(riid), obj);
>>> +    return E_NOTIMPL;
>>> +}
>>> diff --git a/dlls/evr/tests/Makefile.in b/dlls/evr/tests/Makefile.in
>>> index 8dc11e5e558..529c5354508 100644
>>> --- a/dlls/evr/tests/Makefile.in
>>> +++ b/dlls/evr/tests/Makefile.in
>>> @@ -1,5 +1,5 @@
>>>   TESTDLL   = evr.dll
>>> -IMPORTS   = mfuuid strmiids uuid ole32 oleaut32
>>> +IMPORTS   = mfuuid strmiids uuid dxguid ole32 oleaut32 evr
>>>   
>>>   C_SRCS = \
>>>   	evr.c
>>> diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c
>>> index 489b7b949db..adb2b777a2e 100644
>>> --- a/dlls/evr/tests/evr.c
>>> +++ b/dlls/evr/tests/evr.c
>>> @@ -22,6 +22,7 @@
>>>   #include "dshow.h"
>>>   #include "wine/test.h"
>>>   #include "d3d9.h"
>>> +#include "evr.h"
>>>   #include "initguid.h"
>>>   #include "dxva2api.h"
>>>   
>>> @@ -337,6 +338,36 @@ static void test_pin_info(void)
>>>       ok(!ref, "Got outstanding refcount %d.\n", ref);
>>>   }
>>>   
>>> +static void test_default_mixer(void)
>>> +{
>>> +    IMFTransform *transform;
>>> +    IUnknown *unk;
>>> +    HRESULT hr;
>>> +
>>> +    hr = MFCreateVideoMixer(NULL, &IID_IDirect3DDevice9, &IID_IMFTransform, (void **)&transform);
>>> +todo_wine
>>> +    ok(hr == S_OK, "Failed to create default mixer, hr %#x.\n", hr);
>>> +    if (FAILED(hr))
>>> +        return;
>>> +
>>> +    hr = IMFTransform_QueryInterface(transform, &IID_IMFTopologyServiceLookupClient, (void **)&unk);
>>> +    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
>>> +    IUnknown_Release(unk);
>>> +
>>> +    hr = IMFTransform_QueryInterface(transform, &IID_IMFVideoDeviceID, (void **)&unk);
>>> +    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
>>> +    IUnknown_Release(unk);
>>> +
>>> +    IMFTransform_Release(transform);
>>> +
>>> +    hr = MFCreateVideoMixer(NULL, &IID_IMFTransform, &IID_IMFTransform, (void **)&transform);
>>> +    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
>>> +
>>> +    hr = CoCreateInstance(&CLSID_MFVideoMixer9, NULL, CLSCTX_INPROC_SERVER, &IID_IMFTransform, (void **)&transform);
>>> +    ok(hr == S_OK, "Failed to create default mixer, hr %#x.\n", hr);
>>> +    IMFTransform_Release(transform);
>>> +}
>>> +
>>>   START_TEST(evr)
>>>   {
>>>       CoInitialize(NULL);
>>> @@ -346,6 +377,7 @@ START_TEST(evr)
>>>       test_enum_pins();
>>>       test_find_pin();
>>>       test_pin_info();
>>> +    test_default_mixer();
>>>   
>>>       CoUninitialize();
>>>   }
>> I think it would probably be a good idea to separate mfplat tests from
>> quartz tests, i.e. by putting them in a separate file.
> 
> Why? IMF* interfaces are also used in DirectShow situation for EVR. I 
> don't see a reason to make tests more separate
> than the thing it's testing.

I guess because while the interfaces may be shared, the usage will look
very different. I don't care a lot, though.

> 
>>
>>> diff --git a/include/evr.idl b/include/evr.idl
>>> index 3768b41b16e..39b4853b2e3 100644
>>> --- a/include/evr.idl
>>> +++ b/include/evr.idl
>>> @@ -107,3 +107,57 @@ interface IMFVideoRenderer : IUnknown
>>>           [in] IMFVideoPresenter *pVideoPresenter
>>>       );
>>>   }
>>> +
>>> +typedef enum _MF_SERVICE_LOOKUP_TYPE
>>> +{
>>> +    MF_SERVICE_LOOKUP_UPSTREAM,
>>> +    MF_SERVICE_LOOKUP_UPSTREAM_DIRECT,
>>> +    MF_SERVICE_LOOKUP_DOWNSTREAM,
>>> +    MF_SERVICE_LOOKUP_DOWNSTREAM_DIRECT,
>>> +    MF_SERVICE_LOOKUP_ALL,
>>> +    MF_SERVICE_LOOKUP_GLOBAL,
>>> +} MF_SERVICE_LOOKUP_TYPE;
>>> +
>>> +[
>>> +    object,
>>> +    uuid(fa993889-4383-415a-a930-dd472a8cf6f7),
>>> +    local
>>> +]
>>> +interface IMFTopologyServiceLookup : IUnknown
>>> +{
>>> +    HRESULT LookupService(
>>> +        [in] MF_SERVICE_LOOKUP_TYPE lookup_type,
>>> +        [in] DWORD index,
>>> +        [in] REFGUID service,
>>> +        [in] REFIID riid,
>>> +        [out, iid_is(riid)] void **objects,
>>> +        [in, out] DWORD *num_objects
>>> +    );
>>> +}
>>> +
>>> +[
>>> +    object,
>>> +    uuid(fa99388a-4383-415a-a930-dd472a8cf6f7),
>>> +    local
>>> +]
>>> +interface IMFTopologyServiceLookupClient : IUnknown
>>> +{
>>> +    HRESULT InitServicePointers(
>>> +        [in] IMFTopologyServiceLookup *service_lookup
>>> +    );
>>> +    HRESULT ReleaseServicePointers();
>>> +}
>>> +
>>> +[
>>> +    object,
>>> +    uuid(a38d9567-5a9c-4f3c-b293-8eb415b279ba),
>>> +    local
>>> +]
>>> +interface IMFVideoDeviceID : IUnknown
>>> +{
>>> +    HRESULT GetDeviceID(
>>> +        [out] IID *device_id
>>> +    );
>>> +}
>>> +
>>> +cpp_quote("HRESULT WINAPI MFCreateVideoMixer(IUnknown *owner, REFIID riid_device, REFIID riid, void **obj);")
>>>
> 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200617/18ebd54e/attachment-0001.sig>


More information about the wine-devel mailing list