From: Johannes Anderwald Date: Thu, 9 Dec 2010 11:33:58 +0000 (+0000) Subject: [AUDIO-BRINGUP] X-Git-Tag: backups/ros-branch-0_3_13@51035~84^2~16 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7ae8c563ccbcef365bcf022638cb82b0b5874f81;hp=5e2f536e5cbc84d9e74a9ae5763ed623c871a044 [AUDIO-BRINGUP] - Respect channel count which defines if the control acts uniform or per channel - Fix bug in MMixerSetGetMuxControlDetails svn path=/branches/audio-bringup/; revision=49993 --- diff --git a/lib/drivers/sound/mmixer/TODO b/lib/drivers/sound/mmixer/TODO new file mode 100644 index 00000000000..05cf9c29474 --- /dev/null +++ b/lib/drivers/sound/mmixer/TODO @@ -0,0 +1,6 @@ +=== MMIXER TASKS === + +- Add hacks for source lines, such that Wave Mixer line always has a volume control +- Support custom mixer controls +- Assign mixer controls after all controls have been assigned (starting on the destination lines) +- TESTING & BUGFIXING \ No newline at end of file diff --git a/lib/drivers/sound/mmixer/controls.c b/lib/drivers/sound/mmixer/controls.c index a0ba67ad403..e7bd2886ef5 100644 --- a/lib/drivers/sound/mmixer/controls.c +++ b/lib/drivers/sound/mmixer/controls.c @@ -35,7 +35,8 @@ MMixerAddMixerControl( IN HANDLE hMixer, IN PTOPOLOGY Topology, IN ULONG NodeIndex, - IN LPMIXERLINE_EXT MixerLine) + IN LPMIXERLINE_EXT MixerLine, + IN ULONG MaxChannels) { LPGUID NodeType; KSP_NODE Node; @@ -66,7 +67,7 @@ MMixerAddMixerControl( /* store control type */ MixerControl->Control.dwControlType = MMixerGetControlTypeFromTopologyNode(NodeType); - MixerControl->Control.fdwControl = MIXERCONTROL_CONTROLF_UNIFORM; /* FIXME */ + MixerControl->Control.fdwControl = (MaxChannels > 1 ? 0 : MIXERCONTROL_CONTROLF_UNIFORM); MixerControl->Control.cMultipleItems = 0; /* setup request to retrieve name */ @@ -136,7 +137,7 @@ MMixerAddMixerControl( MixerControl->Control.Bounds.dwMaximum = NodesCount - 1; MixerControl->Control.Metrics.dwReserved[0] = NodesCount; MixerControl->Control.cMultipleItems = NodesCount; - MixerControl->Control.fdwControl |= MIXERCONTROL_CONTROLF_MULTIPLE; + MixerControl->Control.fdwControl |= MIXERCONTROL_CONTROLF_UNIFORM | MIXERCONTROL_CONTROLF_MULTIPLE; } else if (MixerControl->Control.dwControlType == MIXERCONTROL_CONTROLTYPE_MUTE) { @@ -695,9 +696,14 @@ MMixerAddMixerControlsToMixerLineByNodeIndexArray( /* calculate maximum channels */ DstLine->Line.cChannels = min(DstLine->Line.cChannels, MaxChannels); } + else + { + /* use default of one channel */ + MaxChannels = 1; + } /* now add the mixer control */ - Status = MMixerAddMixerControl(MixerContext, MixerInfo, hMixer, Topology, Nodes[Index], DstLine); + Status = MMixerAddMixerControl(MixerContext, MixerInfo, hMixer, Topology, Nodes[Index], DstLine, MaxChannels); if (Status == MM_STATUS_SUCCESS) { diff --git a/lib/drivers/sound/mmixer/sup.c b/lib/drivers/sound/mmixer/sup.c index 7526ef62043..9052e94fb9c 100644 --- a/lib/drivers/sound/mmixer/sup.c +++ b/lib/drivers/sound/mmixer/sup.c @@ -536,6 +536,14 @@ MMixerSetGetMuxControlDetails( return Status; } + /* gets the corresponding mixer data */ + MixerData = MMixerGetMixerDataByDeviceHandle(MixerContext, MixerControl->hDevice); + + /* sanity check */ + ASSERT(MixerData); + ASSERT(MixerData->Topology); + ASSERT(MixerData->MixerInfo == MixerInfo); + /* get logical pin nodes */ MMixerGetConnectedFromLogicalTopologyPins(MixerData->Topology, MixerControl->NodeID, &LogicalNodesCount, LogicalNodes);