Changeset 9004 for trunk/src


Ignore:
Timestamp:
Aug 14, 2002, 9:02:10 PM (23 years ago)
Author:
sandervl
Message:

proper playback fix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/winmm/waveoutdart.cpp

    r9003 r9004  
    1 /* $Id: waveoutdart.cpp,v 1.13 2002-08-14 17:37:55 sandervl Exp $ */
     1/* $Id: waveoutdart.cpp,v 1.14 2002-08-14 19:02:10 sandervl Exp $ */
    22
    33/*
     
    277277
    278278        //write buffers to DART; starts playback
    279         // MCI_MIXSETUP_PARMS->pMixWrite does alter FS: selector!
     279        dprintf(("WINMM: transfer all buffers to DART"));
    280280        USHORT selTIB = RestoreOS2FS(); // save current FS selector
    281281
     
    314314
    315315        //write buffers to DART; starts playback
    316         // MCI_MIXSETUP_PARMS->pMixWrite does alter FS: selector!
     316        dprintf(("WINMM: transfer all buffers to DART"));
    317317        USHORT selTIB = RestoreOS2FS(); // save current FS selector
    318318
     
    346346    memset(&Params, 0, sizeof(Params));
    347347
    348     // Pause the playback.
     348    // Pause playback.
    349349    mymciSendCommand(DeviceId, MCI_PAUSE, MCI_WAIT, (PVOID)&Params, 0);
    350350
     
    365365        return(MMSYSERR_NOERROR);
    366366    }
     367    State = STATE_PLAYING;
    367368    wmutex.leave();
    368369
    369     //Only write buffers to dart if mixer has been initialized; if not, then
    370     //the first buffer write will do this for us.
    371     if(fMixerSetup == TRUE)
    372     {
    373         wmutex.enter();
    374         State     = STATE_PLAYING;
    375         fUnderrun = FALSE;
    376         curbuf = curPlayBuf;
    377         writeBuffer();  //must be called before (re)starting playback
    378         wmutex.leave();
    379 
    380         // MCI_MIXSETUP_PARMS->pMixWrite does alter FS: selector!
    381         USHORT selTIB = GetFS(); // save current FS selector
    382 
    383         for(i=0;i<PREFILLBUF_DART;i++)
    384         {
    385             dprintf(("restart: write buffer at %x size %d", MixBuffer[curbuf].pBuffer, MixBuffer[curbuf].ulBufferLength));
    386             MixSetupParms->pmixWrite(MixSetupParms->ulMixHandle, &MixBuffer[curbuf], 1);
    387             if(++curbuf == PREFILLBUF_DART)
    388                 curbuf = 0;
    389         }
    390         SetFS(selTIB);           // switch back to the saved FS selector
    391     }
     370    // Resume playback.
     371    mymciSendCommand(DeviceId, MCI_RESUME, MCI_WAIT, (PVOID)&Params, 0);
    392372
    393373    return(MMSYSERR_NOERROR);
     
    570550    bytesPlayed += MixBuffer[curPlayBuf].ulBufferLength;
    571551
     552    //update our buffer index
    572553    if(curPlayBuf == PREFILLBUF_DART-1)
    573554         curPlayBuf = 0;
     
    629610    wmutex.leave();
    630611
    631     //Transfer buffer to DART
    632     // MCI_MIXSETUP_PARMS->pMixWrite does alter FS: selector!
     612    //Transfer the buffer we just finished playing to DART
     613    dprintf2(("WINMM: handler transfer buffer %d", pBuffer - MixBuffer));
    633614    USHORT selTIB = RestoreOS2FS(); // save current FS selector
    634     MixSetupParms->pmixWrite(MixSetupParms->ulMixHandle, &MixBuffer[curFillBuf], 1);
     615    MixSetupParms->pmixWrite(MixSetupParms->ulMixHandle, pBuffer, 1);
    635616    SetFS(selTIB);           // switch back to the saved FS selector
    636617
     
    683664        if(curPlayPos == MixBuffer[curFillBuf].ulBufferLength) {
    684665            curPlayPos = 0;
     666
    685667            if(++curFillBuf == PREFILLBUF_DART) {
    686668                curFillBuf = 0;
Note: See TracChangeset for help on using the changeset viewer.