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
|
|||
|
|
|||
|
|