winearts patch

Robert Reif reif at earthlink.net
Thu May 13 17:39:34 CDT 2004


Sample rate sanity check.
Fix SMPTE time.
-------------- next part --------------
Index: dlls/winmm/winearts/audio.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/winearts/audio.c,v
retrieving revision 1.17
diff -u -r1.17 audio.c
--- dlls/winmm/winearts/audio.c	11 May 2004 04:28:13 -0000	1.17
+++ dlls/winmm/winearts/audio.c	13 May 2004 22:36:00 -0000
@@ -1110,7 +1110,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        lpDesc->lpFormat->nSamplesPerSec < DSBFREQUENCY_MIN ||
+        lpDesc->lpFormat->nSamplesPerSec > DSBFREQUENCY_MAX ||
         (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
@@ -1419,13 +1420,13 @@
 	break;
     case TIME_SMPTE:
 	time = val / (wwo->format.wf.nAvgBytesPerSec / 1000);
-	lpTime->u.smpte.hour = time / 108000;
-	time -= lpTime->u.smpte.hour * 108000;
-	lpTime->u.smpte.min = time / 1800;
-	time -= lpTime->u.smpte.min * 1800;
-	lpTime->u.smpte.sec = time / 30;
-	time -= lpTime->u.smpte.sec * 30;
-	lpTime->u.smpte.frame = time;
+	lpTime->u.smpte.hour = time / (60 * 60 * 1000);
+	time -= lpTime->u.smpte.hour * (60 * 60 * 1000);
+	lpTime->u.smpte.min = time / (60 * 1000);
+	time -= lpTime->u.smpte.min * (60 * 1000);
+	lpTime->u.smpte.sec = time / 1000;
+	time -= lpTime->u.smpte.sec * 1000;
+	lpTime->u.smpte.frame = time * 30 / 1000;
 	lpTime->u.smpte.fps = 30;
 	TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n",
 	      lpTime->u.smpte.hour, lpTime->u.smpte.min,
@@ -1849,7 +1850,8 @@
     /* only PCM format is support so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        lpDesc->lpFormat->nSamplesPerSec < DSBFREQUENCY_MIN ||
+        lpDesc->lpFormat->nSamplesPerSec > DSBFREQUENCY_MAX ||
         (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,


More information about the wine-patches mailing list