source: trunk/src/quartz/seekpass.c@ 6952

Last change on this file since 6952 was 6952, checked in by sandervl, 24 years ago

Wine 20011004 resync

File size: 15.6 KB
Line 
1/*
2 * Implementation of CLSID_SeekingPassThru
3 *
4 * FIXME - not tested yet.
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 "wine/obj_base.h"
17#include "strmif.h"
18#include "control.h"
19#include "uuids.h"
20
21#include "debugtools.h"
22DEFAULT_DEBUG_CHANNEL(quartz);
23
24#include "quartz_private.h"
25#include "seekpass.h"
26
27
28/***************************************************************************
29 *
30 * CSeekingPassThru::ISeekingPassThru
31 *
32 */
33
34static HRESULT WINAPI
35ISeekingPassThru_fnQueryInterface(ISeekingPassThru* iface,REFIID riid,void** ppobj)
36{
37 CSeekingPassThru_THIS(iface,seekpass);
38
39 TRACE("(%p)->()\n",This);
40
41 return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj);
42}
43
44static ULONG WINAPI
45ISeekingPassThru_fnAddRef(ISeekingPassThru* iface)
46{
47 CSeekingPassThru_THIS(iface,seekpass);
48
49 TRACE("(%p)->()\n",This);
50
51 return IUnknown_AddRef(This->unk.punkControl);
52}
53
54static ULONG WINAPI
55ISeekingPassThru_fnRelease(ISeekingPassThru* iface)
56{
57 CSeekingPassThru_THIS(iface,seekpass);
58
59 TRACE("(%p)->()\n",This);
60
61 return IUnknown_Release(This->unk.punkControl);
62}
63
64static HRESULT WINAPI
65ISeekingPassThru_fnInit(ISeekingPassThru* iface,BOOL bRendering,IPin* pPin)
66{
67 CSeekingPassThru_THIS(iface,seekpass);
68
69 FIXME("(%p)->(%d,%p) not tested!\n",This,bRendering,pPin);
70
71 if ( pPin == NULL )
72 return E_POINTER;
73
74 /* Why is 'bRendering' given as an argument?? */
75 EnterCriticalSection( &This->cs );
76
77 if ( This->passthru.pPin != NULL )
78 IPin_Release( This->passthru.pPin );
79 This->passthru.pPin = pPin; IPin_AddRef( pPin );
80
81 LeaveCriticalSection( &This->cs );
82
83 return NOERROR;
84}
85
86
87static ICOM_VTABLE(ISeekingPassThru) iseekingpassthru =
88{
89 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
90 /* IUnknown fields */
91 ISeekingPassThru_fnQueryInterface,
92 ISeekingPassThru_fnAddRef,
93 ISeekingPassThru_fnRelease,
94 /* ISeekingPassThru fields */
95 ISeekingPassThru_fnInit,
96};
97
98static
99HRESULT CSeekingPassThru_InitISeekingPassThru(CSeekingPassThru* This)
100{
101 TRACE("(%p)\n",This);
102 ICOM_VTBL(&This->seekpass) = &iseekingpassthru;
103 This->passthru.punk = This->unk.punkControl;
104 This->passthru.pPin = NULL;
105 InitializeCriticalSection( &This->cs );
106
107 return NOERROR;
108}
109
110static
111void CSeekingPassThru_UninitISeekingPassThru(CSeekingPassThru* This)
112{
113 TRACE("(%p)\n",This);
114 if ( This->passthru.pPin != NULL )
115 {
116 IPin_Release( This->passthru.pPin );
117 This->passthru.pPin = NULL;
118 }
119 DeleteCriticalSection( &This->cs );
120}
121
122/***************************************************************************
123 *
124 * new/delete for CLSID_SeekingPassThru.
125 *
126 */
127
128/* can I use offsetof safely? - FIXME? */
129static QUARTZ_IFEntry IFEntries[] =
130{
131 { &IID_ISeekingPassThru, offsetof(CSeekingPassThru,seekpass)-offsetof(CSeekingPassThru,unk) },
132 { &IID_IMediaPosition, offsetof(CSeekingPassThru,passthru.mpos)-offsetof(CSeekingPassThru,unk) },
133 { &IID_IMediaSeeking, offsetof(CSeekingPassThru,passthru.mseek)-offsetof(CSeekingPassThru,unk) },
134};
135
136
137static void QUARTZ_DestroySeekingPassThru(IUnknown* punk)
138{
139 CSeekingPassThru_THIS(punk,unk);
140
141 CSeekingPassThru_UninitISeekingPassThru(This);
142}
143
144HRESULT QUARTZ_CreateSeekingPassThru(IUnknown* punkOuter,void** ppobj)
145{
146 CSeekingPassThru* This;
147 HRESULT hr;
148
149 TRACE("(%p,%p)\n",punkOuter,ppobj);
150
151 This = (CSeekingPassThru*)QUARTZ_AllocObj( sizeof(CSeekingPassThru) );
152 if ( This == NULL )
153 return E_OUTOFMEMORY;
154
155 QUARTZ_IUnkInit( &This->unk, punkOuter );
156 hr = CSeekingPassThru_InitISeekingPassThru(This);
157 if ( FAILED(hr) )
158 {
159 QUARTZ_FreeObj( This );
160 return hr;
161 }
162
163 This->unk.pEntries = IFEntries;
164 This->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]);
165 This->unk.pOnFinalRelease = QUARTZ_DestroySeekingPassThru;
166
167 *ppobj = (void*)(&This->unk);
168
169 return S_OK;
170}
171
172
173
174
175/***************************************************************************
176 *
177 * CPassThruImpl Helper methods.
178 *
179 */
180
181static
182HRESULT CPassThruImpl_GetConnected( CPassThruImpl* pImpl, IPin** ppPin )
183{
184 return IPin_ConnectedTo( pImpl->pPin, ppPin );
185}
186
187HRESULT CPassThruImpl_QueryPosPass(
188 CPassThruImpl* pImpl, IMediaPosition** ppPosition )
189{
190 IPin* pPin;
191 HRESULT hr;
192
193 hr = CPassThruImpl_GetConnected( pImpl, &pPin );
194 if ( FAILED(hr) )
195 return hr;
196 hr = IPin_QueryInterface(pPin,&IID_IMediaPosition,(void**)ppPosition);
197 IPin_Release(pPin);
198
199 return hr;
200}
201
202HRESULT CPassThruImpl_QuerySeekPass(
203 CPassThruImpl* pImpl, IMediaSeeking** ppSeeking )
204{
205 IPin* pPin;
206 HRESULT hr;
207
208 hr = CPassThruImpl_GetConnected( pImpl, &pPin );
209 if ( FAILED(hr) )
210 return hr;
211 hr = IPin_QueryInterface(pPin,&IID_IMediaSeeking,(void**)ppSeeking);
212 IPin_Release(pPin);
213
214 return hr;
215}
216
217/***************************************************************************
218 *
219 * An implementation for CPassThruImpl::IMediaPosition.
220 *
221 */
222
223
224#define QUERYPOSPASS \
225 IMediaPosition* pPos = NULL; \
226 HRESULT hr; \
227 hr = CPassThruImpl_QueryPosPass( This, &pPos ); \
228 if ( FAILED(hr) ) return hr;
229
230static HRESULT WINAPI
231IMediaPosition_fnQueryInterface(IMediaPosition* iface,REFIID riid,void** ppobj)
232{
233 CPassThruImpl_THIS(iface,mpos);
234
235 TRACE("(%p)->()\n",This);
236
237 return IUnknown_QueryInterface(This->punk,riid,ppobj);
238}
239
240static ULONG WINAPI
241IMediaPosition_fnAddRef(IMediaPosition* iface)
242{
243 CPassThruImpl_THIS(iface,mpos);
244
245 TRACE("(%p)->()\n",This);
246
247 return IUnknown_AddRef(This->punk);
248}
249
250static ULONG WINAPI
251IMediaPosition_fnRelease(IMediaPosition* iface)
252{
253 CPassThruImpl_THIS(iface,mpos);
254
255 TRACE("(%p)->()\n",This);
256
257 return IUnknown_Release(This->punk);
258}
259
260static HRESULT WINAPI
261IMediaPosition_fnGetTypeInfoCount(IMediaPosition* iface,UINT* pcTypeInfo)
262{
263 CPassThruImpl_THIS(iface,mpos);
264
265 FIXME("(%p)->() stub!\n",This);
266
267 return E_NOTIMPL;
268}
269
270static HRESULT WINAPI
271IMediaPosition_fnGetTypeInfo(IMediaPosition* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj)
272{
273 CPassThruImpl_THIS(iface,mpos);
274
275 FIXME("(%p)->() stub!\n",This);
276
277 return E_NOTIMPL;
278}
279
280static HRESULT WINAPI
281IMediaPosition_fnGetIDsOfNames(IMediaPosition* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId)
282{
283 CPassThruImpl_THIS(iface,mpos);
284
285 FIXME("(%p)->() stub!\n",This);
286
287 return E_NOTIMPL;
288}
289
290static HRESULT WINAPI
291IMediaPosition_fnInvoke(IMediaPosition* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
292{
293 CPassThruImpl_THIS(iface,mpos);
294
295 FIXME("(%p)->() stub!\n",This);
296
297 return E_NOTIMPL;
298}
299
300
301static HRESULT WINAPI
302IMediaPosition_fnget_Duration(IMediaPosition* iface,REFTIME* prefTime)
303{
304 CPassThruImpl_THIS(iface,mpos);
305 QUERYPOSPASS
306
307 TRACE("(%p)->()\n",This);
308
309 return IMediaPosition_get_Duration(pPos,prefTime);
310}
311
312static HRESULT WINAPI
313IMediaPosition_fnput_CurrentPosition(IMediaPosition* iface,REFTIME refTime)
314{
315 CPassThruImpl_THIS(iface,mpos);
316 QUERYPOSPASS
317
318 TRACE("(%p)->()\n",This);
319
320 return IMediaPosition_put_CurrentPosition(pPos,refTime);
321}
322
323static HRESULT WINAPI
324IMediaPosition_fnget_CurrentPosition(IMediaPosition* iface,REFTIME* prefTime)
325{
326 CPassThruImpl_THIS(iface,mpos);
327 QUERYPOSPASS
328
329 TRACE("(%p)->()\n",This);
330
331 return IMediaPosition_get_CurrentPosition(pPos,prefTime);
332}
333
334static HRESULT WINAPI
335IMediaPosition_fnget_StopTime(IMediaPosition* iface,REFTIME* prefTime)
336{
337 CPassThruImpl_THIS(iface,mpos);
338 QUERYPOSPASS
339
340 TRACE("(%p)->()\n",This);
341
342 return IMediaPosition_get_StopTime(pPos,prefTime);
343}
344
345static HRESULT WINAPI
346IMediaPosition_fnput_StopTime(IMediaPosition* iface,REFTIME refTime)
347{
348 CPassThruImpl_THIS(iface,mpos);
349 QUERYPOSPASS
350
351 TRACE("(%p)->()\n",This);
352
353 return IMediaPosition_put_StopTime(pPos,refTime);
354}
355
356static HRESULT WINAPI
357IMediaPosition_fnget_PrerollTime(IMediaPosition* iface,REFTIME* prefTime)
358{
359 CPassThruImpl_THIS(iface,mpos);
360 QUERYPOSPASS
361
362 TRACE("(%p)->()\n",This);
363
364 return IMediaPosition_get_PrerollTime(pPos,prefTime);
365}
366
367static HRESULT WINAPI
368IMediaPosition_fnput_PrerollTime(IMediaPosition* iface,REFTIME refTime)
369{
370 CPassThruImpl_THIS(iface,mpos);
371 QUERYPOSPASS
372
373 TRACE("(%p)->()\n",This);
374
375 return IMediaPosition_put_PrerollTime(pPos,refTime);
376}
377
378static HRESULT WINAPI
379IMediaPosition_fnput_Rate(IMediaPosition* iface,double dblRate)
380{
381 CPassThruImpl_THIS(iface,mpos);
382 QUERYPOSPASS
383
384 TRACE("(%p)->()\n",This);
385
386 return IMediaPosition_put_Rate(pPos,dblRate);
387}
388
389static HRESULT WINAPI
390IMediaPosition_fnget_Rate(IMediaPosition* iface,double* pdblRate)
391{
392 CPassThruImpl_THIS(iface,mpos);
393 QUERYPOSPASS
394
395 TRACE("(%p)->()\n",This);
396
397 return IMediaPosition_get_Rate(pPos,pdblRate);
398}
399
400static HRESULT WINAPI
401IMediaPosition_fnCanSeekForward(IMediaPosition* iface,LONG* pCanSeek)
402{
403 CPassThruImpl_THIS(iface,mpos);
404 QUERYPOSPASS
405
406 TRACE("(%p)->()\n",This);
407
408 return IMediaPosition_CanSeekForward(pPos,pCanSeek);
409}
410
411static HRESULT WINAPI
412IMediaPosition_fnCanSeekBackward(IMediaPosition* iface,LONG* pCanSeek)
413{
414 CPassThruImpl_THIS(iface,mpos);
415 QUERYPOSPASS
416
417 TRACE("(%p)->()\n",This);
418
419 return IMediaPosition_CanSeekBackward(pPos,pCanSeek);
420}
421
422
423static ICOM_VTABLE(IMediaPosition) impos =
424{
425 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
426 /* IUnknown fields */
427 IMediaPosition_fnQueryInterface,
428 IMediaPosition_fnAddRef,
429 IMediaPosition_fnRelease,
430 /* IDispatch fields */
431 IMediaPosition_fnGetTypeInfoCount,
432 IMediaPosition_fnGetTypeInfo,
433 IMediaPosition_fnGetIDsOfNames,
434 IMediaPosition_fnInvoke,
435 /* IMediaPosition fields */
436 IMediaPosition_fnget_Duration,
437 IMediaPosition_fnput_CurrentPosition,
438 IMediaPosition_fnget_CurrentPosition,
439 IMediaPosition_fnget_StopTime,
440 IMediaPosition_fnput_StopTime,
441 IMediaPosition_fnget_PrerollTime,
442 IMediaPosition_fnput_PrerollTime,
443 IMediaPosition_fnput_Rate,
444 IMediaPosition_fnget_Rate,
445 IMediaPosition_fnCanSeekForward,
446 IMediaPosition_fnCanSeekBackward,
447};
448
449
450HRESULT CPassThruImpl_InitIMediaPosition( CPassThruImpl* pImpl )
451{
452 TRACE("(%p)\n",pImpl);
453 ICOM_VTBL(&pImpl->mpos) = &impos;
454
455 return NOERROR;
456}
457
458void CPassThruImpl_UninitIMediaPosition( CPassThruImpl* pImpl )
459{
460 TRACE("(%p)\n",pImpl);
461}
462
463#undef QUERYPOSPASS
464
465
466/***************************************************************************
467 *
468 * An implementation for CPassThruImpl::IMediaSeeking.
469 *
470 */
471
472#define QUERYSEEKPASS \
473 IMediaSeeking* pSeek = NULL; \
474 HRESULT hr; \
475 hr = CPassThruImpl_QuerySeekPass( This, &pSeek ); \
476 if ( FAILED(hr) ) return hr;
477
478
479static HRESULT WINAPI
480IMediaSeeking_fnQueryInterface(IMediaSeeking* iface,REFIID riid,void** ppobj)
481{
482 CPassThruImpl_THIS(iface,mseek);
483
484 TRACE("(%p)->()\n",This);
485
486 return IUnknown_QueryInterface(This->punk,riid,ppobj);
487}
488
489static ULONG WINAPI
490IMediaSeeking_fnAddRef(IMediaSeeking* iface)
491{
492 CPassThruImpl_THIS(iface,mseek);
493
494 TRACE("(%p)->()\n",This);
495
496 return IUnknown_AddRef(This->punk);
497}
498
499static ULONG WINAPI
500IMediaSeeking_fnRelease(IMediaSeeking* iface)
501{
502 CPassThruImpl_THIS(iface,mseek);
503
504 TRACE("(%p)->()\n",This);
505
506 return IUnknown_Release(This->punk);
507}
508
509
510static HRESULT WINAPI
511IMediaSeeking_fnGetCapabilities(IMediaSeeking* iface,DWORD* pdwCaps)
512{
513 CPassThruImpl_THIS(iface,mseek);
514 QUERYSEEKPASS
515
516 TRACE("(%p)->()\n",This);
517
518 return IMediaSeeking_GetCapabilities(pSeek,pdwCaps);
519}
520
521static HRESULT WINAPI
522IMediaSeeking_fnCheckCapabilities(IMediaSeeking* iface,DWORD* pdwCaps)
523{
524 CPassThruImpl_THIS(iface,mseek);
525 QUERYSEEKPASS
526
527 TRACE("(%p)->()\n",This);
528
529 return IMediaSeeking_CheckCapabilities(pSeek,pdwCaps);
530}
531
532static HRESULT WINAPI
533IMediaSeeking_fnIsFormatSupported(IMediaSeeking* iface,const GUID* pidFormat)
534{
535 CPassThruImpl_THIS(iface,mseek);
536 QUERYSEEKPASS
537
538 TRACE("(%p)->()\n",This);
539
540 return IMediaSeeking_IsFormatSupported(pSeek,pidFormat);
541}
542
543static HRESULT WINAPI
544IMediaSeeking_fnQueryPreferredFormat(IMediaSeeking* iface,GUID* pidFormat)
545{
546 CPassThruImpl_THIS(iface,mseek);
547 QUERYSEEKPASS
548
549 TRACE("(%p)->()\n",This);
550
551 return IMediaSeeking_QueryPreferredFormat(pSeek,pidFormat);
552}
553
554static HRESULT WINAPI
555IMediaSeeking_fnGetTimeFormat(IMediaSeeking* iface,GUID* pidFormat)
556{
557 CPassThruImpl_THIS(iface,mseek);
558 QUERYSEEKPASS
559
560 TRACE("(%p)->()\n",This);
561
562 return IMediaSeeking_GetTimeFormat(pSeek,pidFormat);
563}
564
565static HRESULT WINAPI
566IMediaSeeking_fnIsUsingTimeFormat(IMediaSeeking* iface,const GUID* pidFormat)
567{
568 CPassThruImpl_THIS(iface,mseek);
569 QUERYSEEKPASS
570
571 TRACE("(%p)->()\n",This);
572
573 return IMediaSeeking_IsUsingTimeFormat(pSeek,pidFormat);
574}
575
576static HRESULT WINAPI
577IMediaSeeking_fnSetTimeFormat(IMediaSeeking* iface,const GUID* pidFormat)
578{
579 CPassThruImpl_THIS(iface,mseek);
580 QUERYSEEKPASS
581
582 TRACE("(%p)->()\n",This);
583
584 return IMediaSeeking_SetTimeFormat(pSeek,pidFormat);
585}
586
587static HRESULT WINAPI
588IMediaSeeking_fnGetDuration(IMediaSeeking* iface,LONGLONG* pllDuration)
589{
590 CPassThruImpl_THIS(iface,mseek);
591 QUERYSEEKPASS
592
593 TRACE("(%p)->()\n",This);
594
595 return IMediaSeeking_GetDuration(pSeek,pllDuration);
596}
597
598static HRESULT WINAPI
599IMediaSeeking_fnGetStopPosition(IMediaSeeking* iface,LONGLONG* pllPos)
600{
601 CPassThruImpl_THIS(iface,mseek);
602 QUERYSEEKPASS
603
604 TRACE("(%p)->()\n",This);
605
606 return IMediaSeeking_GetStopPosition(pSeek,pllPos);
607}
608
609static HRESULT WINAPI
610IMediaSeeking_fnGetCurrentPosition(IMediaSeeking* iface,LONGLONG* pllPos)
611{
612 CPassThruImpl_THIS(iface,mseek);
613 QUERYSEEKPASS
614
615 TRACE("(%p)->()\n",This);
616
617 return IMediaSeeking_GetCurrentPosition(pSeek,pllPos);
618}
619
620static HRESULT WINAPI
621IMediaSeeking_fnConvertTimeFormat(IMediaSeeking* iface,LONGLONG* pllOut,const GUID* pidFmtOut,LONGLONG llIn,const GUID* pidFmtIn)
622{
623 CPassThruImpl_THIS(iface,mseek);
624 QUERYSEEKPASS
625
626 TRACE("(%p)->()\n",This);
627
628 return IMediaSeeking_ConvertTimeFormat(pSeek,pllOut,pidFmtOut,llIn,pidFmtIn);
629}
630
631static HRESULT WINAPI
632IMediaSeeking_fnSetPositions(IMediaSeeking* iface,LONGLONG* pllCur,DWORD dwCurFlags,LONGLONG* pllStop,DWORD dwStopFlags)
633{
634 CPassThruImpl_THIS(iface,mseek);
635 QUERYSEEKPASS
636
637 TRACE("(%p)->()\n",This);
638
639 return IMediaSeeking_SetPositions(pSeek,pllCur,dwCurFlags,pllStop,dwStopFlags);
640}
641
642static HRESULT WINAPI
643IMediaSeeking_fnGetPositions(IMediaSeeking* iface,LONGLONG* pllCur,LONGLONG* pllStop)
644{
645 CPassThruImpl_THIS(iface,mseek);
646 QUERYSEEKPASS
647
648 TRACE("(%p)->()\n",This);
649
650 return IMediaSeeking_GetPositions(pSeek,pllCur,pllStop);
651}
652
653static HRESULT WINAPI
654IMediaSeeking_fnGetAvailable(IMediaSeeking* iface,LONGLONG* pllFirst,LONGLONG* pllLast)
655{
656 CPassThruImpl_THIS(iface,mseek);
657 QUERYSEEKPASS
658
659 TRACE("(%p)->()\n",This);
660
661 return IMediaSeeking_GetAvailable(pSeek,pllFirst,pllLast);
662}
663
664static HRESULT WINAPI
665IMediaSeeking_fnSetRate(IMediaSeeking* iface,double dblRate)
666{
667 CPassThruImpl_THIS(iface,mseek);
668 QUERYSEEKPASS
669
670 TRACE("(%p)->()\n",This);
671
672 return IMediaSeeking_SetRate(pSeek,dblRate);
673}
674
675static HRESULT WINAPI
676IMediaSeeking_fnGetRate(IMediaSeeking* iface,double* pdblRate)
677{
678 CPassThruImpl_THIS(iface,mseek);
679 QUERYSEEKPASS
680
681 TRACE("(%p)->()\n",This);
682
683 return IMediaSeeking_GetRate(pSeek,pdblRate);
684}
685
686static HRESULT WINAPI
687IMediaSeeking_fnGetPreroll(IMediaSeeking* iface,LONGLONG* pllPreroll)
688{
689 CPassThruImpl_THIS(iface,mseek);
690 QUERYSEEKPASS
691
692 TRACE("(%p)->()\n",This);
693
694 return IMediaSeeking_GetPreroll(pSeek,pllPreroll);
695}
696
697
698
699
700static ICOM_VTABLE(IMediaSeeking) imseek =
701{
702 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
703 /* IUnknown fields */
704 IMediaSeeking_fnQueryInterface,
705 IMediaSeeking_fnAddRef,
706 IMediaSeeking_fnRelease,
707 /* IMediaSeeking fields */
708 IMediaSeeking_fnGetCapabilities,
709 IMediaSeeking_fnCheckCapabilities,
710 IMediaSeeking_fnIsFormatSupported,
711 IMediaSeeking_fnQueryPreferredFormat,
712 IMediaSeeking_fnGetTimeFormat,
713 IMediaSeeking_fnIsUsingTimeFormat,
714 IMediaSeeking_fnSetTimeFormat,
715 IMediaSeeking_fnGetDuration,
716 IMediaSeeking_fnGetStopPosition,
717 IMediaSeeking_fnGetCurrentPosition,
718 IMediaSeeking_fnConvertTimeFormat,
719 IMediaSeeking_fnSetPositions,
720 IMediaSeeking_fnGetPositions,
721 IMediaSeeking_fnGetAvailable,
722 IMediaSeeking_fnSetRate,
723 IMediaSeeking_fnGetRate,
724 IMediaSeeking_fnGetPreroll,
725};
726
727
728
729HRESULT CPassThruImpl_InitIMediaSeeking( CPassThruImpl* pImpl )
730{
731 TRACE("(%p)\n",pImpl);
732 ICOM_VTBL(&pImpl->mseek) = &imseek;
733
734 return NOERROR;
735}
736
737void CPassThruImpl_UninitIMediaSeeking( CPassThruImpl* pImpl )
738{
739 TRACE("(%p)\n",pImpl);
740}
741
742#undef QUERYSEEKPASS
Note: See TracBrowser for help on using the repository browser.