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

113 lines
2.4 KiB
C++

//
// FPPin.h
//
#include "FPFilter.h"
typedef enum
{
PS_NOSTREAMING =0,
PS_STREAMING
} PIN_STREAMING_STATE;
//
// CFPPin implements the output pin
//
class CFPPin :
public CSourceStream,
public IAMStreamConfig,
public IAMBufferNegotiation
{
public:
// --- Constructor / Destructor ---
CFPPin(
CFPFilter* pFilter,
HRESULT* phr,
LPCWSTR pPinName
);
~CFPPin();
public:
// --- IUnknown ---
DECLARE_IUNKNOWN;
STDMETHODIMP NonDelegatingQueryInterface(
REFIID riid,
void** ppv
);
public:
// --- CSourceStream pure methods ---
// initialize play timing data
HRESULT OnThreadStartPlay();
// stuff an audio buffer with the current format
HRESULT FillBuffer(
IN IMediaSample *pms
);
// ask for buffers of the size appropriate to the agreed media type.
HRESULT DecideBufferSize(
IN IMemAllocator *pIMemAlloc,
OUT ALLOCATOR_PROPERTIES *pProperties
);
// --- CSourceStream virtual methods ---
HRESULT GetMediaType(
OUT CMediaType *pmt
);
// verify we can handle this format
HRESULT CheckMediaType(
IN const CMediaType *pMediaType
);
HRESULT SetMediaType(
IN const CMediaType *pMediaType
);
// --- IAMStreamConfig ---
STDMETHODIMP SetFormat(
AM_MEDIA_TYPE* pmt
);
STDMETHODIMP GetFormat(
AM_MEDIA_TYPE** ppmt
);
STDMETHODIMP GetNumberOfCapabilities(
int* piCount,
int* piSize
);
STDMETHODIMP GetStreamCaps(
int i,
AM_MEDIA_TYPE** ppmt,
LPBYTE pSCC
);
// --- IAMBufferNegotiation methods ---
STDMETHODIMP SuggestAllocatorProperties(
const ALLOCATOR_PROPERTIES* pprop
);
STDMETHODIMP GetAllocatorProperties(
ALLOCATOR_PROPERTIES* pprop
);
// CSourceStream methods
virtual HRESULT Deliver(
IN IMediaSample* pSample
);
private:
// --- Members ---
CFPFilter* m_pFPFilter; // back reference to the filter
BOOL m_bFinished; // If we need to send finished message
CMSPCritSection m_Lock; // Critical section
};
// eof