- Timestamp:
- Mar 10, 2000, 4:19:48 PM (25 years ago)
- Location:
- trunk/src/dsound/new
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/dsound/new/Dart.h
r3027 r3073 30 30 #endif 31 31 32 #define BUFFER_SIZE 16384 33 #define NUM_DART_BUFFS 16 32 #define BUFFER_SIZE 32768 33 34 extern ULONG ulNumDartBuffs; 34 35 35 36 long Dart_Open_Device(USHORT *pusDeviceID, void **vpMixBuffer, void **vpMixSetup, … … 44 45 long Dart_Play(USHORT usDeviceID, void *vpMixSetup, void *vpMixBuffer, long playing); 45 46 long Dart_SetFormat(USHORT *pusDeviceID, void *vpMixSetup, void *vpBufferParms, 46 void * vpMixBuffer, LONG lBPS, LONG lSPS, LONG lChannels );47 void **vpMixBuffer, LONG lBPS, LONG lSPS, LONG lChannels ); 47 48 -
trunk/src/dsound/new/OS2PrimBuff.cpp
r3044 r3073 466 466 dprintf(("DSOUND-PrimBuff: BPS = %d, Rate = %d, Ch = %d", me->bps, me->rate, me->channels)); 467 467 468 Dart_SetFormat(&me->usDeviceID, me->vpMixSetup, me->vpBuffParms, me->vpMixBuffer, me->bps, me->rate, me->channels);468 Dart_SetFormat(&me->usDeviceID, me->vpMixSetup, me->vpBuffParms, &me->vpMixBuffer, me->bps, me->rate, me->channels); 469 469 470 470 return DS_OK; -
trunk/src/dsound/new/dart.cpp
r3044 r3073 22 22 23 23 static MCI_MIXSETUP_PARMS *MixSetup_Global; 24 static MCI_MIX_BUFFER *pMixBuffs;25 24 static long lLastBuff; 26 25 static char *pDSoundBuff; … … 28 27 29 28 USHORT usDeviceID; /* Amp Mixer device id */ 30 MCI_MIX_BUFFER MixBuffers[NUM_DART_BUFFS]; /* Device buffers */ 29 30 /* TODO: scrap this variable! */ 31 MCI_MIX_BUFFER *pMixBuffers; /* Device buffers */ 32 31 33 MCI_MIXSETUP_PARMS MixSetupParms; /* Mixer parameters */ 32 34 MCI_BUFFER_PARMS BufferParms; /* Device buffer parms */ 33 35 ULONG ulNumDartBuffs; /* # of DART buffers */ 34 36 35 37 #define ULONG_LOWD(ul) (*(USHORT *)((ULONG *)(&ul))) /* Low Word */ … … 37 39 //****************************************************************************** 38 40 //****************************************************************************** 39 LONG APIENTRY OS2_Dart_Update(ULONG ulStatus,PMCI_MIX_BUFFER pBuffer,ULONG ulFlags) 40 { 41 //MCI_STATUS_PARMS Status; 41 LONG APIENTRY OS2_Dart_Update(ULONG ulStatus, PMCI_MIX_BUFFER pBuffer, ULONG ulFlags) 42 { 42 43 ULONG rc; 43 44 … … 47 48 { 48 49 lLastBuff++; 49 if (lLastBuff == NUM_DART_BUFFS)50 if (lLastBuff == ulNumDartBuffs) 50 51 lLastBuff = 0; 51 52 52 53 /* Now mix sound from all playing secondary SoundBuffers into the primary buffer */ 53 MixCallback(BUFFER_SIZE/ NUM_DART_BUFFS);54 MixCallback(BUFFER_SIZE/ulNumDartBuffs); 54 55 55 56 /* Fill The next buff from the DSound Buffer */ 56 memcpy( pMixBuff s[lLastBuff].pBuffer, &pDSoundBuff[lLastBuff*(BUFFER_SIZE/NUM_DART_BUFFS)], BUFFER_SIZE/NUM_DART_BUFFS);57 memcpy( pMixBuffers[lLastBuff].pBuffer, &pDSoundBuff[lLastBuff*(BUFFER_SIZE/ulNumDartBuffs)], BUFFER_SIZE/ulNumDartBuffs ); 57 58 58 59 /* Send the NEXT Buffer to Dart for playing! */ 59 rc = MixSetup_Global->pmixWrite(MixSetup_Global->ulMixHandle, &pMixBuff s[lLastBuff], 1 );60 rc = MixSetup_Global->pmixWrite(MixSetup_Global->ulMixHandle, &pMixBuffers[lLastBuff], 1 ); 60 61 //dprintf(("DSOUND-DART: Playing Next Buffer %d", rc)); 61 62 } … … 70 71 71 72 MCI_AMP_OPEN_PARMS AmpOpenParms; 72 //MCI_WAVE_SET_PARMS WaveSetParms;73 73 ULONG rc, ulNew; 74 74 LONG lAdd = 5; … … 77 77 dprintf(("DSOUND-DART: Dart_Open_Device")); 78 78 79 /* TODO: remove eventually... */ 79 80 DosSetRelMaxFH(&lAdd, &ulNew); 80 81 81 *vpMixBuffer = &MixBuffers; 82 ulNumDartBuffs = BUFFER_SIZE * 44100 / (2 * 2 * 2048 * 22050); 83 84 pMixBuffers = (MCI_MIX_BUFFER*)malloc(sizeof(MCI_MIX_BUFFER) * ulNumDartBuffs); 85 86 *vpMixBuffer = pMixBuffers; 82 87 *vpMixSetup = &MixSetupParms; 83 88 *vpBuffParms = &BufferParms; 84 89 85 pMixBuffs = &MixBuffers[0];86 90 lLastBuff = 0; 87 91 … … 134 138 // my little brain could come up with!! 135 139 136 MixSetupParms.ulBufferSize = BUFFER_SIZE/NUM_DART_BUFFS; 137 138 // BufferParms->ulStructLength = sizeof(MCI_BUFFER_PARMS); 139 BufferParms.ulNumBuffers = NUM_DART_BUFFS; 140 MixSetupParms.ulBufferSize = BUFFER_SIZE / ulNumDartBuffs; 141 142 BufferParms.ulNumBuffers = ulNumDartBuffs; 140 143 BufferParms.ulBufferSize = MixSetupParms.ulBufferSize; 141 BufferParms.pBufList = MixBuffers;144 BufferParms.pBufList = pMixBuffers; 142 145 143 146 rc = mciSendCommand(usDeviceID, MCI_BUFFER, MCI_WAIT | MCI_ALLOCATE_MEMORY, … … 155 158 // the buffer to 0 is a click on Dart_Play and a Clink when real sound is written 156 159 // to the buffer! 157 for (device = 0; device < NUM_DART_BUFFS; device++) {158 memset( MixBuffers[device].pBuffer, 0, BUFFER_SIZE/NUM_DART_BUFFS);160 for (device = 0; device < ulNumDartBuffs; device++) { 161 memset(pMixBuffers[device].pBuffer, 0, BUFFER_SIZE/ulNumDartBuffs); 159 162 } 160 163 … … 205 208 dprintf(("DSOUND-DART: Dart_GetPosition")); 206 209 207 *pulPosition = (lLastBuff * (BUFFER_SIZE/ NUM_DART_BUFFS)) + (BUFFER_SIZE/NUM_DART_BUFFS);210 *pulPosition = (lLastBuff * (BUFFER_SIZE/ulNumDartBuffs)) + (BUFFER_SIZE/ulNumDartBuffs); 208 211 if (*pulPosition > BUFFER_SIZE) 209 212 *pulPosition = 0; … … 214 217 } 215 218 216 long Dart_SetFormat(USHORT *pusDeviceID, void *vpMixSetup, void *vpBufferParms, void * vpMixBuffer, LONG lBPS, LONG lSPS, LONG lChannels )219 long Dart_SetFormat(USHORT *pusDeviceID, void *vpMixSetup, void *vpBufferParms, void **vpMixBuffer, LONG lBPS, LONG lSPS, LONG lChannels ) 217 220 { 218 221 ULONG rc; 219 222 MCI_MIXSETUP_PARMS *MixSetup; 220 223 MCI_BUFFER_PARMS *BufferParms; 221 MCI_MIX_BUFFER *MixBuffer;222 224 MCI_AMP_OPEN_PARMS AmpOpenParms; 223 225 short device = 0; 224 226 225 MixSetup = (MCI_MIXSETUP_PARMS*)vpMixSetup; 226 BufferParms = (MCI_BUFFER_PARMS*)vpBufferParms; 227 MixBuffer = (MCI_MIX_BUFFER*)vpMixBuffer; 227 /* Recalculate the number of DART buffers based on the new data rate */ 228 /* Note: the factor 2048 means a 2K buffer, 1024 = 4K, 512 = 8K and so on */ 229 ulNumDartBuffs = BUFFER_SIZE * 44100 / ((lBPS / 8) * lChannels * 2048 * lSPS); 230 231 /* Reallocate the MCI_MIX_BUFFER array */ 232 free(pMixBuffers); 233 pMixBuffers = (MCI_MIX_BUFFER*)malloc(sizeof(MCI_MIX_BUFFER) * ulNumDartBuffs); 234 235 MixSetup = (MCI_MIXSETUP_PARMS*)vpMixSetup; 236 BufferParms = (MCI_BUFFER_PARMS*)vpBufferParms; 237 *vpMixBuffer = pMixBuffers; 238 228 239 229 240 dprintf(("DSOUND-DART: Dart_SetFormat")); … … 280 291 281 292 memset(BufferParms, 0, sizeof(MCI_BUFFER_PARMS)); 282 memset( MixBuffer, 0, sizeof(MCI_MIX_BUFFER) * NUM_DART_BUFFS);293 memset(pMixBuffers, 0, sizeof(MCI_MIX_BUFFER) * ulNumDartBuffs); 283 294 BufferParms->ulStructLength = sizeof(MCI_BUFFER_PARMS); 284 BufferParms->ulNumBuffers = NUM_DART_BUFFS;285 BufferParms->ulBufferSize = BUFFER_SIZE/ NUM_DART_BUFFS;286 BufferParms->pBufList = MixBuffer;287 MixBuffer->pBuffer= NULL;295 BufferParms->ulNumBuffers = ulNumDartBuffs; 296 BufferParms->ulBufferSize = BUFFER_SIZE/ulNumDartBuffs; 297 BufferParms->pBufList = pMixBuffers; 298 pMixBuffers->pBuffer = NULL; 288 299 289 300 rc = mciSendCommand(*pusDeviceID, MCI_BUFFER, MCI_WAIT | MCI_ALLOCATE_MEMORY, … … 292 303 dprintf(("DSOUND-DART: MCI_BUFFER_ALLOCATE_MEMORY (SetFormat) %d", rc)); 293 304 mciSendCommand(*pusDeviceID, MCI_CLOSE, MCI_WAIT, NULL, 0); 294 memset( MixBuffer, 0, sizeof(MCI_MIX_BUFFER) * NUM_DART_BUFFS);305 memset(pMixBuffers, 0, sizeof(MCI_MIX_BUFFER) * ulNumDartBuffs); 295 306 return DSERR_OUTOFMEMORY; 296 307 } … … 302 313 // the buffer to 0 is a click on Dart_Play and a Clink when real sound is written 303 314 // to the buffer! 304 for (int i=0; i< NUM_DART_BUFFS; i++) {305 memset( MixBuffer[i].pBuffer, 0, BUFFER_SIZE/NUM_DART_BUFFS);315 for (int i=0; i<ulNumDartBuffs; i++) { 316 memset(pMixBuffers[i].pBuffer, 0, BUFFER_SIZE/ulNumDartBuffs); 306 317 } 307 318 … … 311 322 312 323 /* Mix the first buffer before playing */ 313 MixCallback(BUFFER_SIZE/ NUM_DART_BUFFS);314 memcpy(pMixBuff s[lLastBuff].pBuffer, &pDSoundBuff[lLastBuff*(BUFFER_SIZE/NUM_DART_BUFFS)], BUFFER_SIZE/NUM_DART_BUFFS);324 MixCallback(BUFFER_SIZE/ulNumDartBuffs); 325 memcpy(pMixBuffers[lLastBuff].pBuffer, &pDSoundBuff[lLastBuff*(BUFFER_SIZE/ulNumDartBuffs)], BUFFER_SIZE/ulNumDartBuffs); 315 326 316 327 USHORT sel = RestoreOS2FS(); 317 328 /* Note: the call to pmixWrite trashes the FS selector, we have to save */ 318 329 /* and then restore FS!!! Otherwise exception handling will be broken. */ 319 MixSetupParms.pmixWrite(MixSetupParms.ulMixHandle, MixBuffers, 2);330 MixSetupParms.pmixWrite(MixSetupParms.ulMixHandle, pMixBuffers, 2); 320 331 SetFS(sel); 321 332 fIsPlaying = TRUE; … … 366 377 367 378 /* Mix the first buffer before playing */ 368 MixCallback(BUFFER_SIZE/ NUM_DART_BUFFS);369 memcpy( pMixBuffs[lLastBuff].pBuffer, &pDSoundBuff[lLastBuff*(BUFFER_SIZE/NUM_DART_BUFFS)], BUFFER_SIZE/NUM_DART_BUFFS);379 MixCallback(BUFFER_SIZE/ulNumDartBuffs); 380 memcpy(MixBuffer[lLastBuff].pBuffer, &pDSoundBuff[lLastBuff*(BUFFER_SIZE/ulNumDartBuffs)], BUFFER_SIZE/ulNumDartBuffs); 370 381 371 382 USHORT sel = RestoreOS2FS(); 372 383 /* Note: the call to pmixWrite trashes the FS selector, we have to save */ 373 384 /* and then restore FS!!! Otherwise exception handling will be broken. */ 374 MixSetupParms.pmixWrite(MixSetupParms.ulMixHandle, MixBuffer s, 2);385 MixSetupParms.pmixWrite(MixSetupParms.ulMixHandle, MixBuffer, 2); 375 386 SetFS(sel); 376 387 fIsPlaying = TRUE;
Note:
See TracChangeset
for help on using the changeset viewer.