wavemapper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



if a wave device isn't correctly initialized, or if we have issue with it, there's no need keeping on trying like hell any possible format
this patch stops trying for new formats if the device runs havoc


A+
--
Eric Pouech
Name:          mm_err
ChangeLog:     stop wavemap lookup if a device isn't functional (spotted by Lionel Ulmer)
License:       X11
GenDate:       2003/05/09 19:36:52 UTC
ModifiedFiles: dlls/winmm/wineoss/audio.c dlls/winmm/wavemap/wavemap.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winmm/wineoss/audio.c,v
retrieving revision 1.88
diff -u -u -r1.88 audio.c
--- dlls/winmm/wineoss/audio.c	2 May 2003 20:16:20 -0000	1.88
+++ dlls/winmm/wineoss/audio.c	8 May 2003 19:55:34 -0000
@@ -284,7 +284,7 @@
          */
         if (rc != 0 && errno != EINVAL) {
 	    ERR("ioctl(%s, SNDCTL_DSP_SETDUPLEX) failed (%s)\n", ossdev->dev_name, strerror(errno));
-            goto error;
+            goto error2;
 	}
     }
 
@@ -292,7 +292,7 @@
         rc = ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &ossdev->audio_fragment);
         if (rc != 0) {
 	    ERR("ioctl(%s, SNDCTL_DSP_SETFRAGMENT) failed (%s)\n", ossdev->dev_name, strerror(errno));
-            goto error;
+            goto error2;
 	}
     }
 
@@ -350,6 +350,9 @@
 error:
     close(fd);
     return WAVERR_BADFORMAT;
+ error2:
+    close(fd);
+    return MMSYSERR_ERROR;
 }
 
 /******************************************************************
@@ -1455,7 +1479,7 @@
     audio_buf_info      info;
     DWORD               ret;
 
-    TRACE("(%u, %p, %08lX);\n", wDevID, lpDesc, dwFlags);
+    TRACE("(%u, %p[cb=%08lx], %08lX);\n", wDevID, lpDesc, lpDesc->dwCallback, dwFlags);
     if (lpDesc == NULL) {
 	WARN("Invalid Parameter !\n");
 	return MMSYSERR_INVALPARAM;
Index: dlls/winmm/wavemap/wavemap.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/winmm/wavemap/wavemap.c,v
retrieving revision 1.30
diff -u -u -r1.30 wavemap.c
--- dlls/winmm/wavemap/wavemap.c	10 Mar 2003 19:03:08 -0000	1.30
+++ dlls/winmm/wavemap/wavemap.c	9 May 2003 19:36:33 -0000
@@ -185,8 +185,11 @@
         /* try some ACM stuff */
 
 #define	TRY(sps,bps)    wfx.nSamplesPerSec = (sps); wfx.wBitsPerSample = (bps); \
-                        if (wodOpenHelper(wom, i, lpDesc, &wfx, dwFlags | WAVE_FORMAT_DIRECT) == MMSYSERR_NOERROR) \
-                        {wom->avgSpeedInner = wfx.nAvgBytesPerSec; goto found;}
+                        switch (wodOpenHelper(wom, i, lpDesc, &wfx, dwFlags | WAVE_FORMAT_DIRECT)) { \
+                            case MMSYSERR_NOERROR: wom->avgSpeedInner = wfx.nAvgBytesPerSec; goto found; \
+                            case WAVERR_BADFORMAT: break; \
+                            default: goto error; \
+                        }
 
         /* Our resampling algorithm is quite primitive so first try
          * to just change the bit depth and number of channels
@@ -248,6 +251,9 @@
 	*lpdwUser = (DWORD)wom;
     }
     return MMSYSERR_NOERROR;
+error:
+    HeapFree(GetProcessHeap(), 0, wom);
+    return MMSYSERR_ERROR;
 }
 
 static	DWORD	wodClose(WAVEMAPDATA* wom)
@@ -627,8 +633,11 @@
         /* try some ACM stuff */
         
 #define	TRY(sps,bps)    wfx.nSamplesPerSec = (sps); wfx.wBitsPerSample = (bps); \
-                        if (widOpenHelper(wim, i, lpDesc, &wfx, dwFlags | WAVE_FORMAT_DIRECT) == MMSYSERR_NOERROR) \
-                        {wim->avgSpeedInner = wfx.nAvgBytesPerSec; goto found;}
+                        switch (widOpenHelper(wim, i, lpDesc, &wfx, dwFlags | WAVE_FORMAT_DIRECT)) { \
+                        case MMSYSERR_NOERROR: wim->avgSpeedInner = wfx.nAvgBytesPerSec; goto found; \
+                        case WAVERR_BADFORMAT: break; \
+                        default: goto error; \
+                        }
         
         for (i = ndlo; i < ndhi; i++) {
 	    wfx.nSamplesPerSec=lpDesc->lpFormat->nSamplesPerSec;
@@ -689,6 +698,9 @@
     }
     TRACE("Ok (stream=%08lx)\n", (DWORD)wim->hAcmStream);
     return MMSYSERR_NOERROR;
+error:
+    HeapFree(GetProcessHeap(), 0, wim);
+    return MMSYSERR_ERROR;
 }
 
 static	DWORD	widClose(WAVEMAPDATA* wim)

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux