123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- #ifndef _AUDIOSWITCH_H
- #define _AUDIOSWITCH_H
- #include <streams.h>
- class CAudioSwitchRenderer;
- class CAudioSwitchRendererInputPin;
- class CAudioSwitchRendererInputPin : public CBaseInputPin
- {
- protected:
- CAudioSwitchRenderer *m_pRenderer;
- CMediaType m_mt;
- public:
- HRESULT NotifyMediaType();
- CAudioSwitchRendererInputPin(CAudioSwitchRenderer *pRenderer,
- HRESULT *phr,
- LPCWSTR Name);
-
- HRESULT BreakConnect();
- HRESULT CompleteConnect(IPin *pReceivePin);
- HRESULT SetMediaType(const CMediaType *pmt);
- HRESULT CheckMediaType(const CMediaType *pmt);
- HRESULT Active();
- HRESULT Inactive();
-
- STDMETHODIMP QueryId(LPWSTR *Id);
- STDMETHODIMP EndOfStream();
- STDMETHODIMP BeginFlush();
- STDMETHODIMP EndFlush();
- STDMETHODIMP Receive(IMediaSample *pMediaSample);
-
- IMemAllocator inline *Allocator() const
- {
- return m_pAllocator;
- }
- };
- class CAudioSwitchRenderer : public CBaseFilter
- {
- protected:
- friend class CAudioSwitchRendererInputPin;
- friend void CALLBACK EndOfStreamTimer(UINT uID,
- UINT uMsg,
- DWORD_PTR dwUser,
- DWORD_PTR dw1,
- DWORD_PTR dw2);
- CRendererPosPassThru *m_pPosition;
- CAMEvent m_RenderEvent;
- CAMEvent m_ThreadSignal;
- CAMEvent m_evComplete;
- BOOL m_bAbort;
- BOOL m_bStreaming;
- DWORD_PTR m_dwAdvise;
- IMediaSample *m_pMediaSample[16];
- BOOL m_bEOS;
- BOOL m_bEOSDelivered;
- CAudioSwitchRendererInputPin *m_pInputPin[16];
- CCritSec m_InterfaceLock;
- CCritSec m_RendererLock;
- IQualityControl * m_pQSink;
- BOOL m_bRepaintStatus;
-
- volatile BOOL m_bInReceive;
-
- REFERENCE_TIME m_SignalTime;
- UINT m_EndOfStreamTimer;
- int m_inputSelected;
- public:
- CAudioSwitchRenderer(REFCLSID RenderClass,
- TCHAR *pName,
- LPUNKNOWN pUnk,
- HRESULT *phr);
- virtual ~CAudioSwitchRenderer();
-
- virtual HRESULT GetMediaPositionInterface(REFIID riid,void **ppv);
- STDMETHODIMP NonDelegatingQueryInterface(REFIID, void **);
- virtual HRESULT SourceThreadCanWait(BOOL bCanWait);
- #ifdef DEBUG
-
- void DisplayRendererState();
- #endif
- virtual HRESULT WaitForRenderTime();
- virtual HRESULT CompleteStateChange(FILTER_STATE OldState);
-
- BOOL IsEndOfStream() { return m_bEOS; };
- BOOL IsEndOfStreamDelivered() { return m_bEOSDelivered; };
- BOOL IsStreaming() { return m_bStreaming; };
- void SetAbortSignal(BOOL bAbort) { m_bAbort = bAbort; };
- CAMEvent *GetRenderEvent() { return &m_RenderEvent; };
-
- void Ready() { m_evComplete.Set(); };
- void NotReady() { m_evComplete.Reset(); };
- BOOL CheckReady() { return m_evComplete.Check(); };
- virtual int GetPinCount();
- virtual CBasePin *GetPin(int n);
- FILTER_STATE GetRealState();
- void SendRepaint();
- void SendNotifyWindow(IPin *pPin,HWND hwnd);
- BOOL OnDisplayChange();
- void SetRepaintStatus(BOOL bRepaint);
-
- STDMETHODIMP Stop();
- STDMETHODIMP Pause();
- STDMETHODIMP Run(REFERENCE_TIME StartTime);
- STDMETHODIMP GetState(DWORD dwMSecs,FILTER_STATE *State);
- STDMETHODIMP FindPin(LPCWSTR Id, IPin **ppPin);
-
- virtual void OnRenderStart(IMediaSample *pMediaSample);
- virtual void OnRenderEnd(IMediaSample *pMediaSample);
- virtual HRESULT OnStartStreaming() { return NOERROR; };
- virtual HRESULT OnStopStreaming() { return NOERROR; };
- virtual void OnWaitStart() { };
- virtual void OnWaitEnd() { };
- virtual void PrepareRender() { };
- #ifdef PERF
- REFERENCE_TIME m_trRenderStart;
-
- int m_idBaseStamp;
- int m_idBaseRenderTime;
- int m_idBaseAccuracy;
- #endif
-
- virtual BOOL ScheduleSample(IMediaSample *pMediaSample);
- virtual HRESULT GetSampleTimes(IMediaSample *pMediaSample,
- REFERENCE_TIME *pStartTime,
- REFERENCE_TIME *pEndTime);
- virtual HRESULT ShouldDrawSampleNow(IMediaSample *pMediaSample,
- REFERENCE_TIME *ptrStart,
- REFERENCE_TIME *ptrEnd);
-
- void TimerCallback();
- void ResetEndOfStreamTimer();
- HRESULT NotifyEndOfStream();
- virtual HRESULT SendEndOfStream();
- virtual HRESULT ResetEndOfStream();
- virtual HRESULT EndOfStream();
-
- void SignalTimerFired();
- virtual HRESULT CancelNotification();
- virtual HRESULT ClearPendingSample();
-
- virtual HRESULT Active();
- virtual HRESULT Inactive();
- virtual HRESULT StartStreaming();
- virtual HRESULT StopStreaming();
- virtual HRESULT BeginFlush();
- virtual HRESULT EndFlush();
-
- virtual HRESULT BreakConnect();
- virtual HRESULT SetMediaType(const CMediaType *pmt);
- virtual HRESULT CompleteConnect(IPin *pReceivePin);
-
- virtual HRESULT PrepareReceive(IMediaSample *pMediaSample);
- virtual HRESULT Receive(IMediaSample *pMediaSample);
- virtual BOOL HaveCurrentSample();
- virtual IMediaSample *GetCurrentSample();
- virtual HRESULT Render(IMediaSample *pMediaSample);
-
- virtual HRESULT DoRenderSample(IMediaSample *pMediaSample) PURE;
- virtual HRESULT CheckMediaType(const CMediaType *) PURE;
-
- void WaitForReceiveToComplete();
- CAudioSwitchRendererInputPin *GetSelectedPin() { return m_pInputPin[m_inputSelected]; }
- int GetConnectedInputsCount();
- int GetSelectedInput();
- void SetSelectedInput(int n);
- };
- #endif
|