mirror of
https://github.com/reactos/reactos.git
synced 2025-04-25 16:10:29 +00:00
[MMIXER]
- Add more error checks - Fix a bug MMixerGetControlsFromPinByConnectionIndex which pre-early stopped the enumeration of mixer controls - Only add guids which can be later be resolved to mixer control - Check if no a topology connection has no links connected svn path=/trunk/; revision=44559
This commit is contained in:
parent
5ed5d97905
commit
a20e1844ce
2 changed files with 35 additions and 11 deletions
|
@ -96,6 +96,12 @@ MMixerGetControlsFromPinByConnectionIndex(
|
||||||
else
|
else
|
||||||
NodeIndex = CurConnection->ToNode;
|
NodeIndex = CurConnection->ToNode;
|
||||||
|
|
||||||
|
if (NodeIndex > NodeTypes->Count)
|
||||||
|
{
|
||||||
|
// reached end of pin connection
|
||||||
|
return MM_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/* get target node type of current connection */
|
/* get target node type of current connection */
|
||||||
NodeType = MMixerGetNodeType(NodeTypes, NodeIndex);
|
NodeType = MMixerGetNodeType(NodeTypes, NodeIndex);
|
||||||
|
|
||||||
|
@ -124,7 +130,7 @@ MMixerGetControlsFromPinByConnectionIndex(
|
||||||
Status = MMixerGetNodeIndexes(MixerContext, NodeConnections, NodeIndex, TRUE, TRUE, &NodeConnectionCount, &NodeConnection);
|
Status = MMixerGetNodeIndexes(MixerContext, NodeConnections, NodeIndex, TRUE, TRUE, &NodeConnectionCount, &NodeConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Status != MM_STATUS_SUCCESS)
|
if (Status == MM_STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
for(Index = 0; Index < NodeConnectionCount; Index++)
|
for(Index = 0; Index < NodeConnectionCount; Index++)
|
||||||
{
|
{
|
||||||
|
@ -332,6 +338,7 @@ MMixerAddMixerSourceLine(
|
||||||
LPWSTR PinName;
|
LPWSTR PinName;
|
||||||
GUID NodeType;
|
GUID NodeType;
|
||||||
ULONG BytesReturned, ControlCount, Index;
|
ULONG BytesReturned, ControlCount, Index;
|
||||||
|
LPGUID Node;
|
||||||
PULONG Nodes;
|
PULONG Nodes;
|
||||||
|
|
||||||
if (!bTargetPin)
|
if (!bTargetPin)
|
||||||
|
@ -414,8 +421,14 @@ MMixerAddMixerSourceLine(
|
||||||
{
|
{
|
||||||
if (Nodes[Index])
|
if (Nodes[Index])
|
||||||
{
|
{
|
||||||
// found a node
|
// get node type
|
||||||
ControlCount++;
|
Node = MMixerGetNodeType(NodeTypes, Index);
|
||||||
|
|
||||||
|
if (MMixerGetControlTypeFromTopologyNode(Node))
|
||||||
|
{
|
||||||
|
// found a node which can be resolved to a type
|
||||||
|
ControlCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,14 +470,20 @@ MMixerAddMixerSourceLine(
|
||||||
{
|
{
|
||||||
if (Nodes[Index])
|
if (Nodes[Index])
|
||||||
{
|
{
|
||||||
/* store the node index for retrieving / setting details */
|
// get node type
|
||||||
SrcLine->NodeIds[ControlCount] = Index;
|
Node = MMixerGetNodeType(NodeTypes, Index);
|
||||||
|
|
||||||
Status = MMixerAddMixerControl(MixerContext, MixerInfo, hDevice, NodeTypes, Index, SrcLine, &SrcLine->LineControls[ControlCount]);
|
if (MMixerGetControlTypeFromTopologyNode(Node))
|
||||||
if (Status == MM_STATUS_SUCCESS)
|
|
||||||
{
|
{
|
||||||
/* increment control count on success */
|
/* store the node index for retrieving / setting details */
|
||||||
ControlCount++;
|
SrcLine->NodeIds[ControlCount] = Index;
|
||||||
|
|
||||||
|
Status = MMixerAddMixerControl(MixerContext, MixerInfo, hDevice, NodeTypes, Index, SrcLine, &SrcLine->LineControls[ControlCount]);
|
||||||
|
if (Status == MM_STATUS_SUCCESS)
|
||||||
|
{
|
||||||
|
/* increment control count on success */
|
||||||
|
ControlCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -902,8 +921,6 @@ MMixerInitializeFilter(
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RtlZeroMemory(Pins, sizeof(ULONG) * PinCount);
|
RtlZeroMemory(Pins, sizeof(ULONG) * PinCount);
|
||||||
// now get the target pins of the ADC / DAC node
|
// now get the target pins of the ADC / DAC node
|
||||||
Status = MMixerGetTargetPins(MixerContext, NodeTypes, NodeConnections, NodeIndex, bInputMixer, Pins, PinCount);
|
Status = MMixerGetTargetPins(MixerContext, NodeTypes, NodeConnections, NodeIndex, bInputMixer, Pins, PinCount);
|
||||||
|
|
|
@ -251,6 +251,13 @@ MMixerGetNodeIndexes(
|
||||||
Connection++;
|
Connection++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Count)
|
||||||
|
{
|
||||||
|
*NodeReferenceCount = 0;
|
||||||
|
*NodeReference = NULL;
|
||||||
|
return MM_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
ASSERT(Count != 0);
|
ASSERT(Count != 0);
|
||||||
|
|
||||||
/* now allocate node index array */
|
/* now allocate node index array */
|
||||||
|
|
Loading…
Reference in a new issue