113 lines
2.4 KiB
C++
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
|