|
|
/*++
Copyright (c) 1998-1999 Microsoft Corporation
Module Name:
rcastrm.h
Abstract:
Declaration of the CRCAMSPStream
Author: Zoltan Szilagyi September 7th, 1998
--*/
#ifndef __RCASTRM_H_
#define __RCASTRM_H_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#define BITS_PER_SAMPLE_AT_TERMINAL 16
#define SAMPLE_RATE_AT_TERMINAL 8000
// rest of format is assumed to be mono, linear pcm at the terminal.
// See SetAudioFormat helper function.
/////////////////////////////////////////////////////////////////////////////
// CRCAMSPStream
/////////////////////////////////////////////////////////////////////////////
class CRCAMSPStream : public CMSPStream, public CMSPObjectSafetyImpl { public: // DECLARE_POLY_AGGREGATABLE(CRCAMSP)
// To add extra interfaces to this class, use the following:
BEGIN_COM_MAP(CRCAMSPStream) COM_INTERFACE_ENTRY( IObjectSafety ) COM_INTERFACE_ENTRY_CHAIN(CMSPStream) END_COM_MAP()
public:
//
// Construction and destruction.
//
CRCAMSPStream(); virtual ~CRCAMSPStream(); virtual void FinalRelease();
//
// Required base class overrides.
//
STDMETHOD (get_Name) ( OUT BSTR * ppName );
//
// Override to allow us to create our filter on initialization.
//
virtual HRESULT Init( IN HANDLE hAddress, IN CMSPCallBase * pMSPCall, IN IMediaEvent * pGraph, IN DWORD dwMediaType, IN TERMINAL_DIRECTION Direction );
//
// 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 SetVCHandle(IN DWORD dwVCHandle); virtual HRESULT FireEvent(IN MSP_CALL_EVENT type, IN HRESULT hrError, IN MSP_CALL_EVENT_CAUSE cause);
protected: //
// Protected data members.
//
BOOL m_fHaveVCHandle; DWORD m_dwBufferSizeOnWire; BOOL m_fTerminalConnected; IBaseFilter * m_pFilter; IBaseFilter * m_pG711Filter; FILTER_STATE m_DesiredGraphState;
private: //
// Private helper methods.
//
BOOL UseMulaw( void );
HRESULT GetBufferSizeFromPin( IN IPin * pPin, OUT DWORD * pdwSize ); HRESULT SetVCHandleOnPin(LPWSTR pszFileName, REFGUID formattype);
HRESULT SetDataFormatOnPin(IPin *pBridgePin); HRESULT SetMediaTypeFormat(AM_MEDIA_TYPE* pAmMediaType, BYTE* pformat, ULONG length); HRESULT CreateRCAFilter( void ); HRESULT PrepareG711Filter( void );
HRESULT ConnectTerminal( IN ITTerminal * pTerminal ); HRESULT ConnectToTerminalPin( IN IPin * pTerminalPin ); HRESULT TryToConnect( IN IPin * pOutputPin, IN IPin * pInputPin );
HRESULT ConnectUsingG711( IN IPin * pOutputPin, IN IPin * pInputPin );
HRESULT FindPinInFilter( IN BOOL bWantOutputPin, // if false, want input pin
IN IBaseFilter * pFilter, // the filter to examine
OUT IPin ** ppPin // the pin we found
); HRESULT FindPin( OUT IPin ** ppPin );
HRESULT ConfigureCapture( IN IPin * pOutputPin, IN IPin * pInputPin ); HRESULT ExamineCaptureSettings( IN IPin *pPin ); };
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// Helper functions -- non-class members.
//
HRESULT SetAudioFormat( IN IUnknown* pIUnknown, IN WORD wBitPerSample, IN DWORD dwSampleRate );
#endif //__WAVEADDR_H_
|