annotate src/portaudio_20140130/bindings/cpp/source/portaudiocpp/DirectionSpecificStreamParameters.cxx @ 169:223a55898ab9 tip default

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