Jörg Höhle : wineoss: MOD_MIDIPORT has 0 voices and notes and FFFF ChannelMask.

Alexandre Julliard julliard at winehq.org
Wed May 5 11:08:35 CDT 2010


Module: wine
Branch: master
Commit: d531d229e5d2a857544a4e5f75c63d572fbf60fd
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d531d229e5d2a857544a4e5f75c63d572fbf60fd

Author: Jörg Höhle <Joerg-Cyril.Hoehle at t-systems.com>
Date:   Tue May  4 15:44:05 2010 +0200

wineoss: MOD_MIDIPORT has 0 voices and notes and FFFF ChannelMask.

---

 dlls/wineoss.drv/midi.c |   91 ++++++++++++++++++++++------------------------
 1 files changed, 44 insertions(+), 47 deletions(-)

diff --git a/dlls/wineoss.drv/midi.c b/dlls/wineoss.drv/midi.c
index 20163b1..6f29dcc 100644
--- a/dlls/wineoss.drv/midi.c
+++ b/dlls/wineoss.drv/midi.c
@@ -217,58 +217,60 @@ static LRESULT OSS_MidiInit(void)
 	MidiOutDev[i].caps.wPid = 0x0001; 	/* FIXME Product ID  */
 	/* Product Version. We simply say "1" */
 	MidiOutDev[i].caps.vDriverVersion = 0x001;
+	/* The following are mandatory for MOD_MIDIPORT */
 	MidiOutDev[i].caps.wChannelMask   = 0xFFFF;
-
-	/* FIXME Do we have this information?
-	 * Assuming the soundcards can handle
-	 * MIDICAPS_VOLUME and MIDICAPS_LRVOLUME but
-	 * not MIDICAPS_CACHE.
-	 */
-	MidiOutDev[i].caps.dwSupport      = MIDICAPS_VOLUME|MIDICAPS_LRVOLUME;
+	MidiOutDev[i].caps.wVoices        = 0;
+	MidiOutDev[i].caps.wNotes         = 0;
+	MidiOutDev[i].caps.dwSupport      = 0;
 
 	sinfo.device = i;
 	status = ioctl(midiSeqFD, SNDCTL_SYNTH_INFO, &sinfo);
 	if (status == -1) {
-            static const WCHAR fmt[] = {'W','i','n','e',' ','O','S','S',' ','M','i','d','i',' ','O','u','t',' ','(','#','%','d',')',' ','d','i','s','a','b','l','e','d',0};
+            static const WCHAR fmt[] = {'W','i','n','e',' ','O','S','S',' ','M','i','d','i',' ','O','u','t',' ','#','%','d',' ','d','i','s','a','b','l','e','d',0};
 	    ERR("ioctl for synth info failed on %d, disabling it.\n", i);
 
             wsprintfW(MidiOutDev[i].caps.szPname, fmt, i);
 
             MidiOutDev[i].caps.wTechnology = MOD_MIDIPORT;
-            MidiOutDev[i].caps.wVoices     = 16;
-            MidiOutDev[i].caps.wNotes      = 16;
             MidiOutDev[i].bEnabled = FALSE;
 	} else {
             MultiByteToWideChar( CP_UNIXCP, 0, sinfo.name, -1,
                                  MidiOutDev[i].caps.szPname,
                                  sizeof(MidiOutDev[i].caps.szPname)/sizeof(WCHAR) );
-
             MidiOutDev[i].caps.wTechnology = MIDI_UnixToWindowsDeviceType(sinfo.synth_type);
-            MidiOutDev[i].caps.wVoices     = sinfo.nr_voices;
 
-            /* FIXME Is it possible to know the maximum
-             * number of simultaneous notes of a soundcard ?
-             * I believe we don't have this information, but
-             * it's probably equal or more than wVoices
-             */
-            MidiOutDev[i].caps.wNotes      = sinfo.nr_voices;
+            if (MOD_MIDIPORT != MidiOutDev[i].caps.wTechnology) {
+                /* FIXME Do we have this information?
+                 * Assuming the soundcards can handle
+                 * MIDICAPS_VOLUME and MIDICAPS_LRVOLUME but
+                 * not MIDICAPS_CACHE.
+                 */
+                MidiOutDev[i].caps.dwSupport = MIDICAPS_VOLUME|MIDICAPS_LRVOLUME;
+                MidiOutDev[i].caps.wVoices     = sinfo.nr_voices;
+
+                /* FIXME Is it possible to know the maximum
+                 * number of simultaneous notes of a soundcard ?
+                 * I believe we don't have this information, but
+                 * it's probably equal or more than wVoices
+                 */
+                MidiOutDev[i].caps.wNotes      = sinfo.nr_voices;
+            }
             MidiOutDev[i].bEnabled = TRUE;
-        }
 
