annotate src/portaudio_20140130/bindings/cpp/source/portaudiocpp/HostApi.cxx @ 39:7ddb4fc30dac

Current stable PortAudio source
author Chris Cannam
date Tue, 18 Oct 2016 13:11:05 +0100
parents
children
rev   line source
Chris@39 1 #include "portaudiocpp/HostApi.hxx"
Chris@39 2
Chris@39 3 #include "portaudiocpp/System.hxx"
Chris@39 4 #include "portaudiocpp/Device.hxx"
Chris@39 5 #include "portaudiocpp/SystemDeviceIterator.hxx"
Chris@39 6 #include "portaudiocpp/Exception.hxx"
Chris@39 7
Chris@39 8 namespace portaudio
Chris@39 9 {
Chris@39 10
Chris@39 11 // -----------------------------------------------------------------------------------
Chris@39 12
Chris@39 13 HostApi::HostApi(PaHostApiIndex index) : devices_(NULL)
Chris@39 14 {
Chris@39 15 try
Chris@39 16 {
Chris@39 17 info_ = Pa_GetHostApiInfo(index);
Chris@39 18
Chris@39 19 // Create and populate devices array:
Chris@39 20 int numDevices = deviceCount();
Chris@39 21
Chris@39 22 devices_ = new Device*[numDevices];
Chris@39 23
Chris@39 24 for (int i = 0; i < numDevices; ++i)
Chris@39 25 {
Chris@39 26 PaDeviceIndex deviceIndex = Pa_HostApiDeviceIndexToDeviceIndex(index, i);
Chris@39 27
Chris@39 28 if (deviceIndex < 0)
Chris@39 29 {
Chris@39 30 throw PaException(deviceIndex);
Chris@39 31 }
Chris@39 32
Chris@39 33 devices_[i] = &System::instance().deviceByIndex(deviceIndex);
Chris@39 34 }
Chris@39 35 }
Chris@39 36 catch (const std::exception &e)
Chris@39 37 {
Chris@39 38 // Delete any (partially) constructed objects (deconstructor isn't called):
Chris@39 39 delete[] devices_; // devices_ is either NULL or valid
Chris@39 40
Chris@39 41 // Re-throw exception:
Chris@39 42 throw e;
Chris@39 43 }
Chris@39 44 }
Chris@39 45
Chris@39 46 HostApi::~HostApi()
Chris@39 47 {
Chris@39 48 // Destroy devices array:
Chris@39 49 delete[] devices_;
Chris@39 50 }
Chris@39 51
Chris@39 52 // -----------------------------------------------------------------------------------
Chris@39 53
Chris@39 54 PaHostApiTypeId HostApi::typeId() const
Chris@39 55 {
Chris@39 56 return info_->type;
Chris@39 57 }
Chris@39 58
Chris@39 59 PaHostApiIndex HostApi::index() const
Chris@39 60 {
Chris@39 61 PaHostApiIndex index = Pa_HostApiTypeIdToHostApiIndex(typeId());
Chris@39 62
Chris@39 63 if (index < 0)
Chris@39 64 throw PaException(index);
Chris@39 65
Chris@39 66 return index;
Chris@39 67 }
Chris@39 68
Chris@39 69 const char *HostApi::name() const
Chris@39 70 {
Chris@39 71 return info_->name;
Chris@39 72 }
Chris@39 73
Chris@39 74 int HostApi::deviceCount() const
Chris@39 75 {
Chris@39 76 return info_->deviceCount;
Chris@39 77 }
Chris@39 78
Chris@39 79 // -----------------------------------------------------------------------------------
Chris@39 80
Chris@39 81 HostApi::DeviceIterator HostApi::devicesBegin()
Chris@39 82 {
Chris@39 83 DeviceIterator tmp;
Chris@39 84 tmp.ptr_ = &devices_[0]; // begin (first element)
Chris@39 85 return tmp;
Chris@39 86 }
Chris@39 87
Chris@39 88 HostApi::DeviceIterator HostApi::devicesEnd()
Chris@39 89 {
Chris@39 90 DeviceIterator tmp;
Chris@39 91 tmp.ptr_ = &devices_[deviceCount()]; // end (one past last element)
Chris@39 92 return tmp;
Chris@39 93 }
Chris@39 94
Chris@39 95 // -----------------------------------------------------------------------------------
Chris@39 96
Chris@39 97 Device &HostApi::defaultInputDevice() const
Chris@39 98 {
Chris@39 99 return System::instance().deviceByIndex(info_->defaultInputDevice);
Chris@39 100 }
Chris@39 101
Chris@39 102 Device &HostApi::defaultOutputDevice() const
Chris@39 103 {
Chris@39 104 return System::instance().deviceByIndex(info_->defaultOutputDevice);
Chris@39 105 }
Chris@39 106
Chris@39 107 // -----------------------------------------------------------------------------------
Chris@39 108
Chris@39 109 bool HostApi::operator==(const HostApi &rhs) const
Chris@39 110 {
Chris@39 111 return (typeId() == rhs.typeId());
Chris@39 112 }
Chris@39 113
Chris@39 114 bool HostApi::operator!=(const HostApi &rhs) const
Chris@39 115 {
Chris@39 116 return !(*this == rhs);
Chris@39 117 }
Chris@39 118
Chris@39 119 // -----------------------------------------------------------------------------------
Chris@39 120
Chris@39 121 } // namespace portaudio