[MMIXER_TEST]
[reactos.git] / rostests / tests / mmixer_test / test.c
index 0bf6915..939d49a 100644 (file)
@@ -2,6 +2,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <setupapi.h>
+#include <ks.h>
 #include <ksmedia.h>
 #include <mmsystem.h>
 #include <mmreg.h>
@@ -104,7 +105,7 @@ Control(
         {
             CloseHandle(Overlapped.hEvent);
 
-            //printf("Control: Failed with %lu Transferred %lu\n", GetLastError(), Transferred);
+            printf("Control: Failed with %lu Transferred %lu\n", GetLastError(), Transferred);
 
             if (GetLastError() == ERROR_MORE_DATA || GetLastError() == ERROR_INSUFFICIENT_BUFFER)
             {
@@ -199,6 +200,7 @@ Enum(
     *OutKey = SetupDiOpenDeviceInterfaceRegKey(EnumContext, &InterfaceData, 0, KEY_READ);
      if ((HKEY)*OutKey == INVALID_HANDLE_VALUE)
      {
+        printf("SetupDiOpenDeviceInterfaceRegKey failed with %lx\n", GetLastError());
         HeapFree(GetProcessHeap(), 0, DetailData);
         return MM_STATUS_UNSUCCESSFUL;
     }
@@ -271,6 +273,33 @@ CloseKey(
     return MM_STATUS_SUCCESS;
 }
 
+PVOID
+AllocEventData(
+    IN ULONG ExtraSize)
+{
+    PKSEVENTDATA Data = (PKSEVENTDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(KSEVENTDATA) + ExtraSize);
+    if (!Data)
+        return NULL;
+
+    Data->EventHandle.Event = CreateEventW(NULL, FALSE, FALSE, NULL);
+    if (!Data->EventHandle.Event)
+    {
+        HeapFree(GetProcessHeap(), 0, Data);
+        return NULL;
+    }
+
+    Data->NotificationType = KSEVENTF_EVENT_HANDLE;
+    return Data;
+}
+
+VOID
+FreeEventData(IN PVOID EventData)
+{
+    PKSEVENTDATA Data = (PKSEVENTDATA)EventData;
+
+    CloseHandle(Data->EventHandle.Event);
+    HeapFree(GetProcessHeap(), 0, Data);
+}
 
 int main(int argc, char**argv)
 {
@@ -281,14 +310,14 @@ int main(int argc, char**argv)
     HANDLE hMixer2;
     HMIXER hMixer1;
     MIXERLINEW MixerLine1, MixerLine2;
-    MIXERLINECONTROLS Controls1, Controls2;
+    MIXERLINECONTROLSW Controls1, Controls2;
 
     ZeroMemory(&MixerContext, sizeof(MIXER_CONTEXT));
 
     DeviceHandle = SetupDiGetClassDevs(&CategoryGuid,
                                        NULL,
                                        NULL,
-                                       DIGCF_DEVICEINTERFACE|DIGCF_PRESENT);
+                                       DIGCF_DEVICEINTERFACE/*|DIGCF_PRESENT */);
     if (DeviceHandle == INVALID_HANDLE_VALUE)
     {
         printf("SetupDiGetClassDevs failed with %lx\n", GetLastError());
@@ -307,6 +336,8 @@ int main(int argc, char**argv)
     MixerContext.OpenKey = OpenKey;
     MixerContext.CloseKey = CloseKey;
     MixerContext.QueryKeyValue = QueryKeyValue;
+    MixerContext.AllocEventData = AllocEventData;
+    MixerContext.FreeEventData = FreeEventData;
 
     Status = MMixerInitialize(&MixerContext, Enum, (PVOID)DeviceHandle);
 
@@ -336,8 +367,8 @@ int main(int argc, char**argv)
         wprintf(L"MMIX: dwDestination %lx dwSource %lx dwLineID %lx dwUser %lx dwComponentType %lx cChannels %lx cConnections %lx cControls %lx szShortName %s szName %s\n\n",
                 MixerLine2.dwDestination, MixerLine2.dwSource, MixerLine2.dwLineID, MixerLine2.dwUser, MixerLine2.dwComponentType, MixerLine2.cChannels, MixerLine2.cConnections, MixerLine2.cControls, MixerLine2.szShortName, MixerLine2.szName);
 
-        Controls1.cbStruct = sizeof(MIXERLINECONTROLS);
-        Controls2.cbStruct = sizeof(MIXERLINECONTROLS);
+        Controls1.cbStruct = sizeof(MIXERLINECONTROLSW);
+        Controls2.cbStruct = sizeof(MIXERLINECONTROLSW);
 
         Controls1.cbmxctrl = sizeof(MIXERCONTROL);
         Controls2.cbmxctrl = sizeof(MIXERCONTROL);
@@ -350,26 +381,40 @@ int main(int argc, char**argv)
 
 
 
-        Controls1.pamxctrl = (LPMIXERCONTROL)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MIXERCONTROL) * Controls1.cControls);
-        Controls2.pamxctrl = (LPMIXERCONTROL)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MIXERCONTROL) * Controls2.cControls);
+        Controls1.pamxctrl = (LPMIXERCONTROLW)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MIXERCONTROLW) * Controls1.cControls);
+        Controls2.pamxctrl = (LPMIXERCONTROLW)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MIXERCONTROLW) * Controls2.cControls);
 
         for(SubIndex = 0; SubIndex < Controls1.cControls; SubIndex++)
