00001
00002
00003
00004
00005 #ifndef __CTLUTIL__
00006 #define __CTLUTIL__
00007
00008 #define OATRUE (-1)
00009 #define OAFALSE (0)
00010
00011 class CBaseDispatch
00012 {
00013 ITypeInfo * m_pti;
00014
00015 public:
00016
00017 CBaseDispatch() : m_pti(NULL) {}
00018 ~CBaseDispatch();
00019
00020
00021 STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);
00022
00023 STDMETHODIMP GetTypeInfo(
00024 REFIID riid,
00025 UINT itinfo,
00026 LCID lcid,
00027 ITypeInfo ** pptinfo);
00028
00029 STDMETHODIMP GetIDsOfNames(
00030 REFIID riid,
00031 OLECHAR ** rgszNames,
00032 UINT cNames,
00033 LCID lcid,
00034 DISPID * rgdispid);
00035 };
00036
00037 class AM_NOVTABLE CMediaControl :
00038 public IMediaControl,
00039 public CUnknown
00040 {
00041 CBaseDispatch m_basedisp;
00042
00043 public:
00044
00045 CMediaControl(const TCHAR *, LPUNKNOWN);
00046
00047 DECLARE_IUNKNOWN
00048
00049
00050 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00051
00052
00053 STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);
00054
00055 STDMETHODIMP GetTypeInfo(
00056 UINT itinfo,
00057 LCID lcid,
00058 ITypeInfo ** pptinfo);
00059
00060 STDMETHODIMP GetIDsOfNames(
00061 REFIID riid,
00062 OLECHAR ** rgszNames,
00063 UINT cNames,
00064 LCID lcid,
00065 DISPID * rgdispid);
00066
00067 STDMETHODIMP Invoke(
00068 DISPID dispidMember,
00069 REFIID riid,
00070 LCID lcid,
00071 WORD wFlags,
00072 DISPPARAMS * pdispparams,
00073 VARIANT * pvarResult,
00074 EXCEPINFO * pexcepinfo,
00075 UINT * puArgErr);
00076 };
00077
00078 class AM_NOVTABLE CMediaEvent :
00079 public IMediaEventEx,
00080 public CUnknown
00081 {
00082 CBaseDispatch m_basedisp;
00083
00084 public:
00085
00086 CMediaEvent(const TCHAR *, LPUNKNOWN);
00087
00088 DECLARE_IUNKNOWN
00089
00090
00091 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00092
00093
00094 STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);
00095
00096 STDMETHODIMP GetTypeInfo(
00097 UINT itinfo,
00098 LCID lcid,
00099 ITypeInfo ** pptinfo);
00100
00101 STDMETHODIMP GetIDsOfNames(
00102 REFIID riid,
00103 OLECHAR ** rgszNames,
00104 UINT cNames,
00105 LCID lcid,
00106 DISPID * rgdispid);
00107
00108 STDMETHODIMP Invoke(
00109 DISPID dispidMember,
00110 REFIID riid,
00111 LCID lcid,
00112 WORD wFlags,
00113 DISPPARAMS * pdispparams,
00114 VARIANT * pvarResult,
00115 EXCEPINFO * pexcepinfo,
00116 UINT * puArgErr);
00117 };
00118
00119 class AM_NOVTABLE CMediaPosition :
00120 public IMediaPosition,
00121 public CUnknown
00122 {
00123 CBaseDispatch m_basedisp;
00124
00125 public:
00126
00127 CMediaPosition(const TCHAR *, LPUNKNOWN);
00128 CMediaPosition(const TCHAR *, LPUNKNOWN, HRESULT *phr);
00129
00130 DECLARE_IUNKNOWN
00131
00132
00133 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00134
00135
00136 STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);
00137
00138 STDMETHODIMP GetTypeInfo(
00139 UINT itinfo,
00140 LCID lcid,
00141 ITypeInfo ** pptinfo);
00142
00143 STDMETHODIMP GetIDsOfNames(
00144 REFIID riid,
00145 OLECHAR ** rgszNames,
00146 UINT cNames,
00147 LCID lcid,
00148 DISPID * rgdispid);
00149
00150 STDMETHODIMP Invoke(
00151 DISPID dispidMember,
00152 REFIID riid,
00153 LCID lcid,
00154 WORD wFlags,
00155 DISPPARAMS * pdispparams,
00156 VARIANT * pvarResult,
00157 EXCEPINFO * pexcepinfo,
00158 UINT * puArgErr);
00159
00160 };
00161
00162 class COARefTime : public CRefTime {
00163 public:
00164
00165 COARefTime() {
00166 };
00167
00168 COARefTime(CRefTime t)
00169 : CRefTime(t)
00170 {
00171 };
00172
00173 COARefTime(REFERENCE_TIME t)
00174 : CRefTime(t)
00175 {
00176 };
00177
00178 COARefTime(double d) {
00179 m_time = (LONGLONG) (d * 10000000);
00180 };
00181
00182 operator double() {
00183 return double(m_time) / 10000000;
00184 };
00185
00186 operator REFERENCE_TIME() {
00187 return m_time;
00188 };
00189
00190 COARefTime& operator=(const double& rd) {
00191 m_time = (LONGLONG) (rd * 10000000);
00192 return *this;
00193 }
00194
00195 COARefTime& operator=(const REFERENCE_TIME& rt) {
00196 m_time = rt;
00197 return *this;
00198 }
00199
00200 inline BOOL operator==(const COARefTime& rt)
00201 {
00202 return m_time == rt.m_time;
00203 };
00204
00205 inline BOOL operator!=(const COARefTime& rt)
00206 {
00207 return m_time != rt.m_time;
00208 };
00209
00210 inline BOOL operator < (const COARefTime& rt)
00211 {
00212 return m_time < rt.m_time;
00213 };
00214
00215 inline BOOL operator > (const COARefTime& rt)
00216 {
00217 return m_time > rt.m_time;
00218 };
00219
00220 inline BOOL operator >= (const COARefTime& rt)
00221 {
00222 return m_time >= rt.m_time;
00223 };
00224
00225 inline BOOL operator <= (const COARefTime& rt)
00226 {
00227 return m_time <= rt.m_time;
00228 };
00229
00230 inline COARefTime operator+(const COARefTime& rt)
00231 {
00232 return COARefTime(m_time + rt.m_time);
00233 };
00234
00235 inline COARefTime operator-(const COARefTime& rt)
00236 {
00237 return COARefTime(m_time - rt.m_time);
00238 };
00239
00240 inline COARefTime operator*(LONG l)
00241 {
00242 return COARefTime(m_time * l);
00243 };
00244
00245 inline COARefTime operator/(LONG l)
00246 {
00247 return COARefTime(m_time / l);
00248 };
00249
00250 private:
00251
00252
00253 COARefTime(LONG);
00254 operator=(LONG);
00255 };
00256
00257 class CPosPassThru : public IMediaSeeking, public CMediaPosition
00258 {
00259 IPin *m_pPin;
00260
00261 HRESULT GetPeer(IMediaPosition **ppMP);
00262 HRESULT GetPeerSeeking(IMediaSeeking **ppMS);
00263
00264 public:
00265
00266 CPosPassThru(const TCHAR *, LPUNKNOWN, HRESULT*, IPin *);
00267 DECLARE_IUNKNOWN
00268
00269 HRESULT ForceRefresh() {
00270 return S_OK;
00271 };
00272
00273
00274 virtual HRESULT GetMediaTime(LONGLONG *pStartTime,LONGLONG *pEndTime) {
00275 return E_FAIL;
00276 }
00277
00278 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,void **ppv);
00279
00280
00281 STDMETHODIMP GetCapabilities( DWORD * pCapabilities );
00282 STDMETHODIMP CheckCapabilities( DWORD * pCapabilities );
00283 STDMETHODIMP SetTimeFormat(const GUID * pFormat);
00284 STDMETHODIMP GetTimeFormat(GUID *pFormat);
00285 STDMETHODIMP IsUsingTimeFormat(const GUID * pFormat);
00286 STDMETHODIMP IsFormatSupported( const GUID * pFormat);
00287 STDMETHODIMP QueryPreferredFormat( GUID *pFormat);
00288 STDMETHODIMP ConvertTimeFormat(LONGLONG * pTarget, const GUID * pTargetFormat,
00289 LONGLONG Source, const GUID * pSourceFormat );
00290 STDMETHODIMP SetPositions( LONGLONG * pCurrent, DWORD CurrentFlags
00291 , LONGLONG * pStop, DWORD StopFlags );
00292
00293 STDMETHODIMP GetPositions( LONGLONG * pCurrent, LONGLONG * pStop );
00294 STDMETHODIMP GetCurrentPosition( LONGLONG * pCurrent );
00295 STDMETHODIMP GetStopPosition( LONGLONG * pStop );
00296 STDMETHODIMP SetRate( double dRate);
00297 STDMETHODIMP GetRate( double * pdRate);
00298 STDMETHODIMP GetDuration( LONGLONG *pDuration);
00299 STDMETHODIMP GetAvailable( LONGLONG *pEarliest, LONGLONG *pLatest );
00300 STDMETHODIMP GetPreroll( LONGLONG *pllPreroll );
00301
00302
00303 STDMETHODIMP get_Duration(REFTIME * plength);
00304 STDMETHODIMP put_CurrentPosition(REFTIME llTime);
00305 STDMETHODIMP get_StopTime(REFTIME * pllTime);
00306 STDMETHODIMP put_StopTime(REFTIME llTime);
00307 STDMETHODIMP get_PrerollTime(REFTIME * pllTime);
00308 STDMETHODIMP put_PrerollTime(REFTIME llTime);
00309 STDMETHODIMP get_Rate(double * pdRate);
00310 STDMETHODIMP put_Rate(double dRate);
00311 STDMETHODIMP get_CurrentPosition(REFTIME * pllTime);
00312 STDMETHODIMP CanSeekForward(LONG *pCanSeekForward);
00313 STDMETHODIMP CanSeekBackward(LONG *pCanSeekBackward);
00314
00315 private:
00316 HRESULT GetSeekingLongLong( HRESULT (__stdcall IMediaSeeking::*pMethod)( LONGLONG * ),
00317 LONGLONG * pll );
00318 };
00319
00320 class CRendererPosPassThru : public CPosPassThru
00321 {
00322 CCritSec m_PositionLock;
00323 LONGLONG m_StartMedia;
00324 LONGLONG m_EndMedia;
00325 BOOL m_bReset;
00326
00327 public:
00328
00329
00330
00331 CRendererPosPassThru(const TCHAR *, LPUNKNOWN, HRESULT*, IPin *);
00332 HRESULT RegisterMediaTime(IMediaSample *pMediaSample);
00333 HRESULT RegisterMediaTime(LONGLONG StartTime,LONGLONG EndTime);
00334 HRESULT GetMediaTime(LONGLONG *pStartTime,LONGLONG *pEndTime);
00335 HRESULT ResetMediaTime();
00336 HRESULT EOS();
00337 };
00338
00339 STDAPI CreatePosPassThru(
00340 LPUNKNOWN pAgg,
00341 BOOL bRenderer,
00342 IPin *pPin,
00343 IUnknown **ppPassThru
00344 );
00345
00346 class AM_NOVTABLE CBasicAudio : public IBasicAudio, public CUnknown
00347 {
00348 CBaseDispatch m_basedisp;
00349
00350 public:
00351
00352 CBasicAudio(const TCHAR *, LPUNKNOWN);
00353
00354 DECLARE_IUNKNOWN
00355
00356
00357 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00358
00359
00360 STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);
00361
00362 STDMETHODIMP GetTypeInfo(
00363 UINT itinfo,
00364 LCID lcid,
00365 ITypeInfo ** pptinfo);
00366
00367 STDMETHODIMP GetIDsOfNames(
00368 REFIID riid,
00369 OLECHAR ** rgszNames,
00370 UINT cNames,
00371 LCID lcid,
00372 DISPID * rgdispid);
00373
00374 STDMETHODIMP Invoke(
00375 DISPID dispidMember,
00376 REFIID riid,
00377 LCID lcid,
00378 WORD wFlags,
00379 DISPPARAMS * pdispparams,
00380 VARIANT * pvarResult,
00381 EXCEPINFO * pexcepinfo,
00382 UINT * puArgErr);
00383 };
00384
00385 class AM_NOVTABLE CBaseBasicVideo : public IBasicVideo2, public CUnknown
00386 {
00387 CBaseDispatch m_basedisp;
00388
00389 public:
00390
00391 CBaseBasicVideo(const TCHAR *, LPUNKNOWN);
00392
00393 DECLARE_IUNKNOWN
00394
00395
00396 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00397
00398
00399 STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);
00400
00401 STDMETHODIMP GetTypeInfo(
00402 UINT itinfo,
00403 LCID lcid,
00404 ITypeInfo ** pptinfo);
00405
00406 STDMETHODIMP GetIDsOfNames(
00407 REFIID riid,
00408 OLECHAR ** rgszNames,
00409 UINT cNames,
00410 LCID lcid,
00411 DISPID * rgdispid);
00412
00413 STDMETHODIMP Invoke(
00414 DISPID dispidMember,
00415 REFIID riid,
00416 LCID lcid,
00417 WORD wFlags,
00418 DISPPARAMS * pdispparams,
00419 VARIANT * pvarResult,
00420 EXCEPINFO * pexcepinfo,
00421 UINT * puArgErr);
00422
00423 STDMETHODIMP GetPreferredAspectRatio(
00424 long *plAspectX,
00425 long *plAspectY)
00426 {
00427 return E_NOTIMPL;
00428 }
00429 };
00430
00431 class AM_NOVTABLE CBaseVideoWindow : public IVideoWindow, public CUnknown
00432 {
00433 CBaseDispatch m_basedisp;
00434
00435 public:
00436
00437 CBaseVideoWindow(const TCHAR *, LPUNKNOWN);
00438
00439 DECLARE_IUNKNOWN
00440
00441
00442 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00443
00444
00445 STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);
00446
00447 STDMETHODIMP GetTypeInfo(
00448 UINT itinfo,
00449 LCID lcid,
00450 ITypeInfo ** pptinfo);
00451
00452 STDMETHODIMP GetIDsOfNames(
00453 REFIID riid,
00454 OLECHAR ** rgszNames,
00455 UINT cNames,
00456 LCID lcid,
00457 DISPID * rgdispid);
00458
00459 STDMETHODIMP Invoke(
00460 DISPID dispidMember,
00461 REFIID riid,
00462 LCID lcid,
00463 WORD wFlags,
00464 DISPPARAMS * pdispparams,
00465 VARIANT * pvarResult,
00466 EXCEPINFO * pexcepinfo,
00467 UINT * puArgErr);
00468 };
00469
00470 class AM_NOVTABLE CSourcePosition : public CMediaPosition
00471 {
00472
00473 public:
00474 CSourcePosition(const TCHAR *, LPUNKNOWN, HRESULT*, CCritSec *);
00475
00476
00477 STDMETHODIMP get_Duration(REFTIME * plength);
00478 STDMETHODIMP put_CurrentPosition(REFTIME llTime);
00479 STDMETHODIMP get_StopTime(REFTIME * pllTime);
00480 STDMETHODIMP put_StopTime(REFTIME llTime);
00481 STDMETHODIMP get_PrerollTime(REFTIME * pllTime);
00482 STDMETHODIMP put_PrerollTime(REFTIME llTime);
00483 STDMETHODIMP get_Rate(double * pdRate);
00484 STDMETHODIMP put_Rate(double dRate);
00485 STDMETHODIMP CanSeekForward(LONG *pCanSeekForward);
00486 STDMETHODIMP CanSeekBackward(LONG *pCanSeekBackward);
00487
00488
00489 STDMETHODIMP get_CurrentPosition(REFTIME * pllTime) {
00490 return E_NOTIMPL;
00491 };
00492
00493 protected:
00494
00495
00496 virtual HRESULT ChangeStart() PURE;
00497 virtual HRESULT ChangeStop() PURE;
00498 virtual HRESULT ChangeRate() PURE;
00499
00500 COARefTime m_Duration;
00501 COARefTime m_Start;
00502 COARefTime m_Stop;
00503 double m_Rate;
00504
00505 CCritSec * m_pLock;
00506 };
00507
00508 class AM_NOVTABLE CSourceSeeking :
00509 public IMediaSeeking,
00510 public CUnknown
00511 {
00512
00513 public:
00514
00515 DECLARE_IUNKNOWN;
00516 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00517
00518
00519
00520 STDMETHODIMP IsFormatSupported(const GUID * pFormat);
00521 STDMETHODIMP QueryPreferredFormat(GUID *pFormat);
00522 STDMETHODIMP SetTimeFormat(const GUID * pFormat);
00523 STDMETHODIMP IsUsingTimeFormat(const GUID * pFormat);
00524 STDMETHODIMP GetTimeFormat(GUID *pFormat);
00525 STDMETHODIMP GetDuration(LONGLONG *pDuration);
00526 STDMETHODIMP GetStopPosition(LONGLONG *pStop);
00527 STDMETHODIMP GetCurrentPosition(LONGLONG *pCurrent);
00528 STDMETHODIMP GetCapabilities( DWORD * pCapabilities );
00529 STDMETHODIMP CheckCapabilities( DWORD * pCapabilities );
00530 STDMETHODIMP ConvertTimeFormat( LONGLONG * pTarget, const GUID * pTargetFormat,
00531 LONGLONG Source, const GUID * pSourceFormat );
00532
00533 STDMETHODIMP SetPositions( LONGLONG * pCurrent, DWORD CurrentFlags
00534 , LONGLONG * pStop, DWORD StopFlags );
00535
00536 STDMETHODIMP GetPositions( LONGLONG * pCurrent, LONGLONG * pStop );
00537
00538 STDMETHODIMP GetAvailable( LONGLONG * pEarliest, LONGLONG * pLatest );
00539 STDMETHODIMP SetRate( double dRate);
00540 STDMETHODIMP GetRate( double * pdRate);
00541 STDMETHODIMP GetPreroll(LONGLONG *pPreroll);
00542
00543 protected:
00544
00545
00546 CSourceSeeking(const TCHAR *, LPUNKNOWN, HRESULT*, CCritSec *);
00547
00548
00549 virtual HRESULT ChangeStart() PURE;
00550 virtual HRESULT ChangeStop() PURE;
00551 virtual HRESULT ChangeRate() PURE;
00552
00553 CRefTime m_rtDuration;
00554 CRefTime m_rtStart;
00555 CRefTime m_rtStop;
00556 double m_dRateSeeking;
00557
00558
00559 DWORD m_dwSeekingCaps;
00560
00561 CCritSec * m_pLock;
00562 };
00563
00564 class CCmdQueue;
00565
00566 class CDispParams : public DISPPARAMS
00567 {
00568 public:
00569 CDispParams(UINT nArgs, VARIANT* pArgs, HRESULT *phr = NULL);
00570 ~CDispParams();
00571 };
00572
00573 class CDeferredCommand
00574 : public CUnknown,
00575 public IDeferredCommand
00576 {
00577 public:
00578
00579 CDeferredCommand(
00580 CCmdQueue * pQ,
00581 LPUNKNOWN pUnk,
00582 HRESULT * phr,
00583 LPUNKNOWN pUnkExecutor,
00584 REFTIME time,
00585 GUID* iid,
00586 long dispidMethod,
00587 short wFlags,
00588 long cArgs,
00589 VARIANT* pDispParams,
00590 VARIANT* pvarResult,
00591 short* puArgErr,
00592 BOOL bStream
00593 );
00594
00595 DECLARE_IUNKNOWN
00596
00597
00598 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00599
00600
00601 STDMETHODIMP Cancel();
00602 STDMETHODIMP Confidence(
00603 LONG* pConfidence);
00604 STDMETHODIMP Postpone(
00605 REFTIME newtime);
00606 STDMETHODIMP GetHResult(
00607 HRESULT* phrResult);
00608
00609
00610
00611 HRESULT Invoke();
00612
00613
00614
00615
00616 BOOL IsStreamTime() {
00617 return m_bStream;
00618 };
00619
00620 CRefTime GetTime() {
00621 return m_time;
00622 };
00623
00624 REFIID GetIID() {
00625 return *m_iid;
00626 };
00627
00628 long GetMethod() {
00629 return m_dispidMethod;
00630 };
00631
00632 short GetFlags() {
00633 return m_wFlags;
00634 };
00635
00636 DISPPARAMS* GetParams() {
00637 return &m_DispParams;
00638 };
00639
00640 VARIANT* GetResult() {
00641 return m_pvarResult;
00642 };
00643
00644 protected:
00645
00646 CCmdQueue* m_pQueue;
00647
00648
00649 LPUNKNOWN m_pUnk;
00650
00651
00652 REFERENCE_TIME m_time;
00653 GUID* m_iid;
00654 long m_dispidMethod;
00655 short m_wFlags;
00656 VARIANT* m_pvarResult;
00657 BOOL m_bStream;
00658 CDispParams m_DispParams;
00659 DISPID m_DispId;
00660
00661
00662 CBaseDispatch m_Dispatch;
00663
00664
00665 HRESULT m_hrResult;
00666 };
00667
00668 class AM_NOVTABLE CCmdQueue
00669 {
00670 public:
00671 CCmdQueue();
00672 virtual ~CCmdQueue();
00673
00674
00675
00676
00677
00678 virtual HRESULT New(
00679 CDeferredCommand **ppCmd,
00680 LPUNKNOWN pUnk,
00681 REFTIME time,
00682 GUID* iid,
00683 long dispidMethod,
00684 short wFlags,
00685 long cArgs,
00686 VARIANT* pDispParams,
00687 VARIANT* pvarResult,
00688 short* puArgErr,
00689 BOOL bStream
00690 );
00691
00692
00693
00694 virtual HRESULT Insert(CDeferredCommand* pCmd);
00695 virtual HRESULT Remove(CDeferredCommand* pCmd);
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734 virtual HRESULT SetSyncSource(IReferenceClock*);
00735
00736
00737 virtual HRESULT Run(REFERENCE_TIME tStreamTimeOffset);
00738
00739
00740 virtual HRESULT EndRun();
00741
00742
00743
00744
00745
00746
00747
00748 virtual HRESULT GetDueCommand(CDeferredCommand ** ppCmd, long msTimeout);
00749
00750
00751
00752
00753 HANDLE GetDueHandle() {
00754 return HANDLE(m_evDue);
00755 };
00756
00757
00758
00759
00760
00761
00762
00763
00764 virtual HRESULT GetCommandDueFor(REFERENCE_TIME tStream, CDeferredCommand**ppCmd);
00765
00766
00767 BOOL CheckTime(CRefTime time, BOOL bStream) {
00768
00769
00770 if (!m_pClock) {
00771 return FALSE;
00772 }
00773
00774
00775 if (bStream) {
00776
00777
00778 if (!m_bRunning) {
00779 return FALSE;
00780 }
00781
00782 time += m_StreamTimeOffset;
00783 }
00784
00785 CRefTime Now;
00786 m_pClock->GetTime((REFERENCE_TIME*)&Now);
00787 return (time <= Now);
00788 };
00789
00790 protected:
00791
00792
00793 CCritSec m_Lock;
00794
00795
00796 CGenericList<CDeferredCommand> m_listPresentation;
00797
00798
00799 CGenericList<CDeferredCommand> m_listStream;
00800
00801
00802 CAMEvent m_evDue;
00803
00804
00805 void SetTimeAdvise(void);
00806
00807
00808 DWORD_PTR m_dwAdvise;
00809
00810
00811 CRefTime m_tCurrentAdvise;
00812
00813
00814 IReferenceClock* m_pClock;
00815
00816
00817 BOOL m_bRunning;
00818
00819
00820 CRefTime m_StreamTimeOffset;
00821 };
00822
00823 #endif