/*==========================================================================; * * Copyright (C) 1999 Microsoft Corporation. All Rights Reserved. * * File: dpvoice.h * Content: DirectPlayVoice include file * History: * Date By Reason * =========== =========== ==================== * 10/27/99 rodtoll created * 12/16/99 rodtoll Padding for compression structure ***************************************************************************/ #ifndef __DPVCP_H #define __DPVCP_H #include "dvoice.h" ///////////////////////////////////////////////////////////////////////////////////// // GUIDS // // {B8485451-07C4-4973-A278-C69890D8CF8D} DEFINE_GUID(IID_IDPVCompressionProvider, 0xb8485451, 0x7c4, 0x4973, 0xa2, 0x78, 0xc6, 0x98, 0x90, 0xd8, 0xcf, 0x8d); // {AAA56B61-3B8D-4906-AE58-29C26B8F47B8} DEFINE_GUID(IID_IDPVConverter, 0xaaa56b61, 0x3b8d, 0x4906, 0xae, 0x58, 0x29, 0xc2, 0x6b, 0x8f, 0x47, 0xb8); ///////////////////////////////////////////////////////////////////////////////////// // Interface types // typedef struct IDPVCompressionProvider FAR *LPDPVCOMPRESSIONPROVIDER, *PDPVCOMPRESSIONPROVIDER; typedef struct IDPVCompressor FAR *LPDPVCOMPRESSOR, *PDPVCOMPRESSOR; ///////////////////////////////////////////////////////////////////////////////////// // Data Types // typedef struct { // DVCOMPRESSIONINFO Structure // DWORD dwSize; GUID guidType; LPWSTR lpszName; LPWSTR lpszDescription; DWORD dwFlags; DWORD dwMaxBitsPerSecond; WAVEFORMATEX *lpwfxFormat; // // DVCOMPRESSIONINFO Structure End // Above this point must match the DVCOMPRESSIONINFO structure. // DWORD dwFramesPerBuffer; DWORD dwTrailFrames; DWORD dwTimeout; DWORD dwFrameLength; DWORD dwFrame8Khz; DWORD dwFrame11Khz; DWORD dwFrame22Khz; DWORD dwFrame44Khz; WORD wInnerQueueSize; WORD wMaxHighWaterMark; BYTE bMaxQueueSize; BYTE bMinConnectType; BYTE bPadding1; // For alignment BYTE bPadding2; // For alignment } DVFULLCOMPRESSIONINFO, *LPDVFULLCOMPRESSIONINFO, *PDVFULLCOMPRESSIONINFO; ///////////////////////////////////////////////////////////////////////////////////// // Interface definitions // #undef INTERFACE #define INTERFACE IDPVCompressionProvider // // IDPVCompressionProvider // // This interface is exported by each DLL which provides compression services. // It is used to enumerate the compression types available with a DLL and/or // create a compressor/decompressor for a specified type. // // I propose there will be two providers: // // DPVACM.DLL - Provides these services for ACM based drivers. It will read // the types it supports from the registry and can therefore be // extended with new types as ACM drivers become available // CLSID_DPVACM // // DPVVOX.DLL - Provides these services for Voxware. // DECLARE_INTERFACE_( IDPVCompressionProvider, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, PVOID *ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDPVCompressionProvider methods ***/ // EnumCompressionTypes // // Enumerates compression types supported by this DLL. Returns an array // of DVFULLCOMPRESSIONINFO structures describing the supported types. // STDMETHOD_(HRESULT, EnumCompressionTypes)( THIS_ PVOID, PDWORD, PDWORD, DWORD ) PURE; // IsCompressionSupported // // Quick query function for determing if the DLL supports a specified // compression type. // STDMETHOD_(HRESULT, IsCompressionSupported)( THIS_ GUID ) PURE; // CreateCompressor // // Create a IDPVConverter object which converts from the specified uncompressed // format to the specified compression format. // STDMETHOD_(HRESULT, CreateCompressor)( THIS_ LPWAVEFORMATEX, GUID, PDPVCOMPRESSOR *, DWORD ) PURE; // CreateDeCompressor // // Creates a IDPVConveter object which converts from the specified format to // the specified uncompressed format. // STDMETHOD_(HRESULT, CreateDeCompressor)( THIS_ GUID, LPWAVEFORMATEX, PDPVCOMPRESSOR *, DWORD ) PURE; // GetCompressionInfo // // Retrieves the DVFULLCOMPRESSIONINFO structure for the specified compression // type. // STDMETHOD_(HRESULT, GetCompressionInfo)( THIS_ GUID, PVOID, PDWORD ) PURE; }; #undef INTERFACE #define INTERFACE IDPVCompressor // // IDPVCompressor // // This interface does the actual work of performing conversions for // DirectPlayVoice. This can be instantiated on it's own and Initialized, // ot created using the CreateCompressor/CreateDecompressor above. // DECLARE_INTERFACE_( IDPVCompressor, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, PVOID *ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDPVCompressor methods ***/ // Initialize // // Initialize this object as a decompressor. // STDMETHOD_(HRESULT, InitDeCompress)( THIS_ GUID, LPWAVEFORMATEX ) PURE; // Initialize // // Initialize this object as a compressor STDMETHOD_(HRESULT, InitCompress)( THIS_ LPWAVEFORMATEX, GUID ) PURE; // IsValid // // Returns TRUE in the LPBOOL param if this compression type is // available. STDMETHOD_(HRESULT, IsValid)( THIS_ LPBOOL ) PURE; // GetXXXXXX // // Functions used by the engine for sizing. STDMETHOD_(HRESULT, GetUnCompressedFrameSize)( THIS_ LPDWORD ) PURE; STDMETHOD_(HRESULT, GetCompressedFrameSize)( THIS_ LPDWORD ) PURE; STDMETHOD_(HRESULT, GetNumFramesPerBuffer)( THIS_ LPDWORD ) PURE; // Convert // // Perform actual conversion STDMETHOD_(HRESULT, Convert)( THIS_ LPVOID, DWORD, LPVOID, LPDWORD, BOOL ) PURE; }; #endif