MIXER_INFO
typedef struct _MIXER_INFO {
ULONG Key;
#define MIX_INFO_KEY (*(ULONG *)"Mix")
UCHAR NumberOfLines;
UCHAR NumberOfControls;
LARGE_INTEGER CurrentLogicalTime;
LIST_ENTRY NotifyQueue;
LIST_ENTRY ChangedItems;
PMIXER_DD_GET_SET_DATA HwGetLineData;
PMIXER_DD_GET_SET_DATA HwGetControlData;
PMIXER_DD_GET_SET_DATA HwGetCombinedControlData;
PMIXER_DD_GET_SET_DATA HwSetControlData;
} MIXER_INFO, *PMIXER_INFO;
The MIXER_INFO structure contains context information for a mixer device.
Members
-
Key
-
Internal only, for debugging. Should be “Mix”.
-
NumberOfLines
-
Number of mixer lines.
-
NumberOfControls
-
Number of mixer controls.
-
CurrentLogicalTime
-
Internal only. Incremented each time an item is added to the ChangedItems
queue. Used as a reference for determining the relative age of changed items.
-
NotifyQueue
-
Internal only. Pointer to an IRP queue of change notification targets. An IRP
is added each time soundlib.lib receives an IOCTL_MIX_REQUEST_NOTIFY
message.
-
ChangedItems
-
Internal only. Pointer to a list of mixer items of type MIXER_DATA_ITEM.
Modified by SoundMixerChangedItem.
-
HwGetLineData
-
Pointer to a driver-supplied function that SoundMixerDispatch
calls when it receives an IOCTL_MIX_GET_LINE_DATA message. The function type
is PMIXER_DD_GET_SET_DATA, where the data
parameter is a pointer to the fdwLine member of a MIXERLINE structure,
and the length parameter is the member’s size. The function sets one or
more of the following flags in the address pointed to by data.
Flag
|
Definition
|
MIXERLINE_LINEF_ACTIVE
|
Indicates that the line is active. Used mainly for waveform devices so the
application can determine when to poll the peak meter.
|
MIXERLINE_LINEF_DISCONNECTED
|
Indicates that the line is permanently unavailable. Useful for disabling
capabilities available only on some versions of the hardware.
|
MIXERLINE_LINEF_SOURCE
|
Indicates this is a source line, not a destination line.
|
These flags are defined in mmsystem.h. The MIXERLINE structure is
described in the Win32 SDK.
-
HwGetControlData
-
Pointer to a driver-supplied function that SoundMixerDispatch
calls when it receives an IOCTL_MIX_GET_CONTROL_DATA message. The function
type is PMIXER_DD_GET_SET_DATA, where the
length parameter is the size of the return buffer and the data
parameter is the return buffer’s address. This address is the paDetails
member of a MIXERCONTROLDETAILS structure. See the description of
MIXERCONTROLDETAILS in the Win32 SDK for information on how the buffer should
be filled.
-
HwGetCombinedControlData
-
Pointer to a driver-supplied function that returns the current values for the
volume controls. If the volume is controlled by mixer hardware, then always
return 0xFFFF for each control. Otherwise, if the master volume is supported
in hardware, return the current value of the control. If the master volume is
simulated, return the combined volume and master volume as a volume value.
The function type is PMIXER_DD_GET_SET_DATA,
where the data parameter is a pointer to a WAVE_DD_VOLUME structure and
the length parameter is the structure’s size.
-
HwSetControlData
-
Pointer to a driver-supplied function that SoundMixerDispatch
calls when it receives an IRP_MJ_WRITE message to set control items. The soundlib.lib
dispatchers for waveform, MIDI synthesizer, and auxiliary audio devices also
call this function to set volume levels. Function type is PMIXER_DD_GET_SET_DATA,
where the length parameter is the size of the data buffer and the data
parameter is the data buffer’s address. This address is the paDetails
member of a MIXERCONTROLDETAILS structure. Refer to the description of
MIXERCONTROLDETAILS in the Win32 SDK to understand the buffer contents. The
function should call SoundMixerChangedItem
if the value of a control changes.
Comments
MIXER_INFO is defined in mixer.h.
Allocate a MIXER_INFO structure from the nonpaged memory pool by calling ExAllocatePool.
To zero and initialize a MIXER_INFO structure, call SoundInitMixerInfo.
To create a mixer device object, call SoundCreateDevice
and specify a MIXER_INFO structure pointer for the DeviceSpecificData
parameter. Then assign the address of the mixer device’s LOCAL_DEVICE_INFO
structure to the MixerDevice member of every other device’s
LOCAL_DEVICE_INFO structure.