-            Controls1.pamxctrl[SubIndex].cbStruct = sizeof(MIXERCONTROL);
+            Controls1.pamxctrl[SubIndex].cbStruct = sizeof(MIXERCONTROLW);
 
         for(SubIndex = 0; SubIndex < Controls2.cControls; SubIndex++)
-            Controls2.pamxctrl[SubIndex].cbStruct = sizeof(MIXERCONTROL);
+            Controls2.pamxctrl[SubIndex].cbStruct = sizeof(MIXERCONTROLW);
 
-        mixerGetLineControls((HMIXEROBJ)hMixer1, &Controls1, MIXER_GETLINECONTROLSF_ALL);
+        mixerGetLineControlsW((HMIXEROBJ)hMixer1, &Controls1, MIXER_GETLINECONTROLSF_ALL);
+        MMixerGetLineControls(&MixerContext, hMixer2, MIXER_GETLINECONTROLSF_ALL, &Controls2);
 
         wprintf(L"----------------------------------------\n");
-        for(SubIndex = 0; SubIndex < Controls1.cControls; SubIndex++)
+        for(SubIndex = 0; SubIndex < Controls1.cControls || SubIndex  < Controls2.cControls; SubIndex++)
         {
-            wprintf(L"WINM: Index %d dwControlID %lx dwControlType %lx fdwControl %lx cMultipleItems %lx szName %s szShortName %s \n", SubIndex, Controls1.pamxctrl[SubIndex].dwControlID, Controls1.pamxctrl[SubIndex].dwControlType, Controls1.pamxctrl[SubIndex].fdwControl, Controls1.pamxctrl[SubIndex].cMultipleItems, Controls1.pamxctrl[SubIndex].szName, Controls1.pamxctrl[SubIndex].szShortName);
+            if (SubIndex < Controls1.cControls)
+            {
+                wprintf(L"WINM: Index %d dwControlID %lx dwControlType %lx fdwControl %lx cMultipleItems %lx szName %s szShortName %s \n", SubIndex, Controls1.pamxctrl[SubIndex].dwControlID, Controls1.pamxctrl[SubIndex].dwControlType, Controls1.pamxctrl[SubIndex].fdwControl, Controls1.pamxctrl[SubIndex].cMultipleItems, Controls1.pamxctrl[SubIndex].szName, Controls1.pamxctrl[SubIndex].szShortName);
+            }
+
+            if (SubIndex < Controls2.cControls)
+            {
+                wprintf(L"MMIX: Index %d dwControlID %lx dwControlType %lx fdwControl %lx cMultipleItems %lx szName %s szShortName %s \n", SubIndex, Controls2.pamxctrl[SubIndex].dwControlID, Controls2.pamxctrl[SubIndex].dwControlType, Controls2.pamxctrl[SubIndex].fdwControl, Controls2.pamxctrl[SubIndex].cMultipleItems, Controls2.pamxctrl[SubIndex].szName, Controls2.pamxctrl[SubIndex].szShortName);
+            }
+
         }
         wprintf(L"----------------------------------------\n");
 
 
         wprintf(L"=======================\n");
     }
+
+       wprintf(L"//////////////////////\n");
+       wprintf(L"NumWaveOut %lu NumWaveIn %lu\n", MMixerGetWaveOutCount(&MixerContext), MMixerGetWaveInCount(&MixerContext));
+       wprintf(L"waveOut    %lu waveIn    %lu\n", waveOutGetNumDevs(), waveInGetNumDevs());
     return 0;
 }