windows-nt/Source/XPSP1/NT/net/tapi/skywalker/csamsp/csastrm.h
2020-09-26 16:20:57 +08:00

138 lines
3.3 KiB
C++

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
wavestrm.h
Abstract:
Declaration of the CWaveMSPStream
Author:
Zoltan Szilagyi September 7th, 1998
--*/
#ifndef __WAVESTRM_H_
#define __WAVESTRM_H_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
/////////////////////////////////////////////////////////////////////////////
// CWaveMSPStream
/////////////////////////////////////////////////////////////////////////////
class CWaveMSPStream : public CMSPStream, public CMSPObjectSafetyImpl
{
public:
// DECLARE_POLY_AGGREGATABLE(CWaveMSP)
// To add extra interfaces to this class, use the following:
BEGIN_COM_MAP(CWaveMSPStream)
COM_INTERFACE_ENTRY( IObjectSafety )
COM_INTERFACE_ENTRY_CHAIN(CMSPStream)
END_COM_MAP()
public:
//
// Construction and destruction.
//
CWaveMSPStream();
virtual ~CWaveMSPStream();
virtual void FinalRelease();
//
// Required base class overrides.
//
STDMETHOD (get_Name) (
OUT BSTR * ppName
);
//
// We override these methods to implement our terminal handling.
// This consists of only allowing one terminal on the stream at a time
// and adding our filters and the terminal to the graph at the right
// times.
//
STDMETHOD (SelectTerminal) (
IN ITTerminal * pTerminal
);
STDMETHOD (UnselectTerminal) (
IN ITTerminal * pTerminal
);
STDMETHOD (StartStream) ();
STDMETHOD (PauseStream) ();
STDMETHOD (StopStream) ();
//
// Overrides for event handling.
//
virtual HRESULT ProcessGraphEvent(
IN long lEventCode,
IN LONG_PTR lParam1,
IN LONG_PTR lParam2
);
//
// Public methods specific to our implementation.
//
virtual HRESULT SetWaveID(GUID *PermanentGuid);
virtual HRESULT FireEvent(IN MSP_CALL_EVENT type,
IN HRESULT hrError,
IN MSP_CALL_EVENT_CAUSE cause);
protected:
//
// Protected data members.
//
BOOL m_fHaveWaveID;
BOOL m_fTerminalConnected;
IBaseFilter * m_pFilter;
IBaseFilter * m_pG711Filter;
FILTER_STATE m_DesiredGraphState;
private:
//
// Private helper methods.
//
HRESULT ConnectTerminal(ITTerminal * pTerminal);
HRESULT ConnectToTerminalPin(IPin * pTerminalPin);
HRESULT TryToConnect(IPin * pOutputPin, IPin * pInputPin);
void CreateAndAddG711(void);
HRESULT FindPinInFilter(
BOOL bWantOutputPin, // IN: if false, we want the input pin
IBaseFilter * pFilter, // IN: the filter to examine
IPin ** ppPin // OUT: the pin we found
);
HRESULT FindPin(
IPin ** ppPin
);
HRESULT DecideDesiredCaptureBufferSize(IUnknown * pUnknown,
long * plDesiredSize);
HRESULT SetupWaveIn( IPin * pOutputPin,
IPin * pInputPin );
HRESULT ExamineWaveInProperties(IPin *pPin);
HRESULT ManipulateAllocatorProperties(IAMBufferNegotiation * pNegotiation,
IMemInputPin * pMemInputPin);
};
#endif //__WAVEADDR_H_