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
|
||||
NodeIndex = CurConnection->ToNode;
|
||||
|
||||
if (NodeIndex > NodeTypes->Count)
|
||||
{
|
||||
// reached end of pin connection
|
||||
return MM_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* get target node type of current connection */
|
||||
NodeType = MMixerGetNodeType(NodeTypes, NodeIndex);
|
||||
|
||||
|
@ -124,7 +130,7 @@ MMixerGetControlsFromPinByConnectionIndex(
|
|||
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++)
|
||||
{
|
||||
|
@ -332,6 +338,7 @@ MMixerAddMixerSourceLine(
|
|||
LPWSTR PinName;
|
||||
GUID NodeType;
|
||||
ULONG BytesReturned, ControlCount, Index;
|
||||
LPGUID Node;
|
||||
PULONG Nodes;
|
||||
|
||||
if (!bTargetPin)
|
||||
|
@ -414,8 +421,14 @@ MMixerAddMixerSourceLine(
|
|||
{
|
||||
if (Nodes[Index])
|
||||
{
|
||||
// found a node
|
||||
ControlCount++;
|
||||
// get node type
|
||||
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])
|
||||
{
|
||||
/* store the node index for retrieving / setting details */
|
||||
SrcLine->NodeIds[ControlCount] = Index;
|
||||
// get node type
|
||||
Node = MMixerGetNodeType(NodeTypes, Index);
|
||||
|
||||
Status = MMixerAddMixerControl(MixerContext, MixerInfo, hDevice, NodeTypes, Index, SrcLine, &SrcLine->LineControls[ControlCount]);
|
||||
if (Status == MM_STATUS_SUCCESS)
|
||||
if (MMixerGetControlTypeFromTopologyNode(Node))
|
||||
{
|
||||
/* increment control count on success */
|
||||
ControlCount++;
|
||||
/* store the node index for retrieving / setting details */
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
RtlZeroMemory(Pins, sizeof(ULONG) * PinCount);
|
||||
// now get the target pins of the ADC / DAC node
|
||||
Status = MMixerGetTargetPins(MixerContext, NodeTypes, NodeConnections, NodeIndex, bInputMixer, Pins, PinCount);
|
||||
|
|
|
@ -251,6 +251,13 @@ MMixerGetNodeIndexes(
|
|||
Connection++;
|
||||
}
|
||||
|
||||
if (!Count)
|
||||
{
|
||||
*NodeReferenceCount = 0;
|
||||
*NodeReference = NULL;
|
||||
return MM_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
ASSERT(Count != 0);
|
||||
|
||||
/* now allocate node index array */
|
||||
|
|
Loading…
Reference in a new issue