1 /* DirectShow FilterGraph object (QUARTZ.DLL)
3 * Copyright 2002 Lionel Ulmer
4 * Copyright 2004 Christian Costa
6 * This file contains the (internal) driver registration functions,
7 * driver enumeration APIs and DirectDraw creation functions.
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
33 #include "wine/debug.h"
37 #include "wine/unicode.h"
39 #include "quartz_private.h"
41 WINE_DEFAULT_DEBUG_CHANNEL(quartz
);
44 HWND hWnd
; /* Target window */
45 long msg
; /* User window message */
46 long instance
; /* User data */
47 int disabled
; /* Disabled messages posting */
51 long lEventCode
; /* Event code */
52 LONG_PTR lParam1
; /* Param1 */
53 LONG_PTR lParam2
; /* Param2 */
56 /* messages ring implementation for queuing events (taken from winmm) */
57 #define EVENTS_RING_BUFFER_INCREMENT 64
63 CRITICAL_SECTION msg_crst
;
64 HANDLE msg_event
; /* Signaled for no empty queue */
67 static int EventsQueue_Init(EventsQueue
* omr
)
71 omr
->msg_event
= CreateEventW(NULL
, TRUE
, FALSE
, NULL
);
72 omr
->ring_buffer_size
= EVENTS_RING_BUFFER_INCREMENT
;
73 omr
->messages
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
,omr
->ring_buffer_size
* sizeof(Event
));
75 InitializeCriticalSection(&omr
->msg_crst
);
79 static int EventsQueue_Destroy(EventsQueue
* omr
)
81 CloseHandle(omr
->msg_event
);
82 HeapFree(GetProcessHeap(),0,omr
->messages
);
83 DeleteCriticalSection(&omr
->msg_crst
);
87 static int EventsQueue_PutEvent(EventsQueue
* omr
, Event
* evt
)
89 EnterCriticalSection(&omr
->msg_crst
);
90 if ((omr
->msg_toget
== ((omr
->msg_tosave
+ 1) % omr
->ring_buffer_size
)))
92 int old_ring_buffer_size
= omr
->ring_buffer_size
;
93 omr
->ring_buffer_size
+= EVENTS_RING_BUFFER_INCREMENT
;
94 TRACE("omr->ring_buffer_size=%d\n",omr
->ring_buffer_size
);
95 omr
->messages
= HeapReAlloc(GetProcessHeap(),0,omr
->messages
, omr
->ring_buffer_size
* sizeof(Event
));
96 /* Now we need to rearrange the ring buffer so that the new
97 buffers just allocated are in between omr->msg_tosave and
100 if (omr
->msg_tosave
< omr
->msg_toget
)
102 memmove(&(omr
->messages
[omr
->msg_toget
+ EVENTS_RING_BUFFER_INCREMENT
]),
103 &(omr
->messages
[omr
->msg_toget
]),
104 sizeof(Event
)*(old_ring_buffer_size
- omr
->msg_toget
)
106 omr
->msg_toget
+= EVENTS_RING_BUFFER_INCREMENT
;
109 omr
->messages
[omr
->msg_tosave
] = *evt
;
110 SetEvent(omr
->msg_event
);
111 omr
->msg_tosave
= (omr
->msg_tosave
+ 1) % omr
->ring_buffer_size
;
112 LeaveCriticalSection(&omr
->msg_crst
);
116 static int EventsQueue_GetEvent(EventsQueue
* omr
, Event
* evt
, long msTimeOut
)
118 if (WaitForSingleObject(omr
->msg_event
, msTimeOut
) != WAIT_OBJECT_0
)
121 EnterCriticalSection(&omr
->msg_crst
);
123 if (omr
->msg_toget
== omr
->msg_tosave
) /* buffer empty ? */
125 LeaveCriticalSection(&omr
->msg_crst
);
129 *evt
= omr
->messages
[omr
->msg_toget
];
130 omr
->msg_toget
= (omr
->msg_toget
+ 1) % omr
->ring_buffer_size
;
132 /* Mark the buffer as empty if needed */
133 if (omr
->msg_toget
== omr
->msg_tosave
) /* buffer empty ? */
134 ResetEvent(omr
->msg_event
);
136 LeaveCriticalSection(&omr
->msg_crst
);
140 typedef struct _IFilterGraphImpl
{
141 IGraphBuilderVtbl
*IGraphBuilder_vtbl
;
142 IMediaControlVtbl
*IMediaControl_vtbl
;
143 IMediaSeekingVtbl
*IMediaSeeking_vtbl
;
144 IBasicAudioVtbl
*IBasicAudio_vtbl
;
145 IBasicVideoVtbl
*IBasicVideo_vtbl
;
146 IVideoWindowVtbl
*IVideoWindow_vtbl
;
147 IMediaEventExVtbl
*IMediaEventEx_vtbl
;
148 IMediaFilterVtbl
*IMediaFilter_vtbl
;
149 IMediaEventSinkVtbl
*IMediaEventSink_vtbl
;
150 /* IAMGraphStreams */
160 /* IRegisterServiceProvider */
161 /* IResourceMananger */
162 /* IServiceProvider */
163 /* IVideoFrameStep */
166 IBaseFilter
** ppFiltersInGraph
;
167 LPWSTR
* pFilterNames
;
172 HANDLE hEventCompletion
;
173 int CompletionStatus
;
177 int HandleEcComplete
;
182 static HRESULT
Filtergraph_QueryInterface(IFilterGraphImpl
*This
,
185 TRACE("(%p)->(%s (%p), %p)\n", This
, debugstr_guid(riid
), riid
, ppvObj
);
187 if (IsEqualGUID(&IID_IUnknown
, riid
) ||
188 IsEqualGUID(&IID_IFilterGraph
, riid
) ||
189 IsEqualGUID(&IID_IGraphBuilder
, riid
)) {
190 *ppvObj
= &(This
->IGraphBuilder_vtbl
);
191 TRACE(" returning IGraphBuilder interface (%p)\n", *ppvObj
);
192 } else if (IsEqualGUID(&IID_IMediaControl
, riid
)) {
193 *ppvObj
= &(This
->IMediaControl_vtbl
);
194 TRACE(" returning IMediaControl interface (%p)\n", *ppvObj
);
195 } else if (IsEqualGUID(&IID_IMediaSeeking
, riid
)) {
196 *ppvObj
= &(This
->IMediaSeeking_vtbl
);
197 TRACE(" returning IMediaSeeking interface (%p)\n", *ppvObj
);
198 } else if (IsEqualGUID(&IID_IBasicAudio
, riid
)) {
199 *ppvObj
= &(This
->IBasicAudio_vtbl
);
200 TRACE(" returning IBasicAudio interface (%p)\n", *ppvObj
);
201 } else if (IsEqualGUID(&IID_IBasicVideo
, riid
)) {
202 *ppvObj
= &(This
->IBasicVideo_vtbl
);
203 TRACE(" returning IBasicVideo interface (%p)\n", *ppvObj
);
204 } else if (IsEqualGUID(&IID_IVideoWindow
, riid
)) {
205 *ppvObj
= &(This
->IVideoWindow_vtbl
);
206 TRACE(" returning IVideoWindow interface (%p)\n", *ppvObj
);
207 } else if (IsEqualGUID(&IID_IMediaEvent
, riid
) ||
208 IsEqualGUID(&IID_IMediaEventEx
, riid
)) {
209 *ppvObj
= &(This
->IMediaEventEx_vtbl
);
210 TRACE(" returning IMediaEvent(Ex) interface (%p)\n", *ppvObj
);
211 } else if (IsEqualGUID(&IID_IMediaFilter
, riid
) ||
212 IsEqualGUID(&IID_IPersist
, riid
)) {
213 *ppvObj
= &(This
->IMediaFilter_vtbl
);
214 TRACE(" returning IMediaFilter interface (%p)\n", *ppvObj
);
215 } else if (IsEqualGUID(&IID_IMediaEventSink
, riid
)) {
216 *ppvObj
= &(This
->IMediaEventSink_vtbl
);
217 TRACE(" returning IMediaEventSink interface (%p)\n", *ppvObj
);
220 FIXME("unknown interface %s\n", debugstr_guid(riid
));
221 return E_NOINTERFACE
;
228 static ULONG
Filtergraph_AddRef(IFilterGraphImpl
*This
) {
229 TRACE("(%p)->(): new ref = %ld\n", This
, This
->ref
+ 1);
234 static ULONG
Filtergraph_Release(IFilterGraphImpl
*This
) {
237 TRACE("(%p)->(): new ref = %ld\n", This
, This
->ref
- 1);
241 CloseHandle(This
->hEventCompletion
);
242 EventsQueue_Destroy(&This
->evqueue
);
243 HeapFree(GetProcessHeap(), 0, This
->ppFiltersInGraph
);
244 HeapFree(GetProcessHeap(), 0, This
->pFilterNames
);
245 HeapFree(GetProcessHeap(), 0, This
);
251 /*** IUnknown methods ***/
252 static HRESULT WINAPI
Graphbuilder_QueryInterface(IGraphBuilder
*iface
,
255 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
257 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
258 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
261 static ULONG WINAPI
Graphbuilder_AddRef(IGraphBuilder
*iface
) {
262 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
264 TRACE("(%p/%p)->() calling FilterGraph AddRef\n", This
, iface
);
266 return Filtergraph_AddRef(This
);
269 static ULONG WINAPI
Graphbuilder_Release(IGraphBuilder
*iface
) {
270 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
272 TRACE("(%p/%p)->() calling FilterGraph Release\n", This
, iface
);
274 return Filtergraph_Release(This
);
277 /*** IFilterGraph methods ***/
278 static HRESULT WINAPI
Graphbuilder_AddFilter(IGraphBuilder
*iface
,
279 IBaseFilter
*pFilter
,
281 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
284 WCHAR
* wszFilterName
= NULL
;
285 int duplicate_name
= FALSE
;
287 TRACE("(%p/%p)->(%p, %s (%p))\n", This
, iface
, pFilter
, debugstr_w(pName
), pName
);
289 wszFilterName
= (WCHAR
*) CoTaskMemAlloc( (pName
? strlenW(pName
) + 6 : 5) * sizeof(WCHAR
) );
293 /* Check if name already exists */
294 for(i
= 0; i
< This
->nFilters
; i
++)
295 if (!strcmpW(This
->pFilterNames
[i
], pName
))
297 duplicate_name
= TRUE
;
302 /* If no name given or name already existing, generate one */
303 if (!pName
|| duplicate_name
)
305 static const WCHAR wszFmt1
[] = {'%','s',' ','%','0','4','d',0};
306 static const WCHAR wszFmt2
[] = {'%','0','4','d',0};
308 for (j
= 0; j
< 10000 ; j
++)
312 sprintfW(wszFilterName
, wszFmt1
, pName
, This
->nameIndex
);
314 sprintfW(wszFilterName
, wszFmt2
, This
->nameIndex
);
315 TRACE("Generated name %s\n", debugstr_w(wszFilterName
));
317 /* Check if the generated name already exists */
318 for(i
= 0; i
< This
->nFilters
; i
++)
319 if (!strcmpW(This
->pFilterNames
[i
], pName
))
322 /* Compute next index and exit if generated name is suitable */
323 if (This
->nameIndex
++ == 10000)
325 if (i
== This
->nFilters
)
328 /* Unable to find a suitable name */
331 CoTaskMemFree(wszFilterName
);
332 return VFW_E_DUPLICATE_NAME
;
336 memcpy(wszFilterName
, pName
, (strlenW(pName
) + 1) * sizeof(WCHAR
));
339 if (This
->nFilters
+ 1 > This
->filterCapacity
)
341 int newCapacity
= 2*This
->filterCapacity
;
342 IBaseFilter
** ppNewFilters
= CoTaskMemAlloc(newCapacity
* sizeof(IBaseFilter
*));
343 LPWSTR
* pNewNames
= CoTaskMemAlloc(newCapacity
* sizeof(LPWSTR
));
344 memcpy(ppNewFilters
, This
->ppFiltersInGraph
, This
->nFilters
* sizeof(IBaseFilter
*));
345 memcpy(pNewNames
, This
->pFilterNames
, This
->nFilters
* sizeof(LPWSTR
));
346 CoTaskMemFree(This
->ppFiltersInGraph
);
347 CoTaskMemFree(This
->pFilterNames
);
348 This
->ppFiltersInGraph
= ppNewFilters
;
349 This
->pFilterNames
= pNewNames
;
350 This
->filterCapacity
= newCapacity
;
353 hr
= IBaseFilter_JoinFilterGraph(pFilter
, (IFilterGraph
*)This
, wszFilterName
);
357 IBaseFilter_AddRef(pFilter
);
358 This
->ppFiltersInGraph
[This
->nFilters
] = pFilter
;
359 This
->pFilterNames
[This
->nFilters
] = wszFilterName
;
363 CoTaskMemFree(wszFilterName
);
365 if (SUCCEEDED(hr
) && duplicate_name
)
366 return VFW_S_DUPLICATE_NAME
;
371 static HRESULT WINAPI
Graphbuilder_RemoveFilter(IGraphBuilder
*iface
,
372 IBaseFilter
*pFilter
) {
373 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
377 TRACE("(%p/%p)->(%p)\n", This
, iface
, pFilter
);
379 /* FIXME: check graph is stopped */
381 for (i
= 0; i
< This
->nFilters
; i
++)
383 if (This
->ppFiltersInGraph
[i
] == pFilter
)
385 /* FIXME: disconnect pins */
386 hr
= IBaseFilter_JoinFilterGraph(pFilter
, NULL
, This
->pFilterNames
[i
]);
389 IPin_Release(pFilter
);
390 CoTaskMemFree(This
->pFilterNames
[i
]);
391 memmove(This
->ppFiltersInGraph
+i
, This
->ppFiltersInGraph
+i
+1, sizeof(IBaseFilter
*)*(This
->nFilters
- 1 - i
));
392 memmove(This
->pFilterNames
+i
, This
->pFilterNames
+i
+1, sizeof(LPWSTR
)*(This
->nFilters
- 1 - i
));
400 return hr
; /* FIXME: check this error code */
403 static HRESULT WINAPI
Graphbuilder_EnumFilters(IGraphBuilder
*iface
,
404 IEnumFilters
**ppEnum
) {
405 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
407 TRACE("(%p/%p)->(%p)\n", This
, iface
, ppEnum
);
409 return IEnumFiltersImpl_Construct(This
->ppFiltersInGraph
, This
->nFilters
, ppEnum
);
412 static HRESULT WINAPI
Graphbuilder_FindFilterByName(IGraphBuilder
*iface
,
414 IBaseFilter
**ppFilter
) {
415 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
418 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_w(pName
), pName
, ppFilter
);
422 for (i
= 0; i
< This
->nFilters
; i
++)
424 if (!strcmpW(pName
, This
->pFilterNames
[i
]))
426 *ppFilter
= This
->ppFiltersInGraph
[i
];
427 IBaseFilter_AddRef(*ppFilter
);
432 return E_FAIL
; /* FIXME: check this error code */
435 /* NOTE: despite the implication, it doesn't matter which
436 * way round you put in the input and output pins */
437 static HRESULT WINAPI
Graphbuilder_ConnectDirect(IGraphBuilder
*iface
,
440 const AM_MEDIA_TYPE
*pmt
) {
444 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
446 TRACE("(%p/%p)->(%p, %p, %p)\n", This
, iface
, ppinIn
, ppinOut
, pmt
);
448 /* FIXME: check pins are in graph */
450 hr
= IPin_QueryDirection(ppinIn
, &dir
);
453 if (dir
== PINDIR_INPUT
)
454 hr
= IPin_Connect(ppinOut
, ppinIn
, pmt
);
456 hr
= IPin_Connect(ppinIn
, ppinOut
, pmt
);
462 static HRESULT WINAPI
Graphbuilder_Reconnect(IGraphBuilder
*iface
,
464 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
466 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, ppin
);
471 static HRESULT WINAPI
Graphbuilder_Disconnect(IGraphBuilder
*iface
,
473 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
475 TRACE("(%p/%p)->(%p)\n", This
, iface
, ppin
);
477 return IPin_Disconnect(ppin
);
480 static HRESULT WINAPI
Graphbuilder_SetDefaultSyncSource(IGraphBuilder
*iface
) {
481 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
483 TRACE("(%p/%p)->(): stub !!!\n", iface
, This
);
488 /*** IGraphBuilder methods ***/
489 static HRESULT WINAPI
Graphbuilder_Connect(IGraphBuilder
*iface
,
492 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
494 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, ppinOut
, ppinIn
);
499 static HRESULT WINAPI
Graphbuilder_Render(IGraphBuilder
*iface
,
501 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
503 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, ppinOut
);
508 static HRESULT WINAPI
Graphbuilder_RenderFile(IGraphBuilder
*iface
,
510 LPCWSTR lpcwstrPlayList
) {
511 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
513 TRACE("(%p/%p)->(%s (%p), %s (%p)): stub !!!\n", This
, iface
, debugstr_w(lpcwstrFile
), lpcwstrFile
, debugstr_w(lpcwstrPlayList
), lpcwstrPlayList
);
518 static HRESULT WINAPI
Graphbuilder_AddSourceFilter(IGraphBuilder
*iface
,
519 LPCWSTR lpcwstrFileName
,
520 LPCWSTR lpcwstrFilterName
,
521 IBaseFilter
**ppFilter
) {
522 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
524 TRACE("(%p/%p)->(%s (%p), %s (%p), %p): stub !!!\n", This
, iface
, debugstr_w(lpcwstrFileName
), lpcwstrFileName
, debugstr_w(lpcwstrFilterName
), lpcwstrFilterName
, ppFilter
);
529 static HRESULT WINAPI
Graphbuilder_SetLogFile(IGraphBuilder
*iface
,
531 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
533 TRACE("(%p/%p)->(%08lx): stub !!!\n", This
, iface
, (DWORD
) hFile
);
538 static HRESULT WINAPI
Graphbuilder_Abort(IGraphBuilder
*iface
) {
539 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
541 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
546 static HRESULT WINAPI
Graphbuilder_ShouldOperationContinue(IGraphBuilder
*iface
) {
547 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
549 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
555 static IGraphBuilderVtbl IGraphBuilder_VTable
=
557 Graphbuilder_QueryInterface
,
559 Graphbuilder_Release
,
560 Graphbuilder_AddFilter
,
561 Graphbuilder_RemoveFilter
,
562 Graphbuilder_EnumFilters
,
563 Graphbuilder_FindFilterByName
,
564 Graphbuilder_ConnectDirect
,
565 Graphbuilder_Reconnect
,
566 Graphbuilder_Disconnect
,
567 Graphbuilder_SetDefaultSyncSource
,
568 Graphbuilder_Connect
,
570 Graphbuilder_RenderFile
,
571 Graphbuilder_AddSourceFilter
,
572 Graphbuilder_SetLogFile
,
574 Graphbuilder_ShouldOperationContinue
577 /*** IUnknown methods ***/
578 static HRESULT WINAPI
Mediacontrol_QueryInterface(IMediaControl
*iface
,
581 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
583 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
585 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
588 static ULONG WINAPI
Mediacontrol_AddRef(IMediaControl
*iface
) {
589 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
591 TRACE("(%p/%p)->()\n", This
, iface
);
593 return Filtergraph_AddRef(This
);
596 static ULONG WINAPI
Mediacontrol_Release(IMediaControl
*iface
) {
597 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
599 TRACE("(%p/%p)->()\n", This
, iface
);
601 return Filtergraph_Release(This
);
605 /*** IDispatch methods ***/
606 static HRESULT WINAPI
Mediacontrol_GetTypeInfoCount(IMediaControl
*iface
,
608 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
610 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
615 static HRESULT WINAPI
Mediacontrol_GetTypeInfo(IMediaControl
*iface
,
618 ITypeInfo
**ppTInfo
) {
619 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
621 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
626 static HRESULT WINAPI
Mediacontrol_GetIDsOfNames(IMediaControl
*iface
,
632 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
634 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
639 static HRESULT WINAPI
Mediacontrol_Invoke(IMediaControl
*iface
,
644 DISPPARAMS
*pDispParams
,
648 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
650 TRACE("(%p/%p)->(%ld, %s (%p), %ld, %04x, %p, %p, %p, %p): stub !!!\n", This
, iface
, dispIdMember
, debugstr_guid(riid
), riid
, lcid
, wFlags
, pDispParams
, pVarResult
, pExepInfo
, puArgErr
);
655 /*** IMediaControl methods ***/
656 static HRESULT WINAPI
Mediacontrol_Run(IMediaControl
*iface
) {
657 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
659 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
661 ResetEvent(This
->hEventCompletion
);
666 static HRESULT WINAPI
Mediacontrol_Pause(IMediaControl
*iface
) {
667 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
669 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
674 static HRESULT WINAPI
Mediacontrol_Stop(IMediaControl
*iface
) {
675 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
677 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
682 static HRESULT WINAPI
Mediacontrol_GetState(IMediaControl
*iface
,
684 OAFilterState
*pfs
) {
685 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
687 TRACE("(%p/%p)->(%ld, %p): stub !!!\n", This
, iface
, msTimeout
, pfs
);
692 static HRESULT WINAPI
Mediacontrol_RenderFile(IMediaControl
*iface
,
694 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
696 TRACE("(%p/%p)->(%s (%p)): stub !!!\n", This
, iface
, debugstr_w(strFilename
), strFilename
);
701 static HRESULT WINAPI
Mediacontrol_AddSourceFilter(IMediaControl
*iface
,
704 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
706 TRACE("(%p/%p)->(%s (%p), %p): stub !!!\n", This
, iface
, debugstr_w(strFilename
), strFilename
, ppUnk
);
711 static HRESULT WINAPI
Mediacontrol_get_FilterCollection(IMediaControl
*iface
,
713 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
715 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, ppUnk
);
720 static HRESULT WINAPI
Mediacontrol_get_RegFilterCollection(IMediaControl
*iface
,
722 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
724 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, ppUnk
);
729 static HRESULT WINAPI
Mediacontrol_StopWhenReady(IMediaControl
*iface
) {
730 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
732 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
738 static IMediaControlVtbl IMediaControl_VTable
=
740 Mediacontrol_QueryInterface
,
742 Mediacontrol_Release
,
743 Mediacontrol_GetTypeInfoCount
,
744 Mediacontrol_GetTypeInfo
,
745 Mediacontrol_GetIDsOfNames
,
750 Mediacontrol_GetState
,
751 Mediacontrol_RenderFile
,
752 Mediacontrol_AddSourceFilter
,
753 Mediacontrol_get_FilterCollection
,
754 Mediacontrol_get_RegFilterCollection
,
755 Mediacontrol_StopWhenReady
759 /*** IUnknown methods ***/
760 static HRESULT WINAPI
Mediaseeking_QueryInterface(IMediaSeeking
*iface
,
763 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
765 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
767 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
770 static ULONG WINAPI
Mediaseeking_AddRef(IMediaSeeking
*iface
) {
771 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
773 TRACE("(%p/%p)->()\n", This
, iface
);
775 return Filtergraph_AddRef(This
);
778 static ULONG WINAPI
Mediaseeking_Release(IMediaSeeking
*iface
) {
779 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
781 TRACE("(%p/%p)->()\n", This
, iface
);
783 return Filtergraph_Release(This
);
786 /*** IMediaSeeking methods ***/
787 static HRESULT WINAPI
Mediaseeking_GetCapabilities(IMediaSeeking
*iface
,
788 DWORD
*pCapabilities
) {
789 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
791 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pCapabilities
);
796 static HRESULT WINAPI
Mediaseeking_CheckCapabilities(IMediaSeeking
*iface
,
797 DWORD
*pCapabilities
) {
798 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
800 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pCapabilities
);
805 static HRESULT WINAPI
Mediaseeking_IsFormatSupported(IMediaSeeking
*iface
,
806 const GUID
*pFormat
) {
807 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
809 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
814 static HRESULT WINAPI
Mediaseeking_QueryPreferredFormat(IMediaSeeking
*iface
,
816 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
818 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
823 static HRESULT WINAPI
Mediaseeking_GetTimeFormat(IMediaSeeking
*iface
,
825 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
827 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
832 static HRESULT WINAPI
Mediaseeking_IsUsingTimeFormat(IMediaSeeking
*iface
,
833 const GUID
*pFormat
) {
834 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
836 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
841 static HRESULT WINAPI
Mediaseeking_SetTimeFormat(IMediaSeeking
*iface
,
842 const GUID
*pFormat
) {
843 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
845 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
850 static HRESULT WINAPI
Mediaseeking_GetDuration(IMediaSeeking
*iface
,
851 LONGLONG
*pDuration
) {
852 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
854 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDuration
);
859 static HRESULT WINAPI
Mediaseeking_GetStopPosition(IMediaSeeking
*iface
,
861 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
863 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pStop
);
868 static HRESULT WINAPI
Mediaseeking_GetCurrentPosition(IMediaSeeking
*iface
,
869 LONGLONG
*pCurrent
) {
870 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
872 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pCurrent
);
877 static HRESULT WINAPI
Mediaseeking_ConvertTimeFormat(IMediaSeeking
*iface
,
879 const GUID
*pTargetFormat
,
881 const GUID
*pSourceFormat
) {
882 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
884 TRACE("(%p/%p)->(%p, %p, %lld, %p): stub !!!\n", This
, iface
, pTarget
, pTargetFormat
, Source
, pSourceFormat
);
889 static HRESULT WINAPI
Mediaseeking_SetPositions(IMediaSeeking
*iface
,
891 DWORD dwCurrentFlags
,
894 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
896 TRACE("(%p/%p)->(%p, %08lx, %p, %08lx): stub !!!\n", This
, iface
, pCurrent
, dwCurrentFlags
, pStop
, dwStopFlags
);
901 static HRESULT WINAPI
Mediaseeking_GetPositions(IMediaSeeking
*iface
,
904 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
906 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pCurrent
, pStop
);
911 static HRESULT WINAPI
Mediaseeking_GetAvailable(IMediaSeeking
*iface
,
914 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
916 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pEarliest
, pLatest
);
921 static HRESULT WINAPI
Mediaseeking_SetRate(IMediaSeeking
*iface
,
923 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
925 TRACE("(%p/%p)->(%f): stub !!!\n", This
, iface
, dRate
);
930 static HRESULT WINAPI
Mediaseeking_GetRate(IMediaSeeking
*iface
,
932 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
934 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pdRate
);
939 static HRESULT WINAPI
Mediaseeking_GetPreroll(IMediaSeeking
*iface
,
940 LONGLONG
*pllPreroll
) {
941 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
943 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pllPreroll
);
949 static IMediaSeekingVtbl IMediaSeeking_VTable
=
951 Mediaseeking_QueryInterface
,
953 Mediaseeking_Release
,
954 Mediaseeking_GetCapabilities
,
955 Mediaseeking_CheckCapabilities
,
956 Mediaseeking_IsFormatSupported
,
957 Mediaseeking_QueryPreferredFormat
,
958 Mediaseeking_GetTimeFormat
,
959 Mediaseeking_IsUsingTimeFormat
,
960 Mediaseeking_SetTimeFormat
,
961 Mediaseeking_GetDuration
,
962 Mediaseeking_GetStopPosition
,
963 Mediaseeking_GetCurrentPosition
,
964 Mediaseeking_ConvertTimeFormat
,
965 Mediaseeking_SetPositions
,
966 Mediaseeking_GetPositions
,
967 Mediaseeking_GetAvailable
,
968 Mediaseeking_SetRate
,
969 Mediaseeking_GetRate
,
970 Mediaseeking_GetPreroll
973 /*** IUnknown methods ***/
974 static HRESULT WINAPI
Basicaudio_QueryInterface(IBasicAudio
*iface
,
977 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
979 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
981 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
984 static ULONG WINAPI
Basicaudio_AddRef(IBasicAudio
*iface
) {
985 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
987 TRACE("(%p/%p)->()\n", This
, iface
);
989 return Filtergraph_AddRef(This
);
992 static ULONG WINAPI
Basicaudio_Release(IBasicAudio
*iface
) {
993 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
995 TRACE("(%p/%p)->()\n", This
, iface
);
997 return Filtergraph_Release(This
);
1000 /*** IDispatch methods ***/
1001 static HRESULT WINAPI
Basicaudio_GetTypeInfoCount(IBasicAudio
*iface
,
1003 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1005 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
1010 static HRESULT WINAPI
Basicaudio_GetTypeInfo(IBasicAudio
*iface
,
1013 ITypeInfo
**ppTInfo
) {
1014 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1016 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
1021 static HRESULT WINAPI
Basicaudio_GetIDsOfNames(IBasicAudio
*iface
,
1027 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1029 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
1034 static HRESULT WINAPI
Basicaudio_Invoke(IBasicAudio
*iface
,
1035 DISPID dispIdMember
,
1039 DISPPARAMS
*pDispParams
,
1041 EXCEPINFO
*pExepInfo
,
1043 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1045 TRACE("(%p/%p)->(%ld, %s (%p), %ld, %04x, %p, %p, %p, %p): stub !!!\n", This
, iface
, dispIdMember
, debugstr_guid(riid
), riid
, lcid
, wFlags
, pDispParams
, pVarResult
, pExepInfo
, puArgErr
);
1050 /*** IBasicAudio methods ***/
1051 static HRESULT WINAPI
Basicaudio_put_Volume(IBasicAudio
*iface
,
1053 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1055 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, lVolume
);
1060 static HRESULT WINAPI
Basicaudio_get_Volume(IBasicAudio
*iface
,
1062 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1064 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, plVolume
);
1069 static HRESULT WINAPI
Basicaudio_put_Balance(IBasicAudio
*iface
,
1071 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1073 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, lBalance
);
1078 static HRESULT WINAPI
Basicaudio_get_Balance(IBasicAudio
*iface
,
1080 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1082 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, plBalance
);
1087 static IBasicAudioVtbl IBasicAudio_VTable
=
1089 Basicaudio_QueryInterface
,
1092 Basicaudio_GetTypeInfoCount
,
1093 Basicaudio_GetTypeInfo
,
1094 Basicaudio_GetIDsOfNames
,
1096 Basicaudio_put_Volume
,
1097 Basicaudio_get_Volume
,
1098 Basicaudio_put_Balance
,
1099 Basicaudio_get_Balance
1102 /*** IUnknown methods ***/
1103 static HRESULT WINAPI
Basicvideo_QueryInterface(IBasicVideo
*iface
,
1106 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1108 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
1110 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
1113 static ULONG WINAPI
Basicvideo_AddRef(IBasicVideo
*iface
) {
1114 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1116 TRACE("(%p/%p)->()\n", This
, iface
);
1118 return Filtergraph_AddRef(This
);
1121 static ULONG WINAPI
Basicvideo_Release(IBasicVideo
*iface
) {
1122 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1124 TRACE("(%p/%p)->()\n", This
, iface
);
1126 return Filtergraph_Release(This
);
1129 /*** IDispatch methods ***/
1130 static HRESULT WINAPI
Basicvideo_GetTypeInfoCount(IBasicVideo
*iface
,
1132 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1134 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
1139 static HRESULT WINAPI
Basicvideo_GetTypeInfo(IBasicVideo
*iface
,
1142 ITypeInfo
**ppTInfo
) {
1143 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1145 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
1150 static HRESULT WINAPI
Basicvideo_GetIDsOfNames(IBasicVideo
*iface
,
1156 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1158 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
1163 static HRESULT WINAPI
Basicvideo_Invoke(IBasicVideo
*iface
,
1164 DISPID dispIdMember
,
1168 DISPPARAMS
*pDispParams
,
1170 EXCEPINFO
*pExepInfo
,
1172 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1174 TRACE("(%p/%p)->(%ld, %s (%p), %ld, %04x, %p, %p, %p, %p): stub !!!\n", This
, iface
, dispIdMember
, debugstr_guid(riid
), riid
, lcid
, wFlags
, pDispParams
, pVarResult
, pExepInfo
, puArgErr
);
1179 /*** IBasicVideo methods ***/
1180 static HRESULT WINAPI
Basicvideo_get_AvgTimePerFrame(IBasicVideo
*iface
,
1181 REFTIME
*pAvgTimePerFrame
) {
1182 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1184 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pAvgTimePerFrame
);
1189 static HRESULT WINAPI
Basicvideo_get_BitRate(IBasicVideo
*iface
,
1191 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1193 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pBitRate
);
1198 static HRESULT WINAPI
Basicvideo_get_BitErrorRate(IBasicVideo
*iface
,
1199 long *pBitErrorRate
) {
1200 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1202 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pBitErrorRate
);
1207 static HRESULT WINAPI
Basicvideo_get_VideoWidth(IBasicVideo
*iface
,
1208 long *pVideoWidth
) {
1209 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1211 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pVideoWidth
);
1216 static HRESULT WINAPI
Basicvideo_get_VideoHeight(IBasicVideo
*iface
,
1217 long *pVideoHeight
) {
1218 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1220 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pVideoHeight
);
1225 static HRESULT WINAPI
Basicvideo_put_SourceLeft(IBasicVideo
*iface
,
1227 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1229 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, SourceLeft
);
1234 static HRESULT WINAPI
Basicvideo_get_SourceLeft(IBasicVideo
*iface
,
1235 long *pSourceLeft
) {
1236 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1238 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pSourceLeft
);
1243 static HRESULT WINAPI
Basicvideo_put_SourceWidth(IBasicVideo
*iface
,
1245 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1247 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, SourceWidth
);
1252 static HRESULT WINAPI
Basicvideo_get_SourceWidth(IBasicVideo
*iface
,
1253 long *pSourceWidth
) {
1254 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1256 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pSourceWidth
);
1261 static HRESULT WINAPI
Basicvideo_put_SourceTop(IBasicVideo
*iface
,
1263 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1265 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, SourceTop
);
1270 static HRESULT WINAPI
Basicvideo_get_SourceTop(IBasicVideo
*iface
,
1272 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1274 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pSourceTop
);
1279 static HRESULT WINAPI
Basicvideo_put_SourceHeight(IBasicVideo
*iface
,
1280 long SourceHeight
) {
1281 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1283 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, SourceHeight
);
1288 static HRESULT WINAPI
Basicvideo_get_SourceHeight(IBasicVideo
*iface
,
1289 long *pSourceHeight
) {
1290 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1292 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pSourceHeight
);
1297 static HRESULT WINAPI
Basicvideo_put_DestinationLeft(IBasicVideo
*iface
,
1298 long DestinationLeft
) {
1299 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1301 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, DestinationLeft
);
1306 static HRESULT WINAPI
Basicvideo_get_DestinationLeft(IBasicVideo
*iface
,
1307 long *pDestinationLeft
) {
1308 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1310 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDestinationLeft
);
1315 static HRESULT WINAPI
Basicvideo_put_DestinationWidth(IBasicVideo
*iface
,
1316 long DestinationWidth
) {
1317 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1319 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, DestinationWidth
);
1324 static HRESULT WINAPI
Basicvideo_get_DestinationWidth(IBasicVideo
*iface
,
1325 long *pDestinationWidth
) {
1326 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1328 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDestinationWidth
);
1333 static HRESULT WINAPI
Basicvideo_put_DestinationTop(IBasicVideo
*iface
,
1334 long DestinationTop
) {
1335 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1337 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, DestinationTop
);
1342 static HRESULT WINAPI
Basicvideo_get_DestinationTop(IBasicVideo
*iface
,
1343 long *pDestinationTop
) {
1344 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1346 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDestinationTop
);
1351 static HRESULT WINAPI
Basicvideo_put_DestinationHeight(IBasicVideo
*iface
,
1352 long DestinationHeight
) {
1353 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1355 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, DestinationHeight
);
1360 static HRESULT WINAPI
Basicvideo_get_DestinationHeight(IBasicVideo
*iface
,
1361 long *pDestinationHeight
) {
1362 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1364 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDestinationHeight
);
1369 static HRESULT WINAPI
Basicvideo_SetSourcePosition(IBasicVideo
*iface
,
1374 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1376 TRACE("(%p/%p)->(%ld, %ld, %ld, %ld): stub !!!\n", This
, iface
, Left
, Top
, Width
, Height
);
1381 static HRESULT WINAPI
Basicvideo_GetSourcePosition(IBasicVideo
*iface
,
1386 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1388 TRACE("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This
, iface
, pLeft
, pTop
, pWidth
, pHeight
);
1393 static HRESULT WINAPI
Basicvideo_SetDefaultSourcePosition(IBasicVideo
*iface
) {
1394 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1396 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
1401 static HRESULT WINAPI
Basicvideo_SetDestinationPosition(IBasicVideo
*iface
,
1406 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1408 TRACE("(%p/%p)->(%ld, %ld, %ld, %ld): stub !!!\n", This
, iface
, Left
, Top
, Width
, Height
);
1413 static HRESULT WINAPI
Basicvideo_GetDestinationPosition(IBasicVideo
*iface
,
1418 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1420 TRACE("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This
, iface
, pLeft
, pTop
, pWidth
, pHeight
);
1425 static HRESULT WINAPI
Basicvideo_SetDefaultDestinationPosition(IBasicVideo
*iface
) {
1426 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1428 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
1433 static HRESULT WINAPI
Basicvideo_GetVideoSize(IBasicVideo
*iface
,
1436 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1438 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pWidth
, pHeight
);
1443 static HRESULT WINAPI
Basicvideo_GetVideoPaletteEntries(IBasicVideo
*iface
,
1448 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1450 TRACE("(%p/%p)->(%ld, %ld, %p, %p): stub !!!\n", This
, iface
, StartIndex
, Entries
, pRetrieved
, pPalette
);
1455 static HRESULT WINAPI
Basicvideo_GetCurrentImage(IBasicVideo
*iface
,
1458 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1460 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pBufferSize
, pDIBImage
);
1465 static HRESULT WINAPI
Basicvideo_IsUsingDefaultSource(IBasicVideo
*iface
) {
1466 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1468 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
1473 static HRESULT WINAPI
Basicvideo_IsUsingDefaultDestination(IBasicVideo
*iface
) {
1474 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1476 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
1482 static IBasicVideoVtbl IBasicVideo_VTable
=
1484 Basicvideo_QueryInterface
,
1487 Basicvideo_GetTypeInfoCount
,
1488 Basicvideo_GetTypeInfo
,
1489 Basicvideo_GetIDsOfNames
,
1491 Basicvideo_get_AvgTimePerFrame
,
1492 Basicvideo_get_BitRate
,
1493 Basicvideo_get_BitErrorRate
,
1494 Basicvideo_get_VideoWidth
,
1495 Basicvideo_get_VideoHeight
,
1496 Basicvideo_put_SourceLeft
,
1497 Basicvideo_get_SourceLeft
,
1498 Basicvideo_put_SourceWidth
,
1499 Basicvideo_get_SourceWidth
,
1500 Basicvideo_put_SourceTop
,
1501 Basicvideo_get_SourceTop
,
1502 Basicvideo_put_SourceHeight
,
1503 Basicvideo_get_SourceHeight
,
1504 Basicvideo_put_DestinationLeft
,
1505 Basicvideo_get_DestinationLeft
,
1506 Basicvideo_put_DestinationWidth
,
1507 Basicvideo_get_DestinationWidth
,
1508 Basicvideo_put_DestinationTop
,
1509 Basicvideo_get_DestinationTop
,
1510 Basicvideo_put_DestinationHeight
,
1511 Basicvideo_get_DestinationHeight
,
1512 Basicvideo_SetSourcePosition
,
1513 Basicvideo_GetSourcePosition
,
1514 Basicvideo_SetDefaultSourcePosition
,
1515 Basicvideo_SetDestinationPosition
,
1516 Basicvideo_GetDestinationPosition
,
1517 Basicvideo_SetDefaultDestinationPosition
,
1518 Basicvideo_GetVideoSize
,
1519 Basicvideo_GetVideoPaletteEntries
,
1520 Basicvideo_GetCurrentImage
,
1521 Basicvideo_IsUsingDefaultSource
,
1522 Basicvideo_IsUsingDefaultDestination
1526 /*** IUnknown methods ***/
1527 static HRESULT WINAPI
Videowindow_QueryInterface(IVideoWindow
*iface
,
1530 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1532 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
1534 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
1537 static ULONG WINAPI
Videowindow_AddRef(IVideoWindow
*iface
) {
1538 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1540 TRACE("(%p/%p)->()\n", This
, iface
);
1542 return Filtergraph_AddRef(This
);
1545 static ULONG WINAPI
Videowindow_Release(IVideoWindow
*iface
) {
1546 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1548 TRACE("(%p/%p)->()\n", This
, iface
);
1550 return Filtergraph_Release(This
);
1553 /*** IDispatch methods ***/
1554 static HRESULT WINAPI
Videowindow_GetTypeInfoCount(IVideoWindow
*iface
,
1556 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1558 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
1563 static HRESULT WINAPI
Videowindow_GetTypeInfo(IVideoWindow
*iface
,
1566 ITypeInfo
**ppTInfo
) {
1567 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1569 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
1574 static HRESULT WINAPI
Videowindow_GetIDsOfNames(IVideoWindow
*iface
,
1580 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1582 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
1587 static HRESULT WINAPI
Videowindow_Invoke(IVideoWindow
*iface
,
1588 DISPID dispIdMember
,
1592 DISPPARAMS
*pDispParams
,
1594 EXCEPINFO
*pExepInfo
,
1596 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1598 TRACE("(%p/%p)->(%ld, %s (%p), %ld, %04x, %p, %p, %p, %p): stub !!!\n", This
, iface
, dispIdMember
, debugstr_guid(riid
), riid
, lcid
, wFlags
, pDispParams
, pVarResult
, pExepInfo
, puArgErr
);
1603 /*** IVideoWindow methods ***/
1604 static HRESULT WINAPI
Videowindow_put_Caption(IVideoWindow
*iface
,
1606 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1608 TRACE("(%p/%p)->(%s (%p)): stub !!!\n", This
, iface
, debugstr_w(strCaption
), strCaption
);
1613 static HRESULT WINAPI
Videowindow_get_Caption(IVideoWindow
*iface
,
1615 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1617 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, strCaption
);
1622 static HRESULT WINAPI
Videowindow_put_WindowStyle(IVideoWindow
*iface
,
1624 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1626 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, WindowStyle
);
1631 static HRESULT WINAPI
Videowindow_get_WindowStyle(IVideoWindow
*iface
,
1632 long *WindowStyle
) {
1633 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1635 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, WindowStyle
);
1640 static HRESULT WINAPI
Videowindow_put_WindowStyleEx(IVideoWindow
*iface
,
1641 long WindowStyleEx
) {
1642 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1644 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, WindowStyleEx
);
1649 static HRESULT WINAPI
Videowindow_get_WindowStyleEx(IVideoWindow
*iface
,
1650 long *WindowStyleEx
) {
1651 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1653 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, WindowStyleEx
);
1658 static HRESULT WINAPI
Videowindow_put_AutoShow(IVideoWindow
*iface
,
1660 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1662 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, AutoShow
);
1667 static HRESULT WINAPI
Videowindow_get_AutoShow(IVideoWindow
*iface
,
1669 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1671 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, AutoShow
);
1676 static HRESULT WINAPI
Videowindow_put_WindowState(IVideoWindow
*iface
,
1678 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1680 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, WindowState
);
1685 static HRESULT WINAPI
Videowindow_get_WindowState(IVideoWindow
*iface
,
1686 long *WindowState
) {
1687 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1689 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, WindowState
);
1694 static HRESULT WINAPI
Videowindow_put_BackgroundPalette(IVideoWindow
*iface
,
1695 long BackgroundPalette
) {
1696 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1698 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, BackgroundPalette
);
1703 static HRESULT WINAPI
Videowindow_get_BackgroundPalette(IVideoWindow
*iface
,
1704 long *pBackgroundPalette
) {
1705 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1707 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pBackgroundPalette
);
1712 static HRESULT WINAPI
Videowindow_put_Visible(IVideoWindow
*iface
,
1714 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1716 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Visible
);
1721 static HRESULT WINAPI
Videowindow_get_Visible(IVideoWindow
*iface
,
1723 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1725 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pVisible
);
1730 static HRESULT WINAPI
Videowindow_put_Left(IVideoWindow
*iface
,
1732 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1734 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Left
);
1739 static HRESULT WINAPI
Videowindow_get_Left(IVideoWindow
*iface
,
1741 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1743 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pLeft
);
1748 static HRESULT WINAPI
Videowindow_put_Width(IVideoWindow
*iface
,
1750 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1752 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Width
);
1757 static HRESULT WINAPI
Videowindow_get_Width(IVideoWindow
*iface
,
1759 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1761 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pWidth
);
1766 static HRESULT WINAPI
Videowindow_put_Top(IVideoWindow
*iface
,
1768 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1770 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Top
);
1775 static HRESULT WINAPI
Videowindow_get_Top(IVideoWindow
*iface
,
1777 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1779 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pTop
);
1784 static HRESULT WINAPI
Videowindow_put_Height(IVideoWindow
*iface
,
1786 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1788 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Height
);
1793 static HRESULT WINAPI
Videowindow_get_Height(IVideoWindow
*iface
,
1795 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1797 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pHeight
);
1802 static HRESULT WINAPI
Videowindow_put_Owner(IVideoWindow
*iface
,
1804 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1806 TRACE("(%p/%p)->(%08lx): stub !!!\n", This
, iface
, (DWORD
) Owner
);
1811 static HRESULT WINAPI
Videowindow_get_Owner(IVideoWindow
*iface
,
1813 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1815 TRACE("(%p/%p)->(%08lx): stub !!!\n", This
, iface
, (DWORD
) Owner
);
1820 static HRESULT WINAPI
Videowindow_put_MessageDrain(IVideoWindow
*iface
,
1822 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1824 TRACE("(%p/%p)->(%08lx): stub !!!\n", This
, iface
, (DWORD
) Drain
);
1829 static HRESULT WINAPI
Videowindow_get_MessageDrain(IVideoWindow
*iface
,
1831 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1833 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, Drain
);
1838 static HRESULT WINAPI
Videowindow_get_BorderColor(IVideoWindow
*iface
,
1840 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1842 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, Color
);
1847 static HRESULT WINAPI
Videowindow_put_BorderColor(IVideoWindow
*iface
,
1849 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1851 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Color
);
1856 static HRESULT WINAPI
Videowindow_get_FullScreenMode(IVideoWindow
*iface
,
1857 long *FullScreenMode
) {
1858 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1860 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, FullScreenMode
);
1865 static HRESULT WINAPI
Videowindow_put_FullScreenMode(IVideoWindow
*iface
,
1866 long FullScreenMode
) {
1867 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1869 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, FullScreenMode
);
1874 static HRESULT WINAPI
Videowindow_SetWindowForeground(IVideoWindow
*iface
,
1876 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1878 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Focus
);
1883 static HRESULT WINAPI
Videowindow_NotifyOwnerMessage(IVideoWindow
*iface
,
1888 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1890 TRACE("(%p/%p)->(%08lx, %ld, %08lx, %08lx): stub !!!\n", This
, iface
, (DWORD
) hwnd
, uMsg
, wParam
, lParam
);
1895 static HRESULT WINAPI
Videowindow_SetWindowPosition(IVideoWindow
*iface
,
1900 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1902 TRACE("(%p/%p)->(%ld, %ld, %ld, %ld): stub !!!\n", This
, iface
, Left
, Top
, Width
, Height
);
1907 static HRESULT WINAPI
Videowindow_GetWindowPosition(IVideoWindow
*iface
,
1912 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1914 TRACE("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This
, iface
, pLeft
, pTop
, pWidth
, pHeight
);
1919 static HRESULT WINAPI
Videowindow_GetMinIdealImageSize(IVideoWindow
*iface
,
1922 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1924 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pWidth
, pHeight
);
1929 static HRESULT WINAPI
Videowindow_GetMaxIdealImageSize(IVideoWindow
*iface
,
1932 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1934 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pWidth
, pHeight
);
1939 static HRESULT WINAPI
Videowindow_GetRestorePosition(IVideoWindow
*iface
,
1944 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1946 TRACE("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This
, iface
, pLeft
, pTop
, pWidth
, pHeight
);
1951 static HRESULT WINAPI
Videowindow_HideCursor(IVideoWindow
*iface
,
1953 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1955 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, HideCursor
);
1960 static HRESULT WINAPI
Videowindow_IsCursorHidden(IVideoWindow
*iface
,
1961 long *CursorHidden
) {
1962 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1964 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, CursorHidden
);
1970 static IVideoWindowVtbl IVideoWindow_VTable
=
1972 Videowindow_QueryInterface
,
1974 Videowindow_Release
,
1975 Videowindow_GetTypeInfoCount
,
1976 Videowindow_GetTypeInfo
,
1977 Videowindow_GetIDsOfNames
,
1979 Videowindow_put_Caption
,
1980 Videowindow_get_Caption
,
1981 Videowindow_put_WindowStyle
,
1982 Videowindow_get_WindowStyle
,
1983 Videowindow_put_WindowStyleEx
,
1984 Videowindow_get_WindowStyleEx
,
1985 Videowindow_put_AutoShow
,
1986 Videowindow_get_AutoShow
,
1987 Videowindow_put_WindowState
,
1988 Videowindow_get_WindowState
,
1989 Videowindow_put_BackgroundPalette
,
1990 Videowindow_get_BackgroundPalette
,
1991 Videowindow_put_Visible
,
1992 Videowindow_get_Visible
,
1993 Videowindow_put_Left
,
1994 Videowindow_get_Left
,
1995 Videowindow_put_Width
,
1996 Videowindow_get_Width
,
1997 Videowindow_put_Top
,
1998 Videowindow_get_Top
,
1999 Videowindow_put_Height
,
2000 Videowindow_get_Height
,
2001 Videowindow_put_Owner
,
2002 Videowindow_get_Owner
,
2003 Videowindow_put_MessageDrain
,
2004 Videowindow_get_MessageDrain
,
2005 Videowindow_get_BorderColor
,
2006 Videowindow_put_BorderColor
,
2007 Videowindow_get_FullScreenMode
,
2008 Videowindow_put_FullScreenMode
,
2009 Videowindow_SetWindowForeground
,
2010 Videowindow_NotifyOwnerMessage
,
2011 Videowindow_SetWindowPosition
,
2012 Videowindow_GetWindowPosition
,
2013 Videowindow_GetMinIdealImageSize
,
2014 Videowindow_GetMaxIdealImageSize
,
2015 Videowindow_GetRestorePosition
,
2016 Videowindow_HideCursor
,
2017 Videowindow_IsCursorHidden
2021 /*** IUnknown methods ***/
2022 static HRESULT WINAPI
Mediaevent_QueryInterface(IMediaEventEx
*iface
,
2025 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2027 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
2029 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
2032 static ULONG WINAPI
Mediaevent_AddRef(IMediaEventEx
*iface
) {
2033 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2035 TRACE("(%p/%p)->()\n", This
, iface
);
2037 return Filtergraph_AddRef(This
);
2040 static ULONG WINAPI
Mediaevent_Release(IMediaEventEx
*iface
) {
2041 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2043 TRACE("(%p/%p)->()\n", This
, iface
);
2045 return Filtergraph_Release(This
);
2048 /*** IDispatch methods ***/
2049 static HRESULT WINAPI
Mediaevent_GetTypeInfoCount(IMediaEventEx
*iface
,
2051 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2053 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
2058 static HRESULT WINAPI
Mediaevent_GetTypeInfo(IMediaEventEx
*iface
,
2061 ITypeInfo
**ppTInfo
) {
2062 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2064 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
2069 static HRESULT WINAPI
Mediaevent_GetIDsOfNames(IMediaEventEx
*iface
,
2075 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2077 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
2082 static HRESULT WINAPI
Mediaevent_Invoke(IMediaEventEx
*iface
,
2083 DISPID dispIdMember
,
2087 DISPPARAMS
*pDispParams
,
2089 EXCEPINFO
*pExepInfo
,
2091 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2093 TRACE("(%p/%p)->(%ld, %s (%p), %ld, %04x, %p, %p, %p, %p): stub !!!\n", This
, iface
, dispIdMember
, debugstr_guid(riid
), riid
, lcid
, wFlags
, pDispParams
, pVarResult
, pExepInfo
, puArgErr
);
2098 /*** IMediaEvent methods ***/
2099 static HRESULT WINAPI
Mediaevent_GetEventHandle(IMediaEventEx
*iface
,
2101 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2103 TRACE("(%p/%p)->(%p)\n", This
, iface
, hEvent
);
2105 *hEvent
= (OAEVENT
)This
->evqueue
.msg_event
;
2110 static HRESULT WINAPI
Mediaevent_GetEvent(IMediaEventEx
*iface
,
2115 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2118 TRACE("(%p/%p)->(%p, %p, %p, %ld)\n", This
, iface
, lEventCode
, lParam1
, lParam2
, msTimeout
);
2120 if (EventsQueue_GetEvent(&This
->evqueue
, &evt
, msTimeout
))
2122 *lEventCode
= evt
.lEventCode
;
2123 *lParam1
= evt
.lParam1
;
2124 *lParam2
= evt
.lParam2
;
2132 static HRESULT WINAPI
Mediaevent_WaitForCompletion(IMediaEventEx
*iface
,
2135 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2137 TRACE("(%p/%p)->(%ld, %p)\n", This
, iface
, msTimeout
, pEvCode
);
2139 if (WaitForSingleObject(This
->hEventCompletion
, msTimeout
) == WAIT_OBJECT_0
)
2141 *pEvCode
= This
->CompletionStatus
;
2149 static HRESULT WINAPI
Mediaevent_CancelDefaultHandling(IMediaEventEx
*iface
,
2151 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2153 TRACE("(%p/%p)->(%ld)\n", This
, iface
, lEvCode
);
2155 if (lEvCode
== EC_COMPLETE
)
2156 This
->HandleEcComplete
= FALSE
;
2157 else if (lEvCode
== EC_REPAINT
)
2158 This
->HandleEcRepaint
= FALSE
;
2165 static HRESULT WINAPI
Mediaevent_RestoreDefaultHandling(IMediaEventEx
*iface
,
2167 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2169 TRACE("(%p/%p)->(%ld)\n", This
, iface
, lEvCode
);
2171 if (lEvCode
== EC_COMPLETE
)
2172 This
->HandleEcComplete
= TRUE
;
2173 else if (lEvCode
== EC_REPAINT
)
2174 This
->HandleEcRepaint
= TRUE
;
2181 static HRESULT WINAPI
Mediaevent_FreeEventParams(IMediaEventEx
*iface
,
2185 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2187 TRACE("(%p/%p)->(%ld, %08lx, %08lx): stub !!!\n", This
, iface
, lEvCode
, lParam1
, lParam2
);
2192 /*** IMediaEventEx methods ***/
2193 static HRESULT WINAPI
Mediaevent_SetNotifyWindow(IMediaEventEx
*iface
,
2196 LONG_PTR lInstanceData
) {
2197 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2199 TRACE("(%p/%p)->(%08lx, %ld, %08lx)\n", This
, iface
, (DWORD
) hwnd
, lMsg
, lInstanceData
);
2201 This
->notif
.hWnd
= (HWND
)hwnd
;
2202 This
->notif
.msg
= lMsg
;
2203 This
->notif
.instance
= (long) lInstanceData
;
2208 static HRESULT WINAPI
Mediaevent_SetNotifyFlags(IMediaEventEx
*iface
,
2209 long lNoNotifyFlags
) {
2210 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2212 TRACE("(%p/%p)->(%ld)\n", This
, iface
, lNoNotifyFlags
);
2214 if ((lNoNotifyFlags
!= 0) || (lNoNotifyFlags
!= 1))
2215 return E_INVALIDARG
;
2217 This
->notif
.disabled
= lNoNotifyFlags
;
2222 static HRESULT WINAPI
Mediaevent_GetNotifyFlags(IMediaEventEx
*iface
,
2223 long *lplNoNotifyFlags
) {
2224 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2226 TRACE("(%p/%p)->(%p)\n", This
, iface
, lplNoNotifyFlags
);
2228 if (!lplNoNotifyFlags
)
2231 *lplNoNotifyFlags
= This
->notif
.disabled
;
2237 static IMediaEventExVtbl IMediaEventEx_VTable
=
2239 Mediaevent_QueryInterface
,
2242 Mediaevent_GetTypeInfoCount
,
2243 Mediaevent_GetTypeInfo
,
2244 Mediaevent_GetIDsOfNames
,
2246 Mediaevent_GetEventHandle
,
2247 Mediaevent_GetEvent
,
2248 Mediaevent_WaitForCompletion
,
2249 Mediaevent_CancelDefaultHandling
,
2250 Mediaevent_RestoreDefaultHandling
,
2251 Mediaevent_FreeEventParams
,
2252 Mediaevent_SetNotifyWindow
,
2253 Mediaevent_SetNotifyFlags
,
2254 Mediaevent_GetNotifyFlags
2258 static HRESULT WINAPI
MediaFilter_QueryInterface(IMediaFilter
*iface
, REFIID riid
, LPVOID
*ppv
)
2260 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2262 return Filtergraph_QueryInterface(This
, riid
, ppv
);
2265 static ULONG WINAPI
MediaFilter_AddRef(IMediaFilter
*iface
)
2267 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2269 return Filtergraph_AddRef(This
);
2272 static ULONG WINAPI
MediaFilter_Release(IMediaFilter
*iface
)
2274 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2276 return Filtergraph_Release(This
);
2279 static HRESULT WINAPI
MediaFilter_GetClassID(IMediaFilter
*iface
, CLSID
* pClassID
)
2281 FIXME("(%p): stub\n", pClassID
);
2286 static HRESULT WINAPI
MediaFilter_Stop(IMediaFilter
*iface
)
2288 FIXME("(): stub\n");
2293 static HRESULT WINAPI
MediaFilter_Pause(IMediaFilter
*iface
)
2295 FIXME("(): stub\n");
2300 static HRESULT WINAPI
MediaFilter_Run(IMediaFilter
*iface
, REFERENCE_TIME tStart
)
2302 FIXME("(%lld): stub\n", tStart
);
2307 static HRESULT WINAPI
MediaFilter_GetState(IMediaFilter
*iface
, DWORD dwMsTimeout
, FILTER_STATE
* pState
)
2309 FIXME("(%ld, %p): stub\n", dwMsTimeout
, pState
);
2314 static HRESULT WINAPI
MediaFilter_SetSyncSource(IMediaFilter
*iface
, IReferenceClock
*pClock
)
2316 FIXME("(%p): stub\n", pClock
);
2321 static HRESULT WINAPI
MediaFilter_GetSyncSource(IMediaFilter
*iface
, IReferenceClock
**ppClock
)
2323 FIXME("(%p): stub\n", ppClock
);
2328 static IMediaFilterVtbl IMediaFilter_VTable
=
2330 MediaFilter_QueryInterface
,
2332 MediaFilter_Release
,
2333 MediaFilter_GetClassID
,
2337 MediaFilter_GetState
,
2338 MediaFilter_SetSyncSource
,
2339 MediaFilter_GetSyncSource
2342 static HRESULT WINAPI
MediaEventSink_QueryInterface(IMediaEventSink
*iface
, REFIID riid
, LPVOID
*ppv
)
2344 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventSink_vtbl
, iface
);
2346 return Filtergraph_QueryInterface(This
, riid
, ppv
);
2349 static ULONG WINAPI
MediaEventSink_AddRef(IMediaEventSink
*iface
)
2351 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventSink_vtbl
, iface
);
2353 return Filtergraph_AddRef(This
);
2356 static ULONG WINAPI
MediaEventSink_Release(IMediaEventSink
*iface
)
2358 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventSink_vtbl
, iface
);
2360 return Filtergraph_Release(This
);
2363 static HRESULT WINAPI
MediaEventSink_Notify(IMediaEventSink
*iface
, long EventCode
, LONG_PTR EventParam1
, LONG_PTR EventParam2
)
2365 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventSink_vtbl
, iface
);
2368 TRACE("(%p/%p)->(%ld, %ld, %ld)\n", This
, iface
, EventCode
, EventParam1
, EventParam2
);
2370 /* We need thread safety here, let's use the events queue's one */
2371 EnterCriticalSection(&This
->evqueue
.msg_crst
);
2373 if ((EventCode
== EC_COMPLETE
) && This
->HandleEcComplete
)
2375 if (++This
->EcCompleteCount
== This
->nRenderers
)
2377 evt
.lEventCode
= EC_COMPLETE
;
2380 EventsQueue_PutEvent(&This
->evqueue
, &evt
);
2381 if (!This
->notif
.disabled
&& This
->notif
.hWnd
)
2382 PostMessageW(This
->notif
.hWnd
, This
->notif
.msg
, 0, This
->notif
.instance
);
2383 This
->CompletionStatus
= EC_COMPLETE
;
2384 SetEvent(This
->hEventCompletion
);
2387 else if ((EventCode
== EC_REPAINT
) && This
->HandleEcRepaint
)
2389 /* FIXME: Not handled yet */
2393 evt
.lEventCode
= EventCode
;
2394 evt
.lParam1
= EventParam1
;
2395 evt
.lParam2
= EventParam2
;
2396 EventsQueue_PutEvent(&This
->evqueue
, &evt
);
2397 if (!This
->notif
.disabled
&& This
->notif
.hWnd
)
2398 PostMessageW(This
->notif
.hWnd
, This
->notif
.msg
, 0, This
->notif
.instance
);
2401 LeaveCriticalSection(&This
->evqueue
.msg_crst
);
2405 static IMediaEventSinkVtbl IMediaEventSink_VTable
=
2407 MediaEventSink_QueryInterface
,
2408 MediaEventSink_AddRef
,
2409 MediaEventSink_Release
,
2410 MediaEventSink_Notify
2413 /* This is the only function that actually creates a FilterGraph class... */
2414 HRESULT
FILTERGRAPH_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
) {
2415 IFilterGraphImpl
*fimpl
;
2417 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
2419 fimpl
= (IFilterGraphImpl
*) HeapAlloc(GetProcessHeap(), 0, sizeof(*fimpl
));
2420 fimpl
->IGraphBuilder_vtbl
= &IGraphBuilder_VTable
;
2421 fimpl
->IMediaControl_vtbl
= &IMediaControl_VTable
;
2422 fimpl
->IMediaSeeking_vtbl
= &IMediaSeeking_VTable
;
2423 fimpl
->IBasicAudio_vtbl
= &IBasicAudio_VTable
;
2424 fimpl
->IBasicVideo_vtbl
= &IBasicVideo_VTable
;
2425 fimpl
->IVideoWindow_vtbl
= &IVideoWindow_VTable
;
2426 fimpl
->IMediaEventEx_vtbl
= &IMediaEventEx_VTable
;
2427 fimpl
->IMediaFilter_vtbl
= &IMediaFilter_VTable
;
2428 fimpl
->IMediaEventSink_vtbl
= &IMediaEventSink_VTable
;
2430 fimpl
->ppFiltersInGraph
= NULL
;
2431 fimpl
->pFilterNames
= NULL
;
2432 fimpl
->nFilters
= 0;
2433 fimpl
->filterCapacity
= 0;
2434 fimpl
->nameIndex
= 1;
2435 fimpl
->hEventCompletion
= CreateEventW(0, TRUE
, FALSE
,0);
2436 fimpl
->HandleEcComplete
= TRUE
;
2437 fimpl
->HandleEcRepaint
= TRUE
;
2438 fimpl
->notif
.hWnd
= 0;
2439 fimpl
->notif
.disabled
= TRUE
;
2440 fimpl
->nRenderers
= 0;
2441 fimpl
->EcCompleteCount
= 0;
2442 EventsQueue_Init(&fimpl
->evqueue
);