Changeset 3348 for trunk/src/winmm/dwaveout.cpp
- Timestamp:
- Apr 8, 2000, 11:16:54 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/dwaveout.cpp
r3338 r3348 1 /* $Id: dwaveout.cpp,v 1.2 2 2000-04-07 10:01:59sandervl Exp $ */1 /* $Id: dwaveout.cpp,v 1.23 2000-04-08 09:16:53 sandervl Exp $ */ 2 2 3 3 /* … … 57 57 Init(pwfx); 58 58 59 mthdCallback 60 selCallback 59 mthdCallback = (LPDRVCALLBACK)nCallback; // callback function 60 selCallback = usSel; // callback win32 tib selector 61 61 this->dwInstance = dwInstance; 62 fUnderrun = FALSE; 62 63 63 64 if(!ulError) … … 381 382 curhdr = pwh; 382 383 pwh->lpNext = NULL; 384 385 if(State != STATE_STOPPED) {//don't start playback if paused 386 wmutex->leave(); 387 return(MMSYSERR_NOERROR); 388 } 383 389 384 390 while(TRUE) { … … 410 416 } 411 417 dprintf(("MixSetupParms = %X\n", MixSetupParms)); 412 State = STATE_PLAYING; 418 State = STATE_PLAYING; 419 fUnderrun = FALSE; 413 420 wmutex->leave(); 414 421 … … 431 438 else wavehdr = pwh; 432 439 wmutex->leave(); 433 if(State != STATE_PLAYING) {//continue playback440 if(State == STATE_STOPPED) {//continue playback 434 441 restart(); 435 442 } … … 444 451 MCI_GENERIC_PARMS Params; 445 452 446 if(State != STATE_PLAYING) 453 wmutex->enter(VMUTEX_WAIT_FOREVER); 454 if(State != STATE_PLAYING) { 455 State = STATE_PAUSED; 456 wmutex->leave(); 447 457 return(MMSYSERR_NOERROR); 448 449 wmutex->enter(VMUTEX_WAIT_FOREVER); 458 } 459 450 460 State = STATE_PAUSED; 451 461 wmutex->leave(); … … 490 500 wavehdr = wavehdr->lpNext; 491 501 } 492 wavehdr = NULL; 493 State = STATE_STOPPED; 502 wavehdr = NULL; 503 State = STATE_STOPPED; 504 fUnderrun = FALSE; 494 505 495 506 wmutex->leave(); … … 507 518 } 508 519 wmutex->enter(VMUTEX_WAIT_FOREVER); 509 State = STATE_PLAYING; 520 State = STATE_PLAYING; 521 fUnderrun = FALSE; 510 522 wmutex->leave(); 511 523 curbuf = curPlayBuf; … … 625 637 { 626 638 ULONG buflength; 627 WAVEHDR *whdr = wavehdr, *prevhdr = NULL;639 WAVEHDR *whdr, *prevhdr = NULL; 628 640 629 641 #ifdef DEBUG1 … … 633 645 if(ulStatus == ERROR_DEVICE_UNDERRUN) { 634 646 dprintf(("WINMM: WaveOut handler UNDERRUN!\n")); 647 fUnderrun = TRUE; 635 648 pause(); //out of buffers, so pause playback 636 649 return; … … 641 654 wmutex->enter(VMUTEX_WAIT_FOREVER); 642 655 656 whdr = wavehdr; 657 if(whdr == NULL) { 658 wmutex->leave(); 659 //last buffer played -> no new ones -> underrun; pause playback 660 dprintf(("WINMM: WaveOut handler UNDERRUN!\n")); 661 fUnderrun = TRUE; 662 pause(); //out of buffers, so pause playback 663 return; 664 } 643 665 while(whdr) { 644 666 if(whdr->dwFlags & WHDR_DONE) { … … 649 671 650 672 if(prevhdr == NULL) 651 wavehdr = whdr->lpNext;673 wavehdr = whdr->lpNext; 652 674 else prevhdr->lpNext = whdr->lpNext; 653 675
Note:
See TracChangeset
for help on using the changeset viewer.