[AUDIO-BRINGUP]
[reactos.git] / lib / drivers / sound / mmixer / mixer.c
index b4b7dcf..c216110 100644 (file)
@@ -89,7 +89,7 @@ MMixerOpen(
     if (Status != MM_STATUS_SUCCESS)
     {
         /* invalid context passed */
     if (Status != MM_STATUS_SUCCESS)
     {
         /* invalid context passed */
-               DPRINT1("invalid context\n");
+        DPRINT1("invalid context\n");
         return Status;
     }
 
         return Status;
     }
 
@@ -98,7 +98,7 @@ MMixerOpen(
     if (!MixerInfo)
     {
         /* invalid mixer id */
     if (!MixerInfo)
     {
         /* invalid mixer id */
-               DPRINT1("invalid mixer id %lu\n", MixerId);
+        DPRINT1("invalid mixer id %lu\n", MixerId);
         return MM_STATUS_INVALID_PARAMETER;
     }
 
         return MM_STATUS_INVALID_PARAMETER;
     }
 
@@ -115,8 +115,9 @@ MMixerOpen(
 MIXER_STATUS
 MMixerGetLineInfo(
     IN PMIXER_CONTEXT MixerContext,
 MIXER_STATUS
 MMixerGetLineInfo(
     IN PMIXER_CONTEXT MixerContext,
-    IN  HANDLE MixerHandle,
-    IN  ULONG Flags,
+    IN HANDLE MixerHandle,
+    IN ULONG MixerId,
+    IN ULONG Flags,
     OUT LPMIXERLINEW MixerLine)
 {
     MIXER_STATUS Status;
     OUT LPMIXERLINEW MixerLine)
 {
     MIXER_STATUS Status;
@@ -131,6 +132,17 @@ MMixerGetLineInfo(
         /* invalid context passed */
         return Status;
     }
         /* invalid context passed */
         return Status;
     }
+    if ((Flags & (MIXER_OBJECTF_MIXER | MIXER_OBJECTF_HMIXER)) == MIXER_OBJECTF_MIXER)
+    {
+        /* caller passed mixer id */
+        MixerHandle = (HANDLE)MMixerGetMixerInfoByIndex(MixerContext, MixerId);
+
+        if (!MixerHandle)
+        {
+            /* invalid parameter */
+            return MM_STATUS_INVALID_PARAMETER;
+        }
+    }
 
     /* clear hmixer from flags */
     Flags &=~MIXER_OBJECTF_HMIXER;
 
     /* clear hmixer from flags */
     Flags &=~MIXER_OBJECTF_HMIXER;
@@ -220,6 +232,7 @@ MIXER_STATUS
 MMixerGetLineControls(
     IN PMIXER_CONTEXT MixerContext,
     IN HANDLE MixerHandle,
 MMixerGetLineControls(
     IN PMIXER_CONTEXT MixerContext,
     IN HANDLE MixerHandle,
+    IN ULONG MixerId,
     IN ULONG Flags,
     OUT LPMIXERLINECONTROLSW MixerLineControls)
 {
     IN ULONG Flags,
     OUT LPMIXERLINECONTROLSW MixerLineControls)
 {
@@ -238,6 +251,18 @@ MMixerGetLineControls(
         return Status;
     }
 
         return Status;
     }
 
+    if ((Flags & (MIXER_OBJECTF_MIXER | MIXER_OBJECTF_HMIXER)) == MIXER_OBJECTF_MIXER)
+    {
+        /* caller passed mixer id */
+        MixerHandle = (HANDLE)MMixerGetMixerInfoByIndex(MixerContext, MixerId);
+
+        if (!MixerHandle)
+        {
+            /* invalid parameter */
+            return MM_STATUS_INVALID_PARAMETER;
+        }
+    }
+
     Flags &= ~MIXER_OBJECTF_HMIXER;
 
     if (Flags == MIXER_GETLINECONTROLSF_ALL)
     Flags &= ~MIXER_OBJECTF_HMIXER;
 
     if (Flags == MIXER_GETLINECONTROLSF_ALL)
@@ -312,6 +337,7 @@ MIXER_STATUS
 MMixerSetControlDetails(
     IN PMIXER_CONTEXT MixerContext,
     IN HANDLE MixerHandle,
 MMixerSetControlDetails(
     IN PMIXER_CONTEXT MixerContext,
     IN HANDLE MixerHandle,
+    IN ULONG MixerId,
     IN ULONG Flags,
     OUT LPMIXERCONTROLDETAILS MixerControlDetails)
 {
     IN ULONG Flags,
     OUT LPMIXERCONTROLDETAILS MixerControlDetails)
 {
@@ -330,6 +356,18 @@ MMixerSetControlDetails(
         return Status;
     }
 
         return Status;
     }
 
+    if ((Flags & (MIXER_OBJECTF_MIXER | MIXER_OBJECTF_HMIXER)) == MIXER_OBJECTF_MIXER)
+    {
+        /* caller passed mixer id */
+        MixerHandle = (HANDLE)MMixerGetMixerInfoByIndex(MixerContext, MixerId);
+
+        if (!MixerHandle)
+        {
+            /* invalid parameter */
+            return MM_STATUS_INVALID_PARAMETER;
+        }
+    }
+
     /* get mixer info */
     MixerInfo = (LPMIXER_INFO)MixerHandle;
 
     /* get mixer info */
     MixerInfo = (LPMIXER_INFO)MixerHandle;
 
@@ -362,6 +400,7 @@ MIXER_STATUS
 MMixerGetControlDetails(
     IN PMIXER_CONTEXT MixerContext,
     IN HANDLE MixerHandle,
 MMixerGetControlDetails(
     IN PMIXER_CONTEXT MixerContext,
     IN HANDLE MixerHandle,
+    IN ULONG MixerId,
     IN ULONG Flags,
     OUT LPMIXERCONTROLDETAILS MixerControlDetails)
 {
     IN ULONG Flags,
     OUT LPMIXERCONTROLDETAILS MixerControlDetails)
 {
@@ -380,6 +419,18 @@ MMixerGetControlDetails(
         return Status;
     }
 
         return Status;
     }
 
+    if ((Flags & (MIXER_OBJECTF_MIXER | MIXER_OBJECTF_HMIXER)) == MIXER_OBJECTF_MIXER)
+    {
+        /* caller passed mixer id */
+        MixerHandle = (HANDLE)MMixerGetMixerInfoByIndex(MixerContext, MixerId);
+
+        if (!MixerHandle)
+        {
+            /* invalid parameter */
+            return MM_STATUS_INVALID_PARAMETER;
+        }
+    }
+
     /* get mixer info */
     MixerInfo = (LPMIXER_INFO)MixerHandle;
 
     /* get mixer info */
     MixerInfo = (LPMIXER_INFO)MixerHandle;