When including 'wine/port.h', include it first.
[wine] / dlls / quartz / fgpass.c
1 /*
2  * Implementation of IBasicAudio, IBasicVideo2, IVideoWindow for FilterGraph.
3  *
4  * FIXME - stub.
5  *
6  * hidenori@a2.ctktv.ne.jp
7  */
8
9 #include "config.h"
10
11 #include "windef.h"
12 #include "winbase.h"
13 #include "wingdi.h"
14 #include "winuser.h"
15 #include "winerror.h"
16 #include "strmif.h"
17 #include "control.h"
18 #include "uuids.h"
19
20 #include "debugtools.h"
21 DEFAULT_DEBUG_CHANNEL(quartz);
22
23 #include "quartz_private.h"
24 #include "fgraph.h"
25
26
27
28 static HRESULT CFilterGraph_QueryBasicAudio(
29         CFilterGraph* This, IBasicAudio** ppAudio )
30 {
31         FIXME("(%p,%p) stub!\n",This,ppAudio);
32         return E_NOTIMPL;
33 }
34
35 static HRESULT CFilterGraph_QueryBasicVideo(
36         CFilterGraph* This, IBasicVideo** ppVideo )
37 {
38         FIXME("(%p,%p) stub!\n",This,ppVideo);
39         return E_NOTIMPL;
40 }
41
42 static HRESULT CFilterGraph_QueryBasicVideo2(
43         CFilterGraph* This, IBasicVideo2** ppVideo )
44 {
45         FIXME("(%p,%p) stub!\n",This,ppVideo);
46         return E_NOTIMPL;
47 }
48
49 static HRESULT CFilterGraph_QueryVideoWindow(
50         CFilterGraph* This, IVideoWindow** ppVidWin )
51 {
52         FIXME("(%p,%p) stub!\n",This,ppVidWin);
53         return E_NOTIMPL;
54 }
55
56
57
58 /***************************************************************************
59  *
60  *      CFilterGraph::IBasicAudio
61  *
62  */
63
64 #define QUERYBASICAUDIO \
65         IBasicAudio* pAudio = NULL; \
66         HRESULT hr; \
67         hr = CFilterGraph_QueryBasicAudio( This, &pAudio ); \
68         if ( FAILED(hr) ) return hr;
69
70
71 static HRESULT WINAPI
72 IBasicAudio_fnQueryInterface(IBasicAudio* iface,REFIID riid,void** ppobj)
73 {
74         CFilterGraph_THIS(iface,basaud);
75
76         TRACE("(%p)->()\n",This);
77
78         return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
79 }
80
81 static ULONG WINAPI
82 IBasicAudio_fnAddRef(IBasicAudio* iface)
83 {
84         CFilterGraph_THIS(iface,basaud);
85
86         TRACE("(%p)->()\n",This);
87
88         return IUnknown_AddRef(This->unk.punkControl);
89 }
90
91 static ULONG WINAPI
92 IBasicAudio_fnRelease(IBasicAudio* iface)
93 {
94         CFilterGraph_THIS(iface,basaud);
95
96         TRACE("(%p)->()\n",This);
97
98         return IUnknown_Release(This->unk.punkControl);
99 }
100
101 static HRESULT WINAPI
102 IBasicAudio_fnGetTypeInfoCount(IBasicAudio* iface,UINT* pcTypeInfo)
103 {
104         CFilterGraph_THIS(iface,basaud);
105
106         FIXME("(%p)->()\n",This);
107
108         return E_NOTIMPL;
109 }
110
111 static HRESULT WINAPI
112 IBasicAudio_fnGetTypeInfo(IBasicAudio* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj)
113 {
114         CFilterGraph_THIS(iface,basaud);
115
116         FIXME("(%p)->()\n",This);
117
118         return E_NOTIMPL;
119 }
120
121 static HRESULT WINAPI
122 IBasicAudio_fnGetIDsOfNames(IBasicAudio* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId)
123 {
124         CFilterGraph_THIS(iface,basaud);
125
126         FIXME("(%p)->()\n",This);
127
128         return E_NOTIMPL;
129 }
130
131 static HRESULT WINAPI
132 IBasicAudio_fnInvoke(IBasicAudio* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
133 {
134         CFilterGraph_THIS(iface,basaud);
135
136         FIXME("(%p)->()\n",This);
137
138         return E_NOTIMPL;
139 }
140
141
142 static HRESULT WINAPI
143 IBasicAudio_fnput_Volume(IBasicAudio* iface,long lVol)
144 {
145         CFilterGraph_THIS(iface,basaud);
146         QUERYBASICAUDIO
147
148         TRACE("(%p)->()\n",This);
149
150         return IBasicAudio_put_Volume(pAudio,lVol);
151 }
152
153 static HRESULT WINAPI
154 IBasicAudio_fnget_Volume(IBasicAudio* iface,long* plVol)
155 {
156         CFilterGraph_THIS(iface,basaud);
157         QUERYBASICAUDIO
158
159         TRACE("(%p)->()\n",This);
160
161         return IBasicAudio_get_Volume(pAudio,plVol);
162 }
163
164 static HRESULT WINAPI
165 IBasicAudio_fnput_Balance(IBasicAudio* iface,long lBalance)
166 {
167         CFilterGraph_THIS(iface,basaud);
168         QUERYBASICAUDIO
169
170         TRACE("(%p)->()\n",This);
171
172         return IBasicAudio_put_Balance(pAudio,lBalance);
173 }
174
175 static HRESULT WINAPI
176 IBasicAudio_fnget_Balance(IBasicAudio* iface,long* plBalance)
177 {
178         CFilterGraph_THIS(iface,basaud);
179         QUERYBASICAUDIO
180
181         TRACE("(%p)->()\n",This);
182
183         return IBasicAudio_get_Balance(pAudio,plBalance);
184 }
185
186
187 static ICOM_VTABLE(IBasicAudio) ibasicaudio =
188 {
189         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
190         /* IUnknown fields */
191         IBasicAudio_fnQueryInterface,
192         IBasicAudio_fnAddRef,
193         IBasicAudio_fnRelease,
194         /* IDispatch fields */
195         IBasicAudio_fnGetTypeInfoCount,
196         IBasicAudio_fnGetTypeInfo,
197         IBasicAudio_fnGetIDsOfNames,
198         IBasicAudio_fnInvoke,
199         /* IBasicAudio fields */
200         IBasicAudio_fnput_Volume,
201         IBasicAudio_fnget_Volume,
202         IBasicAudio_fnput_Balance,
203         IBasicAudio_fnget_Balance,
204 };
205
206
207 HRESULT CFilterGraph_InitIBasicAudio( CFilterGraph* pfg )
208 {
209         TRACE("(%p)\n",pfg);
210         ICOM_VTBL(&pfg->basaud) = &ibasicaudio;
211
212         return NOERROR;
213 }
214
215 void CFilterGraph_UninitIBasicAudio( CFilterGraph* pfg )
216 {
217         TRACE("(%p)\n",pfg);
218 }
219
220 #undef QUERYBASICAUDIO
221
222
223 /***************************************************************************
224  *
225  *      CFilterGraph::IBasicVideo2
226  *
227  */
228
229
230 #define QUERYBASICVIDEO \
231         IBasicVideo* pVideo = NULL; \
232         HRESULT hr; \
233         hr = CFilterGraph_QueryBasicVideo( This, &pVideo ); \
234         if ( FAILED(hr) ) return hr;
235
236 #define QUERYBASICVIDEO2        \
237         IBasicVideo2* pVideo = NULL; \
238         HRESULT hr; \
239         hr = CFilterGraph_QueryBasicVideo2( This, &pVideo ); \
240         if ( FAILED(hr) ) return hr;
241
242
243 static HRESULT WINAPI
244 IBasicVideo2_fnQueryInterface(IBasicVideo2* iface,REFIID riid,void** ppobj)
245 {
246         CFilterGraph_THIS(iface,basvid);
247
248         TRACE("(%p)->()\n",This);
249
250         return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
251 }
252
253 static ULONG WINAPI
254 IBasicVideo2_fnAddRef(IBasicVideo2* iface)
255 {
256         CFilterGraph_THIS(iface,basvid);
257
258         TRACE("(%p)->()\n",This);
259
260         return IUnknown_AddRef(This->unk.punkControl);
261 }
262
263 static ULONG WINAPI
264 IBasicVideo2_fnRelease(IBasicVideo2* iface)
265 {
266         CFilterGraph_THIS(iface,basvid);
267
268         TRACE("(%p)->()\n",This);
269
270         return IUnknown_Release(This->unk.punkControl);
271 }
272
273 static HRESULT WINAPI
274 IBasicVideo2_fnGetTypeInfoCount(IBasicVideo2* iface,UINT* pcTypeInfo)
275 {
276         CFilterGraph_THIS(iface,basvid);
277
278         FIXME("(%p)->()\n",This);
279
280         return E_NOTIMPL;
281 }
282
283 static HRESULT WINAPI
284 IBasicVideo2_fnGetTypeInfo(IBasicVideo2* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj)
285 {
286         CFilterGraph_THIS(iface,basvid);
287
288         FIXME("(%p)->()\n",This);
289
290         return E_NOTIMPL;
291 }
292
293 static HRESULT WINAPI
294 IBasicVideo2_fnGetIDsOfNames(IBasicVideo2* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId)
295 {
296         CFilterGraph_THIS(iface,basvid);
297
298         FIXME("(%p)->()\n",This);
299
300         return E_NOTIMPL;
301 }
302
303 static HRESULT WINAPI
304 IBasicVideo2_fnInvoke(IBasicVideo2* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
305 {
306         CFilterGraph_THIS(iface,basvid);
307
308         FIXME("(%p)->()\n",This);
309
310         return E_NOTIMPL;
311 }
312
313
314 static HRESULT WINAPI
315 IBasicVideo2_fnget_AvgTimePerFrame(IBasicVideo2* iface,REFTIME* prefTime)
316 {
317         CFilterGraph_THIS(iface,basvid);
318         QUERYBASICVIDEO
319
320         TRACE("(%p)->()\n",This);
321
322         return IBasicVideo_get_AvgTimePerFrame(pVideo,prefTime);
323 }
324
325 static HRESULT WINAPI
326 IBasicVideo2_fnget_BitRate(IBasicVideo2* iface,long* plRate)
327 {
328         CFilterGraph_THIS(iface,basvid);
329         QUERYBASICVIDEO
330
331         TRACE("(%p)->()\n",This);
332
333         return IBasicVideo_get_BitRate(pVideo,plRate);
334 }
335
336 static HRESULT WINAPI
337 IBasicVideo2_fnget_BitErrorRate(IBasicVideo2* iface,long* plRate)
338 {
339         CFilterGraph_THIS(iface,basvid);
340         QUERYBASICVIDEO
341
342         TRACE("(%p)->()\n",This);
343
344         return IBasicVideo_get_BitErrorRate(pVideo,plRate);
345 }
346
347 static HRESULT WINAPI
348 IBasicVideo2_fnget_VideoWidth(IBasicVideo2* iface,long* plWidth)
349 {
350         CFilterGraph_THIS(iface,basvid);
351         QUERYBASICVIDEO
352
353         TRACE("(%p)->()\n",This);
354
355         return IBasicVideo_get_VideoWidth(pVideo,plWidth);
356 }
357
358 static HRESULT WINAPI
359 IBasicVideo2_fnget_VideoHeight(IBasicVideo2* iface,long* plHeight)
360 {
361         CFilterGraph_THIS(iface,basvid);
362         QUERYBASICVIDEO
363
364         TRACE("(%p)->()\n",This);
365
366         return IBasicVideo_get_VideoHeight(pVideo,plHeight);
367 }
368
369 static HRESULT WINAPI
370 IBasicVideo2_fnput_SourceLeft(IBasicVideo2* iface,long lLeft)
371 {
372         CFilterGraph_THIS(iface,basvid);
373         QUERYBASICVIDEO
374
375         TRACE("(%p)->()\n",This);
376
377         return IBasicVideo_put_SourceLeft(pVideo,lLeft);
378 }
379
380 static HRESULT WINAPI
381 IBasicVideo2_fnget_SourceLeft(IBasicVideo2* iface,long* plLeft)
382 {
383         CFilterGraph_THIS(iface,basvid);
384         QUERYBASICVIDEO
385
386         TRACE("(%p)->()\n",This);
387
388         return IBasicVideo_get_SourceLeft(pVideo,plLeft);
389 }
390
391 static HRESULT WINAPI
392 IBasicVideo2_fnput_SourceWidth(IBasicVideo2* iface,long lWidth)
393 {
394         CFilterGraph_THIS(iface,basvid);
395         QUERYBASICVIDEO
396
397         TRACE("(%p)->()\n",This);
398
399         return IBasicVideo_put_SourceWidth(pVideo,lWidth);
400 }
401
402 static HRESULT WINAPI
403 IBasicVideo2_fnget_SourceWidth(IBasicVideo2* iface,long* plWidth)
404 {
405         CFilterGraph_THIS(iface,basvid);
406         QUERYBASICVIDEO
407
408         TRACE("(%p)->()\n",This);
409
410         return IBasicVideo_get_SourceWidth(pVideo,plWidth);
411 }
412
413 static HRESULT WINAPI
414 IBasicVideo2_fnput_SourceTop(IBasicVideo2* iface,long lTop)
415 {
416         CFilterGraph_THIS(iface,basvid);
417         QUERYBASICVIDEO
418
419         TRACE("(%p)->()\n",This);
420
421         return IBasicVideo_put_SourceTop(pVideo,lTop);
422 }
423
424 static HRESULT WINAPI
425 IBasicVideo2_fnget_SourceTop(IBasicVideo2* iface,long* plTop)
426 {
427         CFilterGraph_THIS(iface,basvid);
428         QUERYBASICVIDEO
429
430         TRACE("(%p)->()\n",This);
431
432         return IBasicVideo_get_SourceTop(pVideo,plTop);
433 }
434
435 static HRESULT WINAPI
436 IBasicVideo2_fnput_SourceHeight(IBasicVideo2* iface,long lHeight)
437 {
438         CFilterGraph_THIS(iface,basvid);
439         QUERYBASICVIDEO
440
441         TRACE("(%p)->()\n",This);
442
443         return IBasicVideo_put_SourceHeight(pVideo,lHeight);
444 }
445
446 static HRESULT WINAPI
447 IBasicVideo2_fnget_SourceHeight(IBasicVideo2* iface,long* plHeight)
448 {
449         CFilterGraph_THIS(iface,basvid);
450         QUERYBASICVIDEO
451
452         TRACE("(%p)->()\n",This);
453
454         return IBasicVideo_get_SourceHeight(pVideo,plHeight);
455 }
456
457 static HRESULT WINAPI
458 IBasicVideo2_fnput_DestinationLeft(IBasicVideo2* iface,long lLeft)
459 {
460         CFilterGraph_THIS(iface,basvid);
461         QUERYBASICVIDEO
462
463         TRACE("(%p)->()\n",This);
464
465         return IBasicVideo_put_DestinationLeft(pVideo,lLeft);
466 }
467
468 static HRESULT WINAPI
469 IBasicVideo2_fnget_DestinationLeft(IBasicVideo2* iface,long* plLeft)
470 {
471         CFilterGraph_THIS(iface,basvid);
472         QUERYBASICVIDEO
473
474         TRACE("(%p)->()\n",This);
475
476         return IBasicVideo_get_DestinationLeft(pVideo,plLeft);
477 }
478
479 static HRESULT WINAPI
480 IBasicVideo2_fnput_DestinationWidth(IBasicVideo2* iface,long lWidth)
481 {
482         CFilterGraph_THIS(iface,basvid);
483         QUERYBASICVIDEO
484
485         TRACE("(%p)->()\n",This);
486
487         return IBasicVideo_put_DestinationWidth(pVideo,lWidth);
488 }
489
490 static HRESULT WINAPI
491 IBasicVideo2_fnget_DestinationWidth(IBasicVideo2* iface,long* plWidth)
492 {
493         CFilterGraph_THIS(iface,basvid);
494         QUERYBASICVIDEO
495
496         TRACE("(%p)->()\n",This);
497
498         return IBasicVideo_get_DestinationWidth(pVideo,plWidth);
499 }
500
501 static HRESULT WINAPI
502 IBasicVideo2_fnput_DestinationTop(IBasicVideo2* iface,long lTop)
503 {
504         CFilterGraph_THIS(iface,basvid);
505         QUERYBASICVIDEO
506
507         TRACE("(%p)->()\n",This);
508
509         return IBasicVideo_put_DestinationTop(pVideo,lTop);
510 }
511
512 static HRESULT WINAPI
513 IBasicVideo2_fnget_DestinationTop(IBasicVideo2* iface,long* plTop)
514 {
515         CFilterGraph_THIS(iface,basvid);
516         QUERYBASICVIDEO
517
518         TRACE("(%p)->()\n",This);
519
520         return IBasicVideo_get_DestinationTop(pVideo,plTop);
521 }
522
523 static HRESULT WINAPI
524 IBasicVideo2_fnput_DestinationHeight(IBasicVideo2* iface,long lHeight)
525 {
526         CFilterGraph_THIS(iface,basvid);
527         QUERYBASICVIDEO
528
529         TRACE("(%p)->()\n",This);
530
531         return IBasicVideo_put_DestinationHeight(pVideo,lHeight);
532 }
533
534 static HRESULT WINAPI
535 IBasicVideo2_fnget_DestinationHeight(IBasicVideo2* iface,long* plHeight)
536 {
537         CFilterGraph_THIS(iface,basvid);
538         QUERYBASICVIDEO
539
540         TRACE("(%p)->()\n",This);
541
542         return IBasicVideo_get_DestinationHeight(pVideo,plHeight);
543 }
544
545 static HRESULT WINAPI
546 IBasicVideo2_fnSetSourcePosition(IBasicVideo2* iface,long lLeft,long lTop,long lWidth,long lHeight)
547 {
548         CFilterGraph_THIS(iface,basvid);
549         QUERYBASICVIDEO
550
551         TRACE("(%p)->()\n",This);
552
553         return IBasicVideo_SetSourcePosition(pVideo,lLeft,lTop,lWidth,lHeight);
554 }
555
556 static HRESULT WINAPI
557 IBasicVideo2_fnGetSourcePosition(IBasicVideo2* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight)
558 {
559         CFilterGraph_THIS(iface,basvid);
560         QUERYBASICVIDEO
561
562         TRACE("(%p)->()\n",This);
563
564         return IBasicVideo_GetSourcePosition(pVideo,plLeft,plTop,plWidth,plHeight);
565 }
566
567 static HRESULT WINAPI
568 IBasicVideo2_fnSetDefaultSourcePosition(IBasicVideo2* iface)
569 {
570         CFilterGraph_THIS(iface,basvid);
571         QUERYBASICVIDEO
572
573         TRACE("(%p)->()\n",This);
574
575         return IBasicVideo_SetDefaultSourcePosition(pVideo);
576 }
577
578 static HRESULT WINAPI
579 IBasicVideo2_fnSetDestinationPosition(IBasicVideo2* iface,long lLeft,long lTop,long lWidth,long lHeight)
580 {
581         CFilterGraph_THIS(iface,basvid);
582         QUERYBASICVIDEO
583
584         TRACE("(%p)->()\n",This);
585
586         return IBasicVideo_SetDestinationPosition(pVideo,lLeft,lTop,lWidth,lHeight);
587 }
588
589 static HRESULT WINAPI
590 IBasicVideo2_fnGetDestinationPosition(IBasicVideo2* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight)
591 {
592         CFilterGraph_THIS(iface,basvid);
593         QUERYBASICVIDEO
594
595         TRACE("(%p)->()\n",This);
596
597         return IBasicVideo_GetDestinationPosition(pVideo,plLeft,plTop,plWidth,plHeight);
598 }
599
600 static HRESULT WINAPI
601 IBasicVideo2_fnSetDefaultDestinationPosition(IBasicVideo2* iface)
602 {
603         CFilterGraph_THIS(iface,basvid);
604         QUERYBASICVIDEO
605
606         TRACE("(%p)->()\n",This);
607
608         return IBasicVideo_SetDefaultDestinationPosition(pVideo);
609 }
610
611 static HRESULT WINAPI
612 IBasicVideo2_fnGetVideoSize(IBasicVideo2* iface,long* plWidth,long* plHeight)
613 {
614         CFilterGraph_THIS(iface,basvid);
615         QUERYBASICVIDEO
616
617         TRACE("(%p)->()\n",This);
618
619         return IBasicVideo_GetVideoSize(pVideo,plWidth,plHeight);
620 }
621
622 static HRESULT WINAPI
623 IBasicVideo2_fnGetVideoPaletteEntries(IBasicVideo2* iface,long lStart,long lCount,long* plRet,long* plPaletteEntry)
624 {
625         CFilterGraph_THIS(iface,basvid);
626         QUERYBASICVIDEO
627
628         TRACE("(%p)->()\n",This);
629
630         return IBasicVideo_GetVideoPaletteEntries(pVideo,lStart,lCount,plRet,plPaletteEntry);
631 }
632
633 static HRESULT WINAPI
634 IBasicVideo2_fnGetCurrentImage(IBasicVideo2* iface,long* plBufferSize,long* plDIBBuffer)
635 {
636         CFilterGraph_THIS(iface,basvid);
637         QUERYBASICVIDEO
638
639         TRACE("(%p)->()\n",This);
640
641         return IBasicVideo_GetCurrentImage(pVideo,plBufferSize,plDIBBuffer);
642 }
643
644 static HRESULT WINAPI
645 IBasicVideo2_fnIsUsingDefaultSource(IBasicVideo2* iface)
646 {
647         CFilterGraph_THIS(iface,basvid);
648         QUERYBASICVIDEO
649
650         TRACE("(%p)->()\n",This);
651
652         return IBasicVideo_IsUsingDefaultSource(pVideo);
653 }
654
655 static HRESULT WINAPI
656 IBasicVideo2_fnIsUsingDefaultDestination(IBasicVideo2* iface)
657 {
658         CFilterGraph_THIS(iface,basvid);
659         QUERYBASICVIDEO
660
661         TRACE("(%p)->()\n",This);
662
663         return IBasicVideo_IsUsingDefaultDestination(pVideo);
664 }
665
666 static HRESULT WINAPI
667 IBasicVideo2_fnGetPreferredAspectRatio(IBasicVideo2* iface,long* plRateX,long* plRateY)
668 {
669         CFilterGraph_THIS(iface,basvid);
670         QUERYBASICVIDEO2
671
672         TRACE("(%p)->()\n",This);
673
674         return IBasicVideo2_GetPreferredAspectRatio(pVideo,plRateX,plRateY);
675 }
676
677
678
679
680 static ICOM_VTABLE(IBasicVideo2) ibasicvideo =
681 {
682         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
683         /* IUnknown fields */
684         IBasicVideo2_fnQueryInterface,
685         IBasicVideo2_fnAddRef,
686         IBasicVideo2_fnRelease,
687         /* IDispatch fields */
688         IBasicVideo2_fnGetTypeInfoCount,
689         IBasicVideo2_fnGetTypeInfo,
690         IBasicVideo2_fnGetIDsOfNames,
691         IBasicVideo2_fnInvoke,
692         /* IBasicVideo fields */
693         IBasicVideo2_fnget_AvgTimePerFrame,
694         IBasicVideo2_fnget_BitRate,
695         IBasicVideo2_fnget_BitErrorRate,
696         IBasicVideo2_fnget_VideoWidth,
697         IBasicVideo2_fnget_VideoHeight,
698         IBasicVideo2_fnput_SourceLeft,
699         IBasicVideo2_fnget_SourceLeft,
700         IBasicVideo2_fnput_SourceWidth,
701         IBasicVideo2_fnget_SourceWidth,
702         IBasicVideo2_fnput_SourceTop,
703         IBasicVideo2_fnget_SourceTop,
704         IBasicVideo2_fnput_SourceHeight,
705         IBasicVideo2_fnget_SourceHeight,
706         IBasicVideo2_fnput_DestinationLeft,
707         IBasicVideo2_fnget_DestinationLeft,
708         IBasicVideo2_fnput_DestinationWidth,
709         IBasicVideo2_fnget_DestinationWidth,
710         IBasicVideo2_fnput_DestinationTop,
711         IBasicVideo2_fnget_DestinationTop,
712         IBasicVideo2_fnput_DestinationHeight,
713         IBasicVideo2_fnget_DestinationHeight,
714         IBasicVideo2_fnSetSourcePosition,
715         IBasicVideo2_fnGetSourcePosition,
716         IBasicVideo2_fnSetDefaultSourcePosition,
717         IBasicVideo2_fnSetDestinationPosition,
718         IBasicVideo2_fnGetDestinationPosition,
719         IBasicVideo2_fnSetDefaultDestinationPosition,
720         IBasicVideo2_fnGetVideoSize,
721         IBasicVideo2_fnGetVideoPaletteEntries,
722         IBasicVideo2_fnGetCurrentImage,
723         IBasicVideo2_fnIsUsingDefaultSource,
724         IBasicVideo2_fnIsUsingDefaultDestination,
725         /* IBasicVideo2 fields */
726         IBasicVideo2_fnGetPreferredAspectRatio,
727 };
728
729
730 HRESULT CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg )
731 {
732         TRACE("(%p)\n",pfg);
733         ICOM_VTBL(&pfg->basvid) = &ibasicvideo;
734
735         return NOERROR;
736 }
737
738 void CFilterGraph_UninitIBasicVideo2( CFilterGraph* pfg )
739 {
740         TRACE("(%p)\n",pfg);
741 }
742
743 #undef QUERYBASICVIDEO2
744 #undef QUERYBASICVIDEO
745
746 /***************************************************************************
747  *
748  *      CFilterGraph::IVideoWindow
749  *
750  */
751
752 #define QUERYVIDEOWINDOW \
753         IVideoWindow* pVidWin = NULL; \
754         HRESULT hr; \
755         hr = CFilterGraph_QueryVideoWindow( This, &pVidWin ); \
756         if ( FAILED(hr) ) return hr;
757
758
759 static HRESULT WINAPI
760 IVideoWindow_fnQueryInterface(IVideoWindow* iface,REFIID riid,void** ppobj)
761 {
762         CFilterGraph_THIS(iface,vidwin);
763
764         TRACE("(%p)->()\n",This);
765
766         return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
767 }
768
769 static ULONG WINAPI
770 IVideoWindow_fnAddRef(IVideoWindow* iface)
771 {
772         CFilterGraph_THIS(iface,vidwin);
773
774         TRACE("(%p)->()\n",This);
775
776         return IUnknown_AddRef(This->unk.punkControl);
777 }
778
779 static ULONG WINAPI
780 IVideoWindow_fnRelease(IVideoWindow* iface)
781 {
782         CFilterGraph_THIS(iface,vidwin);
783
784         TRACE("(%p)->()\n",This);
785
786         return IUnknown_Release(This->unk.punkControl);
787 }
788
789 static HRESULT WINAPI
790 IVideoWindow_fnGetTypeInfoCount(IVideoWindow* iface,UINT* pcTypeInfo)
791 {
792         CFilterGraph_THIS(iface,vidwin);
793
794         FIXME("(%p)->()\n",This);
795
796         return E_NOTIMPL;
797 }
798
799 static HRESULT WINAPI
800 IVideoWindow_fnGetTypeInfo(IVideoWindow* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj)
801 {
802         CFilterGraph_THIS(iface,vidwin);
803
804         FIXME("(%p)->()\n",This);
805
806         return E_NOTIMPL;
807 }
808
809 static HRESULT WINAPI
810 IVideoWindow_fnGetIDsOfNames(IVideoWindow* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId)
811 {
812         CFilterGraph_THIS(iface,vidwin);
813
814         FIXME("(%p)->()\n",This);
815
816         return E_NOTIMPL;
817 }
818
819 static HRESULT WINAPI
820 IVideoWindow_fnInvoke(IVideoWindow* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
821 {
822         CFilterGraph_THIS(iface,vidwin);
823
824         FIXME("(%p)->()\n",This);
825
826         return E_NOTIMPL;
827 }
828
829
830
831 static HRESULT WINAPI
832 IVideoWindow_fnput_Caption(IVideoWindow* iface,BSTR strCaption)
833 {
834         CFilterGraph_THIS(iface,vidwin);
835         QUERYVIDEOWINDOW
836
837         TRACE("(%p)->()\n",This);
838
839         return IVideoWindow_put_Caption(pVidWin,strCaption);
840 }
841
842 static HRESULT WINAPI
843 IVideoWindow_fnget_Caption(IVideoWindow* iface,BSTR* pstrCaption)
844 {
845         CFilterGraph_THIS(iface,vidwin);
846         QUERYVIDEOWINDOW
847
848         TRACE("(%p)->()\n",This);
849
850         return IVideoWindow_get_Caption(pVidWin,pstrCaption);
851 }
852
853 static HRESULT WINAPI
854 IVideoWindow_fnput_WindowStyle(IVideoWindow* iface,long lStyle)
855 {
856         CFilterGraph_THIS(iface,vidwin);
857         QUERYVIDEOWINDOW
858
859         TRACE("(%p)->()\n",This);
860
861         return IVideoWindow_put_WindowStyle(pVidWin,lStyle);
862 }
863
864 static HRESULT WINAPI
865 IVideoWindow_fnget_WindowStyle(IVideoWindow* iface,long* plStyle)
866 {
867         CFilterGraph_THIS(iface,vidwin);
868         QUERYVIDEOWINDOW
869
870         TRACE("(%p)->()\n",This);
871
872         return IVideoWindow_get_WindowStyle(pVidWin,plStyle);
873 }
874
875 static HRESULT WINAPI
876 IVideoWindow_fnput_WindowStyleEx(IVideoWindow* iface,long lExStyle)
877 {
878         CFilterGraph_THIS(iface,vidwin);
879         QUERYVIDEOWINDOW
880
881         TRACE("(%p)->()\n",This);
882
883         return IVideoWindow_put_WindowStyleEx(pVidWin,lExStyle);
884 }
885
886 static HRESULT WINAPI
887 IVideoWindow_fnget_WindowStyleEx(IVideoWindow* iface,long* plExStyle)
888 {
889         CFilterGraph_THIS(iface,vidwin);
890         QUERYVIDEOWINDOW
891
892         TRACE("(%p)->()\n",This);
893
894         return IVideoWindow_get_WindowStyleEx(pVidWin,plExStyle);
895 }
896
897 static HRESULT WINAPI
898 IVideoWindow_fnput_AutoShow(IVideoWindow* iface,long lAutoShow)
899 {
900         CFilterGraph_THIS(iface,vidwin);
901         QUERYVIDEOWINDOW
902
903         TRACE("(%p)->()\n",This);
904
905         return IVideoWindow_put_AutoShow(pVidWin,lAutoShow);
906 }
907
908 static HRESULT WINAPI
909 IVideoWindow_fnget_AutoShow(IVideoWindow* iface,long* plAutoShow)
910 {
911         CFilterGraph_THIS(iface,vidwin);
912         QUERYVIDEOWINDOW
913
914         TRACE("(%p)->()\n",This);
915
916         return IVideoWindow_get_AutoShow(pVidWin,plAutoShow);
917 }
918
919 static HRESULT WINAPI
920 IVideoWindow_fnput_WindowState(IVideoWindow* iface,long lState)
921 {
922         CFilterGraph_THIS(iface,vidwin);
923         QUERYVIDEOWINDOW
924
925         TRACE("(%p)->()\n",This);
926
927         return IVideoWindow_put_WindowState(pVidWin,lState);
928 }
929
930 static HRESULT WINAPI
931 IVideoWindow_fnget_WindowState(IVideoWindow* iface,long* plState)
932 {
933         CFilterGraph_THIS(iface,vidwin);
934         QUERYVIDEOWINDOW
935
936         TRACE("(%p)->()\n",This);
937
938         return IVideoWindow_get_WindowState(pVidWin,plState);
939 }
940
941 static HRESULT WINAPI
942 IVideoWindow_fnput_BackgroundPalette(IVideoWindow* iface,long lBackPal)
943 {
944         CFilterGraph_THIS(iface,vidwin);
945         QUERYVIDEOWINDOW
946
947         TRACE("(%p)->()\n",This);
948
949         return IVideoWindow_put_BackgroundPalette(pVidWin,lBackPal);
950 }
951
952 static HRESULT WINAPI
953 IVideoWindow_fnget_BackgroundPalette(IVideoWindow* iface,long* plBackPal)
954 {
955         CFilterGraph_THIS(iface,vidwin);
956         QUERYVIDEOWINDOW
957
958         TRACE("(%p)->()\n",This);
959
960         return IVideoWindow_get_BackgroundPalette(pVidWin,plBackPal);
961 }
962
963 static HRESULT WINAPI
964 IVideoWindow_fnput_Visible(IVideoWindow* iface,long lVisible)
965 {
966         CFilterGraph_THIS(iface,vidwin);
967         QUERYVIDEOWINDOW
968
969         TRACE("(%p)->()\n",This);
970
971         return IVideoWindow_put_Visible(pVidWin,lVisible);
972 }
973
974 static HRESULT WINAPI
975 IVideoWindow_fnget_Visible(IVideoWindow* iface,long* plVisible)
976 {
977         CFilterGraph_THIS(iface,vidwin);
978         QUERYVIDEOWINDOW
979
980         TRACE("(%p)->()\n",This);
981
982         return IVideoWindow_get_Visible(pVidWin,plVisible);
983 }
984
985 static HRESULT WINAPI
986 IVideoWindow_fnput_Left(IVideoWindow* iface,long lLeft)
987 {
988         CFilterGraph_THIS(iface,vidwin);
989         QUERYVIDEOWINDOW
990
991         TRACE("(%p)->()\n",This);
992
993         return IVideoWindow_put_Left(pVidWin,lLeft);
994 }
995
996 static HRESULT WINAPI
997 IVideoWindow_fnget_Left(IVideoWindow* iface,long* plLeft)
998 {
999         CFilterGraph_THIS(iface,vidwin);
1000         QUERYVIDEOWINDOW
1001
1002         TRACE("(%p)->()\n",This);
1003
1004         return IVideoWindow_get_Left(pVidWin,plLeft);
1005 }
1006
1007 static HRESULT WINAPI
1008 IVideoWindow_fnput_Width(IVideoWindow* iface,long lWidth)
1009 {
1010         CFilterGraph_THIS(iface,vidwin);
1011         QUERYVIDEOWINDOW
1012
1013         TRACE("(%p)->()\n",This);
1014
1015         return IVideoWindow_put_Width(pVidWin,lWidth);
1016 }
1017
1018 static HRESULT WINAPI
1019 IVideoWindow_fnget_Width(IVideoWindow* iface,long* plWidth)
1020 {
1021         CFilterGraph_THIS(iface,vidwin);
1022         QUERYVIDEOWINDOW
1023
1024         TRACE("(%p)->()\n",This);
1025
1026         return IVideoWindow_get_Width(pVidWin,plWidth);
1027 }
1028
1029 static HRESULT WINAPI
1030 IVideoWindow_fnput_Top(IVideoWindow* iface,long lTop)
1031 {
1032         CFilterGraph_THIS(iface,vidwin);
1033         QUERYVIDEOWINDOW
1034
1035         TRACE("(%p)->()\n",This);
1036
1037         return IVideoWindow_put_Top(pVidWin,lTop);
1038 }
1039
1040 static HRESULT WINAPI
1041 IVideoWindow_fnget_Top(IVideoWindow* iface,long* plTop)
1042 {
1043         CFilterGraph_THIS(iface,vidwin);
1044         QUERYVIDEOWINDOW
1045
1046         TRACE("(%p)->()\n",This);
1047
1048         return IVideoWindow_get_Top(pVidWin,plTop);
1049 }
1050
1051 static HRESULT WINAPI
1052 IVideoWindow_fnput_Height(IVideoWindow* iface,long lHeight)
1053 {
1054         CFilterGraph_THIS(iface,vidwin);
1055         QUERYVIDEOWINDOW
1056
1057         TRACE("(%p)->()\n",This);
1058
1059         return IVideoWindow_put_Height(pVidWin,lHeight);
1060 }
1061
1062 static HRESULT WINAPI
1063 IVideoWindow_fnget_Height(IVideoWindow* iface,long* plHeight)
1064 {
1065         CFilterGraph_THIS(iface,vidwin);
1066         QUERYVIDEOWINDOW
1067
1068         TRACE("(%p)->()\n",This);
1069
1070         return IVideoWindow_get_Height(pVidWin,plHeight);
1071 }
1072
1073 static HRESULT WINAPI
1074 IVideoWindow_fnput_Owner(IVideoWindow* iface,OAHWND hwnd)
1075 {
1076         CFilterGraph_THIS(iface,vidwin);
1077         QUERYVIDEOWINDOW
1078
1079         TRACE("(%p)->()\n",This);
1080
1081         return IVideoWindow_put_Owner(pVidWin,hwnd);
1082 }
1083
1084 static HRESULT WINAPI
1085 IVideoWindow_fnget_Owner(IVideoWindow* iface,OAHWND* phwnd)
1086 {
1087         CFilterGraph_THIS(iface,vidwin);
1088         QUERYVIDEOWINDOW
1089
1090         TRACE("(%p)->()\n",This);
1091
1092         return IVideoWindow_get_Owner(pVidWin,phwnd);
1093 }
1094
1095 static HRESULT WINAPI
1096 IVideoWindow_fnput_MessageDrain(IVideoWindow* iface,OAHWND hwnd)
1097 {
1098         CFilterGraph_THIS(iface,vidwin);
1099         QUERYVIDEOWINDOW
1100
1101         TRACE("(%p)->()\n",This);
1102
1103         return IVideoWindow_put_MessageDrain(pVidWin,hwnd);
1104 }
1105
1106 static HRESULT WINAPI
1107 IVideoWindow_fnget_MessageDrain(IVideoWindow* iface,OAHWND* phwnd)
1108 {
1109         CFilterGraph_THIS(iface,vidwin);
1110         QUERYVIDEOWINDOW
1111
1112         TRACE("(%p)->()\n",This);
1113
1114         return IVideoWindow_get_MessageDrain(pVidWin,phwnd);
1115 }
1116
1117 static HRESULT WINAPI
1118 IVideoWindow_fnget_BorderColor(IVideoWindow* iface,long* plColor)
1119 {
1120         CFilterGraph_THIS(iface,vidwin);
1121         QUERYVIDEOWINDOW
1122
1123         TRACE("(%p)->()\n",This);
1124
1125         return IVideoWindow_get_BorderColor(pVidWin,plColor);
1126 }
1127
1128 static HRESULT WINAPI
1129 IVideoWindow_fnput_BorderColor(IVideoWindow* iface,long lColor)
1130 {
1131         CFilterGraph_THIS(iface,vidwin);
1132         QUERYVIDEOWINDOW
1133
1134         TRACE("(%p)->()\n",This);
1135
1136         return IVideoWindow_put_BorderColor(pVidWin,lColor);
1137 }
1138
1139 static HRESULT WINAPI
1140 IVideoWindow_fnget_FullScreenMode(IVideoWindow* iface,long* plMode)
1141 {
1142         CFilterGraph_THIS(iface,vidwin);
1143         QUERYVIDEOWINDOW
1144
1145         TRACE("(%p)->()\n",This);
1146
1147         return IVideoWindow_get_FullScreenMode(pVidWin,plMode);
1148 }
1149
1150 static HRESULT WINAPI
1151 IVideoWindow_fnput_FullScreenMode(IVideoWindow* iface,long lMode)
1152 {
1153         CFilterGraph_THIS(iface,vidwin);
1154         QUERYVIDEOWINDOW
1155
1156         TRACE("(%p)->()\n",This);
1157
1158         return IVideoWindow_put_FullScreenMode(pVidWin,lMode);
1159 }
1160
1161 static HRESULT WINAPI
1162 IVideoWindow_fnSetWindowForeground(IVideoWindow* iface,long lFocus)
1163 {
1164         CFilterGraph_THIS(iface,vidwin);
1165         QUERYVIDEOWINDOW
1166
1167         TRACE("(%p)->()\n",This);
1168
1169         return IVideoWindow_SetWindowForeground(pVidWin,lFocus);
1170 }
1171
1172 static HRESULT WINAPI
1173 IVideoWindow_fnNotifyOwnerMessage(IVideoWindow* iface,OAHWND hwnd,long message,LONG_PTR wParam,LONG_PTR lParam)
1174 {
1175         CFilterGraph_THIS(iface,vidwin);
1176         QUERYVIDEOWINDOW
1177
1178         TRACE("(%p)->()\n",This);
1179
1180         return IVideoWindow_NotifyOwnerMessage(pVidWin,hwnd,message,wParam,lParam);
1181 }
1182
1183 static HRESULT WINAPI
1184 IVideoWindow_fnSetWindowPosition(IVideoWindow* iface,long lLeft,long lTop,long lWidth,long lHeight)
1185 {
1186         CFilterGraph_THIS(iface,vidwin);
1187         QUERYVIDEOWINDOW
1188
1189         TRACE("(%p)->()\n",This);
1190
1191         return IVideoWindow_SetWindowPosition(pVidWin,lLeft,lTop,lWidth,lHeight);
1192 }
1193
1194 static HRESULT WINAPI
1195 IVideoWindow_fnGetWindowPosition(IVideoWindow* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight)
1196 {
1197         CFilterGraph_THIS(iface,vidwin);
1198         QUERYVIDEOWINDOW
1199
1200         TRACE("(%p)->()\n",This);
1201
1202         return IVideoWindow_GetWindowPosition(pVidWin,plLeft,plTop,plWidth,plHeight);
1203 }
1204
1205 static HRESULT WINAPI
1206 IVideoWindow_fnGetMinIdealImageSize(IVideoWindow* iface,long* plWidth,long* plHeight)
1207 {
1208         CFilterGraph_THIS(iface,vidwin);
1209         QUERYVIDEOWINDOW
1210
1211         TRACE("(%p)->()\n",This);
1212
1213         return IVideoWindow_GetMinIdealImageSize(pVidWin,plWidth,plHeight);
1214 }
1215
1216 static HRESULT WINAPI
1217 IVideoWindow_fnGetMaxIdealImageSize(IVideoWindow* iface,long* plWidth,long* plHeight)
1218 {
1219         CFilterGraph_THIS(iface,vidwin);
1220         QUERYVIDEOWINDOW
1221
1222         TRACE("(%p)->()\n",This);
1223
1224         return IVideoWindow_GetMaxIdealImageSize(pVidWin,plWidth,plHeight);
1225 }
1226
1227 static HRESULT WINAPI
1228 IVideoWindow_fnGetRestorePosition(IVideoWindow* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight)
1229 {
1230         CFilterGraph_THIS(iface,vidwin);
1231         QUERYVIDEOWINDOW
1232
1233         TRACE("(%p)->()\n",This);
1234
1235         return IVideoWindow_GetRestorePosition(pVidWin,plLeft,plTop,plWidth,plHeight);
1236 }
1237
1238 static HRESULT WINAPI
1239 IVideoWindow_fnHideCursor(IVideoWindow* iface,long lHide)
1240 {
1241         CFilterGraph_THIS(iface,vidwin);
1242         QUERYVIDEOWINDOW
1243
1244         TRACE("(%p)->()\n",This);
1245
1246         return IVideoWindow_HideCursor(pVidWin,lHide);
1247 }
1248
1249 static HRESULT WINAPI
1250 IVideoWindow_fnIsCursorHidden(IVideoWindow* iface,long* plHide)
1251 {
1252         CFilterGraph_THIS(iface,vidwin);
1253         QUERYVIDEOWINDOW
1254
1255         TRACE("(%p)->()\n",This);
1256
1257         return IVideoWindow_IsCursorHidden(pVidWin,plHide);
1258 }
1259
1260
1261
1262
1263 static ICOM_VTABLE(IVideoWindow) ivideowindow =
1264 {
1265         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
1266         /* IUnknown fields */
1267         IVideoWindow_fnQueryInterface,
1268         IVideoWindow_fnAddRef,
1269         IVideoWindow_fnRelease,
1270         /* IDispatch fields */
1271         IVideoWindow_fnGetTypeInfoCount,
1272         IVideoWindow_fnGetTypeInfo,
1273         IVideoWindow_fnGetIDsOfNames,
1274         IVideoWindow_fnInvoke,
1275         /* IVideoWindow fields */
1276         IVideoWindow_fnput_Caption,
1277         IVideoWindow_fnget_Caption,
1278         IVideoWindow_fnput_WindowStyle,
1279         IVideoWindow_fnget_WindowStyle,
1280         IVideoWindow_fnput_WindowStyleEx,
1281         IVideoWindow_fnget_WindowStyleEx,
1282         IVideoWindow_fnput_AutoShow,
1283         IVideoWindow_fnget_AutoShow,
1284         IVideoWindow_fnput_WindowState,
1285         IVideoWindow_fnget_WindowState,
1286         IVideoWindow_fnput_BackgroundPalette,
1287         IVideoWindow_fnget_BackgroundPalette,
1288         IVideoWindow_fnput_Visible,
1289         IVideoWindow_fnget_Visible,
1290         IVideoWindow_fnput_Left,
1291         IVideoWindow_fnget_Left,
1292         IVideoWindow_fnput_Width,
1293         IVideoWindow_fnget_Width,
1294         IVideoWindow_fnput_Top,
1295         IVideoWindow_fnget_Top,
1296         IVideoWindow_fnput_Height,
1297         IVideoWindow_fnget_Height,
1298         IVideoWindow_fnput_Owner,
1299         IVideoWindow_fnget_Owner,
1300         IVideoWindow_fnput_MessageDrain,
1301         IVideoWindow_fnget_MessageDrain,
1302         IVideoWindow_fnget_BorderColor,
1303         IVideoWindow_fnput_BorderColor,
1304         IVideoWindow_fnget_FullScreenMode,
1305         IVideoWindow_fnput_FullScreenMode,
1306         IVideoWindow_fnSetWindowForeground,
1307         IVideoWindow_fnNotifyOwnerMessage,
1308         IVideoWindow_fnSetWindowPosition,
1309         IVideoWindow_fnGetWindowPosition,
1310         IVideoWindow_fnGetMinIdealImageSize,
1311         IVideoWindow_fnGetMaxIdealImageSize,
1312         IVideoWindow_fnGetRestorePosition,
1313         IVideoWindow_fnHideCursor,
1314         IVideoWindow_fnIsCursorHidden,
1315
1316 };
1317
1318
1319 HRESULT CFilterGraph_InitIVideoWindow( CFilterGraph* pfg )
1320 {
1321         TRACE("(%p)\n",pfg);
1322         ICOM_VTBL(&pfg->vidwin) = &ivideowindow;
1323
1324         return NOERROR;
1325 }
1326
1327 void CFilterGraph_UninitIVideoWindow( CFilterGraph* pfg )
1328 {
1329         TRACE("(%p)\n",pfg);
1330 }
1331
1332 #undef QUERYVIDEOWINDOW