-	/* We also have the information sinfo.synth_subtype, not used here
-	 */
-
-	if (sinfo.capabilities & SYNTH_CAP_INPUT) {
-	    FIXME("Synthesizer supports MIDI in. Not yet supported.\n");
-	}
+            /* We also have the information sinfo.synth_subtype, not used here
+             */
+            if (sinfo.capabilities & SYNTH_CAP_INPUT) {
+                FIXME("Synthesizer supports MIDI in. Not yet supported.\n");
+            }
+            TRACE("SynthOut[%d]\tOSS info: synth type=%d/%d capa=%lx\n",
+                  i, sinfo.synth_type, sinfo.synth_subtype, (long)sinfo.capabilities);
+        }
 
-	TRACE("SynthOut[%d]\tname='%s' techn=%d voices=%d notes=%d chnMsk=%04x support=%d\n"
-              "\tOSS info: synth subtype=%d capa=%lx\n",
+        TRACE("SynthOut[%d]\tname='%s' techn=%d voices=%d notes=%d chnMsk=%04x support=%d\n",
 	      i, wine_dbgstr_w(MidiOutDev[i].caps.szPname), 
               MidiOutDev[i].caps.wTechnology, 
               MidiOutDev[i].caps.wVoices, MidiOutDev[i].caps.wNotes, 
-              MidiOutDev[i].caps.wChannelMask, MidiOutDev[i].caps.dwSupport,
-	      sinfo.synth_subtype, (long)sinfo.capabilities);
+              MidiOutDev[i].caps.wChannelMask, MidiOutDev[i].caps.dwSupport);
     }
 
     /* find how many MIDI devices are there in the system */
@@ -309,7 +311,7 @@ static LRESULT OSS_MidiInit(void)
 	/* Product Version. We simply say "1" */
 	MidiOutDev[numsynthdevs + i].caps.vDriverVersion = 0x001;
         if (status == -1) {
-            static const WCHAR fmt[] = {'W','i','n','e',' ','O','S','S',' ','M','i','d','i',' ','O','u','t',' ','(','#','%','d',')',' ','d','i','s','a','b','l','e','d',0};
+            static const WCHAR fmt[] = {'W','i','n','e',' ','O','S','S',' ','M','i','d','i',' ','O','u','t',' ','#','%','d',' ','d','i','s','a','b','l','e','d',0};
             wsprintfW(MidiOutDev[numsynthdevs + i].caps.szPname, fmt, numsynthdevs + i);
             MidiOutDev[numsynthdevs + i].bEnabled = FALSE;
         } else {
@@ -318,15 +320,11 @@ static LRESULT OSS_MidiInit(void)
                                 sizeof(MidiOutDev[numsynthdevs + i].caps.szPname) / sizeof(WCHAR));
             MidiOutDev[numsynthdevs + i].bEnabled = TRUE;
         }
