1*c2c66affSColin Finck #ifndef _MMIXER_PCH_ 2*c2c66affSColin Finck #define _MMIXER_PCH_ 3*c2c66affSColin Finck 4*c2c66affSColin Finck #include <wdm.h> 5*c2c66affSColin Finck #include <windef.h> 6*c2c66affSColin Finck #define NOBITMAP 7*c2c66affSColin Finck #include <mmreg.h> 8*c2c66affSColin Finck #include <ks.h> 9*c2c66affSColin Finck #include <ksmedia.h> 10*c2c66affSColin Finck #include <mmsystem.h> 11*c2c66affSColin Finck 12*c2c66affSColin Finck #include "mmixer.h" 13*c2c66affSColin Finck 14*c2c66affSColin Finck typedef struct __TOPOLOGY_NODE__ 15*c2c66affSColin Finck { 16*c2c66affSColin Finck GUID NodeType; 17*c2c66affSColin Finck ULONG NodeIndex; 18*c2c66affSColin Finck 19*c2c66affSColin Finck ULONG NodeConnectedToCount; 20*c2c66affSColin Finck struct __TOPOLOGY_NODE__ ** NodeConnectedTo; 21*c2c66affSColin Finck 22*c2c66affSColin Finck ULONG NodeConnectedFromCount; 23*c2c66affSColin Finck struct __TOPOLOGY_NODE__ ** NodeConnectedFrom; 24*c2c66affSColin Finck PULONG LogicalPinNodeConnectedFrom; 25*c2c66affSColin Finck 26*c2c66affSColin Finck ULONG PinConnectedFromCount; 27*c2c66affSColin Finck PULONG PinConnectedFrom; 28*c2c66affSColin Finck 29*c2c66affSColin Finck ULONG PinConnectedToCount; 30*c2c66affSColin Finck PULONG PinConnectedTo; 31*c2c66affSColin Finck 32*c2c66affSColin Finck ULONG Visited; 33*c2c66affSColin Finck ULONG Reserved; 34*c2c66affSColin Finck }TOPOLOGY_NODE, *PTOPOLOGY_NODE; 35*c2c66affSColin Finck 36*c2c66affSColin Finck typedef struct 37*c2c66affSColin Finck { 38*c2c66affSColin Finck ULONG PinId; 39*c2c66affSColin Finck 40*c2c66affSColin Finck ULONG NodesConnectedToCount; 41*c2c66affSColin Finck PTOPOLOGY_NODE * NodesConnectedTo; 42*c2c66affSColin Finck 43*c2c66affSColin Finck ULONG NodesConnectedFromCount; 44*c2c66affSColin Finck PTOPOLOGY_NODE * NodesConnectedFrom; 45*c2c66affSColin Finck 46*c2c66affSColin Finck ULONG PinConnectedFromCount; 47*c2c66affSColin Finck PULONG PinConnectedFrom; 48*c2c66affSColin Finck 49*c2c66affSColin Finck ULONG PinConnectedToCount; 50*c2c66affSColin Finck PULONG PinConnectedTo; 51*c2c66affSColin Finck 52*c2c66affSColin Finck ULONG Visited; 53*c2c66affSColin Finck ULONG Reserved; 54*c2c66affSColin Finck }PIN, *PPIN; 55*c2c66affSColin Finck 56*c2c66affSColin Finck 57*c2c66affSColin Finck typedef struct 58*c2c66affSColin Finck { 59*c2c66affSColin Finck ULONG TopologyPinsCount; 60*c2c66affSColin Finck PPIN TopologyPins; 61*c2c66affSColin Finck 62*c2c66affSColin Finck ULONG TopologyNodesCount; 63*c2c66affSColin Finck PTOPOLOGY_NODE TopologyNodes; 64*c2c66affSColin Finck 65*c2c66affSColin Finck }TOPOLOGY, *PTOPOLOGY; 66*c2c66affSColin Finck 67*c2c66affSColin Finck typedef struct 68*c2c66affSColin Finck { 69*c2c66affSColin Finck LIST_ENTRY Entry; 70*c2c66affSColin Finck MIXERCAPSW MixCaps; 71*c2c66affSColin Finck LIST_ENTRY LineList; 72*c2c66affSColin Finck ULONG ControlId; 73*c2c66affSColin Finck LIST_ENTRY EventList; 74*c2c66affSColin Finck }MIXER_INFO, *LPMIXER_INFO; 75*c2c66affSColin Finck 76*c2c66affSColin Finck typedef struct 77*c2c66affSColin Finck { 78*c2c66affSColin Finck LIST_ENTRY Entry; 79*c2c66affSColin Finck MIXERCONTROLW Control; 80*c2c66affSColin Finck ULONG NodeID; 81*c2c66affSColin Finck HANDLE hDevice; 82*c2c66affSColin Finck PVOID ExtraData; 83*c2c66affSColin Finck }MIXERCONTROL_EXT, *LPMIXERCONTROL_EXT; 84*c2c66affSColin Finck 85*c2c66affSColin Finck typedef struct 86*c2c66affSColin Finck { 87*c2c66affSColin Finck LIST_ENTRY Entry; 88*c2c66affSColin Finck ULONG PinId; 89*c2c66affSColin Finck MIXERLINEW Line; 90*c2c66affSColin Finck LIST_ENTRY ControlsList; 91*c2c66affSColin Finck 92*c2c66affSColin Finck }MIXERLINE_EXT, *LPMIXERLINE_EXT; 93*c2c66affSColin Finck 94*c2c66affSColin Finck typedef struct 95*c2c66affSColin Finck { 96*c2c66affSColin Finck LIST_ENTRY Entry; 97*c2c66affSColin Finck ULONG dwControlID; 98*c2c66affSColin Finck }MIXERCONTROL_DATA, *LPMIXERCONTROL_DATA; 99*c2c66affSColin Finck 100*c2c66affSColin Finck typedef struct 101*c2c66affSColin Finck { 102*c2c66affSColin Finck MIXERCONTROL_DATA Header; 103*c2c66affSColin Finck LONG SignedMinimum; 104*c2c66affSColin Finck LONG SignedMaximum; 105*c2c66affSColin Finck LONG SteppingDelta; 106*c2c66affSColin Finck ULONG InputSteppingDelta; 107*c2c66affSColin Finck ULONG ValuesCount; 108*c2c66affSColin Finck PLONG Values; 109*c2c66affSColin Finck }MIXERVOLUME_DATA, *LPMIXERVOLUME_DATA; 110*c2c66affSColin Finck 111*c2c66affSColin Finck typedef struct 112*c2c66affSColin Finck { 113*c2c66affSColin Finck LIST_ENTRY Entry; 114*c2c66affSColin Finck ULONG DeviceId; 115*c2c66affSColin Finck HANDLE hDevice; 116*c2c66affSColin Finck HANDLE hDeviceInterfaceKey; 117*c2c66affSColin Finck LPWSTR DeviceName; 118*c2c66affSColin Finck PTOPOLOGY Topology; 119*c2c66affSColin Finck LPMIXER_INFO MixerInfo; 120*c2c66affSColin Finck }MIXER_DATA, *LPMIXER_DATA; 121*c2c66affSColin Finck 122*c2c66affSColin Finck typedef struct 123*c2c66affSColin Finck { 124*c2c66affSColin Finck LIST_ENTRY Entry; 125*c2c66affSColin Finck ULONG DeviceId; 126*c2c66affSColin Finck ULONG PinId; 127*c2c66affSColin Finck union 128*c2c66affSColin Finck { 129*c2c66affSColin Finck WAVEOUTCAPSW OutCaps; 130*c2c66affSColin Finck WAVEINCAPSW InCaps; 131*c2c66affSColin Finck }u; 132*c2c66affSColin Finck }WAVE_INFO, *LPWAVE_INFO; 133*c2c66affSColin Finck 134*c2c66affSColin Finck typedef struct 135*c2c66affSColin Finck { 136*c2c66affSColin Finck LIST_ENTRY Entry; 137*c2c66affSColin Finck ULONG DeviceId; 138*c2c66affSColin Finck ULONG PinId; 139*c2c66affSColin Finck union 140*c2c66affSColin Finck { 141*c2c66affSColin Finck MIDIOUTCAPSW OutCaps; 142*c2c66affSColin Finck MIDIINCAPSW InCaps; 143*c2c66affSColin Finck }u; 144*c2c66affSColin Finck 145*c2c66affSColin Finck }MIDI_INFO, *LPMIDI_INFO; 146*c2c66affSColin Finck 147*c2c66affSColin Finck typedef struct 148*c2c66affSColin Finck { 149*c2c66affSColin Finck ULONG MixerListCount; 150*c2c66affSColin Finck LIST_ENTRY MixerList; 151*c2c66affSColin Finck 152*c2c66affSColin Finck ULONG MixerDataCount; 153*c2c66affSColin Finck LIST_ENTRY MixerData; 154*c2c66affSColin Finck 155*c2c66affSColin Finck ULONG WaveInListCount; 156*c2c66affSColin Finck LIST_ENTRY WaveInList; 157*c2c66affSColin Finck 158*c2c66affSColin Finck ULONG WaveOutListCount; 159*c2c66affSColin Finck LIST_ENTRY WaveOutList; 160*c2c66affSColin Finck 161*c2c66affSColin Finck ULONG MidiInListCount; 162*c2c66affSColin Finck LIST_ENTRY MidiInList; 163*c2c66affSColin Finck 164*c2c66affSColin Finck ULONG MidiOutListCount; 165*c2c66affSColin Finck LIST_ENTRY MidiOutList; 166*c2c66affSColin Finck }MIXER_LIST, *PMIXER_LIST; 167*c2c66affSColin Finck 168*c2c66affSColin Finck typedef struct 169*c2c66affSColin Finck { 170*c2c66affSColin Finck LIST_ENTRY Entry; 171*c2c66affSColin Finck PVOID MixerEventContext; 172*c2c66affSColin Finck PMIXER_EVENT MixerEventRoutine; 173*c2c66affSColin Finck 174*c2c66affSColin Finck }EVENT_NOTIFICATION_ENTRY, *PEVENT_NOTIFICATION_ENTRY; 175*c2c66affSColin Finck 176*c2c66affSColin Finck #define DESTINATION_LINE (0xFFFF0000) 177*c2c66affSColin Finck #define SOURCE_LINE (0x10000) 178*c2c66affSColin Finck ULONG 179*c2c66affSColin Finck MMixerGetFilterPinCount( 180*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 181*c2c66affSColin Finck IN HANDLE hMixer); 182*c2c66affSColin Finck 183*c2c66affSColin Finck LPGUID 184*c2c66affSColin Finck MMixerGetNodeType( 185*c2c66affSColin Finck IN PKSMULTIPLE_ITEM MultipleItem, 186*c2c66affSColin Finck IN ULONG Index); 187*c2c66affSColin Finck 188*c2c66affSColin Finck MIXER_STATUS 189*c2c66affSColin Finck MMixerGetNodeIndexes( 190*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 191*c2c66affSColin Finck IN PKSMULTIPLE_ITEM MultipleItem, 192*c2c66affSColin Finck IN ULONG NodeIndex, 193*c2c66affSColin Finck IN ULONG bNode, 194*c2c66affSColin Finck IN ULONG bFrom, 195*c2c66affSColin Finck OUT PULONG NodeReferenceCount, 196*c2c66affSColin Finck OUT PULONG *NodeReference); 197*c2c66affSColin Finck 198*c2c66affSColin Finck PKSTOPOLOGY_CONNECTION 199*c2c66affSColin Finck MMixerGetConnectionByIndex( 200*c2c66affSColin Finck IN PKSMULTIPLE_ITEM MultipleItem, 201*c2c66affSColin Finck IN ULONG Index); 202*c2c66affSColin Finck 203*c2c66affSColin Finck ULONG 204*c2c66affSColin Finck MMixerGetControlTypeFromTopologyNode( 205*c2c66affSColin Finck IN LPGUID NodeType); 206*c2c66affSColin Finck 207*c2c66affSColin Finck LPMIXERLINE_EXT 208*c2c66affSColin Finck MMixerGetSourceMixerLineByLineId( 209*c2c66affSColin Finck LPMIXER_INFO MixerInfo, 210*c2c66affSColin Finck DWORD dwLineID); 211*c2c66affSColin Finck 212*c2c66affSColin Finck MIXER_STATUS 213*c2c66affSColin Finck MMixerGetFilterTopologyProperty( 214*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 215*c2c66affSColin Finck IN HANDLE hMixer, 216*c2c66affSColin Finck IN ULONG PropertyId, 217*c2c66affSColin Finck OUT PKSMULTIPLE_ITEM * OutMultipleItem); 218*c2c66affSColin Finck 219*c2c66affSColin Finck VOID 220*c2c66affSColin Finck MMixerFreeMixerInfo( 221*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 222*c2c66affSColin Finck IN LPMIXER_INFO MixerInfo); 223*c2c66affSColin Finck 224*c2c66affSColin Finck MIXER_STATUS 225*c2c66affSColin Finck MMixerGetPhysicalConnection( 226*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 227*c2c66affSColin Finck IN HANDLE hMixer, 228*c2c66affSColin Finck IN ULONG PinId, 229*c2c66affSColin Finck OUT PKSPIN_PHYSICALCONNECTION *OutConnection); 230*c2c66affSColin Finck 231*c2c66affSColin Finck MIXER_STATUS 232*c2c66affSColin Finck MMixerSetupFilter( 233*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 234*c2c66affSColin Finck IN PMIXER_LIST MixerList, 235*c2c66affSColin Finck IN LPMIXER_DATA MixerData, 236*c2c66affSColin Finck IN PULONG DeviceCount); 237*c2c66affSColin Finck 238*c2c66affSColin Finck PKSPIN_CONNECT 239*c2c66affSColin Finck MMixerAllocatePinConnect( 240*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 241*c2c66affSColin Finck ULONG DataFormatSize); 242*c2c66affSColin Finck 243*c2c66affSColin Finck MIXER_STATUS 244*c2c66affSColin Finck MMixerGetAudioPinDataRanges( 245*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 246*c2c66affSColin Finck IN HANDLE hDevice, 247*c2c66affSColin Finck IN ULONG PinId, 248*c2c66affSColin Finck IN OUT PKSMULTIPLE_ITEM * OutMultipleItem); 249*c2c66affSColin Finck 250*c2c66affSColin Finck VOID 251*c2c66affSColin Finck MMixerInitializeMidiForFilter( 252*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 253*c2c66affSColin Finck IN PMIXER_LIST MixerList, 254*c2c66affSColin Finck IN LPMIXER_DATA MixerData, 255*c2c66affSColin Finck IN PTOPOLOGY Topology); 256*c2c66affSColin Finck 257*c2c66affSColin Finck MIXER_STATUS 258*c2c66affSColin Finck MMixerVerifyContext( 259*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext); 260*c2c66affSColin Finck 261*c2c66affSColin Finck LPMIXER_INFO 262*c2c66affSColin Finck MMixerGetMixerInfoByIndex( 263*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 264*c2c66affSColin Finck IN ULONG MixerIndex); 265*c2c66affSColin Finck 266*c2c66affSColin Finck LPMIXERLINE_EXT 267*c2c66affSColin Finck MMixerGetSourceMixerLineByComponentType( 268*c2c66affSColin Finck LPMIXER_INFO MixerInfo, 269*c2c66affSColin Finck DWORD dwComponentType); 270*c2c66affSColin Finck 271*c2c66affSColin Finck MIXER_STATUS 272*c2c66affSColin Finck MMixerGetMixerControlById( 273*c2c66affSColin Finck LPMIXER_INFO MixerInfo, 274*c2c66affSColin Finck DWORD dwControlID, 275*c2c66affSColin Finck LPMIXERLINE_EXT *MixerLine, 276*c2c66affSColin Finck LPMIXERCONTROL_EXT *MixerControl, 277*c2c66affSColin Finck PULONG NodeId); 278*c2c66affSColin Finck 279*c2c66affSColin Finck MIXER_STATUS 280*c2c66affSColin Finck MMixerSetGetMuteControlDetails( 281*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 282*c2c66affSColin Finck IN LPMIXER_INFO MixerInfo, 283*c2c66affSColin Finck IN LPMIXERCONTROL_EXT MixerControl, 284*c2c66affSColin Finck IN ULONG dwLineID, 285*c2c66affSColin Finck IN LPMIXERCONTROLDETAILS MixerControlDetails, 286*c2c66affSColin Finck IN ULONG bSet); 287*c2c66affSColin Finck 288*c2c66affSColin Finck MIXER_STATUS 289*c2c66affSColin Finck MMixerSetGetVolumeControlDetails( 290*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 291*c2c66affSColin Finck IN LPMIXER_INFO MixerInfo, 292*c2c66affSColin Finck IN ULONG NodeId, 293*c2c66affSColin Finck IN ULONG bSet, 294*c2c66affSColin Finck LPMIXERCONTROL_EXT MixerControl, 295*c2c66affSColin Finck IN LPMIXERCONTROLDETAILS MixerControlDetails, 296*c2c66affSColin Finck LPMIXERLINE_EXT MixerLine); 297*c2c66affSColin Finck 298*c2c66affSColin Finck MIXER_STATUS 299*c2c66affSColin Finck MMixerSetGetMuxControlDetails( 300*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 301*c2c66affSColin Finck IN LPMIXER_INFO MixerInfo, 302*c2c66affSColin Finck IN ULONG NodeId, 303*c2c66affSColin Finck IN ULONG bSet, 304*c2c66affSColin Finck IN ULONG Flags, 305*c2c66affSColin Finck LPMIXERCONTROL_EXT MixerControl, 306*c2c66affSColin Finck IN LPMIXERCONTROLDETAILS MixerControlDetails, 307*c2c66affSColin Finck LPMIXERLINE_EXT MixerLine); 308*c2c66affSColin Finck 309*c2c66affSColin Finck 310*c2c66affSColin Finck MIXER_STATUS 311*c2c66affSColin Finck MMixerSetGetControlDetails( 312*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 313*c2c66affSColin Finck IN HANDLE hMixer, 314*c2c66affSColin Finck IN ULONG NodeId, 315*c2c66affSColin Finck IN ULONG bSet, 316*c2c66affSColin Finck IN ULONG PropertyId, 317*c2c66affSColin Finck IN ULONG Channel, 318*c2c66affSColin Finck IN PLONG InputValue); 319*c2c66affSColin Finck 320*c2c66affSColin Finck LPMIXER_DATA 321*c2c66affSColin Finck MMixerGetDataByDeviceId( 322*c2c66affSColin Finck IN PMIXER_LIST MixerList, 323*c2c66affSColin Finck IN ULONG DeviceId); 324*c2c66affSColin Finck 325*c2c66affSColin Finck LPMIXER_DATA 326*c2c66affSColin Finck MMixerGetDataByDeviceName( 327*c2c66affSColin Finck IN PMIXER_LIST MixerList, 328*c2c66affSColin Finck IN LPWSTR DeviceName); 329*c2c66affSColin Finck 330*c2c66affSColin Finck MIXER_STATUS 331*c2c66affSColin Finck MMixerCreateMixerData( 332*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 333*c2c66affSColin Finck IN PMIXER_LIST MixerList, 334*c2c66affSColin Finck IN ULONG DeviceId, 335*c2c66affSColin Finck IN LPWSTR DeviceName, 336*c2c66affSColin Finck IN HANDLE hDevice, 337*c2c66affSColin Finck IN HANDLE hKey); 338*c2c66affSColin Finck 339*c2c66affSColin Finck MIXER_STATUS 340*c2c66affSColin Finck MMixerInitializeWaveInfo( 341*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 342*c2c66affSColin Finck IN PMIXER_LIST MixerList, 343*c2c66affSColin Finck IN LPMIXER_DATA MixerData, 344*c2c66affSColin Finck IN LPWSTR DeviceName, 345*c2c66affSColin Finck IN ULONG bWaveIn, 346*c2c66affSColin Finck IN ULONG PinCount, 347*c2c66affSColin Finck IN PULONG Pins); 348*c2c66affSColin Finck 349*c2c66affSColin Finck MIXER_STATUS 350*c2c66affSColin Finck MMixerAddEvent( 351*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 352*c2c66affSColin Finck IN OUT LPMIXER_INFO MixerInfo, 353*c2c66affSColin Finck IN PVOID MixerEvent, 354*c2c66affSColin Finck IN PMIXER_EVENT MixerEventRoutine); 355*c2c66affSColin Finck 356*c2c66affSColin Finck MIXER_STATUS 357*c2c66affSColin Finck MMixerRemoveEvent( 358*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 359*c2c66affSColin Finck IN OUT LPMIXER_INFO MixerInfo, 360*c2c66affSColin Finck IN PVOID MixerEventContext, 361*c2c66affSColin Finck IN PMIXER_EVENT MixerEventRoutine); 362*c2c66affSColin Finck 363*c2c66affSColin Finck MIXER_STATUS 364*c2c66affSColin Finck MMixerGetDeviceName( 365*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 366*c2c66affSColin Finck OUT LPWSTR DeviceName, 367*c2c66affSColin Finck IN HANDLE hKey); 368*c2c66affSColin Finck 369*c2c66affSColin Finck MIXER_STATUS 370*c2c66affSColin Finck MMixerGetDeviceNameWithComponentId( 371*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 372*c2c66affSColin Finck IN HANDLE hMixer, 373*c2c66affSColin Finck OUT LPWSTR DeviceName); 374*c2c66affSColin Finck 375*c2c66affSColin Finck VOID 376*c2c66affSColin Finck MMixerInitializePinConnect( 377*c2c66affSColin Finck IN OUT PKSPIN_CONNECT PinConnect, 378*c2c66affSColin Finck IN ULONG PinId); 379*c2c66affSColin Finck 380*c2c66affSColin Finck MIXER_STATUS 381*c2c66affSColin Finck MMixerGetPinDataFlowAndCommunication( 382*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 383*c2c66affSColin Finck IN HANDLE hDevice, 384*c2c66affSColin Finck IN ULONG PinId, 385*c2c66affSColin Finck OUT PKSPIN_DATAFLOW DataFlow, 386*c2c66affSColin Finck OUT PKSPIN_COMMUNICATION Communication); 387*c2c66affSColin Finck 388*c2c66affSColin Finck VOID 389*c2c66affSColin Finck MMixerHandleAlternativeMixers( 390*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 391*c2c66affSColin Finck IN PMIXER_LIST MixerList, 392*c2c66affSColin Finck IN LPMIXER_DATA MixerData, 393*c2c66affSColin Finck IN PTOPOLOGY Topology); 394*c2c66affSColin Finck 395*c2c66affSColin Finck MIXER_STATUS 396*c2c66affSColin Finck MMixerGetMixerByName( 397*c2c66affSColin Finck IN PMIXER_LIST MixerList, 398*c2c66affSColin Finck IN LPWSTR MixerName, 399*c2c66affSColin Finck OUT LPMIXER_INFO *MixerInfo); 400*c2c66affSColin Finck 401*c2c66affSColin Finck /* topology.c */ 402*c2c66affSColin Finck 403*c2c66affSColin Finck MIXER_STATUS 404*c2c66affSColin Finck MMixerCreateTopology( 405*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 406*c2c66affSColin Finck IN ULONG PinCount, 407*c2c66affSColin Finck IN PKSMULTIPLE_ITEM NodeConnections, 408*c2c66affSColin Finck IN PKSMULTIPLE_ITEM NodeTypes, 409*c2c66affSColin Finck OUT PTOPOLOGY *OutTopology); 410*c2c66affSColin Finck 411*c2c66affSColin Finck VOID 412*c2c66affSColin Finck MMixerGetAllUpOrDownstreamPinsFromNodeIndex( 413*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 414*c2c66affSColin Finck IN PTOPOLOGY Topology, 415*c2c66affSColin Finck IN ULONG NodeIndex, 416*c2c66affSColin Finck IN ULONG bUpStream, 417*c2c66affSColin Finck OUT PULONG OutPinsCount, 418*c2c66affSColin Finck OUT PULONG OutPins); 419*c2c66affSColin Finck 420*c2c66affSColin Finck MIXER_STATUS 421*c2c66affSColin Finck MMixerGetAllUpOrDownstreamPinsFromPinIndex( 422*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 423*c2c66affSColin Finck IN PTOPOLOGY Topology, 424*c2c66affSColin Finck IN ULONG PinIndex, 425*c2c66affSColin Finck IN ULONG bUpStream, 426*c2c66affSColin Finck OUT PULONG OutPinsCount, 427*c2c66affSColin Finck OUT PULONG OutPins); 428*c2c66affSColin Finck 429*c2c66affSColin Finck VOID 430*c2c66affSColin Finck MMixerGetNextNodesFromPinIndex( 431*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 432*c2c66affSColin Finck IN PTOPOLOGY Topology, 433*c2c66affSColin Finck IN ULONG PinIndex, 434*c2c66affSColin Finck IN ULONG bUpStream, 435*c2c66affSColin Finck OUT PULONG OutNodesCount, 436*c2c66affSColin Finck OUT PULONG OutNodes); 437*c2c66affSColin Finck 438*c2c66affSColin Finck MIXER_STATUS 439*c2c66affSColin Finck MMixerAllocateTopologyPinArray( 440*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 441*c2c66affSColin Finck IN PTOPOLOGY Topology, 442*c2c66affSColin Finck OUT PULONG * OutPins); 443*c2c66affSColin Finck 444*c2c66affSColin Finck MIXER_STATUS 445*c2c66affSColin Finck MMixerAllocateTopologyNodeArray( 446*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 447*c2c66affSColin Finck IN PTOPOLOGY Topology, 448*c2c66affSColin Finck OUT PULONG * OutPins); 449*c2c66affSColin Finck 450*c2c66affSColin Finck VOID 451*c2c66affSColin Finck MMixerGetAllUpOrDownstreamNodesFromPinIndex( 452*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 453*c2c66affSColin Finck IN PTOPOLOGY Topology, 454*c2c66affSColin Finck IN ULONG PinIndex, 455*c2c66affSColin Finck IN ULONG bUpStream, 456*c2c66affSColin Finck OUT PULONG OutNodesCount, 457*c2c66affSColin Finck OUT PULONG OutNodes); 458*c2c66affSColin Finck 459*c2c66affSColin Finck VOID 460*c2c66affSColin Finck MMixerIsNodeTerminator( 461*c2c66affSColin Finck IN PTOPOLOGY Topology, 462*c2c66affSColin Finck IN ULONG NodeIndex, 463*c2c66affSColin Finck OUT ULONG * bTerminator); 464*c2c66affSColin Finck 465*c2c66affSColin Finck VOID 466*c2c66affSColin Finck MMixerGetNextNodesFromNodeIndex( 467*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 468*c2c66affSColin Finck IN PTOPOLOGY Topology, 469*c2c66affSColin Finck IN ULONG NodeIndex, 470*c2c66affSColin Finck IN ULONG bUpStream, 471*c2c66affSColin Finck OUT PULONG OutNodesCount, 472*c2c66affSColin Finck OUT PULONG OutNodes); 473*c2c66affSColin Finck 474*c2c66affSColin Finck LPGUID 475*c2c66affSColin Finck MMixerGetNodeTypeFromTopology( 476*c2c66affSColin Finck IN PTOPOLOGY Topology, 477*c2c66affSColin Finck IN ULONG NodeIndex); 478*c2c66affSColin Finck 479*c2c66affSColin Finck MIXER_STATUS 480*c2c66affSColin Finck MMixerGetAllUpOrDownstreamNodesFromNodeIndex( 481*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 482*c2c66affSColin Finck IN PTOPOLOGY Topology, 483*c2c66affSColin Finck IN ULONG NodeIndex, 484*c2c66affSColin Finck IN ULONG bUpStream, 485*c2c66affSColin Finck OUT PULONG OutNodesCount, 486*c2c66affSColin Finck OUT PULONG OutNodes); 487*c2c66affSColin Finck 488*c2c66affSColin Finck MIXER_STATUS 489*c2c66affSColin Finck MMixerIsNodeConnectedToPin( 490*c2c66affSColin Finck IN PMIXER_CONTEXT MixerContext, 491*c2c66affSColin Finck IN PTOPOLOGY Topology, 492*c2c66affSColin Finck IN ULONG NodeIndex, 493*c2c66affSColin Finck IN ULONG PinId, 494*c2c66affSColin Finck IN ULONG bUpStream, 495*c2c66affSColin Finck OUT PULONG bConnected); 496*c2c66affSColin Finck 497*c2c66affSColin Finck ULONG 498*c2c66affSColin Finck MMixerGetNodeIndexFromGuid( 499*c2c66affSColin Finck IN PTOPOLOGY Topology, 500*c2c66affSColin Finck IN const GUID *NodeType); 501*c2c66affSColin Finck 502*c2c66affSColin Finck VOID 503*c2c66affSColin Finck MMixerSetTopologyNodeReserved( 504*c2c66affSColin Finck IN PTOPOLOGY Topology, 505*c2c66affSColin Finck IN ULONG NodeIndex); 506*c2c66affSColin Finck 507*c2c66affSColin Finck VOID 508*c2c66affSColin Finck MMixerIsTopologyNodeReserved( 509*c2c66affSColin Finck IN PTOPOLOGY Topology, 510*c2c66affSColin Finck IN ULONG NodeIndex, 511*c2c66affSColin Finck OUT PULONG bReserved); 512*c2c66affSColin Finck 513*c2c66affSColin Finck VOID 514*c2c66affSColin Finck MMixerSetTopologyPinReserved( 515*c2c66affSColin Finck IN PTOPOLOGY Topology, 516*c2c66affSColin Finck IN ULONG PinId); 517*c2c66affSColin Finck 518*c2c66affSColin Finck VOID 519*c2c66affSColin Finck MMixerIsTopologyPinReserved( 520*c2c66affSColin Finck IN PTOPOLOGY Topology, 521*c2c66affSColin Finck IN ULONG PinId, 522*c2c66affSColin Finck OUT PULONG bReserved); 523*c2c66affSColin Finck 524*c2c66affSColin Finck VOID 525*c2c66affSColin Finck MMixerGetTopologyPinCount( 526*c2c66affSColin Finck IN PTOPOLOGY Topology, 527*c2c66affSColin Finck OUT PULONG PinCount); 528*c2c66affSColin Finck 529*c2c66affSColin Finck VOID 530*c2c66affSColin Finck MMixerGetConnectedFromLogicalTopologyPins( 531*c2c66affSColin Finck IN PTOPOLOGY Topology, 532*c2c66affSColin Finck IN ULONG NodeIndex, 533*c2c66affSColin Finck OUT PULONG OutPinCount, 534*c2c66affSColin Finck OUT PULONG OutPins); 535*c2c66affSColin Finck 536*c2c66affSColin Finck VOID 537*c2c66affSColin Finck MMixerPrintTopology(); 538*c2c66affSColin Finck 539*c2c66affSColin Finck #endif /* _MMIXER_PCH_ */ 540