Changeset 21358 for trunk/src/winmm/waveoutdaud.cpp
- Timestamp:
- Feb 22, 2010, 2:44:21 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/waveoutdaud.cpp
r9979 r21358 12 12 */ 13 13 14 15 /**************************************************************************** 16 * Includes * 17 ****************************************************************************/ 18 19 14 /******************************************************************************/ 15 // Includes 16 /******************************************************************************/ 20 17 21 18 #define INCL_BASE … … 57 54 : WaveOut(pwfx, fdwOpen, nCallback, dwInstance) 58 55 { 56 hSem = 0; 57 hDAudioDrv = 0; 58 hThread = 0; 59 dwThreadID = 0; 60 bytesReturned = 0; 61 fUnderrun = 0; 62 } 63 /******************************************************************************/ 64 /******************************************************************************/ 65 DAudioWaveOut::~DAudioWaveOut() 66 { 67 DAUDIO_CMD cmd; 68 69 if(hThread) 70 callback(WOM_CLOSE, 0, 0); 71 72 if(hDAudioDrv) { 73 cmd.Thread.hSemaphore = hSem; 74 sendIOCTL(DAUDIO_DEREGISTER_THREAD, &cmd); 75 sendIOCTL(DAUDIO_CLOSE, &cmd); 76 DosClose(hDAudioDrv); 77 hDAudioDrv = 0; 78 } 79 if(hSem) { 80 DosPostEventSem(hSem); 81 DosCloseEventSem(hSem); 82 } 83 } 84 /******************************************************************************/ 85 /******************************************************************************/ 86 MMRESULT DAudioWaveOut::open() 87 { 59 88 APIRET rc; 60 89 ULONG action; … … 64 93 ULONG ParmLength = 0, DataLength; 65 94 66 fUnderrun = FALSE; 67 hSem = 0; 68 69 dprintf(("DAudioWaveOut::DAudioWaveOut")); 95 dprintf(("DAudioWaveOut::open")); 70 96 71 97 rc = DosOpen(szPDDName, &hDAudioDrv, &action, 0, … … 75 101 if(rc) { 76 102 dprintf(("DosOpen failed with error %d\n", rc)); 77 ulError = MMSYSERR_NODRIVER; 78 goto fail; 103 return MMSYSERR_NODRIVER; 79 104 } 80 105 81 106 DataLength = sizeof(init); 82 107 83 init.lSRate = pwfx->nSamplesPerSec;84 init.lBitsPerSRate = pwfx->wBitsPerSample;85 init.sChannels = pwfx->nChannels;108 init.lSRate = SampleRate; 109 init.lBitsPerSRate = BitsPerSample; 110 init.sChannels = nChannels; 86 111 init.sMode = PCM; //todo!! 87 112 … … 90 115 if(rc) { 91 116 dprintf(("DosDevIOCtl failed with error %d\n", rc)); 92 ulError = MMSYSERR_NODRIVER; 93 goto fail; 117 return MMSYSERR_NODRIVER; 94 118 } 95 119 if(init.sReturnCode != 0) { 96 120 dprintf(("init.sReturnCode = %d\n", init.sReturnCode)); 97 ulError = MMSYSERR_NODRIVER; 98 goto fail; 121 return MMSYSERR_NODRIVER; 99 122 } 100 123 … … 102 125 if(rc) { 103 126 dprintf(("DosCreateEventSem failed with error %d\n", rc)); 104 ulError = MMSYSERR_NODRIVER; 105 goto fail; 127 return MMSYSERR_NODRIVER; 106 128 } 107 129 cmd.Thread.hSemaphore = hSem; … … 110 132 if(rc) { 111 133 dprintf(("DosDevIOCtl failed with error %d\n", rc)); 112 ulError = MMSYSERR_NODRIVER; 113 goto fail; 134 return MMSYSERR_NODRIVER; 114 135 } 115 136 116 137 hThread = CreateThread(NULL, 0x4000, (LPTHREAD_START_ROUTINE)DAudioThreadHandler, 117 138 (LPVOID)this, 0, &dwThreadID); 139 if (!hThread) { 140 dprintf(("CreateThread failed\n")); 141 return MMSYSERR_NODRIVER; 142 } 118 143 119 144 setVolume(volume); 120 121 if(!ulError) 122 callback(WOM_OPEN, 0, 0); 123 124 fail: 125 return; 126 } 127 /******************************************************************************/ 128 /******************************************************************************/ 129 DAudioWaveOut::~DAudioWaveOut() 130 { 131 DAUDIO_CMD cmd; 132 133 if(!ulError) 134 callback(WOM_CLOSE, 0, 0); 135 136 if(hDAudioDrv) { 137 cmd.Thread.hSemaphore = hSem; 138 sendIOCTL(DAUDIO_DEREGISTER_THREAD, &cmd); 139 sendIOCTL(DAUDIO_CLOSE, &cmd); 140 DosClose(hDAudioDrv); 141 hDAudioDrv = 0; 142 } 143 if(hSem) { 144 DosPostEventSem(hSem); 145 DosCloseEventSem(hSem); 146 } 145 callback(WOM_OPEN, 0, 0); 146 147 return(MMSYSERR_NOERROR); 147 148 } 148 149 /******************************************************************************/ … … 235 236 fUnderrun = FALSE; 236 237 237 bytes Played = bytesCopied = bytesReturned = 0;238 bytesReturned = 0; 238 239 239 240 return rc; … … 271 272 fUnderrun = FALSE; 272 273 273 bytes Played = bytesCopied = bytesReturned = 0;274 bytesReturned = 0; 274 275 queuedbuffers = 0; 275 276 … … 409 410 LPWAVEHDR whdr = wavehdr; 410 411 411 dprintf2(("WINMM: handler buf %X done (play %d /%d, cop %d, ret %d)", whdr, bytesPlayed, getPosition(), bytesCopied, bytesReturned));412 dprintf2(("WINMM: handler buf %X done (play %d, ret %d)", whdr, getPosition(), bytesReturned)); 412 413 413 414 if(State != STATE_PLAYING || whdr == NULL)
Note:
See TracChangeset
for help on using the changeset viewer.