138 lines
3.3 KiB
C
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_
|