windows-nt/Source/XPSP1/NT/drivers/ddk/wdmaudio/sb16/minwave.h
2020-09-26 16:20:57 +08:00

183 lines
7.1 KiB
C++

/*****************************************************************************
* minwave.h - SB16 wave miniport private definitions
*****************************************************************************
* Copyright (c) 1997-2000 Microsoft Corporation. All Rights Reserved.
*/
#ifndef _SB16WAVE_PRIVATE_H_
#define _SB16WAVE_PRIVATE_H_
#if OVERRIDE_DMA_CHANNEL
#define PC_IMPLEMENTATION
#endif // OVERRIDE_DMA_CHANNEL
#include "common.h"
/*****************************************************************************
* Classes
*/
/*****************************************************************************
* CMiniportWaveCyclicSB16
*****************************************************************************
* SB16 wave miniport. This object is associated with the device and is
* created when the device is started. The class inherits IMiniportWaveCyclic
* so it can expose this interface and CUnknown so it automatically gets
* reference counting and aggregation support.
*/
class CMiniportWaveCyclicSB16
: public IMiniportWaveCyclic,
public IWaveMiniportSB16,
public CUnknown
{
private:
PADAPTERCOMMON AdapterCommon; // Adapter common object.
PPORTWAVECYCLIC Port; // Callback interface.
ULONG NotificationInterval; // In milliseconds.
ULONG SamplingFrequency; // Frames per second.
BOOLEAN AllocatedCapture; // Capture in use.
BOOLEAN AllocatedRender; // Render in use.
BOOLEAN Allocated8Bit; // 8-bit DMA in use.
BOOLEAN Allocated16Bit; // 16-bit DMA in use.
PDMACHANNELSLAVE DmaChannel8; // Abstracted channel.
PDMACHANNELSLAVE DmaChannel16; // Abstracted channel.
PSERVICEGROUP ServiceGroup; // For notification.
KMUTEX SampleRateSync; // Sync for sample rate changes.
/*************************************************************************
* CMiniportWaveCyclicSB16 methods
*
* These are private member functions used internally by the object. See
* MINIPORT.CPP for specific descriptions.
*/
BOOLEAN ConfigureDevice
(
IN ULONG Interrupt,
IN ULONG DMA8Bit,
IN ULONG DMA16Bit
);
NTSTATUS ProcessResources
(
IN PRESOURCELIST ResourceList
);
NTSTATUS ValidateFormat
(
IN PKSDATAFORMAT Format
);
public:
/*************************************************************************
* The following two macros are from STDUNK.H. DECLARE_STD_UNKNOWN()
* defines inline IUnknown implementations that use CUnknown's aggregation
* support. NonDelegatingQueryInterface() is declared, but it cannot be
* implemented generically. Its definition appears in MINIPORT.CPP.
* DEFINE_STD_CONSTRUCTOR() defines inline a constructor which accepts
* only the outer unknown, which is used for aggregation. The standard
* create macro (in MINIPORT.CPP) uses this constructor.
*/
DECLARE_STD_UNKNOWN();
DEFINE_STD_CONSTRUCTOR(CMiniportWaveCyclicSB16);
~CMiniportWaveCyclicSB16();
/*************************************************************************
* This macro is from PORTCLS.H. It lists all the interface's functions.
*/
IMP_IMiniportWaveCyclic;
/*************************************************************************
* IWaveMiniportSB16 methods
*/
STDMETHODIMP_(void) RestoreSampleRate (void);
STDMETHODIMP_(void) ServiceWaveISR (void);
/*************************************************************************
* Friends
*
* The miniport stream class is a friend because it needs to access the
* private member variables of this class.
*/
friend class CMiniportWaveCyclicStreamSB16;
};
/*****************************************************************************
* CMiniportWaveCyclicStreamSB16
*****************************************************************************
* SB16 wave miniport stream. This object is associated with a streaming pin
* and is created when a pin is created on the filter. The class inherits
* IMiniportWaveCyclicStream so it can expose this interface and CUnknown so
* it automatically gets reference counting and aggregation support.
*/
class CMiniportWaveCyclicStreamSB16
: public IMiniportWaveCyclicStream,
public IDrmAudioStream,
#if OVERRIDE_DMA_CHANNEL
public IDmaChannel,
#endif // OVERRIDE_DMA_CHANNEL
public CUnknown
{
private:
CMiniportWaveCyclicSB16 * Miniport; // Miniport that created us.
ULONG Channel; // Index into channel list.
BOOLEAN Capture; // Capture or render.
BOOLEAN Format16Bit; // 16- or 8-bit samples.
BOOLEAN FormatStereo; // Two or one channel.
KSSTATE State; // Stop, pause, run.
PDMACHANNELSLAVE DmaChannel; // DMA channel to use.
BOOLEAN RestoreInputMixer; // Restore input mixer.
UCHAR InputMixerLeft; // Cache for left input mixer.
public:
/*************************************************************************
* The following two macros are from STDUNK.H. DECLARE_STD_UNKNOWN()
* defines inline IUnknown implementations that use CUnknown's aggregation
* support. NonDelegatingQueryInterface() is declared, but it cannot be
* implemented generically. Its definition appears in MINIPORT.CPP.
* DEFINE_STD_CONSTRUCTOR() defines inline a constructor which accepts
* only the outer unknown, which is used for aggregation. The standard
* create macro (in MINIPORT.CPP) uses this constructor.
*/
DECLARE_STD_UNKNOWN();
DEFINE_STD_CONSTRUCTOR(CMiniportWaveCyclicStreamSB16);
~CMiniportWaveCyclicStreamSB16();
NTSTATUS
Init
(
IN CMiniportWaveCyclicSB16 * Miniport,
IN ULONG Channel,
IN BOOLEAN Capture,
IN PKSDATAFORMAT DataFormat,
OUT PDMACHANNELSLAVE DmaChannel
);
/*************************************************************************
* Include IMiniportWaveCyclicStream public/exported methods (portcls.h)
*/
IMP_IMiniportWaveCyclicStream;
/*************************************************************************
* Include IDrmAudioStream public/exported methods (drmk.h)
*************************************************************************
*/
IMP_IDrmAudioStream;
#if OVERRIDE_DMA_CHANNEL
/*************************************************************************
* Include IDmaChannel public/exported methods (portcls.h)
*************************************************************************
*/
IMP_IDmaChannel;
#endif // OVERRIDE_DMA_CHANNEL
};
#endif