windows-nt/Source/XPSP1/NT/enduser/netmeeting/av/nac/mediapkt.h
2020-09-26 16:20:57 +08:00

237 lines
5 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1995-1996 Microsoft Corporation
Module Name:
audpackt.h
Abstract:
Contains prototypes for the AudioPacket class, which encapsulates a sound buffer in
its various states: recorded/encoded/network/decoded/playing etc.
--*/
#ifndef _MEDIAPKT_H_
#define _MEDIAPKT_H_
#include <pshpack8.h> /* Assume 8 byte packing throughout */
class MediaControl;
class FilterManager;
class DataPump;
typedef struct tagNetBuf
{
// first part looks like a Winsock WSABUF struct
ULONG length;
UCHAR *data;
class BufferPool *pool;
struct tagNetBuf *next;
}
NETBUF;
typedef struct tagMediaPacketInit
{
// flags
DWORD dwFlags;
// if set then MediaPacket doesnt allocate NETBUFs for RawData
BOOL fDontAllocRawBufs;
// stream of conversion
DPHANDLE hStrmConv;
PVOID pStrmConvSrcFmt;
PVOID pStrmConvDstFmt;
// device of mm io
// DPHANDLE hDevAudio;
PVOID pDevFmt;
// dev buffer
// PVOID pDevData;
ULONG cbSizeDevData;
ULONG cbOffsetDevData;
// wave buffer
// PVOID pWaveData;
ULONG cbSizeRawData;
ULONG cbOffsetRawData;
// net buffer
ULONG cbSizeNetData;
ULONG cbOffsetNetData;
ULONG cbPayloadHeaderSize;
int index;
BYTE payload;
}
MEDIAPACKETINIT;
/////////////////////////////////////////////
//
// AudioPacket
//
#define DP_MASK_STATE 0x000000FFUL
class MediaPacket
{
protected:
// stream of conversion
DPHANDLE m_hStrmConv;
PVOID m_pStrmConvHdr;
PVOID m_pStrmConvSrcFmt;
PVOID m_pStrmConvDstFmt;
// device of mm io
DPHANDLE m_hDev;
PVOID m_pDevHdr;
PVOID m_pDevFmt;
// dev related buffer and info
NETBUF *m_pDevData;
// wave related buffer and info
NETBUF *m_pRawData;
UINT m_cbValidRawData; // audio only - size of decode results
// network related buffer and info
NETBUF *m_pNetData;
UINT m_cbMaxNetData; // size of allocated net buffer
// public properties accessible
DWORD m_dwState;
BOOL m_fBusy; // set if not owned by rx/txstream
UINT m_seq; // RTP seq num
UINT m_index; // position in queue
// internal properties
BOOL m_fInitialized;
BOOL m_fDevPrepared;
BOOL m_fStrmPrepared;
private:
void _Construct ( void );
void _Destruct ( void );
public:
BOOL m_fRendering;
UINT m_fMark; // RTP mark bit
DWORD m_timestamp;// RTP timestamp
BYTE m_payload; // RTP payload
MediaPacket ( void );
~MediaPacket ( void );
virtual HRESULT Initialize ( MEDIAPACKETINIT * p );
virtual HRESULT Receive (NETBUF *pNetBuf, DWORD timestamp, UINT seq, UINT fMark);
virtual HRESULT Play ( MMIODEST *pmmioDest, UINT uDataType ) = 0;
virtual HRESULT Record ( void ) = 0;
virtual HRESULT GetProp ( DWORD dwPropId, PDWORD_PTR pdwPropVal );
virtual HRESULT SetProp ( DWORD dwPropId, DWORD_PTR dwPropVal );
virtual HRESULT Interpolate ( MediaPacket * pPrev, MediaPacket * pNext) = 0;
virtual HRESULT Release ( void );
virtual HRESULT Recycle ( void );
virtual HRESULT Open ( UINT uType, DPHANDLE hdl ) = 0; // called by RxStream or TxStream
virtual HRESULT Close ( UINT uType ) = 0; // called by RxStream or TxStream
virtual BOOL IsBufferDone ( void ) = 0;
virtual BOOL IsSameMediaFormat(PVOID fmt1,PVOID fmt2) = 0;
virtual void WriteToFile (MMIODEST *pmmioDest) = 0;
virtual void ReadFromFile (MMIOSRC *pmmioSrc ) = 0;
virtual HRESULT GetSignalStrength ( PDWORD pdwMaxStrength ) = 0;
virtual HRESULT MakeSilence ( void ) = 0;
BOOL SetDecodeBuffer(NETBUF *pNetBuf);
BOOL Busy(void) { return m_fBusy;}
void Busy(BOOL fBusy) { m_fBusy = fBusy;}
UINT GetSeqNum(void) { return m_seq;}
DWORD GetTimestamp(void) { return m_timestamp;}
BYTE GetPayload(void) { return m_payload;}
VOID SetPayload(BYTE bPayload) { m_payload = bPayload;}
UINT GetIndex(void) {return m_index;}
UINT GetState(void) { return (m_dwState & DP_MASK_STATE); }
void SetState(DWORD s) { m_dwState = (m_dwState & ~DP_MASK_STATE) | (s & DP_MASK_STATE); }
void* GetConversionHeader() {return m_pStrmConvHdr;}
HRESULT GetDevData(PVOID *ppData, PUINT pcbData) ;
HRESULT GetNetData(PVOID *ppData, PUINT pcbData);
HRESULT SetNetLength(UINT uLength);
virtual DWORD GetDevDataSamples() = 0;
inline DWORD GetFrameSize() {return ((DWORD)m_pNetData->length);}
inline void SetRawActual(UINT uRawValid) {m_cbValidRawData = uRawValid;}
};
enum
{
MP_STATE_RESET,
MP_STATE_RECORDING,
MP_STATE_RECORDED,
MP_STATE_ENCODED,
MP_STATE_NET_OUT_STREAM,
MP_STATE_NET_IN_STREAM,
MP_STATE_DECODED,
MP_STATE_PLAYING_BACK,
MP_STATE_PLAYING_SILENCE,
MP_STATE_PLAYED_BACK,
MP_STATE_RECYCLED,
MP_STATE_NumOfStates
};
enum
{
MP_DATATYPE_FROMWIRE,
MP_DATATYPE_SILENCE,
MP_DATATYPE_INTERPOLATED,
MP_DATATYPE_NumOfDataTypes
};
// types for Open()/Close()
enum
{
MP_TYPE_RECVSTRMCONV,
MP_TYPE_STREAMCONV,
MP_TYPE_DEV,
MP_TYPE_NumOfTypes
};
enum
{
MP_PROP_STATE,
MP_PROP_PLATFORM,
MP_PROP_DEV_MEDIA_FORMAT,
MP_PROP_DEV_DATA,
MP_PROP_DEV_HANDLE,
MP_PROP_DEV_MEDIA_HDR,
MP_PROP_IN_STREAM_FORMAT,
MP_PROP_OUT_STREAM_FORMAT,
MP_PROP_TIMESTAMP,
MP_PROP_INDEX,
MP_PROP_PREAMBLE,
MP_PROP_SEQNUM,
MP_PROP_FILTER_HEADER,
MP_PROP_MAX_NET_LENGTH,
MP_PROP_NumOfProps
};
#include <poppack.h> /* End byte packing */
#endif