annotate src/portaudio_20140130/bindings/cpp/source/portaudiocpp/HostApi.cxx @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 7ddb4fc30dac
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