Author: akhaldi
Date: Fri Oct 11 13:13:45 2013
New Revision: 60607
URL:
http://svn.reactos.org/svn/reactos?rev=60607&view=rev
Log:
[QUARTZ_WINETEST]
* Sync with Wine 1.7.1.
CORE-7469
Added:
trunk/rostests/winetests/quartz/fil_data.idl (with props)
Modified:
trunk/rostests/winetests/quartz/CMakeLists.txt
trunk/rostests/winetests/quartz/avisplitter.c
trunk/rostests/winetests/quartz/dsoundrender.c
trunk/rostests/winetests/quartz/filtergraph.c
trunk/rostests/winetests/quartz/filtermapper.c
trunk/rostests/winetests/quartz/memallocator.c
trunk/rostests/winetests/quartz/misc.c
trunk/rostests/winetests/quartz/referenceclock.c
trunk/rostests/winetests/quartz/testlist.c
trunk/rostests/winetests/quartz/videorenderer.c
Modified: trunk/rostests/winetests/quartz/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/CMakeLis…
==============================================================================
--- trunk/rostests/winetests/quartz/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/CMakeLists.txt [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -1,7 +1,3 @@
-
-add_definitions(
- -D__ROS_LONG64__
- -D_DLL -D__USE_CRTIMP)
list(APPEND SOURCE
avisplitter.c
@@ -15,7 +11,8 @@
testlist.c)
add_executable(quartz_winetest ${SOURCE})
-target_link_libraries(quartz_winetest wine uuid)
+target_link_libraries(quartz_winetest uuid)
+add_dependencies(quartz_winetest quartz_idlheader)
set_module_type(quartz_winetest win32cui)
add_importlibs(quartz_winetest ole32 oleaut32 advapi32 msvcrt kernel32 ntdll)
add_cd_file(TARGET quartz_winetest DESTINATION reactos/bin FOR all)
Modified: trunk/rostests/winetests/quartz/avisplitter.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/avisplit…
==============================================================================
--- trunk/rostests/winetests/quartz/avisplitter.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/avisplitter.c [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -89,29 +89,23 @@
ULONG ref;
IUnknown *iface= NULL;
- hr = IUnknown_QueryInterface(pAviSplitter, &IID_IBaseFilter,
- (void**)&iface);
-
- ok(hr == S_OK,
- "IID_IBaseFilter should exist, got %08x!\n", GetLastError());
- if (hr == S_OK)
- {
- ref = IUnknown_Release(iface);
- iface = NULL;
- ok(ref == 1, "Reference is %u, expected 1\n", ref);
- }
-
- hr = IUnknown_QueryInterface(pAviSplitter, &IID_IMediaSeeking,
- (void**)&iface);
- if (hr == S_OK)
- ref = IUnknown_Release(iface);
- iface = NULL;
- todo_wine ok(hr == E_NOINTERFACE,
- "Query for IMediaSeeking returned: %08x\n", hr);
-
-/* These interfaces should not be present:
- IID_IKsPropertySet, IID_IMediaPosition, IID_IQualityControl, IID_IQualProp
-*/
+#define TEST_INTERFACE(riid,expected) do { \
+ hr = IUnknown_QueryInterface(pAviSplitter, &riid, (void**)&iface); \
+ ok( hr == expected, #riid" should %s got %08X\n", expected==S_OK ?
"exist" : "not be present", GetLastError() ); \
+ if (hr == S_OK) { \
+ ref = IUnknown_Release(iface); \
+ ok(ref == 1, "Reference is %u, expected 1\n", ref); \
+ } \
+ iface = NULL; \
+ } while(0)
+
+ TEST_INTERFACE(IID_IBaseFilter,S_OK);
+ TEST_INTERFACE(IID_IMediaSeeking,E_NOINTERFACE);
+ TEST_INTERFACE(IID_IKsPropertySet,E_NOINTERFACE);
+ TEST_INTERFACE(IID_IMediaPosition,E_NOINTERFACE);
+ TEST_INTERFACE(IID_IQualityControl,E_NOINTERFACE);
+ TEST_INTERFACE(IID_IQualProp,E_NOINTERFACE);
+#undef TEST_INTERFACE
}
static void test_pin(IPin *pin)
@@ -179,10 +173,10 @@
static const char afile[] = "test.avi";
/* This test doesn't use the quartz filtergraph because it makes it impossible
- * to be certain that a thread is really one owned by the avi splitter
- * A lot of the decoder filters will also have their own thread, and windows'
+ * to be certain that a thread is really one owned by the avi splitter.
+ * A lot of the decoder filters will also have their own thread, and Windows'
* filtergraph has a separate thread for start/stop/seeking requests.
- * By avoiding the filtergraph all together and connecting streams directly to
+ * By avoiding the filtergraph altogether and connecting streams directly to
* the null renderer I am sure that this is not the case here.
*/
static void test_threads(void)
@@ -206,7 +200,7 @@
return;
}
- /* Before doing anything (number of threads at the start differs per OS) */
+ /* Before doing anything (the thread count at the start differs per OS) */
baselevel = count_threads();
file = CreateFileW(wfile, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
@@ -233,7 +227,7 @@
ok(hr == E_NOINTERFACE,
"Avi splitter returns unexpected error: %08x\n", hr);
if (pfile)
- IUnknown_Release(pfile);
+ IFileSourceFilter_Release(pfile);
pfile = NULL;
hr = CoCreateInstance(&CLSID_AsyncReader, NULL, CLSCTX_INPROC_SERVER,
@@ -242,7 +236,7 @@
if (hr != S_OK)
goto fail;
- hr = IUnknown_QueryInterface(preader, &IID_IFileSourceFilter,
+ hr = IBaseFilter_QueryInterface(preader, &IID_IFileSourceFilter,
(void**)&pfile);
ok(hr == S_OK, "Could not get IFileSourceFilter: %08x\n", hr);
if (hr != S_OK)
@@ -271,7 +265,7 @@
if (hr != S_OK)
goto fail;
- IUnknown_Release(enumpins);
+ IEnumPins_Release(enumpins);
enumpins = NULL;
hr = IBaseFilter_EnumPins(pavi, &enumpins);
@@ -286,7 +280,7 @@
curlevel = count_threads();
ok(curlevel == baselevel,
- "Amount of threads should be %d not %d\n", baselevel, curlevel);
+ "The thread count should be %d not %d\n", baselevel, curlevel);
hr = IPin_Connect(filepin, avipin, NULL);
ok(hr == S_OK, "Could not connect: %08x\n", hr);
@@ -296,9 +290,9 @@
expected = 1 + baselevel;
curlevel = count_threads();
ok(curlevel == expected,
- "Amount of threads should be %d not %d\n", expected, curlevel);
-
- IUnknown_Release(avipin);
+ "The thread count should be %d not %d\n", expected, curlevel);
+
+ IPin_Release(avipin);
avipin = NULL;
IEnumPins_Reset(enumpins);
@@ -309,7 +303,6 @@
*/
while (IEnumPins_Next(enumpins, 1, &avipin, NULL) == S_OK)
{
- ok(hr == S_OK, "hr: %08x\n", hr);
IPin_QueryDirection(avipin, &dir);
if (dir == PINDIR_OUTPUT)
{
@@ -341,18 +334,18 @@
++expected;
}
- IUnknown_Release(avipin);
+ IPin_Release(avipin);
avipin = NULL;
}
if (avipin)
- IUnknown_Release(avipin);
+ IPin_Release(avipin);
avipin = NULL;
if (hr != S_OK)
goto fail2;
/* At this point there is a minimalistic connected avi splitter that can
- * Be used for all sorts of source filter tests, however that still needs
+ * be used for all sorts of source filter tests. However that still needs
* to be written at a later time.
*
* Interesting tests:
@@ -372,7 +365,7 @@
curlevel = count_threads();
ok(curlevel == expected,
- "Amount of threads should be %d not %d\n", expected, curlevel);
+ "The thread count should be %d not %d\n", expected, curlevel);
IBaseFilter_Pause(pavi);
IBaseFilter_Pause(preader);
@@ -421,10 +414,10 @@
if (hr != S_OK)
skip("Prerequisites not matched, skipping remainder of test\n");
if (enumpins)
- IUnknown_Release(enumpins);
+ IEnumPins_Release(enumpins);
if (avipin)
- IUnknown_Release(avipin);
+ IPin_Release(avipin);
if (filepin)
{
IPin *to = NULL;
@@ -435,20 +428,20 @@
IPin_Disconnect(filepin);
IPin_Disconnect(to);
}
- IUnknown_Release(filepin);
+ IPin_Release(filepin);
}
if (preader)
- IUnknown_Release(preader);
+ IBaseFilter_Release(preader);
if (pavi)
- IUnknown_Release(pavi);
+ IBaseFilter_Release(pavi);
if (pfile)
- IUnknown_Release(pfile);
+ IFileSourceFilter_Release(pfile);
curlevel = count_threads();
todo_wine
ok(curlevel == baselevel,
- "Amount of threads should be %d not %d\n", baselevel, curlevel);
+ "The thread count should be %d not %d\n", baselevel, curlevel);
}
START_TEST(avisplitter)
Modified: trunk/rostests/winetests/quartz/dsoundrender.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/dsoundre…
==============================================================================
--- trunk/rostests/winetests/quartz/dsoundrender.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/dsoundrender.c [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -33,7 +33,7 @@
ok(ppv != NULL, "Pointer is NULL\n");
#define RELEASE_EXPECT(iface, num) if (iface) { \
- hr = IUnknown_Release(iface); \
+ hr = IUnknown_Release((IUnknown*)iface); \
ok(hr == num, "IUnknown_Release should return %d, got %d\n", num, hr); \
}
@@ -148,11 +148,11 @@
ok(hr == S_OK, "Couldn't load default device: %08x\n", hr);
}
RELEASE_EXPECT(ppb, 1);
+ }
QI_SUCCEED(pDSRender, IID_IMediaPosition, pMediaPosition);
RELEASE_EXPECT(pMediaPosition, 1);
QI_SUCCEED(pDSRender, IID_IQualityControl, pQualityControl);
RELEASE_EXPECT(pQualityControl, 1);
- }
}
static void test_pin(IPin *pin)
@@ -221,11 +221,11 @@
START_TEST(dsoundrender)
{
-if(!winetest_interactive)
-{
- skip("Skipping dsoundrender test, see ROSTESTS_116\n");
- return;
-}
+ if (!winetest_interactive)
+ {
+ skip("Skipping dsoundrender test, see ROSTESTS-116\n");
+ return;
+ }
CoInitialize(NULL);
if (!create_dsound_renderer())
return;
Added: trunk/rostests/winetests/quartz/fil_data.idl
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/fil_data…
==============================================================================
--- trunk/rostests/winetests/quartz/fil_data.idl (added)
+++ trunk/rostests/winetests/quartz/fil_data.idl [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2009 Vitaliy Margolen
+ *
+ * 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
+ */
+
+import "objidl.idl";
+import "strmif.idl";
+import "unknwn.idl";
+
+
+/*****************************************************************************
+ * IAMFilterData interface
+ *
+ * Notes:
+ * - This interface is deprecated and IFilterMapper2 should be used instead.
+ * - There is no full replacement for IAMFilterData::ParseFilterData short of
manually
+ * parsing out the REGFILTER2 struct from the binary blob.
+ */
+[
+ object,
+ uuid(97f7c4d4-547b-4a5f-8332-536430ad2e4d),
+ pointer_default(unique)
+]
+interface IAMFilterData : IUnknown
+{
+ typedef [unique] IAMFilterData *LPIAMFILTERDATA;
+
+ HRESULT ParseFilterData(
+ [in] BYTE * rgbFilterData,
+ [in] ULONG cb,
+ [out] BYTE ** prgbRegFilter2);
+
+ HRESULT CreateFilterData(
+ [in] REGFILTER2 * prf2,
+ [out] BYTE ** prgbFilterData,
+ [out] ULONG * pcb);
+}
Propchange: trunk/rostests/winetests/quartz/fil_data.idl
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/rostests/winetests/quartz/filtergraph.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/filtergr…
==============================================================================
--- trunk/rostests/winetests/quartz/filtergraph.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/filtergraph.c [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -19,35 +19,35 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include <assert.h>
-
#define COBJMACROS
+#define CONST_VTABLE
#include "wine/test.h"
#include "dshow.h"
#include "control.h"
-#define FILE_LEN 9
-static const char avifileA[FILE_LEN] = "test.avi";
-static const char mpegfileA[FILE_LEN] = "test.mpg";
-
-IGraphBuilder* pgraph;
+typedef struct TestFilterImpl
+{
+ IBaseFilter IBaseFilter_iface;
+
+ LONG refCount;
+ CRITICAL_SECTION csFilter;
+ FILTER_STATE state;
+ FILTER_INFO filterInfo;
+ CLSID clsid;
+ IPin **ppPins;
+ UINT nPins;
+} TestFilterImpl;
+
+static const WCHAR avifile[] =
{'t','e','s','t','.','a','v','i',0};
+static const WCHAR mpegfile[] =
{'t','e','s','t','.','m','p','g',0};
+
+static IGraphBuilder *pgraph;
static int createfiltergraph(void)
{
return S_OK == CoCreateInstance(
&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder,
(LPVOID*)&pgraph);
-}
-
-static void renderfile(const char * fileA)
-{
- HRESULT hr;
- WCHAR fileW[FILE_LEN];
-
- MultiByteToWideChar(CP_ACP, 0, fileA, -1, fileW, FILE_LEN);
-
- hr = IGraphBuilder_RenderFile(pgraph, fileW, NULL);
- ok(hr==S_OK, "RenderFile returned: %x\n", hr);
}
static void rungraph(void)
@@ -141,17 +141,19 @@
ok(hr==0, "Releasing filtergraph returned: %x\n", hr);
}
-static void test_render_run(const char * fileA)
+static void test_render_run(const WCHAR *file)
{
HANDLE h;
+ HRESULT hr;
if (!createfiltergraph())
return;
- h = CreateFileA(fileA, 0, 0, NULL, OPEN_EXISTING, 0, NULL);
+ h = CreateFileW(file, 0, 0, NULL, OPEN_EXISTING, 0, NULL);
if (h != INVALID_HANDLE_VALUE) {
CloseHandle(h);
- renderfile(fileA);
+ hr = IGraphBuilder_RenderFile(pgraph, file, NULL);
+ ok(hr==S_OK, "RenderFile returned: %x\n", hr);
rungraph();
}
@@ -234,7 +236,7 @@
hr = IGraphBuilder_AddFilter(pgraph, pF, NULL);
ok(hr == S_OK, "IGraphBuilder_AddFilter returned: %x\n", hr);
- IMediaFilter_Release(pF);
+ IBaseFilter_Release(pF);
}
static void test_mediacontrol(void)
@@ -245,26 +247,26 @@
IMediaFilter *filter = NULL;
IMediaControl *control = NULL;
- IFilterGraph2_SetDefaultSyncSource(pgraph);
- hr = IFilterGraph2_QueryInterface(pgraph, &IID_IMediaSeeking, (void**)
&seeking);
+ IGraphBuilder_SetDefaultSyncSource(pgraph);
+ hr = IGraphBuilder_QueryInterface(pgraph, &IID_IMediaSeeking, (void**)
&seeking);
ok(hr == S_OK, "QueryInterface IMediaControl failed: %08x\n", hr);
if (FAILED(hr))
return;
- hr = IFilterGraph2_QueryInterface(pgraph, &IID_IMediaFilter, (void**)
&filter);
+ hr = IGraphBuilder_QueryInterface(pgraph, &IID_IMediaFilter, (void**)
&filter);
ok(hr == S_OK, "QueryInterface IMediaFilter failed: %08x\n", hr);
if (FAILED(hr))
{
- IUnknown_Release(seeking);
+ IMediaSeeking_Release(seeking);
return;
}
- hr = IFilterGraph2_QueryInterface(pgraph, &IID_IMediaControl, (void**)
&control);
+ hr = IGraphBuilder_QueryInterface(pgraph, &IID_IMediaControl, (void**)
&control);
ok(hr == S_OK, "QueryInterface IMediaControl failed: %08x\n", hr);
if (FAILED(hr))
{
- IUnknown_Release(seeking);
- IUnknown_Release(filter);
+ IMediaSeeking_Release(seeking);
+ IMediaFilter_Release(filter);
return;
}
@@ -286,9 +288,9 @@
hr = IMediaControl_GetState(control, 1000, NULL);
ok(hr == E_POINTER, "GetState expected %08x, got %08x\n", E_POINTER, hr);
- IUnknown_Release(control);
- IUnknown_Release(seeking);
- IUnknown_Release(filter);
+ IMediaControl_Release(control);
+ IMediaSeeking_Release(seeking);
+ IMediaFilter_Release(filter);
releasefiltergraph();
}
@@ -364,7 +366,7 @@
typedef struct IEnumMediaTypesImpl
{
- const IEnumMediaTypesVtbl * lpVtbl;
+ IEnumMediaTypes IEnumMediaTypes_iface;
LONG refCount;
AM_MEDIA_TYPE *pMediaTypes;
ULONG cMediaTypes;
@@ -373,6 +375,11 @@
static const struct IEnumMediaTypesVtbl IEnumMediaTypesImpl_Vtbl;
+static inline IEnumMediaTypesImpl *impl_from_IEnumMediaTypes(IEnumMediaTypes *iface)
+{
+ return CONTAINING_RECORD(iface, IEnumMediaTypesImpl, IEnumMediaTypes_iface);
+}
+
static HRESULT IEnumMediaTypesImpl_Construct(const AM_MEDIA_TYPE * pMediaTypes, ULONG
cMediaTypes, IEnumMediaTypes ** ppEnum)
{
ULONG i;
@@ -383,7 +390,7 @@
*ppEnum = NULL;
return E_OUTOFMEMORY;
}
- pEnumMediaTypes->lpVtbl = &IEnumMediaTypesImpl_Vtbl;
+ pEnumMediaTypes->IEnumMediaTypes_iface.lpVtbl = &IEnumMediaTypesImpl_Vtbl;
pEnumMediaTypes->refCount = 1;
pEnumMediaTypes->uIndex = 0;
pEnumMediaTypes->cMediaTypes = cMediaTypes;
@@ -396,7 +403,7 @@
CoTaskMemFree(pEnumMediaTypes->pMediaTypes);
return E_OUTOFMEMORY;
}
- *ppEnum = (IEnumMediaTypes *)(&pEnumMediaTypes->lpVtbl);
+ *ppEnum = &pEnumMediaTypes->IEnumMediaTypes_iface;
return S_OK;
}
@@ -420,7 +427,7 @@
static ULONG WINAPI IEnumMediaTypesImpl_AddRef(IEnumMediaTypes * iface)
{
- IEnumMediaTypesImpl *This = (IEnumMediaTypesImpl *)iface;
+ IEnumMediaTypesImpl *This = impl_from_IEnumMediaTypes(iface);
ULONG refCount = InterlockedIncrement(&This->refCount);
return refCount;
@@ -428,7 +435,7 @@
static ULONG WINAPI IEnumMediaTypesImpl_Release(IEnumMediaTypes * iface)
{
- IEnumMediaTypesImpl *This = (IEnumMediaTypesImpl *)iface;
+ IEnumMediaTypesImpl *This = impl_from_IEnumMediaTypes(iface);
ULONG refCount = InterlockedDecrement(&This->refCount);
if (!refCount)
@@ -445,7 +452,7 @@
static HRESULT WINAPI IEnumMediaTypesImpl_Next(IEnumMediaTypes * iface, ULONG
cMediaTypes, AM_MEDIA_TYPE ** ppMediaTypes, ULONG * pcFetched)
{
ULONG cFetched;
- IEnumMediaTypesImpl *This = (IEnumMediaTypesImpl *)iface;
+ IEnumMediaTypesImpl *This = impl_from_IEnumMediaTypes(iface);
cFetched = min(This->cMediaTypes, This->uIndex + cMediaTypes) -
This->uIndex;
@@ -474,7 +481,7 @@
static HRESULT WINAPI IEnumMediaTypesImpl_Skip(IEnumMediaTypes * iface, ULONG
cMediaTypes)
{
- IEnumMediaTypesImpl *This = (IEnumMediaTypesImpl *)iface;
+ IEnumMediaTypesImpl *This = impl_from_IEnumMediaTypes(iface);
if (This->uIndex + cMediaTypes < This->cMediaTypes)
{
@@ -486,7 +493,7 @@
static HRESULT WINAPI IEnumMediaTypesImpl_Reset(IEnumMediaTypes * iface)
{
- IEnumMediaTypesImpl *This = (IEnumMediaTypesImpl *)iface;
+ IEnumMediaTypesImpl *This = impl_from_IEnumMediaTypes(iface);
This->uIndex = 0;
return S_OK;
@@ -495,7 +502,7 @@
static HRESULT WINAPI IEnumMediaTypesImpl_Clone(IEnumMediaTypes * iface, IEnumMediaTypes
** ppEnum)
{
HRESULT hr;
- IEnumMediaTypesImpl *This = (IEnumMediaTypesImpl *)iface;
+ IEnumMediaTypesImpl *This = impl_from_IEnumMediaTypes(iface);
hr = IEnumMediaTypesImpl_Construct(This->pMediaTypes, This->cMediaTypes,
ppEnum);
if (FAILED(hr))
@@ -526,14 +533,19 @@
typedef struct ITestPinImpl
{
- const struct IPinVtbl * lpVtbl;
- LONG refCount;
- LPCRITICAL_SECTION pCritSec;
- PIN_INFO pinInfo;
- IPin * pConnectedTo;
- AM_MEDIA_TYPE mtCurrent;
- LPVOID pUserData;
+ IPin IPin_iface;
+ LONG refCount;
+ LPCRITICAL_SECTION pCritSec;
+ PIN_INFO pinInfo;
+ IPin * pConnectedTo;
+ AM_MEDIA_TYPE mtCurrent;
+ LPVOID pUserData;
} ITestPinImpl;
+
+static inline ITestPinImpl *impl_from_IPin(IPin *iface)
+{
+ return CONTAINING_RECORD(iface, ITestPinImpl, IPin_iface);
+}
static HRESULT WINAPI TestFilter_Pin_QueryInterface(IPin * iface, REFIID riid, LPVOID *
ppv)
{
@@ -555,20 +567,19 @@
static ULONG WINAPI TestFilter_Pin_AddRef(IPin * iface)
{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
ULONG refCount = InterlockedIncrement(&This->refCount);
return refCount;
}
static ULONG WINAPI TestFilter_Pin_Release(IPin * iface)
{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
ULONG refCount = InterlockedDecrement(&This->refCount);
if (!refCount)
{
FreeMediaType(&This->mtCurrent);
- This->lpVtbl = NULL;
CoTaskMemFree(This);
return 0;
}
@@ -583,7 +594,7 @@
static HRESULT WINAPI TestFilter_InputPin_ReceiveConnection(IPin * iface, IPin *
pReceivePin, const AM_MEDIA_TYPE * pmt)
{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
PIN_DIRECTION pindirReceive;
HRESULT hr = S_OK;
@@ -621,7 +632,7 @@
static HRESULT WINAPI TestFilter_Pin_Disconnect(IPin * iface)
{
HRESULT hr;
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
EnterCriticalSection(This->pCritSec);
{
@@ -642,7 +653,7 @@
static HRESULT WINAPI TestFilter_Pin_ConnectedTo(IPin * iface, IPin ** ppPin)
{
HRESULT hr;
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
EnterCriticalSection(This->pCritSec);
{
@@ -666,7 +677,7 @@
static HRESULT WINAPI TestFilter_Pin_ConnectionMediaType(IPin * iface, AM_MEDIA_TYPE *
pmt)
{
HRESULT hr;
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
EnterCriticalSection(This->pCritSec);
{
@@ -688,7 +699,7 @@
static HRESULT WINAPI TestFilter_Pin_QueryPinInfo(IPin * iface, PIN_INFO * pInfo)
{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
Copy_PinInfo(pInfo, &This->pinInfo);
IBaseFilter_AddRef(pInfo->pFilter);
@@ -698,7 +709,7 @@
static HRESULT WINAPI TestFilter_Pin_QueryDirection(IPin * iface, PIN_DIRECTION *
pPinDir)
{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
*pPinDir = This->pinInfo.dir;
@@ -712,7 +723,7 @@
static HRESULT WINAPI TestFilter_Pin_QueryAccept(IPin * iface, const AM_MEDIA_TYPE *
pmt)
{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
if (IsEqualIID(&pmt->majortype, &This->mtCurrent.majortype) &&
(IsEqualIID(&pmt->subtype, &This->mtCurrent.subtype) ||
IsEqualIID(&GUID_NULL, &This->mtCurrent.subtype)))
@@ -723,7 +734,7 @@
static HRESULT WINAPI TestFilter_Pin_EnumMediaTypes(IPin * iface, IEnumMediaTypes **
ppEnum)
{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
return IEnumMediaTypesImpl_Construct(&This->mtCurrent, 1, ppEnum);
}
@@ -781,15 +792,15 @@
}
/* Private helper function */
-static HRESULT TestFilter_OutputPin_ConnectSpecific(IPin * iface, IPin * pReceivePin,
const AM_MEDIA_TYPE * pmt)
-{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+static HRESULT TestFilter_OutputPin_ConnectSpecific(ITestPinImpl * This, IPin *
pReceivePin,
+ const AM_MEDIA_TYPE * pmt)
+{
HRESULT hr;
This->pConnectedTo = pReceivePin;
IPin_AddRef(pReceivePin);
- hr = IPin_ReceiveConnection(pReceivePin, iface, pmt);
+ hr = IPin_ReceiveConnection(pReceivePin, &This->IPin_iface, pmt);
if (FAILED(hr))
{
@@ -802,7 +813,7 @@
static HRESULT WINAPI TestFilter_OutputPin_Connect(IPin * iface, IPin * pReceivePin,
const AM_MEDIA_TYPE * pmt)
{
- ITestPinImpl *This = (ITestPinImpl *)iface;
+ ITestPinImpl *This = impl_from_IPin(iface);
HRESULT hr;
EnterCriticalSection(This->pCritSec);
@@ -810,11 +821,11 @@
/* if we have been a specific type to connect with, then we can either connect
* with that or fail. We cannot choose different AM_MEDIA_TYPE */
if (pmt && !IsEqualGUID(&pmt->majortype, &GUID_NULL)
&& !IsEqualGUID(&pmt->subtype, &GUID_NULL))
- hr = TestFilter_OutputPin_ConnectSpecific(iface, pReceivePin, pmt);
+ hr = TestFilter_OutputPin_ConnectSpecific(This, pReceivePin, pmt);
else
{
if (( !pmt || CompareMediaTypes(pmt, &This->mtCurrent, TRUE) )
&&
- (TestFilter_OutputPin_ConnectSpecific(iface, pReceivePin,
&This->mtCurrent) == S_OK))
+ (TestFilter_OutputPin_ConnectSpecific(This, pReceivePin,
&This->mtCurrent) == S_OK))
hr = S_OK;
else hr = VFW_E_NO_ACCEPTABLE_TYPES;
} /* if negotiate media type */
@@ -864,29 +875,34 @@
Copy_PinInfo(&pPinImpl->pinInfo, pPinInfo);
pPinImpl->mtCurrent = *pinmt;
- pPinImpl->lpVtbl = Pin_Vtbl;
-
- *ppPin = (IPin *)pPinImpl;
+ pPinImpl->IPin_iface.lpVtbl = Pin_Vtbl;
+
+ *ppPin = &pPinImpl->IPin_iface;
return S_OK;
}
/* IEnumPins implementation */
-typedef HRESULT (* FNOBTAINPIN)(IBaseFilter *iface, ULONG pos, IPin **pin, DWORD
*lastsynctick);
+typedef HRESULT (* FNOBTAINPIN)(TestFilterImpl *tf, ULONG pos, IPin **pin, DWORD
*lastsynctick);
typedef struct IEnumPinsImpl
{
- const IEnumPinsVtbl * lpVtbl;
+ IEnumPins IEnumPins_iface;
LONG refCount;
ULONG uIndex;
- IBaseFilter *base;
+ TestFilterImpl *base;
FNOBTAINPIN receive_pin;
DWORD synctime;
} IEnumPinsImpl;
static const struct IEnumPinsVtbl IEnumPinsImpl_Vtbl;
-static HRESULT IEnumPinsImpl_Construct(IEnumPins ** ppEnum, FNOBTAINPIN receive_pin,
IBaseFilter *base)
+static inline IEnumPinsImpl *impl_from_IEnumPins(IEnumPins *iface)
+{
+ return CONTAINING_RECORD(iface, IEnumPinsImpl, IEnumPins_iface);
+}
+
+static HRESULT createenumpins(IEnumPins ** ppEnum, FNOBTAINPIN receive_pin,
TestFilterImpl *base)
{
IEnumPinsImpl * pEnumPins;
@@ -899,13 +915,13 @@
*ppEnum = NULL;
return E_OUTOFMEMORY;
}
- pEnumPins->lpVtbl = &IEnumPinsImpl_Vtbl;
+ pEnumPins->IEnumPins_iface.lpVtbl = &IEnumPinsImpl_Vtbl;
pEnumPins->refCount = 1;
pEnumPins->uIndex = 0;
pEnumPins->receive_pin = receive_pin;
pEnumPins->base = base;
- IBaseFilter_AddRef(base);
- *ppEnum = (IEnumPins *)(&pEnumPins->lpVtbl);
+ IBaseFilter_AddRef(&base->IBaseFilter_iface);
+ *ppEnum = &pEnumPins->IEnumPins_iface;
receive_pin(base, ~0, NULL, &pEnumPins->synctime);
@@ -932,7 +948,7 @@
static ULONG WINAPI IEnumPinsImpl_AddRef(IEnumPins * iface)
{
- IEnumPinsImpl *This = (IEnumPinsImpl *)iface;
+ IEnumPinsImpl *This = impl_from_IEnumPins(iface);
ULONG refCount = InterlockedIncrement(&This->refCount);
return refCount;
@@ -940,12 +956,12 @@
static ULONG WINAPI IEnumPinsImpl_Release(IEnumPins * iface)
{
- IEnumPinsImpl *This = (IEnumPinsImpl *)iface;
+ IEnumPinsImpl *This = impl_from_IEnumPins(iface);
ULONG refCount = InterlockedDecrement(&This->refCount);
if (!refCount)
{
- IBaseFilter_Release(This->base);
+ IBaseFilter_Release(&This->base->IBaseFilter_iface);
CoTaskMemFree(This);
return 0;
}
@@ -955,7 +971,7 @@
static HRESULT WINAPI IEnumPinsImpl_Next(IEnumPins * iface, ULONG cPins, IPin ** ppPins,
ULONG * pcFetched)
{
- IEnumPinsImpl *This = (IEnumPinsImpl *)iface;
+ IEnumPinsImpl *This = impl_from_IEnumPins(iface);
DWORD synctime = This->synctime;
HRESULT hr = S_OK;
ULONG i = 0;
@@ -994,7 +1010,7 @@
static HRESULT WINAPI IEnumPinsImpl_Skip(IEnumPins * iface, ULONG cPins)
{
- IEnumPinsImpl *This = (IEnumPinsImpl *)iface;
+ IEnumPinsImpl *This = impl_from_IEnumPins(iface);
DWORD synctime = This->synctime;
HRESULT hr;
IPin *pin = NULL;
@@ -1014,7 +1030,7 @@
static HRESULT WINAPI IEnumPinsImpl_Reset(IEnumPins * iface)
{
- IEnumPinsImpl *This = (IEnumPinsImpl *)iface;
+ IEnumPinsImpl *This = impl_from_IEnumPins(iface);
This->receive_pin(This->base, ~0, NULL, &This->synctime);
@@ -1025,9 +1041,9 @@
static HRESULT WINAPI IEnumPinsImpl_Clone(IEnumPins * iface, IEnumPins ** ppEnum)
{
HRESULT hr;
- IEnumPinsImpl *This = (IEnumPinsImpl *)iface;
-
- hr = IEnumPinsImpl_Construct(ppEnum, This->receive_pin, This->base);
+ IEnumPinsImpl *This = impl_from_IEnumPins(iface);
+
+ hr = createenumpins(ppEnum, This->receive_pin, This->base);
if (FAILED(hr))
return hr;
return IEnumPins_Skip(*ppEnum, This->uIndex);
@@ -1053,22 +1069,15 @@
const GUID *mediasubtype;
} TestFilterPinData;
-typedef struct TestFilterImpl
-{
- const IBaseFilterVtbl * lpVtbl;
-
- LONG refCount;
- CRITICAL_SECTION csFilter;
- FILTER_STATE state;
- FILTER_INFO filterInfo;
- CLSID clsid;
- IPin ** ppPins;
- UINT nPins;
-} TestFilterImpl;
-
static const IBaseFilterVtbl TestFilter_Vtbl;
-static HRESULT TestFilter_Create(const CLSID* pClsid, const TestFilterPinData *pinData,
LPVOID * ppv)
+static inline TestFilterImpl *impl_from_IBaseFilter(IBaseFilter *iface)
+{
+ return CONTAINING_RECORD(iface, TestFilterImpl, IBaseFilter_iface);
+}
+
+static HRESULT createtestfilter(const CLSID* pClsid, const TestFilterPinData *pinData,
+ TestFilterImpl **tf)
{
static const WCHAR wcsInputPinName[] =
{'i','n','p','u','t','
','p','i','n',0};
static const WCHAR wcsOutputPinName[] =
{'o','u','t','p','u','t','
','p','i','n',0};
@@ -1082,9 +1091,10 @@
if (!pTestFilter) return E_OUTOFMEMORY;
pTestFilter->clsid = *pClsid;
- pTestFilter->lpVtbl = &TestFilter_Vtbl;
+ pTestFilter->IBaseFilter_iface.lpVtbl = &TestFilter_Vtbl;
pTestFilter->refCount = 1;
InitializeCriticalSection(&pTestFilter->csFilter);
+ pTestFilter->csFilter.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ":
TestFilterImpl.csFilter");
pTestFilter->state = State_Stopped;
ZeroMemory(&pTestFilter->filterInfo, sizeof(FILTER_INFO));
@@ -1108,7 +1118,7 @@
mt.subtype = *pinData[i].mediasubtype;
pinInfo.dir = pinData[i].pinDir;
- pinInfo.pFilter = (IBaseFilter *)pTestFilter;
+ pinInfo.pFilter = &pTestFilter->IBaseFilter_iface;
if (pinInfo.dir == PINDIR_INPUT)
{
lstrcpynW(pinInfo.achName, wcsInputPinName, sizeof(pinInfo.achName) /
sizeof(pinInfo.achName[0]));
@@ -1126,7 +1136,7 @@
}
pTestFilter->nPins = nPins;
- *ppv = pTestFilter;
+ *tf = pTestFilter;
return S_OK;
error:
@@ -1139,6 +1149,7 @@
}
}
CoTaskMemFree(pTestFilter->ppPins);
+ pTestFilter->csFilter.DebugInfo->Spare[0] = 0;
DeleteCriticalSection(&pTestFilter->csFilter);
CoTaskMemFree(pTestFilter);
@@ -1147,7 +1158,7 @@
static HRESULT WINAPI TestFilter_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID
* ppv)
{
- TestFilterImpl *This = (TestFilterImpl *)iface;
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
*ppv = NULL;
@@ -1171,7 +1182,7 @@
static ULONG WINAPI TestFilter_AddRef(IBaseFilter * iface)
{
- TestFilterImpl *This = (TestFilterImpl *)iface;
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
ULONG refCount = InterlockedIncrement(&This->refCount);
return refCount;
@@ -1179,7 +1190,7 @@
static ULONG WINAPI TestFilter_Release(IBaseFilter * iface)
{
- TestFilterImpl *This = (TestFilterImpl *)iface;
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
ULONG refCount = InterlockedDecrement(&This->refCount);
if (!refCount)
@@ -1201,8 +1212,8 @@
}
CoTaskMemFree(This->ppPins);
- This->lpVtbl = NULL;
-
+
+ This->csFilter.DebugInfo->Spare[0] = 0;
DeleteCriticalSection(&This->csFilter);
CoTaskMemFree(This);
@@ -1216,7 +1227,7 @@
static HRESULT WINAPI TestFilter_GetClassID(IBaseFilter * iface, CLSID * pClsid)
{
- TestFilterImpl *This = (TestFilterImpl *)iface;
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
*pClsid = This->clsid;
@@ -1242,7 +1253,7 @@
static HRESULT WINAPI TestFilter_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout,
FILTER_STATE *pState)
{
- TestFilterImpl *This = (TestFilterImpl *)iface;
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
EnterCriticalSection(&This->csFilter);
{
@@ -1265,24 +1276,24 @@
/** IBaseFilter implementation **/
-static HRESULT TestFilter_GetPin(IBaseFilter *iface, ULONG pos, IPin **pin, DWORD
*lastsynctick)
-{
- TestFilterImpl *This = (TestFilterImpl *)iface;
-
+static HRESULT getpin_callback(TestFilterImpl *tf, ULONG pos, IPin **pin, DWORD
*lastsynctick)
+{
/* Our pins are static, not changing so setting static tick count is ok */
*lastsynctick = 0;
- if (pos >= This->nPins)
+ if (pos >= tf->nPins)
return S_FALSE;
- *pin = This->ppPins[pos];
+ *pin = tf->ppPins[pos];
IPin_AddRef(*pin);
return S_OK;
}
static HRESULT WINAPI TestFilter_EnumPins(IBaseFilter * iface, IEnumPins **ppEnum)
{
- return IEnumPinsImpl_Construct(ppEnum, TestFilter_GetPin, iface);
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
+
+ return createenumpins(ppEnum, getpin_callback, This);
}
static HRESULT WINAPI TestFilter_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin)
@@ -1292,7 +1303,7 @@
static HRESULT WINAPI TestFilter_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO
*pInfo)
{
- TestFilterImpl *This = (TestFilterImpl *)iface;
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
lstrcpyW(pInfo->achName, This->filterInfo.achName);
pInfo->pGraph = This->filterInfo.pGraph;
@@ -1306,7 +1317,7 @@
static HRESULT WINAPI TestFilter_JoinFilterGraph(IBaseFilter * iface, IFilterGraph
*pGraph, LPCWSTR pName)
{
HRESULT hr = S_OK;
- TestFilterImpl *This = (TestFilterImpl *)iface;
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
EnterCriticalSection(&This->csFilter);
{
@@ -1349,10 +1360,15 @@
typedef struct TestClassFactoryImpl
{
- IClassFactoryVtbl *lpVtbl;
+ IClassFactory IClassFactory_iface;
const TestFilterPinData *filterPinData;
const CLSID *clsid;
} TestClassFactoryImpl;
+
+static inline TestClassFactoryImpl *impl_from_IClassFactory(IClassFactory *iface)
+{
+ return CONTAINING_RECORD(iface, TestClassFactoryImpl, IClassFactory_iface);
+}
static HRESULT WINAPI Test_IClassFactory_QueryInterface(
LPCLASSFACTORY iface,
@@ -1389,18 +1405,18 @@
REFIID riid,
LPVOID *ppvObj)
{
- TestClassFactoryImpl *This = (TestClassFactoryImpl *)iface;
+ TestClassFactoryImpl *This = impl_from_IClassFactory(iface);
HRESULT hr;
- IUnknown *punk = NULL;
+ TestFilterImpl *testfilter;
*ppvObj = NULL;
if (pUnkOuter) return CLASS_E_NOAGGREGATION;
- hr = TestFilter_Create(This->clsid, This->filterPinData, (LPVOID *)
&punk);
+ hr = createtestfilter(This->clsid, This->filterPinData, &testfilter);
if (SUCCEEDED(hr)) {
- hr = IUnknown_QueryInterface(punk, riid, ppvObj);
- IUnknown_Release(punk);
+ hr = IBaseFilter_QueryInterface(&testfilter->IBaseFilter_iface, riid,
ppvObj);
+ IBaseFilter_Release(&testfilter->IBaseFilter_iface);
}
return hr;
}
@@ -1464,8 +1480,8 @@
HRESULT hr;
IFilterGraph2* pgraph2 = NULL;
IFilterMapper2 *pMapper2 = NULL;
- IBaseFilter* ptestfilter = NULL;
- IBaseFilter* ptestfilter2 = NULL;
+ TestFilterImpl *ptestfilter = NULL;
+ TestFilterImpl *ptestfilter2 = NULL;
static const CLSID CLSID_TestFilter2 = {
0x37a4edb0,
0x4d13,
@@ -1517,9 +1533,18 @@
{ PINDIR_INPUT, &mediasubtype2 },
{ 0, 0 }
};
- TestClassFactoryImpl Filter1ClassFactory = { &TestClassFactory_Vtbl, PinData2,
&CLSID_TestFilter2 };
- TestClassFactoryImpl Filter2ClassFactory = { &TestClassFactory_Vtbl, PinData4,
&CLSID_TestFilter3 };
- TestClassFactoryImpl Filter3ClassFactory = { &TestClassFactory_Vtbl, PinData5,
&CLSID_TestFilter4 };
+ TestClassFactoryImpl Filter1ClassFactory = {
+ { &TestClassFactory_Vtbl },
+ PinData2, &CLSID_TestFilter2
+ };
+ TestClassFactoryImpl Filter2ClassFactory = {
+ { &TestClassFactory_Vtbl },
+ PinData4, &CLSID_TestFilter3
+ };
+ TestClassFactoryImpl Filter3ClassFactory = {
+ { &TestClassFactory_Vtbl },
+ PinData5, &CLSID_TestFilter4
+ };
char ConnectedFilterName1[MAX_FILTER_NAME];
char ConnectedFilterName2[MAX_FILTER_NAME];
REGFILTER2 rgf2;
@@ -1541,40 +1566,40 @@
ok(hr == S_OK, "CoCreateInstance failed with %08x\n", hr);
if (!pgraph2) return;
- hr = TestFilter_Create(&GUID_NULL, PinData1, (LPVOID)&ptestfilter);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData1, &ptestfilter);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter, wszFilterInstanceName1);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter->IBaseFilter_iface,
wszFilterInstanceName1);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- hr = TestFilter_Create(&GUID_NULL, PinData2, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData2, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName2);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName2);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
- hr = TestFilter_Create(&GUID_NULL, PinData3, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData3, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName3);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName3);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- hr = IFilterGraph2_Render(pgraph2, ((TestFilterImpl*)ptestfilter)->ppPins[0]);
+ hr = IFilterGraph2_Render(pgraph2, ptestfilter->ppPins[0]);
ok(hr == S_OK, "IFilterGraph2_Render failed with %08x\n", hr);
- hr = get_connected_filter_name((TestFilterImpl*)ptestfilter, ConnectedFilterName1);
+ hr = get_connected_filter_name(ptestfilter, ConnectedFilterName1);
IFilterGraph2_Release(pgraph2);
pgraph2 = NULL;
- IBaseFilter_Release(ptestfilter);
+ IBaseFilter_Release(&ptestfilter->IBaseFilter_iface);
ptestfilter = NULL;
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
if (hr == E_NOTIMPL)
@@ -1587,45 +1612,45 @@
ok(hr == S_OK, "CoCreateInstance failed with %08x\n", hr);
if (!pgraph2) goto out;
- hr = TestFilter_Create(&GUID_NULL, PinData1, (LPVOID)&ptestfilter);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData1, &ptestfilter);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter, wszFilterInstanceName1);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter->IBaseFilter_iface,
wszFilterInstanceName1);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- hr = TestFilter_Create(&GUID_NULL, PinData3, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData3, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName3);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName3);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
- hr = TestFilter_Create(&GUID_NULL, PinData2, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData2, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName2);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName2);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- hr = IFilterGraph2_Render(pgraph2, ((TestFilterImpl*)ptestfilter)->ppPins[0]);
+ hr = IFilterGraph2_Render(pgraph2, ptestfilter->ppPins[0]);
ok(hr == S_OK, "IFilterGraph2_Render failed with %08x\n", hr);
hr = IFilterGraph2_Disconnect(pgraph2, NULL);
ok(hr == E_POINTER, "IFilterGraph2_Disconnect failed. Expected E_POINTER,
received %08x\n", hr);
- get_connected_filter_name((TestFilterImpl*)ptestfilter, ConnectedFilterName2);
+ get_connected_filter_name(ptestfilter, ConnectedFilterName2);
ok(lstrcmp(ConnectedFilterName1, ConnectedFilterName2),
"expected connected filters to be different but got %s both times\n",
ConnectedFilterName1);
IFilterGraph2_Release(pgraph2);
pgraph2 = NULL;
- IBaseFilter_Release(ptestfilter);
+ IBaseFilter_Release(&ptestfilter->IBaseFilter_iface);
ptestfilter = NULL;
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
/* Test if any preference is given to existing renderer which renders the pin
directly vs
@@ -1636,96 +1661,96 @@
ok(hr == S_OK, "CoCreateInstance failed with %08x\n", hr);
if (!pgraph2) goto out;
- hr = TestFilter_Create(&GUID_NULL, PinData1, (LPVOID)&ptestfilter);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData1, &ptestfilter);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter, wszFilterInstanceName1);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter->IBaseFilter_iface,
wszFilterInstanceName1);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- hr = TestFilter_Create(&GUID_NULL, PinData2, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData2, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName2);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName2);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
- hr = TestFilter_Create(&GUID_NULL, PinData4, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData4, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName3);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName3);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
- hr = TestFilter_Create(&GUID_NULL, PinData5, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData5, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName4);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName4);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- hr = IFilterGraph2_Render(pgraph2, ((TestFilterImpl*)ptestfilter)->ppPins[0]);
+ hr = IFilterGraph2_Render(pgraph2, ptestfilter->ppPins[0]);
ok(hr == S_OK, "IFilterGraph2_Render failed with %08x\n", hr);
- get_connected_filter_name((TestFilterImpl*)ptestfilter, ConnectedFilterName1);
+ get_connected_filter_name(ptestfilter, ConnectedFilterName1);
ok(!lstrcmp(ConnectedFilterName1, "TestfilterInstance3") ||
!lstrcmp(ConnectedFilterName1, "TestfilterInstance2"),
"unexpected connected filter: %s\n", ConnectedFilterName1);
IFilterGraph2_Release(pgraph2);
pgraph2 = NULL;
- IBaseFilter_Release(ptestfilter);
+ IBaseFilter_Release(&ptestfilter->IBaseFilter_iface);
ptestfilter = NULL;
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
&IID_IFilterGraph2, (LPVOID*)&pgraph2);
ok(hr == S_OK, "CoCreateInstance failed with %08x\n", hr);
if (!pgraph2) goto out;
- hr = TestFilter_Create(&GUID_NULL, PinData1, (LPVOID)&ptestfilter);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData1, &ptestfilter);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter, wszFilterInstanceName1);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter->IBaseFilter_iface,
wszFilterInstanceName1);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- hr = TestFilter_Create(&GUID_NULL, PinData4, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData4, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName3);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName3);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
- hr = TestFilter_Create(&GUID_NULL, PinData5, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData5, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName4);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName4);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
- hr = TestFilter_Create(&GUID_NULL, PinData2, (LPVOID)&ptestfilter2);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData2, &ptestfilter2);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter2, wszFilterInstanceName2);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter2->IBaseFilter_iface,
wszFilterInstanceName2);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
- hr = IFilterGraph2_Render(pgraph2, ((TestFilterImpl*)ptestfilter)->ppPins[0]);
+ hr = IFilterGraph2_Render(pgraph2, ptestfilter->ppPins[0]);
ok(hr == S_OK, "IFilterGraph2_Render failed with %08x\n", hr);
- get_connected_filter_name((TestFilterImpl*)ptestfilter, ConnectedFilterName2);
+ get_connected_filter_name(ptestfilter, ConnectedFilterName2);
ok(!lstrcmp(ConnectedFilterName2, "TestfilterInstance3") ||
!lstrcmp(ConnectedFilterName2, "TestfilterInstance2"),
"unexpected connected filter: %s\n", ConnectedFilterName2);
ok(lstrcmp(ConnectedFilterName1, ConnectedFilterName2),
@@ -1733,9 +1758,9 @@
IFilterGraph2_Release(pgraph2);
pgraph2 = NULL;
- IBaseFilter_Release(ptestfilter);
+ IBaseFilter_Release(&ptestfilter->IBaseFilter_iface);
ptestfilter = NULL;
- IBaseFilter_Release(ptestfilter2);
+ IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
ptestfilter2 = NULL;
/* Test if renderers are tried before non-renderers (intermediary filters). */
@@ -1747,31 +1772,34 @@
ok(hr == S_OK, "CoCreateInstance failed with %08x\n", hr);
if (!pMapper2) goto out;
- hr = TestFilter_Create(&GUID_NULL, PinData1, (LPVOID)&ptestfilter);
- ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
+ hr = createtestfilter(&GUID_NULL, PinData1, &ptestfilter);
+ ok(hr == S_OK, "createtestfilter failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = IFilterGraph2_AddFilter(pgraph2, ptestfilter, wszFilterInstanceName1);
+ hr = IFilterGraph2_AddFilter(pgraph2, &ptestfilter->IBaseFilter_iface,
wszFilterInstanceName1);
ok(hr == S_OK, "IFilterGraph2_AddFilter failed with %08x\n", hr);
/* Register our filters with COM and with Filtermapper. */
- hr = CoRegisterClassObject(Filter1ClassFactory.clsid, (IUnknown
*)&Filter1ClassFactory,
- CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie1);
+ hr = CoRegisterClassObject(Filter1ClassFactory.clsid,
+ (IUnknown *)&Filter1ClassFactory.IClassFactory_iface,
CLSCTX_INPROC_SERVER,
+ REGCLS_MULTIPLEUSE, &cookie1);
ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = CoRegisterClassObject(Filter2ClassFactory.clsid, (IUnknown
*)&Filter2ClassFactory,
- CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie2);
+ hr = CoRegisterClassObject(Filter2ClassFactory.clsid,
+ (IUnknown *)&Filter2ClassFactory.IClassFactory_iface,
CLSCTX_INPROC_SERVER,
+ REGCLS_MULTIPLEUSE, &cookie2);
ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr);
if (FAILED(hr)) goto out;
- hr = CoRegisterClassObject(Filter3ClassFactory.clsid, (IUnknown
*)&Filter3ClassFactory,
- CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie3);
+ hr = CoRegisterClassObject(Filter3ClassFactory.clsid,
+ (IUnknown *)&Filter3ClassFactory.IClassFactory_iface,
CLSCTX_INPROC_SERVER,
+ REGCLS_MULTIPLEUSE, &cookie3);
ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr);
if (FAILED(hr)) goto out;
rgf2.dwVersion = 2;
rgf2.dwMerit = MERIT_UNLIKELY;
- S1(U(rgf2)).cPins2 = 1;
- S1(U(rgf2)).rgPins2 = rgPins2;
+ S2(U(rgf2)).cPins2 = 1;
+ S2(U(rgf2)).rgPins2 = rgPins2;
rgPins2[0].dwFlags = REG_PINFLAG_B_RENDERER;
rgPins2[0].cInstances = 1;
rgPins2[0].nMediaTypes = 1;
@@ -1784,39 +1812,44 @@
hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter2,
wszFilterInstanceName2, NULL,
&CLSID_LegacyAmFilterCategory, NULL, &rgf2);
- ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
-
- rgf2.dwMerit = MERIT_PREFERRED;
- rgPinType[0].clsMinorType = &mediasubtype2;
-
- hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter4,
wszFilterInstanceName4, NULL,
+ if (hr == E_ACCESSDENIED)
+ skip("Not authorized to register filters\n");
+ else
+ {
+ ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+
+ rgf2.dwMerit = MERIT_PREFERRED;
+ rgPinType[0].clsMinorType = &mediasubtype2;
+
+ hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter4,
wszFilterInstanceName4, NULL,
&CLSID_LegacyAmFilterCategory, NULL, &rgf2);
- ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
-
- S1(U(rgf2)).cPins2 = 2;
- rgPins2[0].dwFlags = 0;
- rgPinType[0].clsMinorType = &mediasubtype1;
-
- rgPins2[1].dwFlags = REG_PINFLAG_B_OUTPUT;
- rgPins2[1].cInstances = 1;
- rgPins2[1].nMediaTypes = 1;
- rgPins2[1].lpMediaType = &rgPinType[1];
- rgPins2[1].nMediums = 0;
- rgPins2[1].lpMedium = NULL;
- rgPins2[1].clsPinCategory = NULL;
- rgPinType[1].clsMajorType = &MEDIATYPE_Video;
- rgPinType[1].clsMinorType = &mediasubtype2;
-
- hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter3,
wszFilterInstanceName3, NULL,
+ ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+
+ S2(U(rgf2)).cPins2 = 2;
+ rgPins2[0].dwFlags = 0;
+ rgPinType[0].clsMinorType = &mediasubtype1;
+
+ rgPins2[1].dwFlags = REG_PINFLAG_B_OUTPUT;
+ rgPins2[1].cInstances = 1;
+ rgPins2[1].nMediaTypes = 1;
+ rgPins2[1].lpMediaType = &rgPinType[1];
+ rgPins2[1].nMediums = 0;
+ rgPins2[1].lpMedium = NULL;
+ rgPins2[1].clsPinCategory = NULL;
+ rgPinType[1].clsMajorType = &MEDIATYPE_Video;
+ rgPinType[1].clsMinorType = &mediasubtype2;
+
+ hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter3,
wszFilterInstanceName3, NULL,
&CLSID_LegacyAmFilterCategory, NULL, &rgf2);
- ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
-
- hr = IFilterGraph2_Render(pgraph2, ((TestFilterImpl*)ptestfilter)->ppPins[0]);
- ok(hr == S_OK, "IFilterGraph2_Render failed with %08x\n", hr);
-
- get_connected_filter_name((TestFilterImpl*)ptestfilter, ConnectedFilterName1);
- ok(!lstrcmp(ConnectedFilterName1, "TestfilterInstance3"),
- "unexpected connected filter: %s\n", ConnectedFilterName1);
+ ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+
+ hr = IFilterGraph2_Render(pgraph2, ptestfilter->ppPins[0]);
+ ok(hr == S_OK, "IFilterGraph2_Render failed with %08x\n", hr);
+
+ get_connected_filter_name(ptestfilter, ConnectedFilterName1);
+ ok(!lstrcmp(ConnectedFilterName1, "TestfilterInstance3"),
+ "unexpected connected filter: %s\n", ConnectedFilterName1);
+ }
hr = IFilterMapper2_UnregisterFilter(pMapper2, &CLSID_LegacyAmFilterCategory,
NULL,
&CLSID_TestFilter2);
@@ -1830,8 +1863,8 @@
out:
- if (ptestfilter) IBaseFilter_Release(ptestfilter);
- if (ptestfilter2) IBaseFilter_Release(ptestfilter2);
+ if (ptestfilter) IBaseFilter_Release(&ptestfilter->IBaseFilter_iface);
+ if (ptestfilter2) IBaseFilter_Release(&ptestfilter2->IBaseFilter_iface);
if (pgraph2) IFilterGraph2_Release(pgraph2);
if (pMapper2) IFilterMapper2_Release(pMapper2);
@@ -1845,20 +1878,27 @@
START_TEST(filtergraph)
{
+ HRESULT hr;
+
+ if (!winetest_interactive)
+ {
+ skip("Skipping filtergraph test, see ROSTESTS-116\n");
+ return;
+ }
+
CoInitializeEx(NULL, COINIT_MULTITHREADED);
-if(!winetest_interactive)
-{
- skip("Skipping filtergraph test, see ROSTESTS_116\n");
- return;
-}
-else{
- test_render_run(avifileA);
- test_render_run(mpegfileA);
+ hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IGraphBuilder, (LPVOID*)&pgraph);
+ if (FAILED(hr)) {
+ skip("Creating filtergraph returned %08x, skipping tests\n", hr);
+ return;
+ }
+ test_render_run(avifile);
+ test_render_run(mpegfile);
test_graph_builder();
test_graph_builder_addfilter();
test_mediacontrol();
test_filter_graph2();
test_render_filter_priority();
-}
CoUninitialize();
}
Modified: trunk/rostests/winetests/quartz/filtermapper.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/filterma…
==============================================================================
--- trunk/rostests/winetests/quartz/filtermapper.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/filtermapper.c [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -24,6 +24,9 @@
#include "winbase.h"
#include "initguid.h"
#include "dshow.h"
+#include "winternl.h"
+
+#include "fil_data.h"
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
@@ -101,8 +104,8 @@
/* Test that a test renderer filter is returned when enumerating filters with
bRender=FALSE */
rgf2.dwVersion = 2;
rgf2.dwMerit = MERIT_UNLIKELY;
- S1(U(rgf2)).cPins2 = 1;
- S1(U(rgf2)).rgPins2 = rgPins2;
+ S2(U(rgf2)).cPins2 = 1;
+ S2(U(rgf2)).rgPins2 = rgPins2;
rgPins2[0].dwFlags = REG_PINFLAG_B_RENDERER;
rgPins2[0].cInstances = 1;
@@ -117,58 +120,63 @@
hr = IFilterMapper2_RegisterFilter(pMapper, &clsidFilter1, wszFilterName1, NULL,
&CLSID_LegacyAmFilterCategory, NULL, &rgf2);
- ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
-
- rgPins2[0].dwFlags = 0;
-
- rgPins2[1].dwFlags = REG_PINFLAG_B_OUTPUT;
- rgPins2[1].cInstances = 1;
- rgPins2[1].nMediaTypes = 1;
- rgPins2[1].lpMediaType = &rgPinType;
- rgPins2[1].nMediums = 0;
- rgPins2[1].lpMedium = NULL;
- rgPins2[1].clsPinCategory = NULL;
-
- S1(U(rgf2)).cPins2 = 2;
-
- hr = IFilterMapper2_RegisterFilter(pMapper, &clsidFilter2, wszFilterName2, NULL,
+ if (hr == E_ACCESSDENIED)
+ skip("Not authorized to register filters\n");
+ else
+ {
+ ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+
+ rgPins2[0].dwFlags = 0;
+
+ rgPins2[1].dwFlags = REG_PINFLAG_B_OUTPUT;
+ rgPins2[1].cInstances = 1;
+ rgPins2[1].nMediaTypes = 1;
+ rgPins2[1].lpMediaType = &rgPinType;
+ rgPins2[1].nMediums = 0;
+ rgPins2[1].lpMedium = NULL;
+ rgPins2[1].clsPinCategory = NULL;
+
+ S2(U(rgf2)).cPins2 = 2;
+
+ hr = IFilterMapper2_RegisterFilter(pMapper, &clsidFilter2, wszFilterName2,
NULL,
&CLSID_LegacyAmFilterCategory, NULL, &rgf2);
- ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
-
- hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY,
TRUE,
+ ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+
+ hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE,
MERIT_UNLIKELY, TRUE,
0, NULL, NULL, &GUID_NULL, FALSE, FALSE, 0, NULL, NULL,
&GUID_NULL);
- ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
- if (SUCCEEDED(hr) && pEnum)
- {
- found = enum_find_filter(wszFilterName1, pEnum);
- ok(found, "EnumMatchingFilters failed to return the test filter 1\n");
- }
-
- if (pEnum) IEnumMoniker_Release(pEnum);
- pEnum = NULL;
-
- hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY,
TRUE,
+ ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n",
hr);
+ if (SUCCEEDED(hr) && pEnum)
+ {
+ found = enum_find_filter(wszFilterName1, pEnum);
+ ok(found, "EnumMatchingFilters failed to return the test filter
1\n");
+ }
+
+ if (pEnum) IEnumMoniker_Release(pEnum);
+ pEnum = NULL;
+
+ hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE,
MERIT_UNLIKELY, TRUE,
0, NULL, NULL, &GUID_NULL, FALSE, FALSE, 0, NULL, NULL,
&GUID_NULL);
- ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
- if (SUCCEEDED(hr) && pEnum)
- {
- found = enum_find_filter(wszFilterName2, pEnum);
- ok(found, "EnumMatchingFilters failed to return the test filter 2\n");
- }
-
- if (pEnum) IEnumMoniker_Release(pEnum);
- pEnum = NULL;
-
- /* Non renderer must not be returned with bRender=TRUE */
-
- hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY,
TRUE,
+ ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n",
hr);
+ if (SUCCEEDED(hr) && pEnum)
+ {
+ found = enum_find_filter(wszFilterName2, pEnum);
+ ok(found, "EnumMatchingFilters failed to return the test filter
2\n");
+ }
+
+ if (pEnum) IEnumMoniker_Release(pEnum);
+ pEnum = NULL;
+
+ /* Non renderer must not be returned with bRender=TRUE */
+
+ hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE,
MERIT_UNLIKELY, TRUE,
0, NULL, NULL, &GUID_NULL, TRUE, FALSE, 0, NULL, NULL,
&GUID_NULL);
- ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
-
- if (SUCCEEDED(hr) && pEnum)
- {
- found = enum_find_filter(wszFilterName1, pEnum);
- ok(found, "EnumMatchingFilters failed to return the test filter 1\n");
+ ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n",
hr);
+
+ if (SUCCEEDED(hr) && pEnum)
+ {
+ found = enum_find_filter(wszFilterName1, pEnum);
+ ok(found, "EnumMatchingFilters failed to return the test filter
1\n");
+ }
}
if (pEnum) IEnumMoniker_Release(pEnum);
@@ -245,67 +253,72 @@
/* Register---- functions need a filter class key to write pin and pin media type
data to. Create a bogus
* class key for it. */
lRet = RegCreateKeyExA(HKEY_CLASSES_ROOT, szRegKey, 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE, NULL, &hKey, NULL);
- ok(lRet == ERROR_SUCCESS, "RegCreateKeyExA failed with %x\n",
HRESULT_FROM_WIN32(lRet));
-
- /* Set default value - this is interpreted as "friendly name" later. */
- lRet = RegSetValueExA(hKey, NULL, 0, REG_SZ, (LPBYTE)szFilterName,
lstrlenA(szFilterName) + 1);
- ok(lRet == ERROR_SUCCESS, "RegSetValueExA failed with %x\n",
HRESULT_FROM_WIN32(lRet));
-
- if (hKey) RegCloseKey(hKey);
- hKey = NULL;
-
- hr = IFilterMapper_RegisterFilter(pMapper, clsidFilter, wszFilterName,
MERIT_UNLIKELY);
- ok(hr == S_OK, "IFilterMapper_RegisterFilter failed with %x\n", hr);
-
- hr = IFilterMapper_RegisterPin(pMapper, clsidFilter, wszPinName, TRUE, FALSE, FALSE,
FALSE, GUID_NULL, NULL);
- ok(hr == S_OK, "IFilterMapper_RegisterPin failed with %x\n", hr);
-
- hr = IFilterMapper_RegisterPinType(pMapper, clsidFilter, wszPinName, GUID_NULL,
GUID_NULL);
- ok(hr == S_OK, "IFilterMapper_RegisterPinType failed with %x\n", hr);
-
- hr = IFilterMapper2_EnumMatchingFilters(pMapper2, &pEnum, 0, TRUE,
MERIT_UNLIKELY, TRUE,
+ if (lRet == ERROR_ACCESS_DENIED)
+ skip("Not authorized to register filters\n");
+ else
+ {
+ ok(lRet == ERROR_SUCCESS, "RegCreateKeyExA failed with %x\n",
HRESULT_FROM_WIN32(lRet));
+
+ /* Set default value - this is interpreted as "friendly name" later.
*/
+ lRet = RegSetValueExA(hKey, NULL, 0, REG_SZ, (LPBYTE)szFilterName,
lstrlenA(szFilterName) + 1);
+ ok(lRet == ERROR_SUCCESS, "RegSetValueExA failed with %x\n",
HRESULT_FROM_WIN32(lRet));
+
+ if (hKey) RegCloseKey(hKey);
+ hKey = NULL;
+
+ hr = IFilterMapper_RegisterFilter(pMapper, clsidFilter, wszFilterName,
MERIT_UNLIKELY);
+ ok(hr == S_OK, "IFilterMapper_RegisterFilter failed with %x\n", hr);
+
+ hr = IFilterMapper_RegisterPin(pMapper, clsidFilter, wszPinName, TRUE, FALSE,
FALSE, FALSE, GUID_NULL, NULL);
+ ok(hr == S_OK, "IFilterMapper_RegisterPin failed with %x\n", hr);
+
+ hr = IFilterMapper_RegisterPinType(pMapper, clsidFilter, wszPinName, GUID_NULL,
GUID_NULL);
+ ok(hr == S_OK, "IFilterMapper_RegisterPinType failed with %x\n", hr);
+
+ hr = IFilterMapper2_EnumMatchingFilters(pMapper2, &pEnum, 0, TRUE,
MERIT_UNLIKELY, TRUE,
0, NULL, NULL, &GUID_NULL, FALSE, FALSE, 0, NULL, NULL,
&GUID_NULL);
- ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
- if (SUCCEEDED(hr) && pEnum)
- {
- found = enum_find_filter(wszFilterName, pEnum);
- ok(found, "IFilterMapper2_EnumMatchingFilters failed to return the test
filter\n");
+ ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n",
hr);
+ if (SUCCEEDED(hr) && pEnum)
+ {
+ found = enum_find_filter(wszFilterName, pEnum);
+ ok(found, "IFilterMapper2_EnumMatchingFilters failed to return the test
filter\n");
+ }
+
+ if (pEnum) IEnumMoniker_Release(pEnum);
+ pEnum = NULL;
+
+ found = FALSE;
+ hr = IFilterMapper_EnumMatchingFilters(pMapper, &pRegEnum, MERIT_UNLIKELY,
TRUE, GUID_NULL, GUID_NULL,
+ FALSE, FALSE, GUID_NULL, GUID_NULL);
+ ok(hr == S_OK, "IFilterMapper_EnumMatchingFilters failed with %x\n",
hr);
+ if (SUCCEEDED(hr) && pRegEnum)
+ {
+ ULONG cFetched;
+ REGFILTER *prgf;
+
+ while(!found && IEnumRegFilters_Next(pRegEnum, 1, &prgf,
&cFetched) == S_OK)
+ {
+ CHAR val[512];
+
+ WideCharToMultiByte(CP_ACP, 0, prgf->Name, -1, val, sizeof(val), 0,
0);
+ if (!lstrcmpA(val, szFilterName)) found = TRUE;
+
+ CoTaskMemFree(prgf);
+ }
+
+ IEnumRegFilters_Release(pRegEnum);
+ }
+ ok(found, "IFilterMapper_EnumMatchingFilters failed to return the test
filter\n");
+
+ hr = IFilterMapper_UnregisterFilter(pMapper, clsidFilter);
+ ok(hr == S_OK, "FilterMapper_UnregisterFilter failed with %x\n", hr);
+
+ lRet = RegOpenKeyExA(HKEY_CLASSES_ROOT, szClsid, 0, KEY_WRITE | DELETE,
&hKey);
+ ok(lRet == ERROR_SUCCESS, "RegOpenKeyExA failed with %x\n",
HRESULT_FROM_WIN32(lRet));
+
+ lRet = RegDeleteKeyA(hKey, szGuidstring);
+ ok(lRet == ERROR_SUCCESS, "RegDeleteKeyA failed with %x\n",
HRESULT_FROM_WIN32(lRet));
}
-
- if (pEnum) IEnumMoniker_Release(pEnum);
- pEnum = NULL;
-
- found = FALSE;
- hr = IFilterMapper_EnumMatchingFilters(pMapper, &pRegEnum, MERIT_UNLIKELY, TRUE,
GUID_NULL, GUID_NULL,
- FALSE, FALSE, GUID_NULL, GUID_NULL);
- ok(hr == S_OK, "IFilterMapper_EnumMatchingFilters failed with %x\n", hr);
- if (SUCCEEDED(hr) && pRegEnum)
- {
- ULONG cFetched;
- REGFILTER *prgf;
-
- while(!found && IEnumRegFilters_Next(pRegEnum, 1, &prgf,
&cFetched) == S_OK)
- {
- CHAR val[512];
-
- WideCharToMultiByte(CP_ACP, 0, prgf->Name, -1, val, sizeof(val), 0, 0);
- if (!lstrcmpA(val, szFilterName)) found = TRUE;
-
- CoTaskMemFree(prgf);
- }
-
- IEnumRegFilters_Release(pRegEnum);
- }
- ok(found, "IFilterMapper_EnumMatchingFilters failed to return the test
filter\n");
-
- hr = IFilterMapper_UnregisterFilter(pMapper, clsidFilter);
- ok(hr == S_OK, "FilterMapper_UnregisterFilter failed with %x\n", hr);
-
- lRet = RegOpenKeyExA(HKEY_CLASSES_ROOT, szClsid, 0, KEY_WRITE | DELETE, &hKey);
- ok(lRet == ERROR_SUCCESS, "RegOpenKeyExA failed with %x\n",
HRESULT_FROM_WIN32(lRet));
-
- lRet = RegDeleteKeyA(hKey, szGuidstring);
- ok(lRet == ERROR_SUCCESS, "RegDeleteKeyA failed with %x\n",
HRESULT_FROM_WIN32(lRet));
if (hKey) RegCloseKey(hKey);
hKey = NULL;
@@ -405,8 +418,8 @@
ZeroMemory(&rgf2, sizeof(rgf2));
rgf2.dwVersion = 1;
rgf2.dwMerit = MERIT_UNLIKELY;
- S(U(rgf2)).cPins = 1;
- S(U(rgf2)).rgPins = &rgPins;
+ S1(U(rgf2)).cPins = 1;
+ S1(U(rgf2)).rgPins = &rgPins;
rgPins.strName = wszPinName;
rgPins.bRendered = 1;
@@ -420,6 +433,11 @@
hr = IFilterMapper2_RegisterFilter(pMapper, &clsidFilter1, wszFilterName1, NULL,
&CLSID_LegacyAmFilterCategory, NULL, &rgf2);
+ if (hr == E_ACCESSDENIED)
+ {
+ skip("Not authorized to register filters\n");
+ goto out;
+ }
ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
hr = IFilterMapper2_UnregisterFilter(pMapper, &CLSID_LegacyAmFilterCategory,
NULL, &clsidFilter1);
@@ -429,8 +447,8 @@
ZeroMemory(&rgf2, sizeof(rgf2));
rgf2.dwVersion = 2;
rgf2.dwMerit = MERIT_UNLIKELY;
- S1(U(rgf2)).cPins2 = 1;
- S1(U(rgf2)).rgPins2 = &rgPins2;
+ S2(U(rgf2)).cPins2 = 1;
+ S2(U(rgf2)).rgPins2 = &rgPins2;
rgPins2.dwFlags = REG_PINFLAG_B_RENDERER;
rgPins2.cInstances = 1;
@@ -452,6 +470,70 @@
if (pMapper) IFilterMapper2_Release(pMapper);
}
+static void test_parse_filter_data(void)
+{
+ static const BYTE data_block[] = {
+
0x02,0x00,0x00,0x00,0xff,0xff,0x5f,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x70,0x69,0x33,
+
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
0x30,0x74,0x79,0x33,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x31,0x70,0x69,0x33,
+
0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
0x30,0x74,0x79,0x33,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x76,0x69,0x64,0x73,
+
0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+ BYTE *prgbRegFilter2 = NULL;
+ REGFILTER2 *pRegFilter = NULL;
+ IFilterMapper2 *pMapper = NULL;
+ SAFEARRAYBOUND saBound;
+ SAFEARRAY *psa = NULL;
+ LPBYTE pbSAData = NULL;
+ HRESULT hr;
+
+ IAMFilterData *pData = NULL;
+
+ hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFilterMapper2, (LPVOID*)&pMapper);
+ ok((hr == S_OK || broken(hr != S_OK)), "CoCreateInstance failed with %x\n",
hr);
+ if (FAILED(hr)) goto out;
+
+ hr = IFilterMapper2_QueryInterface(pMapper, &IID_IAMFilterData,
(LPVOID*)&pData);
+ ok((hr == S_OK || broken(hr != S_OK)), "Unable to find IID_IAMFilterData
interface\n");
+ if (FAILED(hr)) goto out;
+
+ saBound.lLbound = 0;
+ saBound.cElements = sizeof(data_block);
+ psa = SafeArrayCreate(VT_UI1, 1, &saBound);
+ ok(psa != NULL, "Unable to crate safe array\n");
+ if (!psa) goto out;
+ hr = SafeArrayAccessData(psa, (LPVOID *)&pbSAData);
+ ok(hr == S_OK, "Unable to access array data\n");
+ if (FAILED(hr)) goto out;
+ memcpy(pbSAData, data_block, sizeof(data_block));
+
+ hr = IAMFilterData_ParseFilterData(pData, pbSAData, sizeof(data_block),
&prgbRegFilter2);
+ /* We cannot do anything here. prgbRegFilter2 is very unstable */
+ /* Pre Vista, this is a stack pointer so anything that changes the stack invalidats
it */
+ /* Post Vista, it is a static pointer in the data section of the module */
+ pRegFilter =((REGFILTER2**)prgbRegFilter2)[0];
+ ok (hr==S_OK,"Failed to Parse filter Data\n");
+
+ ok(IsBadReadPtr(prgbRegFilter2,sizeof(REGFILTER2*))==0,"Bad read pointer
returned\n");
+ ok(IsBadReadPtr(pRegFilter,sizeof(REGFILTER2))==0,"Bad read pointer for
FilterData\n");
+ ok(pRegFilter->dwMerit == 0x5fffff,"Incorrect merit returned\n");
+
+out:
+ if (pRegFilter)
+ CoTaskMemFree(pRegFilter);
+ if (psa)
+ {
+ SafeArrayUnaccessData(psa);
+ SafeArrayDestroy(psa);
+ }
+ if (pData)
+ IAMFilterData_Release(pData);
+ if (pMapper)
+ IFilterMapper2_Release(pMapper);
+}
START_TEST(filtermapper)
{
@@ -461,6 +543,7 @@
test_legacy_filter_registration();
test_ifiltermapper_from_filtergraph();
test_register_filter_with_null_clsMinorType();
+ test_parse_filter_data();
CoUninitialize();
}
Modified: trunk/rostests/winetests/quartz/memallocator.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/memalloc…
==============================================================================
--- trunk/rostests/winetests/quartz/memallocator.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/memallocator.c [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -17,8 +17,6 @@
* 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 <assert.h>
#define COBJMACROS
@@ -71,9 +69,9 @@
hr = IMemAllocator_GetBuffer(pMemAllocator, &sample2, NULL, NULL, 0);
ok(hr==S_OK, "Could not get a buffer: %x\n", hr);
- IUnknown_Release(sample);
+ IMediaSample_Release(sample);
if (sample2)
- IUnknown_Release(sample2);
+ IMediaSample_Release(sample2);
hr = IMemAllocator_Decommit(pMemAllocator);
ok(hr==S_OK, "Cecommit returned: %x\n", hr);
Modified: trunk/rostests/winetests/quartz/misc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/misc.c?r…
==============================================================================
--- trunk/rostests/winetests/quartz/misc.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/misc.c [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -69,6 +69,11 @@
/* for aggregation, we should only be able to request IUnknown */
hr = CoCreateInstance(&clsidInner, pUnkOuter, CLSCTX_INPROC_SERVER,
&iidInner, (LPVOID*)&pUnkInnerFail);
+ if (hr == REGDB_E_CLASSNOTREG)
+ {
+ skip("Class not registered\n");
+ return;
+ }
ok(hr == E_NOINTERFACE, "CoCreateInstance returned %x\n", hr);
ok(pUnkInnerFail == NULL, "pUnkInnerFail is not NULL\n");
@@ -157,6 +162,19 @@
} while (refCount);
}
+static void test_null_renderer_aggregations(void)
+{
+ const IID * iids[] = {
+ &IID_IMediaFilter, &IID_IBaseFilter
+ };
+ int i;
+
+ for (i = 0; i < sizeof(iids) / sizeof(iids[0]); i++)
+ {
+ test_aggregation(CLSID_SystemClock, CLSID_NullRenderer, IID_IReferenceClock,
*iids[i]);
+ }
+}
+
static void test_video_renderer_aggregations(void)
{
const IID * iids[] = {
@@ -206,15 +224,17 @@
{
CoInitialize(NULL);
-if(!winetest_interactive)
-{
- skip("Skipping misc test, see ROSTESTS_116\n");
- return;
-}
-else{
- test_video_renderer_aggregations();
- test_filter_graph_aggregations();
- test_filter_mapper_aggregations();
-}
+ if (!winetest_interactive)
+ {
+ skip("Skipping misc test, see ROSTESTS-116\n");
+ return;
+ }
+ else
+ {
+ test_null_renderer_aggregations();
+ test_video_renderer_aggregations();
+ test_filter_graph_aggregations();
+ test_filter_mapper_aggregations();
+ }
CoUninitialize();
}
Modified: trunk/rostests/winetests/quartz/referenceclock.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/referenc…
==============================================================================
--- trunk/rostests/winetests/quartz/referenceclock.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/referenceclock.c [iso-8859-1] Fri Oct 11 13:13:45
2013
@@ -17,8 +17,6 @@
* 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 <assert.h>
#define COBJMACROS
Modified: trunk/rostests/winetests/quartz/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/testlist…
==============================================================================
--- trunk/rostests/winetests/quartz/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/testlist.c [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -1,10 +1,7 @@
/* Automatically generated file; DO NOT EDIT!! */
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
#define STANDALONE
-#include "wine/test.h"
+#include <wine/test.h>
extern void func_avisplitter(void);
extern void func_dsoundrender(void);
Modified: trunk/rostests/winetests/quartz/videorenderer.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/quartz/videoren…
==============================================================================
--- trunk/rostests/winetests/quartz/videorenderer.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/quartz/videorenderer.c [iso-8859-1] Fri Oct 11 13:13:45 2013
@@ -28,7 +28,7 @@
ok(ppv != NULL, "Pointer is NULL\n");
#define RELEASE_EXPECT(iface, num) if (iface) { \
- hr = IUnknown_Release(iface); \
+ hr = IUnknown_Release((IUnknown*)iface); \
ok(hr == num, "IUnknown_Release should return %d, got %d\n", num, hr); \
}
@@ -70,18 +70,18 @@
RELEASE_EXPECT(pBasicVideo, 1);
QI_SUCCEED(pVideoRenderer, IID_IMediaSeeking, pMediaSeeking);
RELEASE_EXPECT(pMediaSeeking, 1);
+ QI_SUCCEED(pVideoRenderer, IID_IQualityControl, pQualityControl);
+ RELEASE_EXPECT(pQualityControl, 1);
todo_wine {
QI_SUCCEED(pVideoRenderer, IID_IDirectDrawVideo, pDirectDrawVideo);
RELEASE_EXPECT(pDirectDrawVideo, 1);
QI_SUCCEED(pVideoRenderer, IID_IKsPropertySet, pKsPropertySet);
RELEASE_EXPECT(pKsPropertySet, 1);
- QI_SUCCEED(pVideoRenderer, IID_IMediaPosition, pMediaPosition);
- RELEASE_EXPECT(pMediaPosition, 1);
- QI_SUCCEED(pVideoRenderer, IID_IQualityControl, pQualityControl);
- RELEASE_EXPECT(pQualityControl, 1);
QI_SUCCEED(pVideoRenderer, IID_IQualProp, pQualProp);
RELEASE_EXPECT(pQualProp, 1);
}
+ QI_SUCCEED(pVideoRenderer, IID_IMediaPosition, pMediaPosition);
+ RELEASE_EXPECT(pMediaPosition, 1);
QI_SUCCEED(pVideoRenderer, IID_IVideoWindow, pVideoWindow);
RELEASE_EXPECT(pVideoWindow, 1);
}
@@ -156,15 +156,16 @@
if (!create_video_renderer())
return;
-if(!winetest_interactive)
-{
- skip("Skipping filtergraph test, see ROSTESTS_116\n");
- return;
-}
-else{
- test_query_interface();
- test_basefilter();
-}
+ if (!winetest_interactive)
+ {
+ skip("Skipping filtergraph test, see ROSTESTS-116\n");
+ return;
+ }
+ else
+ {
+ test_query_interface();
+ test_basefilter();
+ }
release_video_renderer();
CoUninitialize();