annotate src/portaudio_20140130/bindings/cpp/source/portaudiocpp/DirectionSpecificStreamParameters.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/DirectionSpecificStreamParameters.hxx"
Chris@39 2
Chris@39 3 #include "portaudiocpp/Device.hxx"
Chris@39 4
Chris@39 5 namespace portaudio
Chris@39 6 {
Chris@39 7
Chris@39 8 // -----------------------------------------------------------------------------------
Chris@39 9
Chris@39 10 //////
Chris@39 11 /// Returns a `nil' DirectionSpecificStreamParameters object. This can be used to
Chris@39 12 /// specify that one direction of a Stream is not required (i.e. when creating
Chris@39 13 /// a half-duplex Stream). All fields of the null DirectionSpecificStreamParameters
Chris@39 14 /// object are invalid except for the device and the number of channel, which are set
Chris@39 15 /// to paNoDevice and 0 respectively.
Chris@39 16 //////
Chris@39 17 DirectionSpecificStreamParameters DirectionSpecificStreamParameters::null()
Chris@39 18 {
Chris@39 19 DirectionSpecificStreamParameters tmp;
Chris@39 20 tmp.paStreamParameters_.device = paNoDevice;
Chris@39 21 tmp.paStreamParameters_.channelCount = 0;
Chris@39 22 return tmp;
Chris@39 23 }
Chris@39 24
Chris@39 25 // -----------------------------------------------------------------------------------
Chris@39 26
Chris@39 27 //////
Chris@39 28 /// Default constructor -- all parameters will be uninitialized.
Chris@39 29 //////
Chris@39 30 DirectionSpecificStreamParameters::DirectionSpecificStreamParameters()
Chris@39 31 {
Chris@39 32 }
Chris@39 33
Chris@39 34 //////
Chris@39 35 /// Constructor which sets all required fields.
Chris@39 36 //////
Chris@39 37 DirectionSpecificStreamParameters::DirectionSpecificStreamParameters(const Device &device, int numChannels,
Chris@39 38 SampleDataFormat format, bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo)
Chris@39 39 {
Chris@39 40 setDevice(device);
Chris@39 41 setNumChannels(numChannels);
Chris@39 42 setSampleFormat(format, interleaved);
Chris@39 43 setSuggestedLatency(suggestedLatency);
Chris@39 44 setHostApiSpecificStreamInfo(hostApiSpecificStreamInfo);
Chris@39 45 }
Chris@39 46
Chris@39 47 // -----------------------------------------------------------------------------------
Chris@39 48
Chris@39 49 void DirectionSpecificStreamParameters::setDevice(const Device &device)
Chris@39 50 {
Chris@39 51 paStreamParameters_.device = device.index();
Chris@39 52 }
Chris@39 53
Chris@39 54 void DirectionSpecificStreamParameters::setNumChannels(int numChannels)
Chris@39 55 {
Chris@39 56 paStreamParameters_.channelCount = numChannels;
Chris@39 57 }
Chris@39 58
Chris@39 59 void DirectionSpecificStreamParameters::setSampleFormat(SampleDataFormat format, bool interleaved)
Chris@39 60 {
Chris@39 61 paStreamParameters_.sampleFormat = static_cast<PaSampleFormat>(format);
Chris@39 62
Chris@39 63 if (!interleaved)
Chris@39 64 paStreamParameters_.sampleFormat |= paNonInterleaved;
Chris@39 65 }
Chris@39 66
Chris@39 67 void DirectionSpecificStreamParameters::setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved)
Chris@39 68 {
Chris@39 69 paStreamParameters_.sampleFormat = format;
Chris@39 70
Chris@39 71 paStreamParameters_.sampleFormat |= paCustomFormat;
Chris@39 72
Chris@39 73 if (!interleaved)
Chris@39 74 paStreamParameters_.sampleFormat |= paNonInterleaved;
Chris@39 75 }
Chris@39 76
Chris@39 77 void DirectionSpecificStreamParameters::setSuggestedLatency(PaTime latency)
Chris@39 78 {
Chris@39 79 paStreamParameters_.suggestedLatency = latency;
Chris@39 80 }
Chris@39 81
Chris@39 82 void DirectionSpecificStreamParameters::setHostApiSpecificStreamInfo(void *streamInfo)
Chris@39 83 {
Chris@39 84 paStreamParameters_.hostApiSpecificStreamInfo = streamInfo;
Chris@39 85 }
Chris@39 86
Chris@39 87 // -----------------------------------------------------------------------------------
Chris@39 88
Chris@39 89 PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters()
Chris@39 90 {
Chris@39 91 if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice)
Chris@39 92 return &paStreamParameters_;
Chris@39 93 else
Chris@39 94 return NULL;
Chris@39 95 }
Chris@39 96
Chris@39 97 const PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters() const
Chris@39 98 {
Chris@39 99 if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice)
Chris@39 100 return &paStreamParameters_;
Chris@39 101 else
Chris@39 102 return NULL;
Chris@39 103 }
Chris@39 104
Chris@39 105 Device &DirectionSpecificStreamParameters::device() const
Chris@39 106 {
Chris@39 107 return System::instance().deviceByIndex(paStreamParameters_.device);
Chris@39 108 }
Chris@39 109
Chris@39 110 int DirectionSpecificStreamParameters::numChannels() const
Chris@39 111 {
Chris@39 112 return paStreamParameters_.channelCount;
Chris@39 113 }
Chris@39 114
Chris@39 115 //////
Chris@39 116 /// Returns the (non host api-specific) sample format, without including
Chris@39 117 /// the paNonInterleaved flag. If the sample format is host api-spefific,
Chris@39 118 /// INVALID_FORMAT (0) will be returned.
Chris@39 119 //////
Chris@39 120 SampleDataFormat DirectionSpecificStreamParameters::sampleFormat() const
Chris@39 121 {
Chris@39 122 if (isSampleFormatHostApiSpecific())
Chris@39 123 return INVALID_FORMAT;
Chris@39 124 else
Chris@39 125 return static_cast<SampleDataFormat>(paStreamParameters_.sampleFormat & ~paNonInterleaved);
Chris@39 126 }
Chris@39 127
Chris@39 128 bool DirectionSpecificStreamParameters::isSampleFormatInterleaved() const
Chris@39 129 {
Chris@39 130 return ((paStreamParameters_.sampleFormat & paNonInterleaved) == 0);
Chris@39 131 }
Chris@39 132
Chris@39 133 bool DirectionSpecificStreamParameters::isSampleFormatHostApiSpecific() const
Chris@39 134 {
Chris@39 135 return ((paStreamParameters_.sampleFormat & paCustomFormat) == 0);
Chris@39 136 }
Chris@39 137
Chris@39 138 //////
Chris@39 139 /// Returns the host api-specific sample format, without including any
Chris@39 140 /// paCustomFormat or paNonInterleaved flags. Will return 0 if the sample format is
Chris@39 141 /// not host api-specific.
Chris@39 142 //////
Chris@39 143 PaSampleFormat DirectionSpecificStreamParameters::hostApiSpecificSampleFormat() const
Chris@39 144 {
Chris@39 145 if (isSampleFormatHostApiSpecific())
Chris@39 146 return paStreamParameters_.sampleFormat & ~paCustomFormat & ~paNonInterleaved;
Chris@39 147 else
Chris@39 148 return 0;
Chris@39 149 }
Chris@39 150
Chris@39 151 PaTime DirectionSpecificStreamParameters::suggestedLatency() const
Chris@39 152 {
Chris@39 153 return paStreamParameters_.suggestedLatency;
Chris@39 154 }
Chris@39 155
Chris@39 156 void *DirectionSpecificStreamParameters::hostApiSpecificStreamInfo() const
Chris@39 157 {
Chris@39 158 return paStreamParameters_.hostApiSpecificStreamInfo;
Chris@39 159 }
Chris@39 160
Chris@39 161 // -----------------------------------------------------------------------------------
Chris@39 162
Chris@39 163 } // namespace portaudio