Fixed some bugs.
[wine/multimedia.git] / dlls / quartz / vidren.c
blobaafcfe5dbcde806360e032ac04e63159edc8b05e
1 /*
2 * Implements CLSID_VideoRenderer.
4 * hidenori@a2.ctktv.ne.jp
6 * FIXME - use clock
7 */
9 #include "config.h"
11 #include <stdlib.h>
12 #include "windef.h"
13 #include "winbase.h"
14 #include "wingdi.h"
15 #include "winuser.h"
16 #include "winerror.h"
17 #include "mmsystem.h"
18 #include "strmif.h"
19 #include "control.h"
20 #include "vfwmsgs.h"
21 #include "uuids.h"
22 #include "amvideo.h"
23 #include "evcode.h"
25 #include "debugtools.h"
26 DEFAULT_DEBUG_CHANNEL(quartz);
28 #include "quartz_private.h"
29 #include "vidren.h"
30 #include "seekpass.h"
33 static const WCHAR QUARTZ_VideoRenderer_Name[] =
34 { 'V','i','d','e','o',' ','R','e','n','d','e','r','e','r',0 };
35 static const WCHAR QUARTZ_VideoRendererPin_Name[] =
36 { 'I','n',0 };
38 #define VIDRENMSG_UPDATE (WM_APP+0)
39 #define VIDRENMSG_ENDTHREAD (WM_APP+1)
41 static const CHAR VIDREN_szWndClass[] = "Wine_VideoRenderer";
42 static const CHAR VIDREN_szWndName[] = "Wine Video Renderer";
47 static void VIDREN_OnPaint( CVideoRendererImpl* This, HWND hwnd )
49 PAINTSTRUCT ps;
50 const VIDEOINFOHEADER* pinfo;
51 const AM_MEDIA_TYPE* pmt;
53 TRACE("(%p,%08x)\n",This,hwnd);
55 if ( !BeginPaint( hwnd, &ps ) )
56 return;
58 pmt = This->pPin->pin.pmtConn;
59 if ( (!This->m_bSampleIsValid) || pmt == NULL )
60 goto err;
62 pinfo = (const VIDEOINFOHEADER*)pmt->pbFormat;
64 StretchDIBits(
65 ps.hdc,
66 0, 0,
67 abs(pinfo->bmiHeader.biWidth), abs(pinfo->bmiHeader.biHeight),
68 0, 0,
69 abs(pinfo->bmiHeader.biWidth), abs(pinfo->bmiHeader.biHeight),
70 This->m_pSampleData, (BITMAPINFO*)(&pinfo->bmiHeader),
71 DIB_RGB_COLORS, SRCCOPY );
73 err:
74 EndPaint( hwnd, &ps );
77 static void VIDREN_OnQueryNewPalette( CVideoRendererImpl* This, HWND hwnd )
79 FIXME("(%p,%08x)\n",This,hwnd);
82 static void VIDREN_OnUpdate( CVideoRendererImpl* This, HWND hwnd )
84 MSG msg;
86 TRACE("(%p,%08x)\n",This,hwnd);
88 InvalidateRect(hwnd,NULL,FALSE);
89 UpdateWindow(hwnd);
91 /* FIXME */
92 while ( PeekMessageA(&msg,hwnd,
93 VIDRENMSG_UPDATE,VIDRENMSG_UPDATE,
94 PM_REMOVE) != FALSE )
96 /* discard this message. */
101 static LRESULT CALLBACK
102 VIDREN_WndProc(
103 HWND hwnd, UINT message,
104 WPARAM wParam, LPARAM lParam )
106 CVideoRendererImpl* This = (CVideoRendererImpl*)
107 GetWindowLongA( hwnd, 0L );
109 TRACE("(%p) - %u/%u/%ld\n",This,message,wParam,lParam);
111 if ( message == WM_NCCREATE )
113 This = (CVideoRendererImpl*)(((CREATESTRUCTA*)lParam)->lpCreateParams);
114 SetWindowLongA( hwnd, 0L, (LONG)This );
115 This->m_hwnd = hwnd;
118 if ( message == WM_NCDESTROY )
120 PostQuitMessage(0);
121 This->m_hwnd = (HWND)NULL;
122 SetWindowLongA( hwnd, 0L, (LONG)NULL );
123 This = NULL;
126 if ( This != NULL )
128 switch ( message )
130 case WM_PAINT:
131 TRACE("WM_PAINT begin\n");
132 EnterCriticalSection( &This->m_csSample );
133 VIDREN_OnPaint( This, hwnd );
134 LeaveCriticalSection( &This->m_csSample );
135 TRACE("WM_PAINT end\n");
136 return 0;
137 case WM_CLOSE:
138 ShowWindow( hwnd, SW_HIDE );
139 return 0;
140 case WM_PALETTECHANGED:
141 if ( hwnd == (HWND)wParam )
142 break;
143 /* fall through */
144 case WM_QUERYNEWPALETTE:
145 VIDREN_OnQueryNewPalette( This, hwnd );
146 break;
147 case VIDRENMSG_UPDATE:
148 VIDREN_OnUpdate( This, hwnd );
149 return 0;
150 case VIDRENMSG_ENDTHREAD:
151 DestroyWindow(hwnd);
152 return 0;
153 default:
154 break;
158 return DefWindowProcA( hwnd, message, wParam, lParam );
161 static BOOL VIDREN_Register( HINSTANCE hInst )
163 WNDCLASSA wc;
164 ATOM atom;
166 wc.style = 0;
167 wc.lpfnWndProc = VIDREN_WndProc;
168 wc.cbClsExtra = 0;
169 wc.cbWndExtra = sizeof(LONG);
170 wc.hInstance = hInst;
171 wc.hIcon = LoadIconA((HINSTANCE)NULL,IDI_WINLOGOA);
172 wc.hCursor = LoadCursorA((HINSTANCE)NULL,IDC_ARROWA);
173 wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
174 wc.lpszMenuName = NULL;
175 wc.lpszClassName = VIDREN_szWndClass;
177 atom = RegisterClassA( &wc );
178 if ( atom != (ATOM)0 )
179 return TRUE;
181 /* FIXME */
182 return FALSE;
185 static HWND VIDREN_Create( HWND hwndOwner, CVideoRendererImpl* This )
187 HINSTANCE hInst = (HINSTANCE)GetModuleHandleA(NULL);
188 const VIDEOINFOHEADER* pinfo;
189 DWORD dwExStyle = 0;
190 DWORD dwStyle = WS_POPUP|WS_CAPTION|WS_CLIPCHILDREN;
191 RECT rcWnd;
192 HWND hwnd;
194 if ( !VIDREN_Register( hInst ) )
195 return (HWND)NULL;
197 pinfo = (const VIDEOINFOHEADER*)This->pPin->pin.pmtConn->pbFormat;
199 TRACE("width %ld, height %ld\n", pinfo->bmiHeader.biWidth, pinfo->bmiHeader.biHeight);
201 rcWnd.left = 0;
202 rcWnd.top = 0;
203 rcWnd.right = pinfo->bmiHeader.biWidth;
204 rcWnd.bottom = abs(pinfo->bmiHeader.biHeight);
205 AdjustWindowRectEx( &rcWnd, dwStyle, FALSE, dwExStyle );
207 TRACE("window width %d,height %d\n",
208 rcWnd.right-rcWnd.left,rcWnd.bottom-rcWnd.top);
210 hwnd = CreateWindowExA(
211 dwExStyle,
212 VIDREN_szWndClass, VIDREN_szWndName,
213 dwStyle,
214 100,100, /* FIXME */
215 rcWnd.right-rcWnd.left, rcWnd.bottom-rcWnd.top,
216 hwndOwner, (HMENU)NULL,
217 hInst, (LPVOID)This );
218 if ( hwnd != (HWND)NULL )
219 ShowWindow(hwnd,SW_SHOW);
221 return hwnd;
224 static DWORD WINAPI VIDREN_ThreadEntry( LPVOID pv )
226 CVideoRendererImpl* This = (CVideoRendererImpl*)pv;
227 MSG msg;
229 TRACE("(%p)\n",This);
230 if ( !VIDREN_Create( (HWND)NULL, This ) )
231 return 0;
232 TRACE("VIDREN_Create succeeded\n");
234 SetEvent( This->m_hEventInit );
235 TRACE("Enter message loop\n");
237 while ( GetMessageA(&msg,(HWND)NULL,0,0) )
239 TranslateMessage(&msg);
240 DispatchMessageA(&msg);
243 return 0;
246 static HRESULT VIDREN_StartThread( CVideoRendererImpl* This )
248 DWORD dwRes;
249 DWORD dwThreadId;
250 HANDLE hEvents[2];
252 if ( This->m_hEventInit != (HANDLE)NULL ||
253 This->m_hwnd != (HWND)NULL ||
254 This->m_hThread != (HANDLE)NULL ||
255 This->pPin->pin.pmtConn == NULL )
256 return E_UNEXPECTED;
258 This->m_hEventInit = CreateEventA(NULL,TRUE,FALSE,NULL);
259 if ( This->m_hEventInit == (HANDLE)NULL )
260 return E_OUTOFMEMORY;
262 This->m_hThread = CreateThread(
263 NULL, 0,
264 VIDREN_ThreadEntry,
265 (LPVOID)This,
266 0, &dwThreadId );
267 if ( This->m_hThread == (HANDLE)NULL )
268 return E_FAIL;
270 hEvents[0] = This->m_hEventInit;
271 hEvents[1] = This->m_hThread;
273 dwRes = WaitForMultipleObjects(2,hEvents,FALSE,INFINITE);
274 if ( dwRes != WAIT_OBJECT_0 )
275 return E_FAIL;
277 return S_OK;
280 static void VIDREN_EndThread( CVideoRendererImpl* This )
282 if ( This->m_hwnd != (HWND)NULL )
283 PostMessageA( This->m_hwnd, VIDRENMSG_ENDTHREAD, 0, 0 );
285 if ( This->m_hThread != (HANDLE)NULL )
287 WaitForSingleObject( This->m_hThread, INFINITE );
288 CloseHandle( This->m_hThread );
289 This->m_hThread = (HANDLE)NULL;
291 if ( This->m_hEventInit != (HANDLE)NULL )
293 CloseHandle( This->m_hEventInit );
294 This->m_hEventInit = (HANDLE)NULL;
300 /***************************************************************************
302 * CVideoRendererImpl methods
306 static HRESULT CVideoRendererImpl_OnActive( CBaseFilterImpl* pImpl )
308 CVideoRendererImpl_THIS(pImpl,basefilter);
310 FIXME( "(%p)\n", This );
312 This->m_bSampleIsValid = FALSE;
314 return NOERROR;
317 static HRESULT CVideoRendererImpl_OnInactive( CBaseFilterImpl* pImpl )
319 CVideoRendererImpl_THIS(pImpl,basefilter);
321 FIXME( "(%p)\n", This );
323 EnterCriticalSection( &This->m_csSample );
324 This->m_bSampleIsValid = FALSE;
325 LeaveCriticalSection( &This->m_csSample );
327 return NOERROR;
330 static const CBaseFilterHandlers filterhandlers =
332 CVideoRendererImpl_OnActive, /* pOnActive */
333 CVideoRendererImpl_OnInactive, /* pOnInactive */
334 NULL, /* pOnStop */
337 /***************************************************************************
339 * CVideoRendererPinImpl methods
343 static HRESULT CVideoRendererPinImpl_OnPreConnect( CPinBaseImpl* pImpl, IPin* pPin )
345 CVideoRendererPinImpl_THIS(pImpl,pin);
347 TRACE("(%p,%p)\n",This,pPin);
349 return NOERROR;
352 static HRESULT CVideoRendererPinImpl_OnPostConnect( CPinBaseImpl* pImpl, IPin* pPin )
354 CVideoRendererPinImpl_THIS(pImpl,pin);
355 const VIDEOINFOHEADER* pinfo;
356 HRESULT hr;
358 TRACE("(%p,%p)\n",This,pPin);
360 if ( This->pRender->m_pSampleData != NULL )
362 QUARTZ_FreeMem(This->pRender->m_pSampleData);
363 This->pRender->m_pSampleData = NULL;
365 This->pRender->m_cbSampleData = 0;
366 This->pRender->m_bSampleIsValid = FALSE;
368 pinfo = (const VIDEOINFOHEADER*)This->pin.pmtConn->pbFormat;
369 if ( pinfo == NULL )
370 return E_FAIL;
372 This->pRender->m_bSampleIsValid = FALSE;
373 This->pRender->m_cbSampleData = DIBSIZE(pinfo->bmiHeader);
374 This->pRender->m_pSampleData = (BYTE*)QUARTZ_AllocMem(This->pRender->m_cbSampleData);
375 if ( This->pRender->m_pSampleData == NULL )
376 return E_OUTOFMEMORY;
378 hr = VIDREN_StartThread(This->pRender);
379 if ( FAILED(hr) )
380 return hr;
382 return NOERROR;
385 static HRESULT CVideoRendererPinImpl_OnDisconnect( CPinBaseImpl* pImpl )
387 CVideoRendererPinImpl_THIS(pImpl,pin);
389 TRACE("(%p)\n",This);
391 VIDREN_EndThread(This->pRender);
393 if ( This->pRender->m_pSampleData != NULL )
395 QUARTZ_FreeMem(This->pRender->m_pSampleData);
396 This->pRender->m_pSampleData = NULL;
398 This->pRender->m_cbSampleData = 0;
399 This->pRender->m_bSampleIsValid = FALSE;
401 if ( This->meminput.pAllocator != NULL )
403 IMemAllocator_Decommit(This->meminput.pAllocator);
404 IMemAllocator_Release(This->meminput.pAllocator);
405 This->meminput.pAllocator = NULL;
408 return NOERROR;
411 static HRESULT CVideoRendererPinImpl_CheckMediaType( CPinBaseImpl* pImpl, const AM_MEDIA_TYPE* pmt )
413 CVideoRendererPinImpl_THIS(pImpl,pin);
414 const VIDEOINFOHEADER* pinfo;
416 TRACE("(%p,%p)\n",This,pmt);
418 if ( !IsEqualGUID( &pmt->majortype, &MEDIATYPE_Video ) )
419 return E_FAIL;
420 if ( !IsEqualGUID( &pmt->formattype, &FORMAT_VideoInfo ) )
421 return E_FAIL;
423 * check subtype.
425 if ( !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB555 ) &&
426 !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB565 ) &&
427 !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB24 ) &&
428 !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB32 ) )
429 return E_FAIL;
431 /****
434 if ( !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB8 ) &&
435 !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB555 ) &&
436 !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB565 ) &&
437 !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB24 ) &&
438 !IsEqualGUID( &pmt->subtype, &MEDIASUBTYPE_RGB32 ) )
439 return E_FAIL;
441 ****/
443 pinfo = (const VIDEOINFOHEADER*)pmt->pbFormat;
444 if ( pinfo == NULL ||
445 pinfo->bmiHeader.biSize < sizeof(BITMAPINFOHEADER) ||
446 pinfo->bmiHeader.biWidth <= 0 ||
447 pinfo->bmiHeader.biHeight == 0 ||
448 pinfo->bmiHeader.biPlanes != 1 ||
449 pinfo->bmiHeader.biCompression != 0 )
450 return E_FAIL;
452 return NOERROR;
455 static HRESULT CVideoRendererPinImpl_Receive( CPinBaseImpl* pImpl, IMediaSample* pSample )
457 CVideoRendererPinImpl_THIS(pImpl,pin);
458 HWND hwnd;
459 BYTE* pData = NULL;
460 LONG lLength;
461 HRESULT hr;
463 TRACE( "(%p,%p)\n",This,pSample );
465 hwnd = This->pRender->m_hwnd;
466 if ( hwnd == (HWND)NULL ||
467 This->pRender->m_hThread == (HWND)NULL )
468 return E_UNEXPECTED;
469 if ( This->pRender->m_fInFlush )
470 return S_FALSE;
471 if ( pSample == NULL )
472 return E_POINTER;
474 /* FIXME - wait/skip/qualitycontrol */
477 /* duplicate this sample. */
478 hr = IMediaSample_GetPointer(pSample,&pData);
479 if ( FAILED(hr) )
480 return hr;
481 lLength = (LONG)IMediaSample_GetActualDataLength(pSample);
482 if ( lLength <= 0 || (lLength < (LONG)This->pRender->m_cbSampleData) )
484 ERR( "invalid length: %ld\n", lLength );
485 return NOERROR;
488 EnterCriticalSection( &This->pRender->m_csSample );
489 memcpy(This->pRender->m_pSampleData,pData,lLength);
490 This->pRender->m_bSampleIsValid = TRUE;
491 PostMessageA( hwnd, VIDRENMSG_UPDATE, 0, 0 );
492 LeaveCriticalSection( &This->pRender->m_csSample );
494 return NOERROR;
497 static HRESULT CVideoRendererPinImpl_ReceiveCanBlock( CPinBaseImpl* pImpl )
499 CVideoRendererPinImpl_THIS(pImpl,pin);
501 TRACE( "(%p)\n", This );
503 /* might block. */
504 return S_OK;
507 static HRESULT CVideoRendererPinImpl_EndOfStream( CPinBaseImpl* pImpl )
509 CVideoRendererPinImpl_THIS(pImpl,pin);
511 FIXME( "(%p)\n", This );
513 This->pRender->m_fInFlush = FALSE;
515 /* FIXME - don't notify twice until stopped or seeked. */
516 return CBaseFilterImpl_MediaEventNotify(
517 &This->pRender->basefilter, EC_COMPLETE,
518 (LONG_PTR)S_OK, (LONG_PTR)(IBaseFilter*)(This->pRender) );
521 static HRESULT CVideoRendererPinImpl_BeginFlush( CPinBaseImpl* pImpl )
523 CVideoRendererPinImpl_THIS(pImpl,pin);
525 FIXME( "(%p)\n", This );
527 This->pRender->m_fInFlush = TRUE;
528 EnterCriticalSection( &This->pRender->m_csSample );
529 This->pRender->m_bSampleIsValid = FALSE;
530 LeaveCriticalSection( &This->pRender->m_csSample );
532 return NOERROR;
535 static HRESULT CVideoRendererPinImpl_EndFlush( CPinBaseImpl* pImpl )
537 CVideoRendererPinImpl_THIS(pImpl,pin);
539 FIXME( "(%p)\n", This );
541 This->pRender->m_fInFlush = FALSE;
543 return NOERROR;
546 static HRESULT CVideoRendererPinImpl_NewSegment( CPinBaseImpl* pImpl, REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, double rate )
548 CVideoRendererPinImpl_THIS(pImpl,pin);
550 FIXME( "(%p)\n", This );
552 This->pRender->m_fInFlush = FALSE;
554 return NOERROR;
560 static const CBasePinHandlers pinhandlers =
562 CVideoRendererPinImpl_OnPreConnect, /* pOnPreConnect */
563 CVideoRendererPinImpl_OnPostConnect, /* pOnPostConnect */
564 CVideoRendererPinImpl_OnDisconnect, /* pOnDisconnect */
565 CVideoRendererPinImpl_CheckMediaType, /* pCheckMediaType */
566 NULL, /* pQualityNotify */
567 CVideoRendererPinImpl_Receive, /* pReceive */
568 CVideoRendererPinImpl_ReceiveCanBlock, /* pReceiveCanBlock */
569 CVideoRendererPinImpl_EndOfStream, /* pEndOfStream */
570 CVideoRendererPinImpl_BeginFlush, /* pBeginFlush */
571 CVideoRendererPinImpl_EndFlush, /* pEndFlush */
572 CVideoRendererPinImpl_NewSegment, /* pNewSegment */
576 /***************************************************************************
578 * new/delete CVideoRendererImpl
582 /* can I use offsetof safely? - FIXME? */
583 static QUARTZ_IFEntry FilterIFEntries[] =
585 { &IID_IPersist, offsetof(CVideoRendererImpl,basefilter)-offsetof(CVideoRendererImpl,unk) },
586 { &IID_IMediaFilter, offsetof(CVideoRendererImpl,basefilter)-offsetof(CVideoRendererImpl,unk) },
587 { &IID_IBaseFilter, offsetof(CVideoRendererImpl,basefilter)-offsetof(CVideoRendererImpl,unk) },
588 { &IID_IBasicVideo, offsetof(CVideoRendererImpl,basvid)-offsetof(CVideoRendererImpl,unk) },
589 { &IID_IBasicVideo2, offsetof(CVideoRendererImpl,basvid)-offsetof(CVideoRendererImpl,unk) },
590 { &IID_IVideoWindow, offsetof(CVideoRendererImpl,vidwin)-offsetof(CVideoRendererImpl,unk) },
593 static HRESULT CVideoRendererImpl_OnQueryInterface(
594 IUnknown* punk, const IID* piid, void** ppobj )
596 CVideoRendererImpl_THIS(punk,unk);
598 if ( This->pSeekPass == NULL )
599 return E_NOINTERFACE;
601 if ( IsEqualGUID( &IID_IMediaPosition, piid ) ||
602 IsEqualGUID( &IID_IMediaSeeking, piid ) )
604 TRACE( "IMediaSeeking(or IMediaPosition) is queried\n" );
605 return IUnknown_QueryInterface( (IUnknown*)(&This->pSeekPass->unk), piid, ppobj );
608 return E_NOINTERFACE;
611 static void QUARTZ_DestroyVideoRenderer(IUnknown* punk)
613 CVideoRendererImpl_THIS(punk,unk);
615 TRACE( "(%p)\n", This );
616 CVideoRendererImpl_OnInactive(&This->basefilter);
617 VIDREN_EndThread(This);
619 if ( This->pPin != NULL )
621 IUnknown_Release(This->pPin->unk.punkControl);
622 This->pPin = NULL;
624 if ( This->pSeekPass != NULL )
626 IUnknown_Release((IUnknown*)&This->pSeekPass->unk);
627 This->pSeekPass = NULL;
630 CVideoRendererImpl_UninitIBasicVideo2(This);
631 CVideoRendererImpl_UninitIVideoWindow(This);
632 CBaseFilterImpl_UninitIBaseFilter(&This->basefilter);
634 DeleteCriticalSection( &This->m_csSample );
637 HRESULT QUARTZ_CreateVideoRenderer(IUnknown* punkOuter,void** ppobj)
639 CVideoRendererImpl* This = NULL;
640 HRESULT hr;
642 TRACE("(%p,%p)\n",punkOuter,ppobj);
644 This = (CVideoRendererImpl*)
645 QUARTZ_AllocObj( sizeof(CVideoRendererImpl) );
646 if ( This == NULL )
647 return E_OUTOFMEMORY;
648 This->pSeekPass = NULL;
649 This->pPin = NULL;
650 This->m_fInFlush = FALSE;
652 This->m_hEventInit = (HANDLE)NULL;
653 This->m_hThread = (HANDLE)NULL;
654 This->m_hwnd = (HWND)NULL;
655 This->m_bSampleIsValid = FALSE;
656 This->m_pSampleData = NULL;
657 This->m_cbSampleData = 0;
659 QUARTZ_IUnkInit( &This->unk, punkOuter );
660 This->qiext.pNext = NULL;
661 This->qiext.pOnQueryInterface = &CVideoRendererImpl_OnQueryInterface;
662 QUARTZ_IUnkAddDelegation( &This->unk, &This->qiext );
664 hr = CBaseFilterImpl_InitIBaseFilter(
665 &This->basefilter,
666 This->unk.punkControl,
667 &CLSID_VideoRenderer,
668 QUARTZ_VideoRenderer_Name,
669 &filterhandlers );
670 if ( SUCCEEDED(hr) )
672 hr = CVideoRendererImpl_InitIBasicVideo2(This);
673 if ( SUCCEEDED(hr) )
675 hr = CVideoRendererImpl_InitIVideoWindow(This);
676 if ( FAILED(hr) )
678 CVideoRendererImpl_UninitIBasicVideo2(This);
681 if ( FAILED(hr) )
683 CBaseFilterImpl_UninitIBaseFilter(&This->basefilter);
687 if ( FAILED(hr) )
689 QUARTZ_FreeObj(This);
690 return hr;
693 This->unk.pEntries = FilterIFEntries;
694 This->unk.dwEntries = sizeof(FilterIFEntries)/sizeof(FilterIFEntries[0]);
695 This->unk.pOnFinalRelease = QUARTZ_DestroyVideoRenderer;
697 InitializeCriticalSection( &This->m_csSample );
699 hr = QUARTZ_CreateVideoRendererPin(
700 This,
701 &This->basefilter.csFilter,
702 &This->pPin );
703 if ( SUCCEEDED(hr) )
704 hr = QUARTZ_CompList_AddComp(
705 This->basefilter.pInPins,
706 (IUnknown*)&This->pPin->pin,
707 NULL, 0 );
708 if ( SUCCEEDED(hr) )
709 hr = QUARTZ_CreateSeekingPassThruInternal(
710 (IUnknown*)&(This->unk), &This->pSeekPass,
711 TRUE, (IPin*)&(This->pPin->pin) );
713 if ( FAILED(hr) )
715 IUnknown_Release( This->unk.punkControl );
716 return hr;
719 *ppobj = (void*)&(This->unk);
721 return S_OK;
724 /***************************************************************************
726 * new/delete CVideoRendererPinImpl
730 /* can I use offsetof safely? - FIXME? */
731 static QUARTZ_IFEntry PinIFEntries[] =
733 { &IID_IPin, offsetof(CVideoRendererPinImpl,pin)-offsetof(CVideoRendererPinImpl,unk) },
734 { &IID_IMemInputPin, offsetof(CVideoRendererPinImpl,meminput)-offsetof(CVideoRendererPinImpl,unk) },
737 static void QUARTZ_DestroyVideoRendererPin(IUnknown* punk)
739 CVideoRendererPinImpl_THIS(punk,unk);
741 TRACE( "(%p)\n", This );
743 CPinBaseImpl_UninitIPin( &This->pin );
744 CMemInputPinBaseImpl_UninitIMemInputPin( &This->meminput );
747 HRESULT QUARTZ_CreateVideoRendererPin(
748 CVideoRendererImpl* pFilter,
749 CRITICAL_SECTION* pcsPin,
750 CVideoRendererPinImpl** ppPin)
752 CVideoRendererPinImpl* This = NULL;
753 HRESULT hr;
755 TRACE("(%p,%p,%p)\n",pFilter,pcsPin,ppPin);
757 This = (CVideoRendererPinImpl*)
758 QUARTZ_AllocObj( sizeof(CVideoRendererPinImpl) );
759 if ( This == NULL )
760 return E_OUTOFMEMORY;
762 QUARTZ_IUnkInit( &This->unk, NULL );
763 This->pRender = pFilter;
765 hr = CPinBaseImpl_InitIPin(
766 &This->pin,
767 This->unk.punkControl,
768 pcsPin,
769 &pFilter->basefilter,
770 QUARTZ_VideoRendererPin_Name,
771 FALSE,
772 &pinhandlers );
774 if ( SUCCEEDED(hr) )
776 hr = CMemInputPinBaseImpl_InitIMemInputPin(
777 &This->meminput,
778 This->unk.punkControl,
779 &This->pin );
780 if ( FAILED(hr) )
782 CPinBaseImpl_UninitIPin( &This->pin );
786 if ( FAILED(hr) )
788 QUARTZ_FreeObj(This);
789 return hr;
792 This->unk.pEntries = PinIFEntries;
793 This->unk.dwEntries = sizeof(PinIFEntries)/sizeof(PinIFEntries[0]);
794 This->unk.pOnFinalRelease = QUARTZ_DestroyVideoRendererPin;
796 *ppPin = This;
798 TRACE("returned successfully.\n");
800 return S_OK;
803 /***************************************************************************
805 * CVideoRendererImpl::IBasicVideo2
810 static HRESULT WINAPI
811 IBasicVideo2_fnQueryInterface(IBasicVideo2* iface,REFIID riid,void** ppobj)
813 CVideoRendererImpl_THIS(iface,basvid);
815 TRACE("(%p)->()\n",This);
817 return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
820 static ULONG WINAPI
821 IBasicVideo2_fnAddRef(IBasicVideo2* iface)
823 CVideoRendererImpl_THIS(iface,basvid);
825 TRACE("(%p)->()\n",This);
827 return IUnknown_AddRef(This->unk.punkControl);
830 static ULONG WINAPI
831 IBasicVideo2_fnRelease(IBasicVideo2* iface)
833 CVideoRendererImpl_THIS(iface,basvid);
835 TRACE("(%p)->()\n",This);
837 return IUnknown_Release(This->unk.punkControl);
840 static HRESULT WINAPI
841 IBasicVideo2_fnGetTypeInfoCount(IBasicVideo2* iface,UINT* pcTypeInfo)
843 CVideoRendererImpl_THIS(iface,basvid);
845 FIXME("(%p)->()\n",This);
847 return E_NOTIMPL;
850 static HRESULT WINAPI
851 IBasicVideo2_fnGetTypeInfo(IBasicVideo2* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj)
853 CVideoRendererImpl_THIS(iface,basvid);
855 FIXME("(%p)->()\n",This);
857 return E_NOTIMPL;
860 static HRESULT WINAPI
861 IBasicVideo2_fnGetIDsOfNames(IBasicVideo2* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId)
863 CVideoRendererImpl_THIS(iface,basvid);
865 FIXME("(%p)->()\n",This);
867 return E_NOTIMPL;
870 static HRESULT WINAPI
871 IBasicVideo2_fnInvoke(IBasicVideo2* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
873 CVideoRendererImpl_THIS(iface,basvid);
875 FIXME("(%p)->()\n",This);
877 return E_NOTIMPL;
881 static HRESULT WINAPI
882 IBasicVideo2_fnget_AvgTimePerFrame(IBasicVideo2* iface,REFTIME* prefTime)
884 CVideoRendererImpl_THIS(iface,basvid);
886 FIXME("(%p)->()\n",This);
888 return E_NOTIMPL;
891 static HRESULT WINAPI
892 IBasicVideo2_fnget_BitRate(IBasicVideo2* iface,long* plRate)
894 CVideoRendererImpl_THIS(iface,basvid);
896 FIXME("(%p)->()\n",This);
898 return E_NOTIMPL;
901 static HRESULT WINAPI
902 IBasicVideo2_fnget_BitErrorRate(IBasicVideo2* iface,long* plRate)
904 CVideoRendererImpl_THIS(iface,basvid);
906 FIXME("(%p)->()\n",This);
908 return E_NOTIMPL;
911 static HRESULT WINAPI
912 IBasicVideo2_fnget_VideoWidth(IBasicVideo2* iface,long* plWidth)
914 CVideoRendererImpl_THIS(iface,basvid);
916 FIXME("(%p)->()\n",This);
918 return E_NOTIMPL;
921 static HRESULT WINAPI
922 IBasicVideo2_fnget_VideoHeight(IBasicVideo2* iface,long* plHeight)
924 CVideoRendererImpl_THIS(iface,basvid);
926 FIXME("(%p)->()\n",This);
928 return E_NOTIMPL;
931 static HRESULT WINAPI
932 IBasicVideo2_fnput_SourceLeft(IBasicVideo2* iface,long lLeft)
934 CVideoRendererImpl_THIS(iface,basvid);
936 FIXME("(%p)->()\n",This);
938 return E_NOTIMPL;
941 static HRESULT WINAPI
942 IBasicVideo2_fnget_SourceLeft(IBasicVideo2* iface,long* plLeft)
944 CVideoRendererImpl_THIS(iface,basvid);
946 FIXME("(%p)->()\n",This);
948 return E_NOTIMPL;
951 static HRESULT WINAPI
952 IBasicVideo2_fnput_SourceWidth(IBasicVideo2* iface,long lWidth)
954 CVideoRendererImpl_THIS(iface,basvid);
956 FIXME("(%p)->()\n",This);
958 return E_NOTIMPL;
961 static HRESULT WINAPI
962 IBasicVideo2_fnget_SourceWidth(IBasicVideo2* iface,long* plWidth)
964 CVideoRendererImpl_THIS(iface,basvid);
966 FIXME("(%p)->()\n",This);
968 return E_NOTIMPL;
971 static HRESULT WINAPI
972 IBasicVideo2_fnput_SourceTop(IBasicVideo2* iface,long lTop)
974 CVideoRendererImpl_THIS(iface,basvid);
976 FIXME("(%p)->()\n",This);
978 return E_NOTIMPL;
981 static HRESULT WINAPI
982 IBasicVideo2_fnget_SourceTop(IBasicVideo2* iface,long* plTop)
984 CVideoRendererImpl_THIS(iface,basvid);
986 FIXME("(%p)->()\n",This);
988 return E_NOTIMPL;
991 static HRESULT WINAPI
992 IBasicVideo2_fnput_SourceHeight(IBasicVideo2* iface,long lHeight)
994 CVideoRendererImpl_THIS(iface,basvid);
996 FIXME("(%p)->()\n",This);
998 return E_NOTIMPL;
1001 static HRESULT WINAPI
1002 IBasicVideo2_fnget_SourceHeight(IBasicVideo2* iface,long* plHeight)
1004 CVideoRendererImpl_THIS(iface,basvid);
1006 FIXME("(%p)->()\n",This);
1008 return E_NOTIMPL;
1011 static HRESULT WINAPI
1012 IBasicVideo2_fnput_DestinationLeft(IBasicVideo2* iface,long lLeft)
1014 CVideoRendererImpl_THIS(iface,basvid);
1016 FIXME("(%p)->()\n",This);
1018 return E_NOTIMPL;
1021 static HRESULT WINAPI
1022 IBasicVideo2_fnget_DestinationLeft(IBasicVideo2* iface,long* plLeft)
1024 CVideoRendererImpl_THIS(iface,basvid);
1026 FIXME("(%p)->()\n",This);
1028 return E_NOTIMPL;
1031 static HRESULT WINAPI
1032 IBasicVideo2_fnput_DestinationWidth(IBasicVideo2* iface,long lWidth)
1034 CVideoRendererImpl_THIS(iface,basvid);
1036 FIXME("(%p)->()\n",This);
1038 return E_NOTIMPL;
1041 static HRESULT WINAPI
1042 IBasicVideo2_fnget_DestinationWidth(IBasicVideo2* iface,long* plWidth)
1044 CVideoRendererImpl_THIS(iface,basvid);
1046 FIXME("(%p)->()\n",This);
1048 return E_NOTIMPL;
1051 static HRESULT WINAPI
1052 IBasicVideo2_fnput_DestinationTop(IBasicVideo2* iface,long lTop)
1054 CVideoRendererImpl_THIS(iface,basvid);
1056 FIXME("(%p)->()\n",This);
1058 return E_NOTIMPL;
1061 static HRESULT WINAPI
1062 IBasicVideo2_fnget_DestinationTop(IBasicVideo2* iface,long* plTop)
1064 CVideoRendererImpl_THIS(iface,basvid);
1066 FIXME("(%p)->()\n",This);
1068 return E_NOTIMPL;
1071 static HRESULT WINAPI
1072 IBasicVideo2_fnput_DestinationHeight(IBasicVideo2* iface,long lHeight)
1074 CVideoRendererImpl_THIS(iface,basvid);
1076 FIXME("(%p)->()\n",This);
1078 return E_NOTIMPL;
1081 static HRESULT WINAPI
1082 IBasicVideo2_fnget_DestinationHeight(IBasicVideo2* iface,long* plHeight)
1084 CVideoRendererImpl_THIS(iface,basvid);
1086 FIXME("(%p)->()\n",This);
1088 return E_NOTIMPL;
1091 static HRESULT WINAPI
1092 IBasicVideo2_fnSetSourcePosition(IBasicVideo2* iface,long lLeft,long lTop,long lWidth,long lHeight)
1094 CVideoRendererImpl_THIS(iface,basvid);
1096 FIXME("(%p)->()\n",This);
1098 return E_NOTIMPL;
1101 static HRESULT WINAPI
1102 IBasicVideo2_fnGetSourcePosition(IBasicVideo2* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight)
1104 CVideoRendererImpl_THIS(iface,basvid);
1106 FIXME("(%p)->()\n",This);
1108 return E_NOTIMPL;
1111 static HRESULT WINAPI
1112 IBasicVideo2_fnSetDefaultSourcePosition(IBasicVideo2* iface)
1114 CVideoRendererImpl_THIS(iface,basvid);
1116 FIXME("(%p)->()\n",This);
1118 return E_NOTIMPL;
1121 static HRESULT WINAPI
1122 IBasicVideo2_fnSetDestinationPosition(IBasicVideo2* iface,long lLeft,long lTop,long lWidth,long lHeight)
1124 CVideoRendererImpl_THIS(iface,basvid);
1126 FIXME("(%p)->()\n",This);
1128 return E_NOTIMPL;
1131 static HRESULT WINAPI
1132 IBasicVideo2_fnGetDestinationPosition(IBasicVideo2* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight)
1134 CVideoRendererImpl_THIS(iface,basvid);
1136 FIXME("(%p)->()\n",This);
1138 return E_NOTIMPL;
1141 static HRESULT WINAPI
1142 IBasicVideo2_fnSetDefaultDestinationPosition(IBasicVideo2* iface)
1144 CVideoRendererImpl_THIS(iface,basvid);
1146 FIXME("(%p)->()\n",This);
1148 return E_NOTIMPL;
1151 static HRESULT WINAPI
1152 IBasicVideo2_fnGetVideoSize(IBasicVideo2* iface,long* plWidth,long* plHeight)
1154 CVideoRendererImpl_THIS(iface,basvid);
1156 FIXME("(%p)->()\n",This);
1158 return E_NOTIMPL;
1161 static HRESULT WINAPI
1162 IBasicVideo2_fnGetVideoPaletteEntries(IBasicVideo2* iface,long lStart,long lCount,long* plRet,long* plPaletteEntry)
1164 CVideoRendererImpl_THIS(iface,basvid);
1166 FIXME("(%p)->()\n",This);
1168 return E_NOTIMPL;
1171 static HRESULT WINAPI
1172 IBasicVideo2_fnGetCurrentImage(IBasicVideo2* iface,long* plBufferSize,long* plDIBBuffer)
1174 CVideoRendererImpl_THIS(iface,basvid);
1176 FIXME("(%p)->()\n",This);
1178 return E_NOTIMPL;
1181 static HRESULT WINAPI
1182 IBasicVideo2_fnIsUsingDefaultSource(IBasicVideo2* iface)
1184 CVideoRendererImpl_THIS(iface,basvid);
1186 FIXME("(%p)->()\n",This);
1188 return E_NOTIMPL;
1191 static HRESULT WINAPI
1192 IBasicVideo2_fnIsUsingDefaultDestination(IBasicVideo2* iface)
1194 CVideoRendererImpl_THIS(iface,basvid);
1196 FIXME("(%p)->()\n",This);
1198 return E_NOTIMPL;
1201 static HRESULT WINAPI
1202 IBasicVideo2_fnGetPreferredAspectRatio(IBasicVideo2* iface,long* plRateX,long* plRateY)
1204 CVideoRendererImpl_THIS(iface,basvid);
1206 FIXME("(%p)->()\n",This);
1208 return E_NOTIMPL;
1214 static ICOM_VTABLE(IBasicVideo2) ibasicvideo =
1216 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
1217 /* IUnknown fields */
1218 IBasicVideo2_fnQueryInterface,
1219 IBasicVideo2_fnAddRef,
1220 IBasicVideo2_fnRelease,
1221 /* IDispatch fields */
1222 IBasicVideo2_fnGetTypeInfoCount,
1223 IBasicVideo2_fnGetTypeInfo,
1224 IBasicVideo2_fnGetIDsOfNames,
1225 IBasicVideo2_fnInvoke,
1226 /* IBasicVideo fields */
1227 IBasicVideo2_fnget_AvgTimePerFrame,
1228 IBasicVideo2_fnget_BitRate,
1229 IBasicVideo2_fnget_BitErrorRate,
1230 IBasicVideo2_fnget_VideoWidth,
1231 IBasicVideo2_fnget_VideoHeight,
1232 IBasicVideo2_fnput_SourceLeft,
1233 IBasicVideo2_fnget_SourceLeft,
1234 IBasicVideo2_fnput_SourceWidth,
1235 IBasicVideo2_fnget_SourceWidth,
1236 IBasicVideo2_fnput_SourceTop,
1237 IBasicVideo2_fnget_SourceTop,
1238 IBasicVideo2_fnput_SourceHeight,
1239 IBasicVideo2_fnget_SourceHeight,
1240 IBasicVideo2_fnput_DestinationLeft,
1241 IBasicVideo2_fnget_DestinationLeft,
1242 IBasicVideo2_fnput_DestinationWidth,
1243 IBasicVideo2_fnget_DestinationWidth,
1244 IBasicVideo2_fnput_DestinationTop,
1245 IBasicVideo2_fnget_DestinationTop,
1246 IBasicVideo2_fnput_DestinationHeight,
1247 IBasicVideo2_fnget_DestinationHeight,
1248 IBasicVideo2_fnSetSourcePosition,
1249 IBasicVideo2_fnGetSourcePosition,
1250 IBasicVideo2_fnSetDefaultSourcePosition,
1251 IBasicVideo2_fnSetDestinationPosition,
1252 IBasicVideo2_fnGetDestinationPosition,
1253 IBasicVideo2_fnSetDefaultDestinationPosition,
1254 IBasicVideo2_fnGetVideoSize,
1255 IBasicVideo2_fnGetVideoPaletteEntries,
1256 IBasicVideo2_fnGetCurrentImage,
1257 IBasicVideo2_fnIsUsingDefaultSource,
1258 IBasicVideo2_fnIsUsingDefaultDestination,
1259 /* IBasicVideo2 fields */
1260 IBasicVideo2_fnGetPreferredAspectRatio,
1264 HRESULT CVideoRendererImpl_InitIBasicVideo2( CVideoRendererImpl* This )
1266 TRACE("(%p)\n",This);
1267 ICOM_VTBL(&This->basvid) = &ibasicvideo;
1269 return NOERROR;
1272 void CVideoRendererImpl_UninitIBasicVideo2( CVideoRendererImpl* This )
1274 TRACE("(%p)\n",This);
1277 /***************************************************************************
1279 * CVideoRendererImpl::IVideoWindow
1284 static HRESULT WINAPI
1285 IVideoWindow_fnQueryInterface(IVideoWindow* iface,REFIID riid,void** ppobj)
1287 CVideoRendererImpl_THIS(iface,vidwin);
1289 TRACE("(%p)->()\n",This);
1291 return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
1294 static ULONG WINAPI
1295 IVideoWindow_fnAddRef(IVideoWindow* iface)
1297 CVideoRendererImpl_THIS(iface,vidwin);
1299 TRACE("(%p)->()\n",This);
1301 return IUnknown_AddRef(This->unk.punkControl);
1304 static ULONG WINAPI
1305 IVideoWindow_fnRelease(IVideoWindow* iface)
1307 CVideoRendererImpl_THIS(iface,vidwin);
1309 TRACE("(%p)->()\n",This);
1311 return IUnknown_Release(This->unk.punkControl);
1314 static HRESULT WINAPI
1315 IVideoWindow_fnGetTypeInfoCount(IVideoWindow* iface,UINT* pcTypeInfo)
1317 CVideoRendererImpl_THIS(iface,vidwin);
1319 FIXME("(%p)->()\n",This);
1321 return E_NOTIMPL;
1324 static HRESULT WINAPI
1325 IVideoWindow_fnGetTypeInfo(IVideoWindow* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj)
1327 CVideoRendererImpl_THIS(iface,vidwin);
1329 FIXME("(%p)->()\n",This);
1331 return E_NOTIMPL;
1334 static HRESULT WINAPI
1335 IVideoWindow_fnGetIDsOfNames(IVideoWindow* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId)
1337 CVideoRendererImpl_THIS(iface,vidwin);
1339 FIXME("(%p)->()\n",This);
1341 return E_NOTIMPL;
1344 static HRESULT WINAPI
1345 IVideoWindow_fnInvoke(IVideoWindow* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
1347 CVideoRendererImpl_THIS(iface,vidwin);
1349 FIXME("(%p)->()\n",This);
1351 return E_NOTIMPL;
1356 static HRESULT WINAPI
1357 IVideoWindow_fnput_Caption(IVideoWindow* iface,BSTR strCaption)
1359 CVideoRendererImpl_THIS(iface,vidwin);
1361 FIXME("(%p)->()\n",This);
1363 return E_NOTIMPL;
1366 static HRESULT WINAPI
1367 IVideoWindow_fnget_Caption(IVideoWindow* iface,BSTR* pstrCaption)
1369 CVideoRendererImpl_THIS(iface,vidwin);
1371 FIXME("(%p)->()\n",This);
1373 return E_NOTIMPL;
1376 static HRESULT WINAPI
1377 IVideoWindow_fnput_WindowStyle(IVideoWindow* iface,long lStyle)
1379 CVideoRendererImpl_THIS(iface,vidwin);
1381 FIXME("(%p)->()\n",This);
1383 return E_NOTIMPL;
1386 static HRESULT WINAPI
1387 IVideoWindow_fnget_WindowStyle(IVideoWindow* iface,long* plStyle)
1389 CVideoRendererImpl_THIS(iface,vidwin);
1391 FIXME("(%p)->()\n",This);
1393 return E_NOTIMPL;
1396 static HRESULT WINAPI
1397 IVideoWindow_fnput_WindowStyleEx(IVideoWindow* iface,long lExStyle)
1399 CVideoRendererImpl_THIS(iface,vidwin);
1401 FIXME("(%p)->()\n",This);
1403 return E_NOTIMPL;
1406 static HRESULT WINAPI
1407 IVideoWindow_fnget_WindowStyleEx(IVideoWindow* iface,long* plExStyle)
1409 CVideoRendererImpl_THIS(iface,vidwin);
1411 FIXME("(%p)->()\n",This);
1413 return E_NOTIMPL;
1416 static HRESULT WINAPI
1417 IVideoWindow_fnput_AutoShow(IVideoWindow* iface,long lAutoShow)
1419 CVideoRendererImpl_THIS(iface,vidwin);
1421 FIXME("(%p)->()\n",This);
1423 return E_NOTIMPL;
1426 static HRESULT WINAPI
1427 IVideoWindow_fnget_AutoShow(IVideoWindow* iface,long* plAutoShow)
1429 CVideoRendererImpl_THIS(iface,vidwin);
1431 FIXME("(%p)->()\n",This);
1433 return E_NOTIMPL;
1436 static HRESULT WINAPI
1437 IVideoWindow_fnput_WindowState(IVideoWindow* iface,long lState)
1439 CVideoRendererImpl_THIS(iface,vidwin);
1441 FIXME("(%p)->()\n",This);
1443 return E_NOTIMPL;
1446 static HRESULT WINAPI
1447 IVideoWindow_fnget_WindowState(IVideoWindow* iface,long* plState)
1449 CVideoRendererImpl_THIS(iface,vidwin);
1451 FIXME("(%p)->()\n",This);
1453 return E_NOTIMPL;
1456 static HRESULT WINAPI
1457 IVideoWindow_fnput_BackgroundPalette(IVideoWindow* iface,long lBackPal)
1459 CVideoRendererImpl_THIS(iface,vidwin);
1461 FIXME("(%p)->()\n",This);
1463 return E_NOTIMPL;
1466 static HRESULT WINAPI
1467 IVideoWindow_fnget_BackgroundPalette(IVideoWindow* iface,long* plBackPal)
1469 CVideoRendererImpl_THIS(iface,vidwin);
1471 FIXME("(%p)->()\n",This);
1473 return E_NOTIMPL;
1476 static HRESULT WINAPI
1477 IVideoWindow_fnput_Visible(IVideoWindow* iface,long lVisible)
1479 CVideoRendererImpl_THIS(iface,vidwin);
1481 FIXME("(%p)->()\n",This);
1483 return E_NOTIMPL;
1486 static HRESULT WINAPI
1487 IVideoWindow_fnget_Visible(IVideoWindow* iface,long* plVisible)
1489 CVideoRendererImpl_THIS(iface,vidwin);
1491 FIXME("(%p)->()\n",This);
1493 return E_NOTIMPL;
1496 static HRESULT WINAPI
1497 IVideoWindow_fnput_Left(IVideoWindow* iface,long lLeft)
1499 CVideoRendererImpl_THIS(iface,vidwin);
1501 FIXME("(%p)->()\n",This);
1503 return E_NOTIMPL;
1506 static HRESULT WINAPI
1507 IVideoWindow_fnget_Left(IVideoWindow* iface,long* plLeft)
1509 CVideoRendererImpl_THIS(iface,vidwin);
1511 FIXME("(%p)->()\n",This);
1513 return E_NOTIMPL;
1516 static HRESULT WINAPI
1517 IVideoWindow_fnput_Width(IVideoWindow* iface,long lWidth)
1519 CVideoRendererImpl_THIS(iface,vidwin);
1521 FIXME("(%p)->()\n",This);
1523 return E_NOTIMPL;
1526 static HRESULT WINAPI
1527 IVideoWindow_fnget_Width(IVideoWindow* iface,long* plWidth)
1529 CVideoRendererImpl_THIS(iface,vidwin);
1531 FIXME("(%p)->()\n",This);
1533 return E_NOTIMPL;
1536 static HRESULT WINAPI
1537 IVideoWindow_fnput_Top(IVideoWindow* iface,long lTop)
1539 CVideoRendererImpl_THIS(iface,vidwin);
1541 FIXME("(%p)->()\n",This);
1543 return E_NOTIMPL;
1546 static HRESULT WINAPI
1547 IVideoWindow_fnget_Top(IVideoWindow* iface,long* plTop)
1549 CVideoRendererImpl_THIS(iface,vidwin);
1551 FIXME("(%p)->()\n",This);
1553 return E_NOTIMPL;
1556 static HRESULT WINAPI
1557 IVideoWindow_fnput_Height(IVideoWindow* iface,long lHeight)
1559 CVideoRendererImpl_THIS(iface,vidwin);
1561 FIXME("(%p)->()\n",This);
1563 return E_NOTIMPL;
1566 static HRESULT WINAPI
1567 IVideoWindow_fnget_Height(IVideoWindow* iface,long* plHeight)
1569 CVideoRendererImpl_THIS(iface,vidwin);
1571 FIXME("(%p)->()\n",This);
1573 return E_NOTIMPL;
1576 static HRESULT WINAPI
1577 IVideoWindow_fnput_Owner(IVideoWindow* iface,OAHWND hwnd)
1579 CVideoRendererImpl_THIS(iface,vidwin);
1581 FIXME("(%p)->()\n",This);
1583 return E_NOTIMPL;
1586 static HRESULT WINAPI
1587 IVideoWindow_fnget_Owner(IVideoWindow* iface,OAHWND* phwnd)
1589 CVideoRendererImpl_THIS(iface,vidwin);
1591 FIXME("(%p)->()\n",This);
1593 return E_NOTIMPL;
1596 static HRESULT WINAPI
1597 IVideoWindow_fnput_MessageDrain(IVideoWindow* iface,OAHWND hwnd)
1599 CVideoRendererImpl_THIS(iface,vidwin);
1601 FIXME("(%p)->()\n",This);
1603 return E_NOTIMPL;
1606 static HRESULT WINAPI
1607 IVideoWindow_fnget_MessageDrain(IVideoWindow* iface,OAHWND* phwnd)
1609 CVideoRendererImpl_THIS(iface,vidwin);
1611 FIXME("(%p)->()\n",This);
1613 return E_NOTIMPL;
1616 static HRESULT WINAPI
1617 IVideoWindow_fnget_BorderColor(IVideoWindow* iface,long* plColor)
1619 CVideoRendererImpl_THIS(iface,vidwin);
1621 FIXME("(%p)->()\n",This);
1623 return E_NOTIMPL;
1626 static HRESULT WINAPI
1627 IVideoWindow_fnput_BorderColor(IVideoWindow* iface,long lColor)
1629 CVideoRendererImpl_THIS(iface,vidwin);
1631 FIXME("(%p)->()\n",This);
1633 return E_NOTIMPL;
1636 static HRESULT WINAPI
1637 IVideoWindow_fnget_FullScreenMode(IVideoWindow* iface,long* plMode)
1639 CVideoRendererImpl_THIS(iface,vidwin);
1641 FIXME("(%p)->()\n",This);
1643 return E_NOTIMPL;
1646 static HRESULT WINAPI
1647 IVideoWindow_fnput_FullScreenMode(IVideoWindow* iface,long lMode)
1649 CVideoRendererImpl_THIS(iface,vidwin);
1651 FIXME("(%p)->()\n",This);
1653 return E_NOTIMPL;
1656 static HRESULT WINAPI
1657 IVideoWindow_fnSetWindowForeground(IVideoWindow* iface,long lFocus)
1659 CVideoRendererImpl_THIS(iface,vidwin);
1661 FIXME("(%p)->()\n",This);
1663 return E_NOTIMPL;
1666 static HRESULT WINAPI
1667 IVideoWindow_fnNotifyOwnerMessage(IVideoWindow* iface,OAHWND hwnd,long message,LONG_PTR wParam,LONG_PTR lParam)
1669 CVideoRendererImpl_THIS(iface,vidwin);
1671 FIXME("(%p)->()\n",This);
1673 return E_NOTIMPL;
1676 static HRESULT WINAPI
1677 IVideoWindow_fnSetWindowPosition(IVideoWindow* iface,long lLeft,long lTop,long lWidth,long lHeight)
1679 CVideoRendererImpl_THIS(iface,vidwin);
1681 FIXME("(%p)->()\n",This);
1683 return E_NOTIMPL;
1686 static HRESULT WINAPI
1687 IVideoWindow_fnGetWindowPosition(IVideoWindow* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight)
1689 CVideoRendererImpl_THIS(iface,vidwin);
1691 FIXME("(%p)->()\n",This);
1693 return E_NOTIMPL;
1696 static HRESULT WINAPI
1697 IVideoWindow_fnGetMinIdealImageSize(IVideoWindow* iface,long* plWidth,long* plHeight)
1699 CVideoRendererImpl_THIS(iface,vidwin);
1701 FIXME("(%p)->()\n",This);
1703 return E_NOTIMPL;
1706 static HRESULT WINAPI
1707 IVideoWindow_fnGetMaxIdealImageSize(IVideoWindow* iface,long* plWidth,long* plHeight)
1709 CVideoRendererImpl_THIS(iface,vidwin);
1711 FIXME("(%p)->()\n",This);
1713 return E_NOTIMPL;
1716 static HRESULT WINAPI
1717 IVideoWindow_fnGetRestorePosition(IVideoWindow* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight)
1719 CVideoRendererImpl_THIS(iface,vidwin);
1721 FIXME("(%p)->()\n",This);
1723 return E_NOTIMPL;
1726 static HRESULT WINAPI
1727 IVideoWindow_fnHideCursor(IVideoWindow* iface,long lHide)
1729 CVideoRendererImpl_THIS(iface,vidwin);
1731 FIXME("(%p)->()\n",This);
1733 return E_NOTIMPL;
1736 static HRESULT WINAPI
1737 IVideoWindow_fnIsCursorHidden(IVideoWindow* iface,long* plHide)
1739 CVideoRendererImpl_THIS(iface,vidwin);
1741 FIXME("(%p)->()\n",This);
1743 return E_NOTIMPL;
1749 static ICOM_VTABLE(IVideoWindow) ivideowindow =
1751 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
1752 /* IUnknown fields */
1753 IVideoWindow_fnQueryInterface,
1754 IVideoWindow_fnAddRef,
1755 IVideoWindow_fnRelease,
1756 /* IDispatch fields */
1757 IVideoWindow_fnGetTypeInfoCount,
1758 IVideoWindow_fnGetTypeInfo,
1759 IVideoWindow_fnGetIDsOfNames,
1760 IVideoWindow_fnInvoke,
1761 /* IVideoWindow fields */
1762 IVideoWindow_fnput_Caption,
1763 IVideoWindow_fnget_Caption,
1764 IVideoWindow_fnput_WindowStyle,
1765 IVideoWindow_fnget_WindowStyle,
1766 IVideoWindow_fnput_WindowStyleEx,
1767 IVideoWindow_fnget_WindowStyleEx,
1768 IVideoWindow_fnput_AutoShow,
1769 IVideoWindow_fnget_AutoShow,
1770 IVideoWindow_fnput_WindowState,
1771 IVideoWindow_fnget_WindowState,
1772 IVideoWindow_fnput_BackgroundPalette,
1773 IVideoWindow_fnget_BackgroundPalette,
1774 IVideoWindow_fnput_Visible,
1775 IVideoWindow_fnget_Visible,
1776 IVideoWindow_fnput_Left,
1777 IVideoWindow_fnget_Left,
1778 IVideoWindow_fnput_Width,
1779 IVideoWindow_fnget_Width,
1780 IVideoWindow_fnput_Top,
1781 IVideoWindow_fnget_Top,
1782 IVideoWindow_fnput_Height,
1783 IVideoWindow_fnget_Height,
1784 IVideoWindow_fnput_Owner,
1785 IVideoWindow_fnget_Owner,
1786 IVideoWindow_fnput_MessageDrain,
1787 IVideoWindow_fnget_MessageDrain,
1788 IVideoWindow_fnget_BorderColor,
1789 IVideoWindow_fnput_BorderColor,
1790 IVideoWindow_fnget_FullScreenMode,
1791 IVideoWindow_fnput_FullScreenMode,
1792 IVideoWindow_fnSetWindowForeground,
1793 IVideoWindow_fnNotifyOwnerMessage,
1794 IVideoWindow_fnSetWindowPosition,
1795 IVideoWindow_fnGetWindowPosition,
1796 IVideoWindow_fnGetMinIdealImageSize,
1797 IVideoWindow_fnGetMaxIdealImageSize,
1798 IVideoWindow_fnGetRestorePosition,
1799 IVideoWindow_fnHideCursor,
1800 IVideoWindow_fnIsCursorHidden,
1805 HRESULT CVideoRendererImpl_InitIVideoWindow( CVideoRendererImpl* This )
1807 TRACE("(%p)\n",This);
1808 ICOM_VTBL(&This->vidwin) = &ivideowindow;
1810 return NOERROR;
1813 void CVideoRendererImpl_UninitIVideoWindow( CVideoRendererImpl* This )
1815 TRACE("(%p)\n",This);