SoundDevice::DynamicCaps Manager::GetDeviceDynamicCaps(SoundDevice::Identifier identifier, const std::vector<uint32> &baseSampleRates, SoundDevice::IMessageReceiver *messageReceiver, SoundDevice::IBase *currentSoundDevice, bool update) //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- { if((m_DeviceDynamicCaps.find(identifier) == m_DeviceDynamicCaps.end()) || update) { if(currentSoundDevice && FindDeviceInfo(identifier).IsValid() && (currentSoundDevice->GetDeviceInfo().GetIdentifier() == identifier)) { m_DeviceDynamicCaps[identifier] = currentSoundDevice->GetDeviceDynamicCaps(baseSampleRates); if(!currentSoundDevice->IsAvailable()) { SetDeviceUnavailable(identifier); } } else { SoundDevice::IBase *dummy = CreateSoundDevice(identifier); if(dummy) { dummy->SetMessageReceiver(messageReceiver); m_DeviceDynamicCaps[identifier] = dummy->GetDeviceDynamicCaps(baseSampleRates); if(!dummy->IsAvailable()) { SetDeviceUnavailable(identifier); } } else { SetDeviceUnavailable(identifier); } delete dummy; } } return m_DeviceDynamicCaps[identifier]; }
NTSTATUS CreateSoundDeviceWithDefaultName( IN PDRIVER_OBJECT DriverObject, IN UCHAR DeviceType, IN UCHAR Index, IN ULONG ExtensionSize, OUT PDEVICE_OBJECT* DeviceObject) { NTSTATUS Status; PCWSTR WideDeviceName = NULL; PCWSTR WideDosDeviceName = NULL; /* Check for NULL parameters */ if ( ( ! DriverObject ) || ( ! DeviceObject ) ) { DPRINT("Unexpected NULL parameter"); return STATUS_INVALID_PARAMETER; } /* Range-check */ if ( Index >= SOUND_MAX_DEVICES ) { DPRINT("Device index %d exceeds maximum", Index); return STATUS_INVALID_PARAMETER; } /* Look-up the default name based on the device type */ Status = GetDefaultSoundDeviceNameBodies(DeviceType, &WideDeviceName, &WideDosDeviceName); if ( ! NT_SUCCESS(Status) ) { return Status; } /* Go create the device! */ Status = CreateSoundDevice(DriverObject, WideDeviceName, WideDosDeviceName, Index, ExtensionSize, DeviceObject); if ( ! NT_SUCCESS(Status) ) { /* No clean-up to do */ return Status; } return STATUS_SUCCESS; }
bool Manager::OpenDriverSettings(SoundDevice::Identifier identifier, SoundDevice::IMessageReceiver *messageReceiver, SoundDevice::IBase *currentSoundDevice) //---------------------------------------------------------------------------------------------------------------------------------------------------------- { bool result = false; if(currentSoundDevice && FindDeviceInfo(identifier).IsValid() && (currentSoundDevice->GetDeviceInfo().GetIdentifier() == identifier)) { result = currentSoundDevice->OpenDriverSettings(); } else { SoundDevice::IBase *dummy = CreateSoundDevice(identifier); if(dummy) { dummy->SetMessageReceiver(messageReceiver); result = dummy->OpenDriverSettings(); } delete dummy; } return result; }
SoundDevice::Caps Manager::GetDeviceCaps(SoundDevice::Identifier identifier, SoundDevice::IBase *currentSoundDevice) //------------------------------------------------------------------------------------------------------------------ { if(m_DeviceCaps.find(identifier) == m_DeviceCaps.end()) { if(currentSoundDevice && FindDeviceInfo(identifier).IsValid() && (currentSoundDevice->GetDeviceInfo().GetIdentifier() == identifier)) { m_DeviceCaps[identifier] = currentSoundDevice->GetDeviceCaps(); } else { SoundDevice::IBase *dummy = CreateSoundDevice(identifier); if(dummy) { m_DeviceCaps[identifier] = dummy->GetDeviceCaps(); } else { SetDeviceUnavailable(identifier); } delete dummy; } } return m_DeviceCaps[identifier]; }