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
30 #include "wine/debug.h"
34 #include "wine/unicode.h"
36 #include "quartz_private.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(quartz
);
41 HWND hWnd
; /* Target window */
42 long msg
; /* User window message */
43 long instance
; /* User data */
44 int disabled
; /* Disabled messages posting */
48 long lEventCode
; /* Event code */
49 LONG_PTR lParam1
; /* Param1 */
50 LONG_PTR lParam2
; /* Param2 */
53 /* messages ring implementation for queuing events (taken from winmm) */
54 #define EVENTS_RING_BUFFER_INCREMENT 64
60 CRITICAL_SECTION msg_crst
;
61 HANDLE msg_event
; /* Signaled for no empty queue */
64 static int EventsQueue_Init(EventsQueue
* omr
)
68 omr
->msg_event
= CreateEventW(NULL
, TRUE
, FALSE
, NULL
);
69 omr
->ring_buffer_size
= EVENTS_RING_BUFFER_INCREMENT
;
70 omr
->messages
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
,omr
->ring_buffer_size
* sizeof(Event
));
72 InitializeCriticalSection(&omr
->msg_crst
);
76 static int EventsQueue_Destroy(EventsQueue
* omr
)
78 CloseHandle(omr
->msg_event
);
79 HeapFree(GetProcessHeap(),0,omr
->messages
);
80 DeleteCriticalSection(&omr
->msg_crst
);
84 static int EventsQueue_PutEvent(EventsQueue
* omr
, Event
* evt
)
86 EnterCriticalSection(&omr
->msg_crst
);
87 if ((omr
->msg_toget
== ((omr
->msg_tosave
+ 1) % omr
->ring_buffer_size
)))
89 int old_ring_buffer_size
= omr
->ring_buffer_size
;
90 omr
->ring_buffer_size
+= EVENTS_RING_BUFFER_INCREMENT
;
91 TRACE("omr->ring_buffer_size=%d\n",omr
->ring_buffer_size
);
92 omr
->messages
= HeapReAlloc(GetProcessHeap(),0,omr
->messages
, omr
->ring_buffer_size
* sizeof(Event
));
93 /* Now we need to rearrange the ring buffer so that the new
94 buffers just allocated are in between omr->msg_tosave and
97 if (omr
->msg_tosave
< omr
->msg_toget
)
99 memmove(&(omr
->messages
[omr
->msg_toget
+ EVENTS_RING_BUFFER_INCREMENT
]),
100 &(omr
->messages
[omr
->msg_toget
]),
101 sizeof(Event
)*(old_ring_buffer_size
- omr
->msg_toget
)
103 omr
->msg_toget
+= EVENTS_RING_BUFFER_INCREMENT
;
106 omr
->messages
[omr
->msg_tosave
] = *evt
;
107 SetEvent(omr
->msg_event
);
108 omr
->msg_tosave
= (omr
->msg_tosave
+ 1) % omr
->ring_buffer_size
;
109 LeaveCriticalSection(&omr
->msg_crst
);
113 static int EventsQueue_GetEvent(EventsQueue
* omr
, Event
* evt
, long msTimeOut
)
115 if (WaitForSingleObject(omr
->msg_event
, msTimeOut
) != WAIT_OBJECT_0
)
118 EnterCriticalSection(&omr
->msg_crst
);
120 if (omr
->msg_toget
== omr
->msg_tosave
) /* buffer empty ? */
122 LeaveCriticalSection(&omr
->msg_crst
);
126 *evt
= omr
->messages
[omr
->msg_toget
];
127 omr
->msg_toget
= (omr
->msg_toget
+ 1) % omr
->ring_buffer_size
;
129 /* Mark the buffer as empty if needed */
130 if (omr
->msg_toget
== omr
->msg_tosave
) /* buffer empty ? */
131 ResetEvent(omr
->msg_event
);
133 LeaveCriticalSection(&omr
->msg_crst
);
137 typedef struct _IFilterGraphImpl
{
138 IGraphBuilderVtbl
*IGraphBuilder_vtbl
;
139 IMediaControlVtbl
*IMediaControl_vtbl
;
140 IMediaSeekingVtbl
*IMediaSeeking_vtbl
;
141 IBasicAudioVtbl
*IBasicAudio_vtbl
;
142 IBasicVideoVtbl
*IBasicVideo_vtbl
;
143 IVideoWindowVtbl
*IVideoWindow_vtbl
;
144 IMediaEventExVtbl
*IMediaEventEx_vtbl
;
145 IMediaFilterVtbl
*IMediaFilter_vtbl
;
146 IMediaEventSinkVtbl
*IMediaEventSink_vtbl
;
147 /* IAMGraphStreams */
157 /* IRegisterServiceProvider */
158 /* IResourceMananger */
159 /* IServiceProvider */
160 /* IVideoFrameStep */
163 IBaseFilter
** ppFiltersInGraph
;
164 LPWSTR
* pFilterNames
;
169 HANDLE hEventCompletion
;
170 int CompletionStatus
;
174 int HandleEcComplete
;
179 static HRESULT
Filtergraph_QueryInterface(IFilterGraphImpl
*This
,
182 TRACE("(%p)->(%s (%p), %p)\n", This
, debugstr_guid(riid
), riid
, ppvObj
);
184 if (IsEqualGUID(&IID_IUnknown
, riid
) ||
185 IsEqualGUID(&IID_IFilterGraph
, riid
) ||
186 IsEqualGUID(&IID_IGraphBuilder
, riid
)) {
187 *ppvObj
= &(This
->IGraphBuilder_vtbl
);
188 TRACE(" returning IGraphBuilder interface (%p)\n", *ppvObj
);
189 } else if (IsEqualGUID(&IID_IMediaControl
, riid
)) {
190 *ppvObj
= &(This
->IMediaControl_vtbl
);
191 TRACE(" returning IMediaControl interface (%p)\n", *ppvObj
);
192 } else if (IsEqualGUID(&IID_IMediaSeeking
, riid
)) {
193 *ppvObj
= &(This
->IMediaSeeking_vtbl
);
194 TRACE(" returning IMediaSeeking interface (%p)\n", *ppvObj
);
195 } else if (IsEqualGUID(&IID_IBasicAudio
, riid
)) {
196 *ppvObj
= &(This
->IBasicAudio_vtbl
);
197 TRACE(" returning IBasicAudio interface (%p)\n", *ppvObj
);
198 } else if (IsEqualGUID(&IID_IBasicVideo
, riid
)) {
199 *ppvObj
= &(This
->IBasicVideo_vtbl
);
200 TRACE(" returning IBasicVideo interface (%p)\n", *ppvObj
);
201 } else if (IsEqualGUID(&IID_IVideoWindow
, riid
)) {
202 *ppvObj
= &(This
->IVideoWindow_vtbl
);
203 TRACE(" returning IVideoWindow interface (%p)\n", *ppvObj
);
204 } else if (IsEqualGUID(&IID_IMediaEvent
, riid
) ||
205 IsEqualGUID(&IID_IMediaEventEx
, riid
)) {
206 *ppvObj
= &(This
->IMediaEventEx_vtbl
);
207 TRACE(" returning IMediaEvent(Ex) interface (%p)\n", *ppvObj
);
208 } else if (IsEqualGUID(&IID_IMediaFilter
, riid
) ||
209 IsEqualGUID(&IID_IPersist
, riid
)) {
210 *ppvObj
= &(This
->IMediaFilter_vtbl
);
211 TRACE(" returning IMediaFilter interface (%p)\n", *ppvObj
);
212 } else if (IsEqualGUID(&IID_IMediaEventSink
, riid
)) {
213 *ppvObj
= &(This
->IMediaEventSink_vtbl
);
214 TRACE(" returning IMediaEventSink interface (%p)\n", *ppvObj
);
217 FIXME("unknown interface %s\n", debugstr_guid(riid
));
218 return E_NOINTERFACE
;
225 static ULONG
Filtergraph_AddRef(IFilterGraphImpl
*This
) {
226 TRACE("(%p)->(): new ref = %ld\n", This
, This
->ref
+ 1);
231 static ULONG
Filtergraph_Release(IFilterGraphImpl
*This
) {
234 TRACE("(%p)->(): new ref = %ld\n", This
, This
->ref
- 1);
238 CloseHandle(This
->hEventCompletion
);
239 EventsQueue_Destroy(&This
->evqueue
);
240 HeapFree(GetProcessHeap(), 0, This
->ppFiltersInGraph
);
241 HeapFree(GetProcessHeap(), 0, This
->pFilterNames
);
242 HeapFree(GetProcessHeap(), 0, This
);
248 /*** IUnknown methods ***/
249 static HRESULT WINAPI
Graphbuilder_QueryInterface(IGraphBuilder
*iface
,
252 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
254 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
255 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
258 static ULONG WINAPI
Graphbuilder_AddRef(IGraphBuilder
*iface
) {
259 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
261 TRACE("(%p/%p)->() calling FilterGraph AddRef\n", This
, iface
);
263 return Filtergraph_AddRef(This
);
266 static ULONG WINAPI
Graphbuilder_Release(IGraphBuilder
*iface
) {
267 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
269 TRACE("(%p/%p)->() calling FilterGraph Release\n", This
, iface
);
271 return Filtergraph_Release(This
);
274 /*** IFilterGraph methods ***/
275 static HRESULT WINAPI
Graphbuilder_AddFilter(IGraphBuilder
*iface
,
276 IBaseFilter
*pFilter
,
278 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
281 WCHAR
* wszFilterName
= NULL
;
282 int duplicate_name
= FALSE
;
284 TRACE("(%p/%p)->(%p, %s (%p))\n", This
, iface
, pFilter
, debugstr_w(pName
), pName
);
286 wszFilterName
= (WCHAR
*) CoTaskMemAlloc( (pName
? strlenW(pName
) + 6 : 5) * sizeof(WCHAR
) );
290 /* Check if name already exists */
291 for(i
= 0; i
< This
->nFilters
; i
++)
292 if (!strcmpW(This
->pFilterNames
[i
], pName
))
294 duplicate_name
= TRUE
;
299 /* If no name given or name already existing, generate one */
300 if (!pName
|| duplicate_name
)
302 static const WCHAR wszFmt1
[] = {'%','s',' ','%','0','4','d',0};
303 static const WCHAR wszFmt2
[] = {'%','0','4','d',0};
305 for (j
= 0; j
< 10000 ; j
++)
309 sprintfW(wszFilterName
, wszFmt1
, pName
, This
->nameIndex
);
311 sprintfW(wszFilterName
, wszFmt2
, This
->nameIndex
);
312 TRACE("Generated name %s\n", debugstr_w(wszFilterName
));
314 /* Check if the generated name already exists */
315 for(i
= 0; i
< This
->nFilters
; i
++)
316 if (!strcmpW(This
->pFilterNames
[i
], pName
))
319 /* Compute next index and exit if generated name is suitable */
320 if (This
->nameIndex
++ == 10000)
322 if (i
== This
->nFilters
)
325 /* Unable to find a suitable name */
328 CoTaskMemFree(wszFilterName
);
329 return VFW_E_DUPLICATE_NAME
;
333 memcpy(wszFilterName
, pName
, (strlenW(pName
) + 1) * sizeof(WCHAR
));
336 if (This
->nFilters
+ 1 > This
->filterCapacity
)
338 int newCapacity
= 2*This
->filterCapacity
;
339 IBaseFilter
** ppNewFilters
= CoTaskMemAlloc(newCapacity
* sizeof(IBaseFilter
*));
340 LPWSTR
* pNewNames
= CoTaskMemAlloc(newCapacity
* sizeof(LPWSTR
));
341 memcpy(ppNewFilters
, This
->ppFiltersInGraph
, This
->nFilters
* sizeof(IBaseFilter
*));
342 memcpy(pNewNames
, This
->pFilterNames
, This
->nFilters
* sizeof(LPWSTR
));
343 CoTaskMemFree(This
->ppFiltersInGraph
);
344 CoTaskMemFree(This
->pFilterNames
);
345 This
->ppFiltersInGraph
= ppNewFilters
;
346 This
->pFilterNames
= pNewNames
;
347 This
->filterCapacity
= newCapacity
;
350 hr
= IBaseFilter_JoinFilterGraph(pFilter
, (IFilterGraph
*)This
, wszFilterName
);
354 IBaseFilter_AddRef(pFilter
);
355 This
->ppFiltersInGraph
[This
->nFilters
] = pFilter
;
356 This
->pFilterNames
[This
->nFilters
] = wszFilterName
;
360 CoTaskMemFree(wszFilterName
);
362 if (SUCCEEDED(hr
) && duplicate_name
)
363 return VFW_S_DUPLICATE_NAME
;
368 static HRESULT WINAPI
Graphbuilder_RemoveFilter(IGraphBuilder
*iface
,
369 IBaseFilter
*pFilter
) {
370 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
374 TRACE("(%p/%p)->(%p)\n", This
, iface
, pFilter
);
376 /* FIXME: check graph is stopped */
378 for (i
= 0; i
< This
->nFilters
; i
++)
380 if (This
->ppFiltersInGraph
[i
] == pFilter
)
382 /* FIXME: disconnect pins */
383 hr
= IBaseFilter_JoinFilterGraph(pFilter
, NULL
, This
->pFilterNames
[i
]);
386 IPin_Release(pFilter
);
387 CoTaskMemFree(This
->pFilterNames
[i
]);
388 memmove(This
->ppFiltersInGraph
+i
, This
->ppFiltersInGraph
+i
+1, sizeof(IBaseFilter
*)*(This
->nFilters
- 1 - i
));
389 memmove(This
->pFilterNames
+i
, This
->pFilterNames
+i
+1, sizeof(LPWSTR
)*(This
->nFilters
- 1 - i
));
397 return hr
; /* FIXME: check this error code */
400 static HRESULT WINAPI
Graphbuilder_EnumFilters(IGraphBuilder
*iface
,
401 IEnumFilters
**ppEnum
) {
402 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
404 TRACE("(%p/%p)->(%p)\n", This
, iface
, ppEnum
);
406 return IEnumFiltersImpl_Construct(This
->ppFiltersInGraph
, This
->nFilters
, ppEnum
);
409 static HRESULT WINAPI
Graphbuilder_FindFilterByName(IGraphBuilder
*iface
,
411 IBaseFilter
**ppFilter
) {
412 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
415 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_w(pName
), pName
, ppFilter
);
419 for (i
= 0; i
< This
->nFilters
; i
++)
421 if (!strcmpW(pName
, This
->pFilterNames
[i
]))
423 *ppFilter
= This
->ppFiltersInGraph
[i
];
424 IBaseFilter_AddRef(*ppFilter
);
429 return E_FAIL
; /* FIXME: check this error code */
432 /* NOTE: despite the implication, it doesn't matter which
433 * way round you put in the input and output pins */
434 static HRESULT WINAPI
Graphbuilder_ConnectDirect(IGraphBuilder
*iface
,
437 const AM_MEDIA_TYPE
*pmt
) {
441 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
443 TRACE("(%p/%p)->(%p, %p, %p)\n", This
, iface
, ppinIn
, ppinOut
, pmt
);
445 /* FIXME: check pins are in graph */
447 hr
= IPin_QueryDirection(ppinIn
, &dir
);
450 if (dir
== PINDIR_INPUT
)
451 hr
= IPin_Connect(ppinOut
, ppinIn
, pmt
);
453 hr
= IPin_Connect(ppinIn
, ppinOut
, pmt
);
459 static HRESULT WINAPI
Graphbuilder_Reconnect(IGraphBuilder
*iface
,
461 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
463 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, ppin
);
468 static HRESULT WINAPI
Graphbuilder_Disconnect(IGraphBuilder
*iface
,
470 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
472 TRACE("(%p/%p)->(%p)\n", This
, iface
, ppin
);
474 return IPin_Disconnect(ppin
);
477 static HRESULT WINAPI
Graphbuilder_SetDefaultSyncSource(IGraphBuilder
*iface
) {
478 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
480 TRACE("(%p/%p)->(): stub !!!\n", iface
, This
);
485 /*** IGraphBuilder methods ***/
486 static HRESULT WINAPI
Graphbuilder_Connect(IGraphBuilder
*iface
,
489 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
491 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, ppinOut
, ppinIn
);
496 static HRESULT WINAPI
Graphbuilder_Render(IGraphBuilder
*iface
,
498 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
500 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, ppinOut
);
505 static HRESULT WINAPI
Graphbuilder_RenderFile(IGraphBuilder
*iface
,
507 LPCWSTR lpcwstrPlayList
) {
508 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
510 TRACE("(%p/%p)->(%s (%p), %s (%p)): stub !!!\n", This
, iface
, debugstr_w(lpcwstrFile
), lpcwstrFile
, debugstr_w(lpcwstrPlayList
), lpcwstrPlayList
);
515 static HRESULT WINAPI
Graphbuilder_AddSourceFilter(IGraphBuilder
*iface
,
516 LPCWSTR lpcwstrFileName
,
517 LPCWSTR lpcwstrFilterName
,
518 IBaseFilter
**ppFilter
) {
519 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
521 TRACE("(%p/%p)->(%s (%p), %s (%p), %p): stub !!!\n", This
, iface
, debugstr_w(lpcwstrFileName
), lpcwstrFileName
, debugstr_w(lpcwstrFilterName
), lpcwstrFilterName
, ppFilter
);
526 static HRESULT WINAPI
Graphbuilder_SetLogFile(IGraphBuilder
*iface
,
528 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
530 TRACE("(%p/%p)->(%08lx): stub !!!\n", This
, iface
, (DWORD
) hFile
);
535 static HRESULT WINAPI
Graphbuilder_Abort(IGraphBuilder
*iface
) {
536 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
538 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
543 static HRESULT WINAPI
Graphbuilder_ShouldOperationContinue(IGraphBuilder
*iface
) {
544 ICOM_THIS_MULTI(IFilterGraphImpl
, IGraphBuilder_vtbl
, iface
);
546 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
552 static IGraphBuilderVtbl IGraphBuilder_VTable
=
554 Graphbuilder_QueryInterface
,
556 Graphbuilder_Release
,
557 Graphbuilder_AddFilter
,
558 Graphbuilder_RemoveFilter
,
559 Graphbuilder_EnumFilters
,
560 Graphbuilder_FindFilterByName
,
561 Graphbuilder_ConnectDirect
,
562 Graphbuilder_Reconnect
,
563 Graphbuilder_Disconnect
,
564 Graphbuilder_SetDefaultSyncSource
,
565 Graphbuilder_Connect
,
567 Graphbuilder_RenderFile
,
568 Graphbuilder_AddSourceFilter
,
569 Graphbuilder_SetLogFile
,
571 Graphbuilder_ShouldOperationContinue
574 /*** IUnknown methods ***/
575 static HRESULT WINAPI
Mediacontrol_QueryInterface(IMediaControl
*iface
,
578 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
580 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
582 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
585 static ULONG WINAPI
Mediacontrol_AddRef(IMediaControl
*iface
) {
586 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
588 TRACE("(%p/%p)->()\n", This
, iface
);
590 return Filtergraph_AddRef(This
);
593 static ULONG WINAPI
Mediacontrol_Release(IMediaControl
*iface
) {
594 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
596 TRACE("(%p/%p)->()\n", This
, iface
);
598 return Filtergraph_Release(This
);
602 /*** IDispatch methods ***/
603 static HRESULT WINAPI
Mediacontrol_GetTypeInfoCount(IMediaControl
*iface
,
605 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
607 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
612 static HRESULT WINAPI
Mediacontrol_GetTypeInfo(IMediaControl
*iface
,
615 ITypeInfo
**ppTInfo
) {
616 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
618 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
623 static HRESULT WINAPI
Mediacontrol_GetIDsOfNames(IMediaControl
*iface
,
629 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
631 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
636 static HRESULT WINAPI
Mediacontrol_Invoke(IMediaControl
*iface
,
641 DISPPARAMS
*pDispParams
,
645 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
647 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
);
652 /*** IMediaControl methods ***/
653 static HRESULT WINAPI
Mediacontrol_Run(IMediaControl
*iface
) {
654 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
656 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
658 ResetEvent(This
->hEventCompletion
);
663 static HRESULT WINAPI
Mediacontrol_Pause(IMediaControl
*iface
) {
664 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
666 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
671 static HRESULT WINAPI
Mediacontrol_Stop(IMediaControl
*iface
) {
672 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
674 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
679 static HRESULT WINAPI
Mediacontrol_GetState(IMediaControl
*iface
,
681 OAFilterState
*pfs
) {
682 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
684 TRACE("(%p/%p)->(%ld, %p): stub !!!\n", This
, iface
, msTimeout
, pfs
);
689 static HRESULT WINAPI
Mediacontrol_RenderFile(IMediaControl
*iface
,
691 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
693 TRACE("(%p/%p)->(%s (%p)): stub !!!\n", This
, iface
, debugstr_w(strFilename
), strFilename
);
698 static HRESULT WINAPI
Mediacontrol_AddSourceFilter(IMediaControl
*iface
,
701 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
703 TRACE("(%p/%p)->(%s (%p), %p): stub !!!\n", This
, iface
, debugstr_w(strFilename
), strFilename
, ppUnk
);
708 static HRESULT WINAPI
Mediacontrol_get_FilterCollection(IMediaControl
*iface
,
710 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
712 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, ppUnk
);
717 static HRESULT WINAPI
Mediacontrol_get_RegFilterCollection(IMediaControl
*iface
,
719 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
721 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, ppUnk
);
726 static HRESULT WINAPI
Mediacontrol_StopWhenReady(IMediaControl
*iface
) {
727 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaControl_vtbl
, iface
);
729 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
735 static IMediaControlVtbl IMediaControl_VTable
=
737 Mediacontrol_QueryInterface
,
739 Mediacontrol_Release
,
740 Mediacontrol_GetTypeInfoCount
,
741 Mediacontrol_GetTypeInfo
,
742 Mediacontrol_GetIDsOfNames
,
747 Mediacontrol_GetState
,
748 Mediacontrol_RenderFile
,
749 Mediacontrol_AddSourceFilter
,
750 Mediacontrol_get_FilterCollection
,
751 Mediacontrol_get_RegFilterCollection
,
752 Mediacontrol_StopWhenReady
756 /*** IUnknown methods ***/
757 static HRESULT WINAPI
Mediaseeking_QueryInterface(IMediaSeeking
*iface
,
760 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
762 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
764 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
767 static ULONG WINAPI
Mediaseeking_AddRef(IMediaSeeking
*iface
) {
768 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
770 TRACE("(%p/%p)->()\n", This
, iface
);
772 return Filtergraph_AddRef(This
);
775 static ULONG WINAPI
Mediaseeking_Release(IMediaSeeking
*iface
) {
776 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
778 TRACE("(%p/%p)->()\n", This
, iface
);
780 return Filtergraph_Release(This
);
783 /*** IMediaSeeking methods ***/
784 static HRESULT WINAPI
Mediaseeking_GetCapabilities(IMediaSeeking
*iface
,
785 DWORD
*pCapabilities
) {
786 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
788 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pCapabilities
);
793 static HRESULT WINAPI
Mediaseeking_CheckCapabilities(IMediaSeeking
*iface
,
794 DWORD
*pCapabilities
) {
795 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
797 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pCapabilities
);
802 static HRESULT WINAPI
Mediaseeking_IsFormatSupported(IMediaSeeking
*iface
,
803 const GUID
*pFormat
) {
804 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
806 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
811 static HRESULT WINAPI
Mediaseeking_QueryPreferredFormat(IMediaSeeking
*iface
,
813 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
815 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
820 static HRESULT WINAPI
Mediaseeking_GetTimeFormat(IMediaSeeking
*iface
,
822 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
824 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
829 static HRESULT WINAPI
Mediaseeking_IsUsingTimeFormat(IMediaSeeking
*iface
,
830 const GUID
*pFormat
) {
831 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
833 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
838 static HRESULT WINAPI
Mediaseeking_SetTimeFormat(IMediaSeeking
*iface
,
839 const GUID
*pFormat
) {
840 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
842 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pFormat
);
847 static HRESULT WINAPI
Mediaseeking_GetDuration(IMediaSeeking
*iface
,
848 LONGLONG
*pDuration
) {
849 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
851 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDuration
);
856 static HRESULT WINAPI
Mediaseeking_GetStopPosition(IMediaSeeking
*iface
,
858 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
860 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pStop
);
865 static HRESULT WINAPI
Mediaseeking_GetCurrentPosition(IMediaSeeking
*iface
,
866 LONGLONG
*pCurrent
) {
867 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
869 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pCurrent
);
874 static HRESULT WINAPI
Mediaseeking_ConvertTimeFormat(IMediaSeeking
*iface
,
876 const GUID
*pTargetFormat
,
878 const GUID
*pSourceFormat
) {
879 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
881 TRACE("(%p/%p)->(%p, %p, %lld, %p): stub !!!\n", This
, iface
, pTarget
, pTargetFormat
, Source
, pSourceFormat
);
886 static HRESULT WINAPI
Mediaseeking_SetPositions(IMediaSeeking
*iface
,
888 DWORD dwCurrentFlags
,
891 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
893 TRACE("(%p/%p)->(%p, %08lx, %p, %08lx): stub !!!\n", This
, iface
, pCurrent
, dwCurrentFlags
, pStop
, dwStopFlags
);
898 static HRESULT WINAPI
Mediaseeking_GetPositions(IMediaSeeking
*iface
,
901 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
903 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pCurrent
, pStop
);
908 static HRESULT WINAPI
Mediaseeking_GetAvailable(IMediaSeeking
*iface
,
911 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
913 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pEarliest
, pLatest
);
918 static HRESULT WINAPI
Mediaseeking_SetRate(IMediaSeeking
*iface
,
920 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
922 TRACE("(%p/%p)->(%f): stub !!!\n", This
, iface
, dRate
);
927 static HRESULT WINAPI
Mediaseeking_GetRate(IMediaSeeking
*iface
,
929 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
931 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pdRate
);
936 static HRESULT WINAPI
Mediaseeking_GetPreroll(IMediaSeeking
*iface
,
937 LONGLONG
*pllPreroll
) {
938 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaSeeking_vtbl
, iface
);
940 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pllPreroll
);
946 static IMediaSeekingVtbl IMediaSeeking_VTable
=
948 Mediaseeking_QueryInterface
,
950 Mediaseeking_Release
,
951 Mediaseeking_GetCapabilities
,
952 Mediaseeking_CheckCapabilities
,
953 Mediaseeking_IsFormatSupported
,
954 Mediaseeking_QueryPreferredFormat
,
955 Mediaseeking_GetTimeFormat
,
956 Mediaseeking_IsUsingTimeFormat
,
957 Mediaseeking_SetTimeFormat
,
958 Mediaseeking_GetDuration
,
959 Mediaseeking_GetStopPosition
,
960 Mediaseeking_GetCurrentPosition
,
961 Mediaseeking_ConvertTimeFormat
,
962 Mediaseeking_SetPositions
,
963 Mediaseeking_GetPositions
,
964 Mediaseeking_GetAvailable
,
965 Mediaseeking_SetRate
,
966 Mediaseeking_GetRate
,
967 Mediaseeking_GetPreroll
970 /*** IUnknown methods ***/
971 static HRESULT WINAPI
Basicaudio_QueryInterface(IBasicAudio
*iface
,
974 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
976 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
978 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
981 static ULONG WINAPI
Basicaudio_AddRef(IBasicAudio
*iface
) {
982 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
984 TRACE("(%p/%p)->()\n", This
, iface
);
986 return Filtergraph_AddRef(This
);
989 static ULONG WINAPI
Basicaudio_Release(IBasicAudio
*iface
) {
990 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
992 TRACE("(%p/%p)->()\n", This
, iface
);
994 return Filtergraph_Release(This
);
997 /*** IDispatch methods ***/
998 static HRESULT WINAPI
Basicaudio_GetTypeInfoCount(IBasicAudio
*iface
,
1000 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1002 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
1007 static HRESULT WINAPI
Basicaudio_GetTypeInfo(IBasicAudio
*iface
,
1010 ITypeInfo
**ppTInfo
) {
1011 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1013 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
1018 static HRESULT WINAPI
Basicaudio_GetIDsOfNames(IBasicAudio
*iface
,
1024 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1026 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
1031 static HRESULT WINAPI
Basicaudio_Invoke(IBasicAudio
*iface
,
1032 DISPID dispIdMember
,
1036 DISPPARAMS
*pDispParams
,
1038 EXCEPINFO
*pExepInfo
,
1040 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1042 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
);
1047 /*** IBasicAudio methods ***/
1048 static HRESULT WINAPI
Basicaudio_put_Volume(IBasicAudio
*iface
,
1050 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1052 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, lVolume
);
1057 static HRESULT WINAPI
Basicaudio_get_Volume(IBasicAudio
*iface
,
1059 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1061 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, plVolume
);
1066 static HRESULT WINAPI
Basicaudio_put_Balance(IBasicAudio
*iface
,
1068 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1070 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, lBalance
);
1075 static HRESULT WINAPI
Basicaudio_get_Balance(IBasicAudio
*iface
,
1077 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicAudio_vtbl
, iface
);
1079 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, plBalance
);
1084 static IBasicAudioVtbl IBasicAudio_VTable
=
1086 Basicaudio_QueryInterface
,
1089 Basicaudio_GetTypeInfoCount
,
1090 Basicaudio_GetTypeInfo
,
1091 Basicaudio_GetIDsOfNames
,
1093 Basicaudio_put_Volume
,
1094 Basicaudio_get_Volume
,
1095 Basicaudio_put_Balance
,
1096 Basicaudio_get_Balance
1099 /*** IUnknown methods ***/
1100 static HRESULT WINAPI
Basicvideo_QueryInterface(IBasicVideo
*iface
,
1103 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1105 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
1107 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
1110 static ULONG WINAPI
Basicvideo_AddRef(IBasicVideo
*iface
) {
1111 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1113 TRACE("(%p/%p)->()\n", This
, iface
);
1115 return Filtergraph_AddRef(This
);
1118 static ULONG WINAPI
Basicvideo_Release(IBasicVideo
*iface
) {
1119 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1121 TRACE("(%p/%p)->()\n", This
, iface
);
1123 return Filtergraph_Release(This
);
1126 /*** IDispatch methods ***/
1127 static HRESULT WINAPI
Basicvideo_GetTypeInfoCount(IBasicVideo
*iface
,
1129 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1131 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
1136 static HRESULT WINAPI
Basicvideo_GetTypeInfo(IBasicVideo
*iface
,
1139 ITypeInfo
**ppTInfo
) {
1140 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1142 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
1147 static HRESULT WINAPI
Basicvideo_GetIDsOfNames(IBasicVideo
*iface
,
1153 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1155 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
1160 static HRESULT WINAPI
Basicvideo_Invoke(IBasicVideo
*iface
,
1161 DISPID dispIdMember
,
1165 DISPPARAMS
*pDispParams
,
1167 EXCEPINFO
*pExepInfo
,
1169 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1171 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
);
1176 /*** IBasicVideo methods ***/
1177 static HRESULT WINAPI
Basicvideo_get_AvgTimePerFrame(IBasicVideo
*iface
,
1178 REFTIME
*pAvgTimePerFrame
) {
1179 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1181 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pAvgTimePerFrame
);
1186 static HRESULT WINAPI
Basicvideo_get_BitRate(IBasicVideo
*iface
,
1188 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1190 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pBitRate
);
1195 static HRESULT WINAPI
Basicvideo_get_BitErrorRate(IBasicVideo
*iface
,
1196 long *pBitErrorRate
) {
1197 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1199 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pBitErrorRate
);
1204 static HRESULT WINAPI
Basicvideo_get_VideoWidth(IBasicVideo
*iface
,
1205 long *pVideoWidth
) {
1206 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1208 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pVideoWidth
);
1213 static HRESULT WINAPI
Basicvideo_get_VideoHeight(IBasicVideo
*iface
,
1214 long *pVideoHeight
) {
1215 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1217 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pVideoHeight
);
1222 static HRESULT WINAPI
Basicvideo_put_SourceLeft(IBasicVideo
*iface
,
1224 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1226 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, SourceLeft
);
1231 static HRESULT WINAPI
Basicvideo_get_SourceLeft(IBasicVideo
*iface
,
1232 long *pSourceLeft
) {
1233 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1235 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pSourceLeft
);
1240 static HRESULT WINAPI
Basicvideo_put_SourceWidth(IBasicVideo
*iface
,
1242 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1244 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, SourceWidth
);
1249 static HRESULT WINAPI
Basicvideo_get_SourceWidth(IBasicVideo
*iface
,
1250 long *pSourceWidth
) {
1251 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1253 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pSourceWidth
);
1258 static HRESULT WINAPI
Basicvideo_put_SourceTop(IBasicVideo
*iface
,
1260 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1262 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, SourceTop
);
1267 static HRESULT WINAPI
Basicvideo_get_SourceTop(IBasicVideo
*iface
,
1269 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1271 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pSourceTop
);
1276 static HRESULT WINAPI
Basicvideo_put_SourceHeight(IBasicVideo
*iface
,
1277 long SourceHeight
) {
1278 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1280 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, SourceHeight
);
1285 static HRESULT WINAPI
Basicvideo_get_SourceHeight(IBasicVideo
*iface
,
1286 long *pSourceHeight
) {
1287 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1289 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pSourceHeight
);
1294 static HRESULT WINAPI
Basicvideo_put_DestinationLeft(IBasicVideo
*iface
,
1295 long DestinationLeft
) {
1296 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1298 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, DestinationLeft
);
1303 static HRESULT WINAPI
Basicvideo_get_DestinationLeft(IBasicVideo
*iface
,
1304 long *pDestinationLeft
) {
1305 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1307 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDestinationLeft
);
1312 static HRESULT WINAPI
Basicvideo_put_DestinationWidth(IBasicVideo
*iface
,
1313 long DestinationWidth
) {
1314 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1316 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, DestinationWidth
);
1321 static HRESULT WINAPI
Basicvideo_get_DestinationWidth(IBasicVideo
*iface
,
1322 long *pDestinationWidth
) {
1323 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1325 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDestinationWidth
);
1330 static HRESULT WINAPI
Basicvideo_put_DestinationTop(IBasicVideo
*iface
,
1331 long DestinationTop
) {
1332 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1334 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, DestinationTop
);
1339 static HRESULT WINAPI
Basicvideo_get_DestinationTop(IBasicVideo
*iface
,
1340 long *pDestinationTop
) {
1341 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1343 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDestinationTop
);
1348 static HRESULT WINAPI
Basicvideo_put_DestinationHeight(IBasicVideo
*iface
,
1349 long DestinationHeight
) {
1350 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1352 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, DestinationHeight
);
1357 static HRESULT WINAPI
Basicvideo_get_DestinationHeight(IBasicVideo
*iface
,
1358 long *pDestinationHeight
) {
1359 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1361 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pDestinationHeight
);
1366 static HRESULT WINAPI
Basicvideo_SetSourcePosition(IBasicVideo
*iface
,
1371 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1373 TRACE("(%p/%p)->(%ld, %ld, %ld, %ld): stub !!!\n", This
, iface
, Left
, Top
, Width
, Height
);
1378 static HRESULT WINAPI
Basicvideo_GetSourcePosition(IBasicVideo
*iface
,
1383 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1385 TRACE("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This
, iface
, pLeft
, pTop
, pWidth
, pHeight
);
1390 static HRESULT WINAPI
Basicvideo_SetDefaultSourcePosition(IBasicVideo
*iface
) {
1391 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1393 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
1398 static HRESULT WINAPI
Basicvideo_SetDestinationPosition(IBasicVideo
*iface
,
1403 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1405 TRACE("(%p/%p)->(%ld, %ld, %ld, %ld): stub !!!\n", This
, iface
, Left
, Top
, Width
, Height
);
1410 static HRESULT WINAPI
Basicvideo_GetDestinationPosition(IBasicVideo
*iface
,
1415 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1417 TRACE("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This
, iface
, pLeft
, pTop
, pWidth
, pHeight
);
1422 static HRESULT WINAPI
Basicvideo_SetDefaultDestinationPosition(IBasicVideo
*iface
) {
1423 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1425 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
1430 static HRESULT WINAPI
Basicvideo_GetVideoSize(IBasicVideo
*iface
,
1433 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1435 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pWidth
, pHeight
);
1440 static HRESULT WINAPI
Basicvideo_GetVideoPaletteEntries(IBasicVideo
*iface
,
1445 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1447 TRACE("(%p/%p)->(%ld, %ld, %p, %p): stub !!!\n", This
, iface
, StartIndex
, Entries
, pRetrieved
, pPalette
);
1452 static HRESULT WINAPI
Basicvideo_GetCurrentImage(IBasicVideo
*iface
,
1455 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1457 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pBufferSize
, pDIBImage
);
1462 static HRESULT WINAPI
Basicvideo_IsUsingDefaultSource(IBasicVideo
*iface
) {
1463 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1465 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
1470 static HRESULT WINAPI
Basicvideo_IsUsingDefaultDestination(IBasicVideo
*iface
) {
1471 ICOM_THIS_MULTI(IFilterGraphImpl
, IBasicVideo_vtbl
, iface
);
1473 TRACE("(%p/%p)->(): stub !!!\n", This
, iface
);
1479 static IBasicVideoVtbl IBasicVideo_VTable
=
1481 Basicvideo_QueryInterface
,
1484 Basicvideo_GetTypeInfoCount
,
1485 Basicvideo_GetTypeInfo
,
1486 Basicvideo_GetIDsOfNames
,
1488 Basicvideo_get_AvgTimePerFrame
,
1489 Basicvideo_get_BitRate
,
1490 Basicvideo_get_BitErrorRate
,
1491 Basicvideo_get_VideoWidth
,
1492 Basicvideo_get_VideoHeight
,
1493 Basicvideo_put_SourceLeft
,
1494 Basicvideo_get_SourceLeft
,
1495 Basicvideo_put_SourceWidth
,
1496 Basicvideo_get_SourceWidth
,
1497 Basicvideo_put_SourceTop
,
1498 Basicvideo_get_SourceTop
,
1499 Basicvideo_put_SourceHeight
,
1500 Basicvideo_get_SourceHeight
,
1501 Basicvideo_put_DestinationLeft
,
1502 Basicvideo_get_DestinationLeft
,
1503 Basicvideo_put_DestinationWidth
,
1504 Basicvideo_get_DestinationWidth
,
1505 Basicvideo_put_DestinationTop
,
1506 Basicvideo_get_DestinationTop
,
1507 Basicvideo_put_DestinationHeight
,
1508 Basicvideo_get_DestinationHeight
,
1509 Basicvideo_SetSourcePosition
,
1510 Basicvideo_GetSourcePosition
,
1511 Basicvideo_SetDefaultSourcePosition
,
1512 Basicvideo_SetDestinationPosition
,
1513 Basicvideo_GetDestinationPosition
,
1514 Basicvideo_SetDefaultDestinationPosition
,
1515 Basicvideo_GetVideoSize
,
1516 Basicvideo_GetVideoPaletteEntries
,
1517 Basicvideo_GetCurrentImage
,
1518 Basicvideo_IsUsingDefaultSource
,
1519 Basicvideo_IsUsingDefaultDestination
1523 /*** IUnknown methods ***/
1524 static HRESULT WINAPI
Videowindow_QueryInterface(IVideoWindow
*iface
,
1527 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1529 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
1531 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
1534 static ULONG WINAPI
Videowindow_AddRef(IVideoWindow
*iface
) {
1535 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1537 TRACE("(%p/%p)->()\n", This
, iface
);
1539 return Filtergraph_AddRef(This
);
1542 static ULONG WINAPI
Videowindow_Release(IVideoWindow
*iface
) {
1543 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1545 TRACE("(%p/%p)->()\n", This
, iface
);
1547 return Filtergraph_Release(This
);
1550 /*** IDispatch methods ***/
1551 static HRESULT WINAPI
Videowindow_GetTypeInfoCount(IVideoWindow
*iface
,
1553 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1555 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
1560 static HRESULT WINAPI
Videowindow_GetTypeInfo(IVideoWindow
*iface
,
1563 ITypeInfo
**ppTInfo
) {
1564 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1566 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
1571 static HRESULT WINAPI
Videowindow_GetIDsOfNames(IVideoWindow
*iface
,
1577 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1579 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
1584 static HRESULT WINAPI
Videowindow_Invoke(IVideoWindow
*iface
,
1585 DISPID dispIdMember
,
1589 DISPPARAMS
*pDispParams
,
1591 EXCEPINFO
*pExepInfo
,
1593 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1595 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
);
1600 /*** IVideoWindow methods ***/
1601 static HRESULT WINAPI
Videowindow_put_Caption(IVideoWindow
*iface
,
1603 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1605 TRACE("(%p/%p)->(%s (%p)): stub !!!\n", This
, iface
, debugstr_w(strCaption
), strCaption
);
1610 static HRESULT WINAPI
Videowindow_get_Caption(IVideoWindow
*iface
,
1612 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1614 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, strCaption
);
1619 static HRESULT WINAPI
Videowindow_put_WindowStyle(IVideoWindow
*iface
,
1621 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1623 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, WindowStyle
);
1628 static HRESULT WINAPI
Videowindow_get_WindowStyle(IVideoWindow
*iface
,
1629 long *WindowStyle
) {
1630 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1632 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, WindowStyle
);
1637 static HRESULT WINAPI
Videowindow_put_WindowStyleEx(IVideoWindow
*iface
,
1638 long WindowStyleEx
) {
1639 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1641 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, WindowStyleEx
);
1646 static HRESULT WINAPI
Videowindow_get_WindowStyleEx(IVideoWindow
*iface
,
1647 long *WindowStyleEx
) {
1648 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1650 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, WindowStyleEx
);
1655 static HRESULT WINAPI
Videowindow_put_AutoShow(IVideoWindow
*iface
,
1657 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1659 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, AutoShow
);
1664 static HRESULT WINAPI
Videowindow_get_AutoShow(IVideoWindow
*iface
,
1666 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1668 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, AutoShow
);
1673 static HRESULT WINAPI
Videowindow_put_WindowState(IVideoWindow
*iface
,
1675 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1677 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, WindowState
);
1682 static HRESULT WINAPI
Videowindow_get_WindowState(IVideoWindow
*iface
,
1683 long *WindowState
) {
1684 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1686 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, WindowState
);
1691 static HRESULT WINAPI
Videowindow_put_BackgroundPalette(IVideoWindow
*iface
,
1692 long BackgroundPalette
) {
1693 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1695 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, BackgroundPalette
);
1700 static HRESULT WINAPI
Videowindow_get_BackgroundPalette(IVideoWindow
*iface
,
1701 long *pBackgroundPalette
) {
1702 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1704 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pBackgroundPalette
);
1709 static HRESULT WINAPI
Videowindow_put_Visible(IVideoWindow
*iface
,
1711 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1713 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Visible
);
1718 static HRESULT WINAPI
Videowindow_get_Visible(IVideoWindow
*iface
,
1720 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1722 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pVisible
);
1727 static HRESULT WINAPI
Videowindow_put_Left(IVideoWindow
*iface
,
1729 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1731 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Left
);
1736 static HRESULT WINAPI
Videowindow_get_Left(IVideoWindow
*iface
,
1738 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1740 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pLeft
);
1745 static HRESULT WINAPI
Videowindow_put_Width(IVideoWindow
*iface
,
1747 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1749 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Width
);
1754 static HRESULT WINAPI
Videowindow_get_Width(IVideoWindow
*iface
,
1756 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1758 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pWidth
);
1763 static HRESULT WINAPI
Videowindow_put_Top(IVideoWindow
*iface
,
1765 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1767 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Top
);
1772 static HRESULT WINAPI
Videowindow_get_Top(IVideoWindow
*iface
,
1774 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1776 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pTop
);
1781 static HRESULT WINAPI
Videowindow_put_Height(IVideoWindow
*iface
,
1783 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1785 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Height
);
1790 static HRESULT WINAPI
Videowindow_get_Height(IVideoWindow
*iface
,
1792 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1794 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pHeight
);
1799 static HRESULT WINAPI
Videowindow_put_Owner(IVideoWindow
*iface
,
1801 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1803 TRACE("(%p/%p)->(%08lx): stub !!!\n", This
, iface
, (DWORD
) Owner
);
1808 static HRESULT WINAPI
Videowindow_get_Owner(IVideoWindow
*iface
,
1810 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1812 TRACE("(%p/%p)->(%08lx): stub !!!\n", This
, iface
, (DWORD
) Owner
);
1817 static HRESULT WINAPI
Videowindow_put_MessageDrain(IVideoWindow
*iface
,
1819 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1821 TRACE("(%p/%p)->(%08lx): stub !!!\n", This
, iface
, (DWORD
) Drain
);
1826 static HRESULT WINAPI
Videowindow_get_MessageDrain(IVideoWindow
*iface
,
1828 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1830 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, Drain
);
1835 static HRESULT WINAPI
Videowindow_get_BorderColor(IVideoWindow
*iface
,
1837 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1839 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, Color
);
1844 static HRESULT WINAPI
Videowindow_put_BorderColor(IVideoWindow
*iface
,
1846 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1848 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Color
);
1853 static HRESULT WINAPI
Videowindow_get_FullScreenMode(IVideoWindow
*iface
,
1854 long *FullScreenMode
) {
1855 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1857 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, FullScreenMode
);
1862 static HRESULT WINAPI
Videowindow_put_FullScreenMode(IVideoWindow
*iface
,
1863 long FullScreenMode
) {
1864 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1866 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, FullScreenMode
);
1871 static HRESULT WINAPI
Videowindow_SetWindowForeground(IVideoWindow
*iface
,
1873 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1875 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, Focus
);
1880 static HRESULT WINAPI
Videowindow_NotifyOwnerMessage(IVideoWindow
*iface
,
1885 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1887 TRACE("(%p/%p)->(%08lx, %ld, %08lx, %08lx): stub !!!\n", This
, iface
, (DWORD
) hwnd
, uMsg
, wParam
, lParam
);
1892 static HRESULT WINAPI
Videowindow_SetWindowPosition(IVideoWindow
*iface
,
1897 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1899 TRACE("(%p/%p)->(%ld, %ld, %ld, %ld): stub !!!\n", This
, iface
, Left
, Top
, Width
, Height
);
1904 static HRESULT WINAPI
Videowindow_GetWindowPosition(IVideoWindow
*iface
,
1909 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1911 TRACE("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This
, iface
, pLeft
, pTop
, pWidth
, pHeight
);
1916 static HRESULT WINAPI
Videowindow_GetMinIdealImageSize(IVideoWindow
*iface
,
1919 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1921 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pWidth
, pHeight
);
1926 static HRESULT WINAPI
Videowindow_GetMaxIdealImageSize(IVideoWindow
*iface
,
1929 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1931 TRACE("(%p/%p)->(%p, %p): stub !!!\n", This
, iface
, pWidth
, pHeight
);
1936 static HRESULT WINAPI
Videowindow_GetRestorePosition(IVideoWindow
*iface
,
1941 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1943 TRACE("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This
, iface
, pLeft
, pTop
, pWidth
, pHeight
);
1948 static HRESULT WINAPI
Videowindow_HideCursor(IVideoWindow
*iface
,
1950 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1952 TRACE("(%p/%p)->(%ld): stub !!!\n", This
, iface
, HideCursor
);
1957 static HRESULT WINAPI
Videowindow_IsCursorHidden(IVideoWindow
*iface
,
1958 long *CursorHidden
) {
1959 ICOM_THIS_MULTI(IFilterGraphImpl
, IVideoWindow_vtbl
, iface
);
1961 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, CursorHidden
);
1967 static IVideoWindowVtbl IVideoWindow_VTable
=
1969 Videowindow_QueryInterface
,
1971 Videowindow_Release
,
1972 Videowindow_GetTypeInfoCount
,
1973 Videowindow_GetTypeInfo
,
1974 Videowindow_GetIDsOfNames
,
1976 Videowindow_put_Caption
,
1977 Videowindow_get_Caption
,
1978 Videowindow_put_WindowStyle
,
1979 Videowindow_get_WindowStyle
,
1980 Videowindow_put_WindowStyleEx
,
1981 Videowindow_get_WindowStyleEx
,
1982 Videowindow_put_AutoShow
,
1983 Videowindow_get_AutoShow
,
1984 Videowindow_put_WindowState
,
1985 Videowindow_get_WindowState
,
1986 Videowindow_put_BackgroundPalette
,
1987 Videowindow_get_BackgroundPalette
,
1988 Videowindow_put_Visible
,
1989 Videowindow_get_Visible
,
1990 Videowindow_put_Left
,
1991 Videowindow_get_Left
,
1992 Videowindow_put_Width
,
1993 Videowindow_get_Width
,
1994 Videowindow_put_Top
,
1995 Videowindow_get_Top
,
1996 Videowindow_put_Height
,
1997 Videowindow_get_Height
,
1998 Videowindow_put_Owner
,
1999 Videowindow_get_Owner
,
2000 Videowindow_put_MessageDrain
,
2001 Videowindow_get_MessageDrain
,
2002 Videowindow_get_BorderColor
,
2003 Videowindow_put_BorderColor
,
2004 Videowindow_get_FullScreenMode
,
2005 Videowindow_put_FullScreenMode
,
2006 Videowindow_SetWindowForeground
,
2007 Videowindow_NotifyOwnerMessage
,
2008 Videowindow_SetWindowPosition
,
2009 Videowindow_GetWindowPosition
,
2010 Videowindow_GetMinIdealImageSize
,
2011 Videowindow_GetMaxIdealImageSize
,
2012 Videowindow_GetRestorePosition
,
2013 Videowindow_HideCursor
,
2014 Videowindow_IsCursorHidden
2018 /*** IUnknown methods ***/
2019 static HRESULT WINAPI
Mediaevent_QueryInterface(IMediaEventEx
*iface
,
2022 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2024 TRACE("(%p/%p)->(%s (%p), %p)\n", This
, iface
, debugstr_guid(riid
), riid
, ppvObj
);
2026 return Filtergraph_QueryInterface(This
, riid
, ppvObj
);
2029 static ULONG WINAPI
Mediaevent_AddRef(IMediaEventEx
*iface
) {
2030 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2032 TRACE("(%p/%p)->()\n", This
, iface
);
2034 return Filtergraph_AddRef(This
);
2037 static ULONG WINAPI
Mediaevent_Release(IMediaEventEx
*iface
) {
2038 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2040 TRACE("(%p/%p)->()\n", This
, iface
);
2042 return Filtergraph_Release(This
);
2045 /*** IDispatch methods ***/
2046 static HRESULT WINAPI
Mediaevent_GetTypeInfoCount(IMediaEventEx
*iface
,
2048 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2050 TRACE("(%p/%p)->(%p): stub !!!\n", This
, iface
, pctinfo
);
2055 static HRESULT WINAPI
Mediaevent_GetTypeInfo(IMediaEventEx
*iface
,
2058 ITypeInfo
**ppTInfo
) {
2059 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2061 TRACE("(%p/%p)->(%d, %ld, %p): stub !!!\n", This
, iface
, iTInfo
, lcid
, ppTInfo
);
2066 static HRESULT WINAPI
Mediaevent_GetIDsOfNames(IMediaEventEx
*iface
,
2072 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2074 TRACE("(%p/%p)->(%s (%p), %p, %d, %ld, %p): stub !!!\n", This
, iface
, debugstr_guid(riid
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
2079 static HRESULT WINAPI
Mediaevent_Invoke(IMediaEventEx
*iface
,
2080 DISPID dispIdMember
,
2084 DISPPARAMS
*pDispParams
,
2086 EXCEPINFO
*pExepInfo
,
2088 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2090 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
);
2095 /*** IMediaEvent methods ***/
2096 static HRESULT WINAPI
Mediaevent_GetEventHandle(IMediaEventEx
*iface
,
2098 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2100 TRACE("(%p/%p)->(%p)\n", This
, iface
, hEvent
);
2102 *hEvent
= (OAEVENT
)This
->evqueue
.msg_event
;
2107 static HRESULT WINAPI
Mediaevent_GetEvent(IMediaEventEx
*iface
,
2112 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2115 TRACE("(%p/%p)->(%p, %p, %p, %ld)\n", This
, iface
, lEventCode
, lParam1
, lParam2
, msTimeout
);
2117 if (EventsQueue_GetEvent(&This
->evqueue
, &evt
, msTimeout
))
2119 *lEventCode
= evt
.lEventCode
;
2120 *lParam1
= evt
.lParam1
;
2121 *lParam2
= evt
.lParam2
;
2129 static HRESULT WINAPI
Mediaevent_WaitForCompletion(IMediaEventEx
*iface
,
2132 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2134 TRACE("(%p/%p)->(%ld, %p)\n", This
, iface
, msTimeout
, pEvCode
);
2136 if (WaitForSingleObject(This
->hEventCompletion
, msTimeout
) == WAIT_OBJECT_0
)
2138 *pEvCode
= This
->CompletionStatus
;
2146 static HRESULT WINAPI
Mediaevent_CancelDefaultHandling(IMediaEventEx
*iface
,
2148 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2150 TRACE("(%p/%p)->(%ld)\n", This
, iface
, lEvCode
);
2152 if (lEvCode
== EC_COMPLETE
)
2153 This
->HandleEcComplete
= FALSE
;
2154 else if (lEvCode
== EC_REPAINT
)
2155 This
->HandleEcRepaint
= FALSE
;
2162 static HRESULT WINAPI
Mediaevent_RestoreDefaultHandling(IMediaEventEx
*iface
,
2164 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2166 TRACE("(%p/%p)->(%ld)\n", This
, iface
, lEvCode
);
2168 if (lEvCode
== EC_COMPLETE
)
2169 This
->HandleEcComplete
= TRUE
;
2170 else if (lEvCode
== EC_REPAINT
)
2171 This
->HandleEcRepaint
= TRUE
;
2178 static HRESULT WINAPI
Mediaevent_FreeEventParams(IMediaEventEx
*iface
,
2182 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2184 TRACE("(%p/%p)->(%ld, %08lx, %08lx): stub !!!\n", This
, iface
, lEvCode
, lParam1
, lParam2
);
2189 /*** IMediaEventEx methods ***/
2190 static HRESULT WINAPI
Mediaevent_SetNotifyWindow(IMediaEventEx
*iface
,
2193 LONG_PTR lInstanceData
) {
2194 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2196 TRACE("(%p/%p)->(%08lx, %ld, %08lx)\n", This
, iface
, (DWORD
) hwnd
, lMsg
, lInstanceData
);
2198 This
->notif
.hWnd
= (HWND
)hwnd
;
2199 This
->notif
.msg
= lMsg
;
2200 This
->notif
.instance
= (long) lInstanceData
;
2205 static HRESULT WINAPI
Mediaevent_SetNotifyFlags(IMediaEventEx
*iface
,
2206 long lNoNotifyFlags
) {
2207 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2209 TRACE("(%p/%p)->(%ld)\n", This
, iface
, lNoNotifyFlags
);
2211 if ((lNoNotifyFlags
!= 0) || (lNoNotifyFlags
!= 1))
2212 return E_INVALIDARG
;
2214 This
->notif
.disabled
= lNoNotifyFlags
;
2219 static HRESULT WINAPI
Mediaevent_GetNotifyFlags(IMediaEventEx
*iface
,
2220 long *lplNoNotifyFlags
) {
2221 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2223 TRACE("(%p/%p)->(%p)\n", This
, iface
, lplNoNotifyFlags
);
2225 if (!lplNoNotifyFlags
)
2228 *lplNoNotifyFlags
= This
->notif
.disabled
;
2234 static IMediaEventExVtbl IMediaEventEx_VTable
=
2236 Mediaevent_QueryInterface
,
2239 Mediaevent_GetTypeInfoCount
,
2240 Mediaevent_GetTypeInfo
,
2241 Mediaevent_GetIDsOfNames
,
2243 Mediaevent_GetEventHandle
,
2244 Mediaevent_GetEvent
,
2245 Mediaevent_WaitForCompletion
,
2246 Mediaevent_CancelDefaultHandling
,
2247 Mediaevent_RestoreDefaultHandling
,
2248 Mediaevent_FreeEventParams
,
2249 Mediaevent_SetNotifyWindow
,
2250 Mediaevent_SetNotifyFlags
,
2251 Mediaevent_GetNotifyFlags
2255 static HRESULT WINAPI
MediaFilter_QueryInterface(IMediaFilter
*iface
, REFIID riid
, LPVOID
*ppv
)
2257 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2259 return Filtergraph_QueryInterface(This
, riid
, ppv
);
2262 static ULONG WINAPI
MediaFilter_AddRef(IMediaFilter
*iface
)
2264 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2266 return Filtergraph_AddRef(This
);
2269 static ULONG WINAPI
MediaFilter_Release(IMediaFilter
*iface
)
2271 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventEx_vtbl
, iface
);
2273 return Filtergraph_Release(This
);
2276 static HRESULT WINAPI
MediaFilter_GetClassID(IMediaFilter
*iface
, CLSID
* pClassID
)
2278 FIXME("(%p): stub\n", pClassID
);
2283 static HRESULT WINAPI
MediaFilter_Stop(IMediaFilter
*iface
)
2285 FIXME("(): stub\n");
2290 static HRESULT WINAPI
MediaFilter_Pause(IMediaFilter
*iface
)
2292 FIXME("(): stub\n");
2297 static HRESULT WINAPI
MediaFilter_Run(IMediaFilter
*iface
, REFERENCE_TIME tStart
)
2299 FIXME("(%lld): stub\n", tStart
);
2304 static HRESULT WINAPI
MediaFilter_GetState(IMediaFilter
*iface
, DWORD dwMsTimeout
, FILTER_STATE
* pState
)
2306 FIXME("(%ld, %p): stub\n", dwMsTimeout
, pState
);
2311 static HRESULT WINAPI
MediaFilter_SetSyncSource(IMediaFilter
*iface
, IReferenceClock
*pClock
)
2313 FIXME("(%p): stub\n", pClock
);
2318 static HRESULT WINAPI
MediaFilter_GetSyncSource(IMediaFilter
*iface
, IReferenceClock
**ppClock
)
2320 FIXME("(%p): stub\n", ppClock
);
2325 static IMediaFilterVtbl IMediaFilter_VTable
=
2327 MediaFilter_QueryInterface
,
2329 MediaFilter_Release
,
2330 MediaFilter_GetClassID
,
2334 MediaFilter_GetState
,
2335 MediaFilter_SetSyncSource
,
2336 MediaFilter_GetSyncSource
2339 static HRESULT WINAPI
MediaEventSink_QueryInterface(IMediaEventSink
*iface
, REFIID riid
, LPVOID
*ppv
)
2341 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventSink_vtbl
, iface
);
2343 return Filtergraph_QueryInterface(This
, riid
, ppv
);
2346 static ULONG WINAPI
MediaEventSink_AddRef(IMediaEventSink
*iface
)
2348 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventSink_vtbl
, iface
);
2350 return Filtergraph_AddRef(This
);
2353 static ULONG WINAPI
MediaEventSink_Release(IMediaEventSink
*iface
)
2355 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventSink_vtbl
, iface
);
2357 return Filtergraph_Release(This
);
2360 static HRESULT WINAPI
MediaEventSink_Notify(IMediaEventSink
*iface
, long EventCode
, LONG_PTR EventParam1
, LONG_PTR EventParam2
)
2362 ICOM_THIS_MULTI(IFilterGraphImpl
, IMediaEventSink_vtbl
, iface
);
2365 TRACE("(%p/%p)->(%ld, %ld, %ld)\n", This
, iface
, EventCode
, EventParam1
, EventParam2
);
2367 /* We need thread safety here, let's use the events queue's one */
2368 EnterCriticalSection(&This
->evqueue
.msg_crst
);
2370 if ((EventCode
== EC_COMPLETE
) && This
->HandleEcComplete
)
2372 if (++This
->EcCompleteCount
== This
->nRenderers
)
2374 evt
.lEventCode
= EC_COMPLETE
;
2377 EventsQueue_PutEvent(&This
->evqueue
, &evt
);
2378 if (!This
->notif
.disabled
&& This
->notif
.hWnd
)
2379 PostMessageW(This
->notif
.hWnd
, This
->notif
.msg
, 0, This
->notif
.instance
);
2380 This
->CompletionStatus
= EC_COMPLETE
;
2381 SetEvent(This
->hEventCompletion
);
2384 else if ((EventCode
== EC_REPAINT
) && This
->HandleEcRepaint
)
2386 /* FIXME: Not handled yet */
2390 evt
.lEventCode
= EventCode
;
2391 evt
.lParam1
= EventParam1
;
2392 evt
.lParam2
= EventParam2
;
2393 EventsQueue_PutEvent(&This
->evqueue
, &evt
);
2394 if (!This
->notif
.disabled
&& This
->notif
.hWnd
)
2395 PostMessageW(This
->notif
.hWnd
, This
->notif
.msg
, 0, This
->notif
.instance
);
2398 LeaveCriticalSection(&This
->evqueue
.msg_crst
);
2402 static IMediaEventSinkVtbl IMediaEventSink_VTable
=
2404 MediaEventSink_QueryInterface
,
2405 MediaEventSink_AddRef
,
2406 MediaEventSink_Release
,
2407 MediaEventSink_Notify
2410 /* This is the only function that actually creates a FilterGraph class... */
2411 HRESULT
FILTERGRAPH_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
) {
2412 IFilterGraphImpl
*fimpl
;
2414 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
2416 fimpl
= (IFilterGraphImpl
*) HeapAlloc(GetProcessHeap(), 0, sizeof(*fimpl
));
2417 fimpl
->IGraphBuilder_vtbl
= &IGraphBuilder_VTable
;
2418 fimpl
->IMediaControl_vtbl
= &IMediaControl_VTable
;
2419 fimpl
->IMediaSeeking_vtbl
= &IMediaSeeking_VTable
;
2420 fimpl
->IBasicAudio_vtbl
= &IBasicAudio_VTable
;
2421 fimpl
->IBasicVideo_vtbl
= &IBasicVideo_VTable
;
2422 fimpl
->IVideoWindow_vtbl
= &IVideoWindow_VTable
;
2423 fimpl
->IMediaEventEx_vtbl
= &IMediaEventEx_VTable
;
2424 fimpl
->IMediaFilter_vtbl
= &IMediaFilter_VTable
;
2425 fimpl
->IMediaEventSink_vtbl
= &IMediaEventSink_VTable
;
2427 fimpl
->ppFiltersInGraph
= NULL
;
2428 fimpl
->pFilterNames
= NULL
;
2429 fimpl
->nFilters
= 0;
2430 fimpl
->filterCapacity
= 0;
2431 fimpl
->nameIndex
= 1;
2432 fimpl
->hEventCompletion
= CreateEventW(0, TRUE
, FALSE
,0);
2433 fimpl
->HandleEcComplete
= TRUE
;
2434 fimpl
->HandleEcRepaint
= TRUE
;
2435 fimpl
->notif
.hWnd
= 0;
2436 fimpl
->notif
.disabled
= TRUE
;
2437 fimpl
->nRenderers
= 0;
2438 fimpl
->EcCompleteCount
= 0;
2439 EventsQueue_Init(&fimpl
->evqueue
);