237 lines
5 KiB
C++
237 lines
5 KiB
C++
/*++
|
||
|
||
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
|
||
|
||
|