-	MidiOutDev[numsynthdevs + i].caps.wTechnology = MOD_MIDIPORT; /* FIXME Is this right? */
-	/* Does it make any difference? */
-	MidiOutDev[numsynthdevs + i].caps.wVoices     = 16;
-	/* Does it make any difference? */
-	MidiOutDev[numsynthdevs + i].caps.wNotes      = 16;
+	MidiOutDev[numsynthdevs + i].caps.wTechnology = MOD_MIDIPORT;
+	MidiOutDev[numsynthdevs + i].caps.wVoices     = 0;
+	MidiOutDev[numsynthdevs + i].caps.wNotes      = 0;
 	MidiOutDev[numsynthdevs + i].caps.wChannelMask= 0xFFFF;
-
-	/* FIXME Does it make any difference? */
-	MidiOutDev[numsynthdevs + i].caps.dwSupport   = MIDICAPS_VOLUME|MIDICAPS_LRVOLUME;
+	MidiOutDev[numsynthdevs + i].caps.dwSupport   = 0;
 
 	/* This whole part is somewhat obscure to me. I'll keep trying to dig
 	   info about it. If you happen to know, please tell us. The very
@@ -340,7 +338,7 @@ static LRESULT OSS_MidiInit(void)
 	/* Product Version. We simply say "1" */
 	MidiInDev[i].caps.vDriverVersion = 0x001;
         if (status == -1) {
-            static const WCHAR fmt[] = {'W','i','n','e',' ','O','S','S',' ','M','i','d','i',' ','I','n',' ','(','#','%','d',')',' ','d','i','s','a','b','l','e','d',0};
+            static const WCHAR fmt[] = {'W','i','n','e',' ','O','S','S',' ','M','i','d','i',' ','I','n',' ','#','%','d',' ','d','i','s','a','b','l','e','d',0};
             wsprintfW(MidiInDev[i].caps.szPname, fmt, numsynthdevs + i);
             MidiInDev[i].state = -1;
         } else {
@@ -349,18 +347,17 @@ static LRESULT OSS_MidiInit(void)
                                 sizeof(MidiInDev[i].caps.szPname) / sizeof(WCHAR));
             MidiInDev[i].state = 0;
         }
-	/* FIXME : could we get better information than that ? */
-	MidiInDev[i].caps.dwSupport   = MIDICAPS_VOLUME|MIDICAPS_LRVOLUME;
+	MidiInDev[i].caps.dwSupport   = 0; /* mandatory with MIDIINCAPS */
 
-	TRACE("MidiOut[%d]\tname='%s' techn=%d voices=%d notes=%d chnMsk=%04x support=%d\n"
-              "MidiIn [%d]\tname='%s' support=%d\n"
-              "\tOSS info: midi dev-type=%d, capa=%lx\n",
-	      i, wine_dbgstr_w(MidiOutDev[numsynthdevs + i].caps.szPname), 
+        TRACE("OSS info: midi[%d] dev-type=%d capa=%lx\n"
+              "\tMidiOut[%d] name='%s' techn=%d voices=%d notes=%d chnMsk=%04x support=%d\n"
+              "\tMidiIn [%d] name='%s' support=%d\n",
+              i, minfo.dev_type, (long)minfo.capabilities,
+              numsynthdevs + i, wine_dbgstr_w(MidiOutDev[numsynthdevs + i].caps.szPname),
               MidiOutDev[numsynthdevs + i].caps.wTechnology,
 	      MidiOutDev[numsynthdevs + i].caps.wVoices, MidiOutDev[numsynthdevs + i].caps.wNotes,
 	      MidiOutDev[numsynthdevs + i].caps.wChannelMask, MidiOutDev[numsynthdevs + i].caps.dwSupport,
-	      i, wine_dbgstr_w(MidiInDev[i].caps.szPname), MidiInDev[i].caps.dwSupport,
-	      minfo.dev_type, (long)minfo.capabilities);
+              i, wine_dbgstr_w(MidiInDev[i].caps.szPname), MidiInDev[i].caps.dwSupport);
     }
 
  wrapup:




More information about the wine-cvs mailing list