- Timestamp:
- Jun 5, 2002, 1:05:56 PM (23 years ago)
- Location:
- trunk/src/winmm
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/waveindart.cpp
r8508 r8572 1 /* $Id: waveindart.cpp,v 1. 4 2002-05-28 14:09:25sandervl Exp $ */1 /* $Id: waveindart.cpp,v 1.5 2002-06-05 11:05:56 sandervl Exp $ */ 2 2 3 3 /* … … 77 77 AmpOpenParms.pszDeviceType = ( PSZ ) MCI_DEVTYPE_AUDIO_AMPMIX; 78 78 79 rc = mymciSendCommand(0, MCI_OPEN, 80 MCI_WAIT | MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE, 81 (PVOID) &AmpOpenParms, 82 0); 79 rc = mymciSendCommand(0, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE, 80 (PVOID) &AmpOpenParms, 0); 83 81 DeviceId = AmpOpenParms.usDeviceID; 84 82 if(rc) { … … 144 142 /******************************************************************************/ 145 143 /******************************************************************************/ 146 /******************************************************************************/147 /******************************************************************************/148 144 MMRESULT DartWaveIn::start() 149 145 { 150 MCI_GENERIC_PARMS GenericParms = {0};151 MCI_AMP_OPEN_PARMS AmpOpenParms;152 MCI_CONNECTOR_PARMS ConnectorParms;153 MCI_AMP_SET_PARMS AmpSetParms ;154 APIRET rc;155 int i, curbuf, buflength;146 MCI_GENERIC_PARMS GenericParms = {0}; 147 MCI_AMP_OPEN_PARMS AmpOpenParms; 148 MCI_CONNECTOR_PARMS ConnectorParms; 149 MCI_AMP_SET_PARMS AmpSetParms ; 150 APIRET rc; 151 int i, curbuf, buflength; 156 152 157 153 dprintf(("DartWaveIn::start")); 158 154 if(State == STATE_RECORDING) 159 155 return(MMSYSERR_NOERROR); 156 157 //if the app hasn't yet given us any buffers, then we can't possibly determine the 158 //right buffer size for DART recording, so postpone recording until the 159 //first buffer has been added 160 if(wavehdr == NULL) { 161 wmutex.enter(); 162 State = STATE_POSTPONE_RECORDING; 163 wmutex.leave(); 164 return MMSYSERR_NOERROR; 165 } 160 166 161 167 if(fMixerSetup == FALSE) … … 180 186 MixSetupParms->pmixEvent = WaveInHandler; 181 187 182 rc = mymciSendCommand(DeviceId, 183 MCI_MIXSETUP, 184 MCI_WAIT | MCI_MIXSETUP_INIT, 185 (PVOID)MixSetupParms, 186 0); 188 rc = mymciSendCommand(DeviceId, MCI_MIXSETUP, MCI_WAIT | MCI_MIXSETUP_INIT, 189 (PVOID)MixSetupParms, 0); 187 190 188 191 if ( rc != MCIERR_SUCCESS ) { … … 208 211 209 212 ulBufSize = pwh->dwBufferLength/2; 210 if(ulBufSize <minbufsize) {213 if(ulBufSize > minbufsize) { 211 214 dprintf(("set buffer size to %d bytes (org size = %d)", minbufsize, pwh->dwBufferLength)); 212 215 ulBufSize = minbufsize; … … 243 246 memset( &ConnectorParms, '\0', sizeof( MCI_CONNECTOR_PARMS ) ); 244 247 ConnectorParms.ulConnectorType = MCI_LINE_IN_CONNECTOR; 245 rc = mymciSendCommand( DeviceId, 246 MCI_CONNECTOR, 247 MCI_WAIT | 248 MCI_ENABLE_CONNECTOR | 249 MCI_CONNECTOR_TYPE, 250 ( PVOID ) &ConnectorParms, 251 0 ); 248 rc = mymciSendCommand(DeviceId, MCI_CONNECTOR, MCI_WAIT | 249 MCI_ENABLE_CONNECTOR | MCI_CONNECTOR_TYPE, 250 ( PVOID ) &ConnectorParms, 0 ); 252 251 253 252 /* Allow the user to hear what is being recorded … … 272 271 273 272 dprintf(("MixSetupParms = %X\n", MixSetupParms)); 274 State 273 State = STATE_RECORDING; 275 274 fOverrun = FALSE; 276 275 wmutex.leave(); … … 279 278 280 279 // Start recording. 281 USHORT selTIB = GetFS(); // save current FS selector 282 MixSetupParms->pmixRead( MixSetupParms->ulMixHandle, 283 &MixBuffer[0], 284 PREFILLBUF_DART_REC); 280 USHORT selTIB = RestoreOS2FS(); // save current FS selector 281 MixSetupParms->pmixRead(MixSetupParms->ulMixHandle, &MixBuffer[0], PREFILLBUF_DART_REC); 285 282 SetFS(selTIB); // switch back to the saved FS selector 286 283 … … 291 288 MMRESULT DartWaveIn::stop() 292 289 { 293 MCI_GENERIC_PARMS Params;290 MCI_GENERIC_PARMS Params; 294 291 295 292 wmutex.enter(); … … 314 311 MMRESULT DartWaveIn::reset() 315 312 { 316 MCI_GENERIC_PARMS Params;317 LPWAVEHDR tmpwavehdr;313 MCI_GENERIC_PARMS Params; 314 LPWAVEHDR tmpwavehdr; 318 315 319 316 dprintf(("DartWaveIn::reset %s", (State == STATE_RECORDING) ? "recording" : "stopped")); 320 if(State != STATE_RECORDING) 317 318 wmutex.enter(); 319 if(State == STATE_POSTPONE_RECORDING) { 320 dprintf(("reset postponed recording")); 321 State = STATE_STOPPED; 322 wmutex.leave(); 323 return MMSYSERR_NOERROR; 324 } 325 if(State != STATE_RECORDING) { 326 wmutex.leave(); 321 327 return(MMSYSERR_HANDLEBUSY); 328 } 329 wmutex.leave(); 322 330 323 331 memset(&Params, 0, sizeof(Params)); … … 352 360 MMRESULT DartWaveIn::addBuffer(LPWAVEHDR pwh, UINT cbwh) 353 361 { 354 int i;362 int i; 355 363 356 364 wmutex.enter(); … … 367 375 wmutex.leave(); 368 376 377 if(State == STATE_POSTPONE_RECORDING) { 378 //if recording was postponed due to lack of buffers, then start now 379 start(); 380 } 369 381 return(MMSYSERR_NOERROR); 370 382 } … … 552 564 //Transfer buffer to DART 553 565 // MCI_MIXSETUP_PARMS->pMixWrite does alter FS: selector! 554 USHORT selTIB = GetFS(); // save current FS selector566 USHORT selTIB = RestoreOS2FS(); // save current FS selector 555 567 MixSetupParms->pmixRead(MixSetupParms->ulMixHandle, pBuffer, 1); 556 568 SetFS(selTIB); // switch back to the saved FS selector -
trunk/src/winmm/waveinoutbase.h
r5358 r8572 1 /* $Id: waveinoutbase.h,v 1. 1 2001-03-23 16:23:45sandervl Exp $ */1 /* $Id: waveinoutbase.h,v 1.2 2002-06-05 11:05:56 sandervl Exp $ */ 2 2 3 3 /* … … 11 11 #define __WAVEINOUTBASE_H__ 12 12 13 #define STATE_STOPPED 0 14 #define STATE_PLAYING 1 15 #define STATE_PAUSED 2 16 #define STATE_RECORDING 3 13 #define STATE_STOPPED 0 14 #define STATE_PLAYING 1 15 #define STATE_PAUSED 2 16 #define STATE_RECORDING 3 17 #define STATE_POSTPONE_RECORDING 4 17 18 18 19 #ifdef OS2_ONLY
Note:
See TracChangeset
for help on using the changeset viewer.