183 lines
7.1 KiB
C++
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 |