Changeset 178 for sbliveos2/trunk/drv16/ioctl.cpp
- Timestamp:
- Apr 30, 2001, 11:08:00 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sbliveos2/trunk/drv16/ioctl.cpp
r172 r178 53 53 BOOL fRecGainIOCTL90 = FALSE; 54 54 55 int numFreeStreams = SBLIVECAPS_MAXSTREAMS; 56 55 57 /**@internal 56 58 * @param PREQPACKET pointer to the strategy request packet … … 208 210 209 211 if (p->usIOCtlRequest != AUDIO_CHANGE) { 210 p->sReturnCode = INVALID_REQUEST;211 prp->usStatus |= RPERR | RPBADCMD;212 return;212 p->sReturnCode = INVALID_REQUEST; 213 prp->usStatus |= RPERR | RPBADCMD; 214 return; 213 215 } 214 216 p->sReturnCode=0; … … 220 222 addr += sizeof(MCI_AUDIO_CHANGE); 221 223 if(addr >= 0x10000UL) { 222 dprintf(("Invalid MCI_AUDIO_CHANGE pointer %lx!!", (ULONG)pAudChange));223 p->sReturnCode = INVALID_REQUEST;224 prp->usStatus |= RPERR | RPBADCMD;225 return;224 dprintf(("Invalid MCI_AUDIO_CHANGE pointer %lx!!", (ULONG)pAudChange)); 225 p->sReturnCode = INVALID_REQUEST; 226 prp->usStatus |= RPERR | RPBADCMD; 227 return; 226 228 } 227 229 pMasterVol = (LPMCI_TRACK_INFO)pAudChange->pvDevInfo; … … 231 233 addr += sizeof(MCI_TRACK_INFO); 232 234 if(addr >= 0x10000UL) { 233 dprintf(("Invalid MCI_TRACK_INFO pointer %lx!!", (ULONG)pMasterVol));234 p->sReturnCode = INVALID_REQUEST;235 prp->usStatus |= RPERR | RPBADCMD;236 return;235 dprintf(("Invalid MCI_TRACK_INFO pointer %lx!!", (ULONG)pMasterVol)); 236 p->sReturnCode = INVALID_REQUEST; 237 prp->usStatus |= RPERR | RPBADCMD; 238 return; 237 239 } 238 240 239 241 pStream = FindStream_fromFile((ULONG) prp->s.ioctl.usSysFileNum); 240 242 if(pStream == NULL) { 241 dprintf(("IoctlAudioControl stream %lx not found!", (ULONG) prp->s.ioctl.usSysFileNum));242 DebugInt3();243 return;243 dprintf(("IoctlAudioControl stream %lx not found!", (ULONG) prp->s.ioctl.usSysFileNum)); 244 DebugInt3(); 245 return; 244 246 } 245 247 if(pAudChange->lBalance != AUDIO_IGNORE) 246 pStream->SetBalance(pAudChange->lBalance);248 pStream->SetProperty(PROPERTY_BALANCE, pAudChange->lBalance); 247 249 248 250 if(pAudChange->lVolume != AUDIO_IGNORE) { 249 // stream volume ranges from 0 to 0x7FFFFFFF (linear)250 volume = pAudChange->lVolume >> 16UL;251 volume = (volume*100UL)/0x7FFFUL;252 dprintf(("Set stream volume of %x to %d", prp->s.ioctl.usSysFileNum, volume));253 pStream->SetVolume(MAKE_VOLUME_LR(volume, volume));251 // stream volume ranges from 0 to 0x7FFFFFFF (linear) 252 volume = pAudChange->lVolume >> 16UL; 253 volume = (volume*100UL)/0x7FFFUL; 254 dprintf(("Set stream volume of %x to %d", prp->s.ioctl.usSysFileNum, volume)); 255 pStream->SetProperty(PROPERTY_VOLUME, MAKE_VOLUME_LR(volume, volume)); 254 256 } 255 257 256 258 if(pMasterVol && pMasterVol->usMasterVolume != AUDIO_IGNORE) { 257 // master volume ranges from 0 to 0x7FFF (linear)258 volume = pMasterVol->usMasterVolume;259 volume = (volume*100UL)/0x7FFFUL;260 if(volume > 100) {261 volume = 100;262 }263 dprintf(("Set mastervolume to %d", volume));264 pStream->SetMasterVol(MAKE_VOLUME_LR(volume, volume));259 // master volume ranges from 0 to 0x7FFF (linear) 260 volume = pMasterVol->usMasterVolume; 261 volume = (volume*100UL)/0x7FFFUL; 262 if(volume > 100) { 263 volume = 100; 264 } 265 dprintf(("Set mastervolume to %d", volume)); 266 pStream->SetProperty(PROPERTY_MASTERVOL, MAKE_VOLUME_LR(volume, volume)); 265 267 } 266 268 if(!fRecSrcIOCTL90) { … … 273 275 case LEFT_LINE_INPUT: 274 276 case RIGHT_LINE_INPUT: 275 pStream->Set InputSrc(MIX_RECSRC_LINE);277 pStream->SetProperty(PROPERTY_INPUTSRC, MIX_RECSRC_LINE); 276 278 break; 277 279 278 280 case MIC_INPUT: 279 281 case BOOSTED_MIC_INPUT: 280 pStream->Set InputSrc(MIX_RECSRC_MIC);282 pStream->SetProperty(PROPERTY_INPUTSRC, MIX_RECSRC_MIC); 281 283 break; 282 284 … … 288 290 case MIDI_IN_PORT: 289 291 // case LOOPBACK: 290 pStream->Set InputSrc(MIX_RECSRC_MIXER);292 pStream->SetProperty(PROPERTY_INPUTSRC, MIX_RECSRC_MIXER); 291 293 break; 292 294 } … … 294 296 } 295 297 if(!fRecGainIOCTL90 && pAudChange->lGain != AUDIO_IGNORE) { 296 // input ranges from 0 to 0x7FFFFFFF (linear)297 volume = pAudChange->lGain >> 16UL;298 volume = (volume*100UL)/0x7FFFUL;299 if(volume > 100) {300 volume = 100;301 }302 dprintf(("Set input gain of %x to %d", prp->s.ioctl.usSysFileNum, volume));303 pStream->SetInputGain(MAKE_VOLUME_LR(volume, volume));298 // input ranges from 0 to 0x7FFFFFFF (linear) 299 volume = pAudChange->lGain >> 16UL; 300 volume = (volume*100UL)/0x7FFFUL; 301 if(volume > 100) { 302 volume = 100; 303 } 304 dprintf(("Set input gain of %x to %d", prp->s.ioctl.usSysFileNum, volume)); 305 pStream->SetProperty(PROPERTY_INPUTGAIN, MAKE_VOLUME_LR(volume, volume)); 304 306 } 305 307 } … … 418 420 } 419 421 } 420 422 else 423 if(prp->s.ioctl.bCode == DAUDIO_QUERYCAPS) 424 { 425 LPDAUDIO_CAPS lpCaps = (LPDAUDIO_CAPS) prp->s.ioctl.pvData; 426 PWAVEAUDIO pHWobj; 427 428 if(DevHelp_VerifyAccess(SELECTOROF(lpCaps), sizeof(DAUDIO_CAPS), OFFSETOF(lpCaps), VERIFY_READWRITE) || 429 lpCaps->dwSize != sizeof(DAUDIO_CAPS)) 430 { 431 dprintf(("Invalid DAUDIO_CAPS pointer %lx!!", (ULONG)lpCaps)); 432 prp->usStatus |= RPERR | RPBADCMD; 433 return; 434 } 435 // get the pointer to the hardware object 436 // call DevCaps 437 // bailout if no hardware object is returned.. 438 pHWobj = (PWAVEAUDIO)GetHardwareDevice(AUDIOHW_WAVE_PLAY); 439 if (pHWobj) 440 { 441 pHWobj->DevCaps(lpCaps); 442 lpCaps->dwFreeHwMixingAllBuffers = numFreeStreams; 443 lpCaps->dwFreeHwMixingStaticBuffers = numFreeStreams; 444 lpCaps->dwFreeHwMixingStreamingBuffers = numFreeStreams; 445 return; 446 } 447 else { 448 prp->usStatus |= RPERR; 449 return; 450 } 451 } 421 452 PSTREAM pStream; 422 453 … … 447 478 case DAUDIO_SETVOLUME: 448 479 { 449 pStream->Set Volume(MAKE_VOLUME_LR(pDAudioCmd->Vol.VolumeL, pDAudioCmd->Vol.VolumeR));480 pStream->SetProperty(PROPERTY_VOLUME, MAKE_VOLUME_LR(pDAudioCmd->Vol.VolumeL, pDAudioCmd->Vol.VolumeR)); 450 481 break; 451 482 } 452 483 453 484 case DAUDIO_GETVOLUME: 454 pDAudioCmd->Vol.VolumeL = GET_VOLUME_L(pStream->Get Volume());455 pDAudioCmd->Vol.VolumeR = GET_VOLUME_R(pStream->Get Volume());485 pDAudioCmd->Vol.VolumeL = GET_VOLUME_L(pStream->GetProperty(PROPERTY_VOLUME)); 486 pDAudioCmd->Vol.VolumeR = GET_VOLUME_R(pStream->GetProperty(PROPERTY_VOLUME)); 456 487 break; 457 488 458 489 case DAUDIO_START: 459 rc = pStream->StartStream(); 490 if(numFreeStreams > 0) { 491 rc = pStream->StartStream(); 492 if(!rc) numFreeStreams--; 493 } 494 else rc = 1; //fail 495 460 496 break; 461 497 … … 463 499 { 464 500 CONTROL_PARM cParm; 501 int fActive = pStream->isActive(); 502 465 503 rc = pStream->StopStream(&cParm); 504 if(!rc && fActive) numFreeStreams++; 466 505 break; 467 506 } … … 480 519 case DAUDIO_GETPOS: 481 520 pDAudioCmd->Pos.ulCurrentPos = pStream->GetCurrentPos(); 521 pDAudioCmd->Pos.ulWritePos = pStream->GetCurrentWritePos(); 482 522 break; 483 523 … … 486 526 rc = pStream->Write((PSTREAMBUF)pDAudioCmd->Buffer.lpBuffer, pDAudioCmd->Buffer.ulBufferLength); 487 527 break; 528 } 529 530 case DAUDIO_SETPROPERTY: 531 { 532 rc = pStream->SetProperty(pDAudioCmd->SetProperty.type, pDAudioCmd->SetProperty.value); 488 533 } 489 534 … … 506 551 } 507 552 553 case DAUDIO_QUERYVERSION: 554 pDAudioCmd->Version.ulVersion = DAUDIO_VERSION; 555 break; 508 556 } 509 557
Note:
See TracChangeset
for help on using the changeset viewer.