📄 mintopo.cpp
字号:
//
CurrentPin = PinDescriptors;
Index = 0;
// add the PIN_WAVEOUT_SOURCE pin descriptor (not optional)
INIT_PIN (PIN_WAVEOUT_SOURCE,
CurrentPin,
&KSCATEGORY_AUDIO,
NULL,
Index);
// add the PIN_PCBEEP_SOURCE pin descriptor (optional)
if (AdapterCommon->GetPinConfig (PINC_PCBEEP_PRESENT))
{
INIT_PIN (PIN_PCBEEP_SOURCE,
CurrentPin,
&KSNODETYPE_SPEAKER,
&KSAUDFNAME_PC_SPEAKER,
Index);
}
// add the PIN_PHONE_SOURCE pin descriptor (optional)
if (AdapterCommon->GetPinConfig (PINC_PHONE_PRESENT))
{
INIT_PIN (PIN_PHONE_SOURCE,
CurrentPin,
&KSNODETYPE_PHONE_LINE,
NULL,
Index);
}
// add the PIN_MIC_SOURCE pin descriptor (could be disabled)
if (AdapterCommon->GetPinConfig (PINC_MIC_PRESENT))
{
INIT_PIN (PIN_MIC_SOURCE,
CurrentPin,
&KSNODETYPE_MICROPHONE,
NULL,
Index);
}
// add the PIN_LINEIN_SOURCE pin descriptor (could be disabled)
if (AdapterCommon->GetPinConfig (PINC_LINEIN_PRESENT))
{
INIT_PIN (PIN_LINEIN_SOURCE,
CurrentPin,
&KSNODETYPE_LINE_CONNECTOR,
&KSAUDFNAME_LINE_IN,
Index);
}
// add the PIN_CD_SOURCE pin descriptor (could be disabled)
if (AdapterCommon->GetPinConfig (PINC_CD_PRESENT))
{
INIT_PIN (PIN_CD_SOURCE,
CurrentPin,
&KSNODETYPE_CD_PLAYER,
&KSAUDFNAME_CD_AUDIO,
Index);
}
// add the PIN_VIDEO_SOURCE pin descriptor (optional)
if (AdapterCommon->GetPinConfig (PINC_VIDEO_PRESENT))
{
INIT_PIN (PIN_VIDEO_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&KSAUDFNAME_VIDEO,
Index);
}
// add the PIN_AUX_SOURCE pin descriptor (optional)
if (AdapterCommon->GetPinConfig (PINC_AUX_PRESENT))
{
INIT_PIN (PIN_AUX_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&KSAUDFNAME_AUX,
Index);
}
// add the PIN_VIRT_TONE_MIX_SOURCE pin descriptor (not optional)
INIT_PIN (PIN_VIRT_TONE_MIX_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&KSAUDFNAME_STEREO_MIX,
Index);
// add the PIN_VIRT_TONE_MIX_MONO_SOURCE pin descriptor (not optional)
INIT_PIN (PIN_VIRT_TONE_MIX_MONO_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&KSAUDFNAME_MONO_MIX,
Index);
// create a virt. pin for the 3D controls
if (AdapterCommon->GetNodeConfig (NODEC_3D_PRESENT))
{
if (AdapterCommon->GetNodeConfig (NODEC_3D_CENTER_ADJUSTABLE))
{
INIT_PIN (PIN_VIRT_3D_CENTER_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&KSAUDFNAME_3D_CENTER,
Index);
}
// A weird way would be to have 3D but only fixed sliders. In that case,
// display one fixed slider (3D depth).
if (AdapterCommon->GetNodeConfig (NODEC_3D_DEPTH_ADJUSTABLE) ||
(!AdapterCommon->GetNodeConfig (NODEC_3D_CENTER_ADJUSTABLE) &&
!AdapterCommon->GetNodeConfig (NODEC_3D_DEPTH_ADJUSTABLE)))
{
INIT_PIN (PIN_VIRT_3D_DEPTH_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&KSAUDFNAME_3D_DEPTH,
Index);
}
}
// Add a "Front speaker" pin if we have multichannel or headphones.
// We use a master mono then ...
if (AdapterCommon->GetPinConfig (PINC_SURROUND_PRESENT) ||
AdapterCommon->GetPinConfig (PINC_HPOUT_PRESENT))
{
// Add a "Front speaker" pin, because in multichannel we want
// to display a master mono that effects all channels.
INIT_PIN (PIN_VIRT_FRONT_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&ICHFNAME_FRONT,
Index);
}
// check for multichannel
if (AdapterCommon->GetPinConfig (PINC_SURROUND_PRESENT))
{
// Add the Rear Speaker Volume pin.
INIT_PIN (PIN_VIRT_SURROUND_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&ICHFNAME_SURROUND,
Index);
// add the Center Volume pin if we support at least 6 channel.
if (AdapterCommon->GetPinConfig (PINC_CENTER_LFE_PRESENT))
{
INIT_PIN (PIN_VIRT_CENTER_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&ICHFNAME_CENTER,
Index);
INIT_PIN (PIN_VIRT_LFE_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&ICHFNAME_LFE,
Index);
}
}
// add the PIN_MASTEROUT_DEST pin descriptor (not optional)
CurrentPin->KsPinDescriptor.DataFlow = KSPIN_DATAFLOW_OUT;
INIT_PIN (PIN_MASTEROUT_DEST,
CurrentPin,
&KSNODETYPE_SPEAKER,
&KSAUDFNAME_VOLUME_CONTROL,
Index);
// add the PIN_HPOUT_SOURCE pin descriptor (optional)
if (AdapterCommon->GetPinConfig (PINC_HPOUT_PRESENT))
{
INIT_PIN (PIN_HPOUT_SOURCE,
CurrentPin,
&KSNODETYPE_HEADPHONES,
NULL,
Index);
}
// add the PIN_WAVEIN_DEST pin descriptor (not optional)
CurrentPin->KsPinDescriptor.DataFlow = KSPIN_DATAFLOW_OUT;
INIT_PIN (PIN_WAVEIN_DEST,
CurrentPin,
&KSCATEGORY_AUDIO,
NULL,
Index);
// add the PIN_MICIN_DEST pin descriptor (optional)
if (AdapterCommon->GetPinConfig (PINC_MICIN_PRESENT) &&
AdapterCommon->GetPinConfig (PINC_MIC_PRESENT))
{
CurrentPin->KsPinDescriptor.DataFlow = KSPIN_DATAFLOW_OUT;
INIT_PIN (PIN_MICIN_DEST,
CurrentPin,
&KSCATEGORY_AUDIO,
NULL,
Index);
}
// add the PIN_MONOOUT_DEST pin descriptor (optional)
if (AdapterCommon->GetPinConfig (PINC_MONOOUT_PRESENT))
{
// add the PIN_VIRT_3D_MIX_MONO_SOURCE pin descriptor
INIT_PIN (PIN_VIRT_3D_MIX_MONO_SOURCE,
CurrentPin,
&KSNODETYPE_ANALOG_CONNECTOR,
&KSAUDFNAME_MONO_MIX,
Index);
CurrentPin->KsPinDescriptor.DataFlow = KSPIN_DATAFLOW_OUT;
// and the normal output pin
INIT_PIN (PIN_MONOOUT_DEST,
CurrentPin,
&KSNODETYPE_PHONE_LINE,
&KSAUDFNAME_MONO_OUT,
Index);
}
// add the pin descriptor informatin to the filter descriptor
FilterDescriptor->PinCount = Index;
FilterDescriptor->PinSize = sizeof (PCPIN_DESCRIPTOR);
FilterDescriptor->Pins = PinDescriptors;
return STATUS_SUCCESS;
#undef INIT_PIN
}
/*****************************************************************************
* CMiniportTopologyICH::BuildNodeDescriptors
*****************************************************************************
* Builds the topology node descriptors.
*/
NTSTATUS CMiniportTopologyICH::BuildNodeDescriptors (void)
{
// Improvement would be to not use a Macro, use (inline) function instead.
#define INIT_NODE( node, nodeptr, type, name, automation, index ) \
nodeptr->Type = (GUID*) type; \
nodeptr->Name = (GUID*) name; \
nodeptr->AutomationTable = automation; \
SetNodeTranslation (index++, node); \
nodeptr++
PAGED_CODE ();
NTSTATUS ntStatus = STATUS_SUCCESS;
DOUT (DBG_PRINT, ("[CMiniportTopologyICH::BuildNodeDescriptors]"));
// allocate our descriptor memory
NodeDescriptors = PPCNODE_DESCRIPTOR (ExAllocatePool (PagedPool,
NODE_TOP_ELEMENT * sizeof(PCNODE_DESCRIPTOR)));
if (NodeDescriptors)
{
PPCNODE_DESCRIPTOR CurrentNode = NodeDescriptors;
ULONG Index = 0;
//
// set default node descriptor parameters
//
RtlZeroMemory (NodeDescriptors, NODE_TOP_ELEMENT *
sizeof(PCNODE_DESCRIPTOR));
// We don't have loopback mode currently. It is only used for testing anyway.
// Add the NODE_WAVEOUT_VOLUME node
INIT_NODE (NODE_WAVEOUT_VOLUME,
CurrentNode,
&KSNODETYPE_VOLUME,
&KSAUDFNAME_WAVE_VOLUME,
&AutomationVolume,
Index);
// add the NODE_WAVEOUT_MUTE node
INIT_NODE (NODE_WAVEOUT_MUTE,
CurrentNode,
&KSNODETYPE_MUTE,
&KSAUDFNAME_WAVE_MUTE,
&AutomationMute,
Index);
// add the PCBEEP nodes
if (AdapterCommon->GetPinConfig (PINC_PCBEEP_PRESENT))
{
// add the NODE_PCBEEP_VOLUME node
INIT_NODE (NODE_PCBEEP_VOLUME,
CurrentNode,
&KSNODETYPE_VOLUME,
&KSAUDFNAME_PC_SPEAKER_VOLUME,
&AutomationVolume,
Index);
// add the NODE_PCBEEP_MUTE node
INIT_NODE (NODE_PCBEEP_MUTE,
CurrentNode,
&KSNODETYPE_MUTE,
&KSAUDFNAME_PC_SPEAKER_MUTE,
&AutomationMute,
Index);
}
// add the PHONE nodes
if (AdapterCommon->GetPinConfig (PINC_PHONE_PRESENT))
{
// add the NODE_PHONE_VOLUME node
INIT_NODE (NODE_PHONE_VOLUME,
CurrentNode,
&KSNODETYPE_VOLUME,
&ICHFNAME_PHONE_VOLUME,
&AutomationVolume,
Index);
// add the NODE_PHONE_MUTE node
INIT_NODE (NODE_PHONE_MUTE,
CurrentNode,
&KSNODETYPE_MUTE,
&ICHFNAME_PHONE_MUTE,
&AutomationMute,
Index);
}
// add the MIC nodes
if (AdapterCommon->GetPinConfig (PINC_MIC_PRESENT))
{
if (AdapterCommon->GetPinConfig (PINC_MIC2_PRESENT))
{
// add the NODE_MIC_SELECT node
INIT_NODE (NODE_MIC_SELECT,
CurrentNode,
&KSNODETYPE_LOUDNESS,
&KSAUDFNAME_ALTERNATE_MICROPHONE,
&AutomationSpecial,
Index);
}
// add the NODE_MIC_BOOST node
INIT_NODE (NODE_MIC_BOOST,
CurrentNode,
&KSNODETYPE_AGC,
&KSAUDFNAME_MICROPHONE_BOOST,
&AutomationSpecial,
Index);
// add the NODE_MIC_VOLUME node
INIT_NODE (NODE_MIC_VOLUME,
CurrentNode,
&KSNODETYPE_VOLUME,
&KSAUDFNAME_MIC_VOLUME,
&AutomationVolume,
Index);
// add the NODE_MIC_MUTE node
INIT_NODE (NODE_MIC_MUTE,
CurrentNode,
&KSNODETYPE_MUTE,
&KSAUDFNAME_MIC_MUTE,
&AutomationMute,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -