Changeset 9982 for trunk/src/winmm/waveoutdart.cpp
- Timestamp:
- Apr 3, 2003, 4:04:50 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/waveoutdart.cpp
r9979 r9982 1 /* $Id: waveoutdart.cpp,v 1.2 1 2003-04-03 13:07:03sandervl Exp $ */1 /* $Id: waveoutdart.cpp,v 1.22 2003-04-03 14:04:50 sandervl Exp $ */ 2 2 3 3 /* … … 93 93 fMixerSetup = FALSE; 94 94 fUnderrun = FALSE; 95 ulUnderrunBase= 0; 95 96 96 97 ulBufSize = DART_BUFSIZE; … … 464 465 465 466 wmutex.enter(); 466 State 467 State = STATE_STOPPED; 467 468 wmutex.leave(); 468 469 … … 484 485 wmutex.enter(); 485 486 } 486 wavehdr = NULL; 487 fUnderrun = FALSE; 488 489 curPlayBuf = curFillBuf = curFillPos = curPlayPos = 0; 490 bytesPlayed = bytesCopied = bytesReturned = 0; 491 queuedbuffers = 0; 487 wavehdr = NULL; 488 fUnderrun = FALSE; 489 ulUnderrunBase = 0; 490 491 curPlayBuf = curFillBuf = curFillPos = curPlayPos = 0; 492 bytesPlayed = bytesCopied = bytesReturned = 0; 493 queuedbuffers = 0; 492 494 493 495 wmutex.leave(); … … 503 505 if(State == STATE_STOPPED) { 504 506 dprintf(("Not playing; return 0 position")); 505 return 0;507 return ulUnderrunBase; 506 508 } 507 509 … … 510 512 if((rc & 0xFFFF) == MCIERR_SUCCESS) { 511 513 nrbytes = (ULONG)(((double)mciStatus.ulReturn * (double)getAvgBytesPerSecond())/1000.0); 512 return nrbytes;;514 return ulUnderrunBase+nrbytes; 513 515 } 514 516 mciError(rc); … … 594 596 if(State == STATE_PLAYING) { 595 597 fUnderrun = TRUE; 598 //save current position for when we continue later 599 ulUnderrunBase = bytesPlayed; 596 600 stop(); //out of buffers, so stop playback 597 601 } … … 654 658 //last buffer played -> no new ones -> return now 655 659 dprintf(("WINMM: WaveOut handler LAST BUFFER PLAYED! state %s (play %d (%d), cop %d, ret %d)", (State == STATE_PLAYING) ? "playing" : "stopped", bytesPlayed, getPosition(), bytesCopied, bytesReturned)); 660 if(getPosition() > bytesPlayed) { 661 dprintf(("WINMM: WaveOut handler UNDERRUN! state %s", (State == STATE_PLAYING) ? "playing" : "stopped")); 662 //save current position for when we continue later 663 ulUnderrunBase = bytesPlayed; 664 fUnderrun = TRUE; 665 stop(); //out of buffers, so stop playback 666 } 656 667 wmutex.leave(); 657 668 return; … … 677 688 ULONG buflength; 678 689 679 if(!fUnderrun && State == STATE_PLAYING && curFillBuf == curPlayBuf) {690 if(!fUnderrun && State == STATE_PLAYING && wavehdr == NULL && curFillBuf == curPlayBuf) { 680 691 dprintf2(("writeBuffer: no more room for more audio data")); 681 692 return; //no room left
Note:
See TracChangeset
for help on using the changeset viewer.