windows-nt/Source/XPSP1/NT/multimedia/dshow/streams/ddstream/mss.h
2020-09-26 16:20:57 +08:00

131 lines
3.9 KiB
C++

// Copyright (c) 1997 - 1998 Microsoft Corporation. All Rights Reserved.
// MSS.h : Declaration of the CAMMediaTypeStream
#ifndef __MSS_H_
#define __MSS_H_
#include "resource.h" // main symbols
class CAMMediaTypeSample;
/////////////////////////////////////////////////////////////////////////////
// CDDStream
class ATL_NO_VTABLE CAMMediaTypeStream :
public CComCoClass<CAMMediaTypeStream, &CLSID_AMMediaTypeStream>,
public CStream,
public IAMMediaTypeStream
{
friend CAMMediaTypeSample;
public:
//
// METHODS
//
CAMMediaTypeStream();
//
// IMediaStream
//
// HACK HACK - the first 2 are duplicates but it won't link
// without
STDMETHODIMP GetMultiMediaStream(
/* [out] */ IMultiMediaStream **ppMultiMediaStream)
{
return CStream::GetMultiMediaStream(ppMultiMediaStream);
}
STDMETHODIMP GetInformation(
/* [optional][out] */ MSPID *pPurposeId,
/* [optional][out] */ STREAM_TYPE *pType)
{
return CStream::GetInformation(pPurposeId, pType);
}
STDMETHODIMP SetSameFormat(IMediaStream *pStream, DWORD dwFlags);
STDMETHODIMP AllocateSample(
/* [in] */ DWORD dwFlags,
/* [out] */ IStreamSample **ppSample);
STDMETHODIMP CreateSharedSample(
/* [in] */ IStreamSample *pExistingSample,
/* [in] */ DWORD dwFlags,
/* [out] */ IStreamSample **ppNewSample);
STDMETHODIMP SendEndOfStream(DWORD dwFlags)
{
return CStream::SendEndOfStream(dwFlags);
}
//
// IAMMediaTypeStream
//
STDMETHODIMP GetFormat(
/* [out] */ AM_MEDIA_TYPE __RPC_FAR *pMediaType,
/* [in] */ DWORD dwFlags);
STDMETHODIMP SetFormat(
/* [in] */ AM_MEDIA_TYPE __RPC_FAR *pMediaType,
/* [in] */ DWORD dwFlags);
STDMETHODIMP CreateSample(
/* [in] */ long lSampleSize,
/* [optional][in] */ BYTE __RPC_FAR *pbBuffer,
/* [in] */ DWORD dwFlags,
/* [optional][in] */ IUnknown *pUnkOuter,
/* [out] */ IAMMediaTypeSample __RPC_FAR *__RPC_FAR *ppAMMediaTypeSample);
STDMETHODIMP GetStreamAllocatorRequirements(
/* [out] */ ALLOCATOR_PROPERTIES __RPC_FAR *pProps);
STDMETHODIMP SetStreamAllocatorRequirements(
/* [in] */ ALLOCATOR_PROPERTIES __RPC_FAR *pProps);
//
// IPin
//
STDMETHODIMP ReceiveConnection(IPin * pConnector, const AM_MEDIA_TYPE *pmt);
STDMETHODIMP QueryAccept(const AM_MEDIA_TYPE *pmt);
//
// IMemInputPin
//
STDMETHODIMP Receive(IMediaSample *pSample);
//
// IMemAllocator
//
STDMETHODIMP SetProperties(ALLOCATOR_PROPERTIES* pRequest, ALLOCATOR_PROPERTIES* pActual);
STDMETHODIMP GetProperties(ALLOCATOR_PROPERTIES* pProps);
STDMETHODIMP GetBuffer(IMediaSample **ppBuffer, REFERENCE_TIME * pStartTime,
REFERENCE_TIME * pEndTime, DWORD dwFlags);
//
// Special CStream methods
//
HRESULT GetMediaType(ULONG Index, AM_MEDIA_TYPE **ppMediaType);
protected:
HRESULT inline AllocMTSampleFromPool(const REFERENCE_TIME *rtStart, CAMMediaTypeSample **ppMTSample)
{
CSample *pSample;
HRESULT hr = AllocSampleFromPool(rtStart, &pSample);
*ppMTSample = (CAMMediaTypeSample *)pSample;
return hr;
}
public:
DECLARE_REGISTRY_RESOURCEID(IDR_MTSTREAM)
BEGIN_COM_MAP(CAMMediaTypeStream)
COM_INTERFACE_ENTRY(IAMMediaTypeStream)
COM_INTERFACE_ENTRY_CHAIN(CStream)
END_COM_MAP()
protected:
AM_MEDIA_TYPE m_MediaType;
ALLOCATOR_PROPERTIES m_AllocatorProperties;
};
#endif // __MSS_H_