{
ULONG Index, SubIndex;
- DPRINT1("Num Pins %lu NumNodes %lu\n", Topology->TopologyPinsCount, Topology->TopologyNodesCount);
+ DPRINT("Num Pins %lu NumNodes %lu\n", Topology->TopologyPinsCount, Topology->TopologyNodesCount);
for(Index = 0; Index < Topology->TopologyPinsCount; Index++)
{
- DPRINT1("PinId %lu NodesConnectedFromCount %lu NodesConnectedToCount %lu Visited %lu\n", Topology->TopologyPins[Index].PinId,
+ DPRINT("PinId %lu NodesConnectedFromCount %lu NodesConnectedToCount %lu Visited %lu\n", Topology->TopologyPins[Index].PinId,
Topology->TopologyPins[Index].NodesConnectedFromCount, Topology->TopologyPins[Index].NodesConnectedToCount, Topology->TopologyPins[Index].Visited);
for(SubIndex = 0; SubIndex < Topology->TopologyPins[Index].NodesConnectedFromCount; SubIndex++)
- DPRINT1("NodesConnectedFrom Index %lu NodeId %lu\n", SubIndex, Topology->TopologyPins[Index].NodesConnectedFrom[SubIndex]->NodeIndex);
+ DPRINT("NodesConnectedFrom Index %lu NodeId %lu\n", SubIndex, Topology->TopologyPins[Index].NodesConnectedFrom[SubIndex]->NodeIndex);
for(SubIndex = 0; SubIndex < Topology->TopologyPins[Index].NodesConnectedToCount; SubIndex++)
- DPRINT1("NodesConnectedTo Index %lu NodeId %lu\n", SubIndex, Topology->TopologyPins[Index].NodesConnectedTo[SubIndex]->NodeIndex);
+ DPRINT("NodesConnectedTo Index %lu NodeId %lu\n", SubIndex, Topology->TopologyPins[Index].NodesConnectedTo[SubIndex]->NodeIndex);
}
for(Index = 0; Index < Topology->TopologyNodesCount; Index++)
{
- DPRINT1("NodeId %lu NodesConnectedFromCount %lu NodesConnectedToCount %lu Visited %lu PinConnectedFromCount %lu PinConnectedToCount %lu\n", Topology->TopologyNodes[Index].NodeIndex,
+ DPRINT("NodeId %lu NodesConnectedFromCount %lu NodesConnectedToCount %lu Visited %lu PinConnectedFromCount %lu PinConnectedToCount %lu\n", Topology->TopologyNodes[Index].NodeIndex,
Topology->TopologyNodes[Index].NodeConnectedFromCount, Topology->TopologyNodes[Index].NodeConnectedToCount, Topology->TopologyNodes[Index].Visited,
Topology->TopologyNodes[Index].PinConnectedFromCount, Topology->TopologyNodes[Index].PinConnectedToCount);
}
{
PTOPOLOGY_NODE InNode, OutNode;
PTOPOLOGY_NODE * NewNodes;
+ PULONG NewLogicalPinNodeConnectedFrom;
ULONG Count;
+ ULONG LogicalPinId;
/* sanity checks */
ASSERT(Topology->TopologyNodesCount > Connection->ToNode);
InNode = &Topology->TopologyNodes[Connection->FromNode];
OutNode = &Topology->TopologyNodes[Connection->ToNode];
+ /* get logical pin node id */
+ LogicalPinId = Connection->ToNodePin;
+
/* get existing count */
Count = OutNode->NodeConnectedFromCount;
return MM_STATUS_NO_MEMORY;
}
+ /* allocate logical pin nodes array */
+ NewLogicalPinNodeConnectedFrom = MixerContext->Alloc((Count + 1) * sizeof(ULONG));
+ if (!NewLogicalPinNodeConnectedFrom)
+ {
+ /* out of memory */
+ MixerContext->Free(NewNodes);
+ return MM_STATUS_NO_MEMORY;
+ }
+
if (Count)
{
/* copy existing nodes */
MixerContext->Copy(NewNodes, OutNode->NodeConnectedFrom, sizeof(PTOPOLOGY) * Count);
+ /* copy existing logical pin node array */
+ MixerContext->Copy(NewLogicalPinNodeConnectedFrom, OutNode->LogicalPinNodeConnectedFrom, sizeof(ULONG) * Count);
+
/* release old nodes array */
MixerContext->Free(OutNode->NodeConnectedFrom);
+
+ /* release old logical pin node array */
+ MixerContext->Free(OutNode->LogicalPinNodeConnectedFrom);
}
/* add new topology node */
NewNodes[OutNode->NodeConnectedFromCount] = InNode;
+ /* add logical node id */
+ NewLogicalPinNodeConnectedFrom[OutNode->NodeConnectedFromCount] = LogicalPinId;
+
/* replace old nodes array */
OutNode->NodeConnectedFrom = NewNodes;
+ /* replace old logical pin node array */
+ OutNode->LogicalPinNodeConnectedFrom = NewLogicalPinNodeConnectedFrom;
+
/* increment nodes count */
OutNode->NodeConnectedFromCount++;
/* node should not have been visited */
ASSERT(Node->Visited == FALSE);
+ /* mark node as visited */
+ TopologyNode->Visited = TRUE;
+
/* add them to node array */
MMixerAddPinIndexToArray(MixerContext, Node->NodeIndex, Topology->TopologyNodesCount, OutNodeCount, OutNodes);
/* recursively visit them */
MMixerGetUpOrDownstreamNodes(MixerContext, Topology, TopologyNodes[Index], bUpStream, OutNodeCount, OutNodes);
}
-
- /* mark node as visited */
- TopologyNode->Visited = TRUE;
-
}
MIXER_STATUS
*OutNodesCount = TopologyNodesCount;
}
+VOID
+MMixerGetTopologyPinCount(
+ IN PTOPOLOGY Topology,
+ OUT PULONG PinCount)
+{
+ /* store pin count */
+ *PinCount = Topology->TopologyPinsCount;
+}
+
MIXER_STATUS
MMixerAllocateTopologyPinArray(
IN PMIXER_CONTEXT MixerContext,